Merge "QUnit: Re-enable config.requireExpects and add missing numbers."
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 25 Mar 2013 14:59:12 +0000 (14:59 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 25 Mar 2013 14:59:12 +0000 (14:59 +0000)
557 files changed:
RELEASE-NOTES-1.21
composer.json
docs/hooks.txt
includes/Action.php
includes/AjaxResponse.php
includes/Article.php
includes/AutoLoader.php
includes/Autopromote.php
includes/Block.php
includes/Category.php
includes/CategoryViewer.php
includes/Categoryfinder.php
includes/ChangeTags.php
includes/ChangesList.php
includes/Collation.php
includes/Cookie.php
includes/CryptRand.php
includes/DataUpdate.php
includes/DefaultSettings.php
includes/DeferredUpdates.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/Feed.php
includes/FeedUtils.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Html.php
includes/HttpFunctions.php
includes/IP.php
includes/ImageGallery.php
includes/ImagePage.php
includes/Import.php
includes/Init.php
includes/LinkFilter.php
includes/Linker.php
includes/Message.php
includes/MessageBlobStore.php
includes/MimeMagic.php
includes/Namespace.php
includes/OutputHandler.php
includes/OutputPage.php
includes/PHPVersionError.php
includes/Pager.php
includes/PoolCounter.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProxyTools.php
includes/QueryPage.php
includes/RecentChange.php
includes/Revision.php
includes/RevisionList.php
includes/Sanitizer.php
includes/ScopedCallback.php
includes/SeleniumWebSettings.php
includes/Skin.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/SqlDataUpdate.php
includes/StringUtils.php
includes/StubObject.php
includes/Title.php
includes/TitleArray.php
includes/UIDGenerator.php
includes/User.php
includes/UserMailer.php
includes/WebRequest.php
includes/WebStart.php
includes/Wiki.php
includes/WikiFilePage.php
includes/WikiPage.php
includes/Xml.php
includes/ZhClient.php
includes/ZipDirectoryReader.php
includes/actions/CachedAction.php
includes/actions/CreditsAction.php
includes/actions/DeleteAction.php
includes/actions/EditAction.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/MarkpatrolledAction.php
includes/actions/ProtectAction.php
includes/actions/PurgeAction.php
includes/actions/RawAction.php
includes/actions/RenderAction.php
includes/actions/RevisiondeleteAction.php
includes/actions/ViewAction.php
includes/actions/WatchAction.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiEditPage.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiImageRotate.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiPageSet.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiUpload.php
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/clientpool/RedisConnectionPool.php
includes/content/Content.php
includes/content/CssContent.php
includes/content/JavaScriptContent.php
includes/content/TextContent.php
includes/content/WikitextContent.php
includes/context/ContextSource.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/DatabaseUtility.php
includes/db/LoadBalancer.php
includes/db/ORMRow.php
includes/diff/DairikiDiff.php
includes/diff/DifferenceEngine.php
includes/diff/WikiDiff3.php
includes/externalstore/ExternalStore.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/DBLockManager.php
includes/filebackend/lockmanager/FSLockManager.php
includes/filebackend/lockmanager/LockManager.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filebackend/lockmanager/QuorumLockManager.php
includes/installer/CliInstaller.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/InstallDocFormatter.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/MysqlInstaller.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueAggregatorRedis.php
includes/job/JobQueueDB.php
includes/job/JobQueueGroup.php
includes/job/JobQueueRedis.php
includes/job/README
includes/job/jobs/AssembleUploadChunksJob.php
includes/job/jobs/PublishStashedFileJob.php
includes/json/FormatJson.php
includes/json/Services_JSON.php
includes/libs/jsminplus.php
includes/logging/LogFormatter.php
includes/media/BitmapMetadataHandler.php
includes/media/Exif.php
includes/media/FormatMetadata.php
includes/media/IPTC.php
includes/media/Jpeg.php
includes/media/JpegMetadataExtractor.php
includes/media/MediaHandler.php
includes/media/SVGMetadataExtractor.php
includes/media/XMP.php
includes/media/XMPInfo.php
includes/media/XMPValidate.php
includes/normal/Makefile
includes/normal/UtfNormal.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/parser/DateFormatter.php
includes/parser/Parser.php
includes/parser/ParserOutput.php
includes/resourceloader/ResourceLoaderModule.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialTags.php
includes/specials/SpecialUncategorizedcategories.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/templates/Usercreate.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadStash.php
languages/Language.php
languages/Names.php
languages/classes/LanguageAz.php
languages/classes/LanguageKaa.php
languages/classes/LanguageKk.php
languages/classes/LanguageMk.php [deleted file]
languages/classes/LanguageNso.php [deleted file]
languages/classes/LanguageSgs.php [deleted file]
languages/classes/LanguageSl.php
languages/classes/LanguageTr.php
languages/data/plurals-mediawiki.xml
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAry.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCu.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/MessagesExt.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGl.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHak.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesIe.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJam.php
languages/messages/MessagesJv.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLg.php
languages/messages/MessagesLi.php
languages/messages/MessagesLt.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNso.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPam.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPrg.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesQug.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSah.php
languages/messages/MessagesSat.php
languages/messages/MessagesSco.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSei.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSi.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesStq.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTg_latn.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVo.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesWo.php
languages/messages/MessagesWuu.php
languages/messages/MessagesYi.php
languages/messages/MessagesYue.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/benchmarks/Benchmarker.php
maintenance/cleanupTitles.php
maintenance/dictionary/mediawiki.dic [new file with mode: 0644]
maintenance/findHooks.php
maintenance/fuzz-tester.php
maintenance/install.php
maintenance/language/languages.inc
maintenance/mcc.php
maintenance/mctest.php
maintenance/mwdocgen.php
maintenance/parse.php
maintenance/populateRevisionLength.php
maintenance/runJobs.php
maintenance/syncFileBackend.php
maintenance/tables.sql
maintenance/update.php
maintenance/updateCollation.php
maintenance/userOptions.inc
resources/Resources.php
resources/jquery.ui/themes/default/jquery.ui.button.css
resources/jquery.ui/themes/vector/jquery.ui.button.css
resources/jquery/jquery.badge.css
resources/jquery/jquery.badge.js
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.tablesorter.js
skins/common/commonContent.css
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/GlobalWithDBTest.php
tests/phpunit/includes/GlobalFunctions/wfBCP47Test.php
tests/phpunit/includes/GlobalFunctions/wfBaseNameTest.php
tests/phpunit/includes/GlobalFunctions/wfExpandUrlTest.php
tests/phpunit/includes/GlobalFunctions/wfShorthandToIntegerTest.php
tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/MWNamespaceTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/RequestContextTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/SeleniumConfigurationTest.php
tests/phpunit/includes/StringUtilsTest.php
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/WebRequestTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/WikiPageTest_ContentHandlerUseDB.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/installer/InstallDocFormatterTest.php
tests/phpunit/includes/jobqueue/JobQueueTest.php
tests/phpunit/includes/json/ServicesJsonTest.php
tests/phpunit/includes/libs/CSSJanusTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/JavaScriptMinifierTest.php
tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
tests/phpunit/includes/media/BitmapScalingTest.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/normal/CleanUpTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/site/MediaWikiSiteTest.php
tests/phpunit/includes/site/SiteTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/languages/LanguageAmTest.php
tests/phpunit/languages/LanguageArTest.php
tests/phpunit/languages/LanguageBeTest.php
tests/phpunit/languages/LanguageBe_taraskTest.php
tests/phpunit/languages/LanguageBhoTest.php
tests/phpunit/languages/LanguageBsTest.php
tests/phpunit/languages/LanguageCsTest.php
tests/phpunit/languages/LanguageCuTest.php
tests/phpunit/languages/LanguageCyTest.php
tests/phpunit/languages/LanguageDsbTest.php
tests/phpunit/languages/LanguageFrTest.php
tests/phpunit/languages/LanguageGaTest.php
tests/phpunit/languages/LanguageGdTest.php
tests/phpunit/languages/LanguageGvTest.php
tests/phpunit/languages/LanguageHeTest.php
tests/phpunit/languages/LanguageHiTest.php
tests/phpunit/languages/LanguageHrTest.php
tests/phpunit/languages/LanguageHsbTest.php
tests/phpunit/languages/LanguageHuTest.php
tests/phpunit/languages/LanguageHyTest.php
tests/phpunit/languages/LanguageKshTest.php
tests/phpunit/languages/LanguageLnTest.php
tests/phpunit/languages/LanguageLtTest.php
tests/phpunit/languages/LanguageLvTest.php
tests/phpunit/languages/LanguageMgTest.php
tests/phpunit/languages/LanguageMkTest.php
tests/phpunit/languages/LanguageMlTest.php
tests/phpunit/languages/LanguageMoTest.php
tests/phpunit/languages/LanguageMtTest.php
tests/phpunit/languages/LanguageNsoTest.php
tests/phpunit/languages/LanguagePlTest.php
tests/phpunit/languages/LanguageRoTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageSeTest.php
tests/phpunit/languages/LanguageSgsTest.php
tests/phpunit/languages/LanguageShTest.php
tests/phpunit/languages/LanguageSkTest.php
tests/phpunit/languages/LanguageSlTest.php
tests/phpunit/languages/LanguageSmaTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/LanguageTiTest.php
tests/phpunit/languages/LanguageTlTest.php
tests/phpunit/languages/LanguageTrTest.php
tests/phpunit/languages/LanguageUkTest.php
tests/phpunit/languages/LanguageWaTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/skins/SideBarTest.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/selenium/SeleniumServerManager.php
tests/selenium/installer/MediaWikiButtonsAvailabilityTestCase.php
tests/selenium/installer/MediaWikiDifferentDatabaseAccountTestCase.php
tests/selenium/installer/MediaWikiDifferntDatabasePrefixTestCase.php
tests/selenium/installer/MediaWikiErrorsConnectToDatabasePageTestCase.php
tests/selenium/installer/MediaWikiErrorsNamepageTestCase.php
tests/selenium/installer/MediaWikiHelpFieldHintTestCase.php
tests/selenium/installer/MediaWikiInstallationCommonFunction.php
tests/selenium/installer/MediaWikiInstallationConfig.php
tests/selenium/installer/MediaWikiInstallationMessage.php
tests/selenium/installer/MediaWikiInstallationVariables.php
tests/selenium/installer/MediaWikiInstallerTestSuite.php
tests/selenium/installer/MediaWikiMySQLDataBaseTestCase.php
tests/selenium/installer/MediaWikiMySQLiteDataBaseTestCase.php
tests/selenium/installer/MediaWikiOnAlreadyInstalledTestCase.php
tests/selenium/installer/MediaWikiRestartInstallationTestCase.php
tests/selenium/installer/MediaWikiRightFrameworkLinksTestCase.php
tests/selenium/installer/MediaWikiUpgradeExistingDatabaseTestCase.php
tests/selenium/installer/MediaWikiUserInterfaceTestCase.php
tests/selenium/suites/AddContentToNewPageTestCase.php
tests/selenium/suites/AddNewPageTestCase.php
tests/selenium/suites/CreateAccountTestCase.php
tests/selenium/suites/DeletePageAdminTestCase.php
tests/selenium/suites/EmailPasswordTestCase.php
tests/selenium/suites/MediaWikiEditorConfig.php
tests/selenium/suites/MovePageTestCase.php
tests/selenium/suites/MyContributionsTestCase.php
tests/selenium/suites/MyWatchListTestCase.php
tests/selenium/suites/PageSearchTestCase.php
tests/selenium/suites/PreviewPageTestCase.php
tests/selenium/suites/SavePageTestCase.php
tests/selenium/suites/UserPreferencesTestCase.php

index d7f9c44..56d812c 100644 (file)
@@ -114,8 +114,17 @@ production.
   oc, pl, pt, rm, ro, ru, rup, sco, sk, sl, smn, sq, sr, sv, tk, tl, tr, tt, uk,
   uz, vi.
 * Added 'CategoryAfterPageAdded' and 'CategoryAfterPageRemoved' hooks.
+* Added 'HistoryRevisionTools' and 'DiffRevisionTools' hooks.
+* Added 'SpecialSearchResultsPrepend' and 'SpecialSearchResultsAppend' hooks.
 * (bug 33186) Add image rotation api "imagerotate"
 * (bug 34040) Add "User rights management" link on user page toolbox.
+* (bug 45526) Add QUnit assertion helper "QUnit.assert.htmlEqual" for asserting
+  structual equality of HTML (ignoring insignificant differences like
+  quotmarks, order and whitespace in the attribute list).
+* (bug 23393) HTML <hN> headings containing line breaks are now handled
+  correctly.
+* (bug 45803) Whitespace within == Headline == syntax and within <hN> headings
+  is now non-significant and not preserved in the HTML output.
 
 === Bug fixes in 1.21 ===
 * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
@@ -195,6 +204,12 @@ production.
 * (bug 42184) $wgUploadSizeWarning missing second variable
 * (bug 40326) Check if files exist with a different extension during uploading
 * (bug 34798) Updated CSS for Atom/RSS recent changes feeds to match on-wiki diffs.
+* (bug 42430) Calling numRows on MySQL no longer propagates unrelated errors.
+* (bug 44719) Removed mention of non-existing maintenance/migrateCurStubs.php
+  script in includes/DefaultSettings.php
+* (bug 45143) jquery.badge: Treat non-Latin variants of zero as zero as well.
+* (bug 46151) mwdocgen.php should not ignore exit code of doxygen command.
+* (bug 41889) Fix $.tablesorter rowspan exploding for complex cases.
 
 === API changes in 1.21 ===
 * prop=revisions can now report the contentmodel and contentformat.
@@ -260,6 +275,12 @@ production.
 * (bug 33304) list=allpages will no longer return duplicate entries when
   querying protection.
 * (bug 33304) list=allpages will now find really old indefinite protections.
+* (bug 45937) meta=allmessages will report a syntactically invalid lang as a
+  proper error instead of as an uncaught exception.
+* (bug 25325) added support for wlshow filtering (bots/anon/minor/patrolled)
+  to action=feedwatchlist
+* WDDX formatted output will actually be formatted (and normal output will no
+  longer be), and will no longer choke on booleans.
 
 === API internal changes in 1.21 ===
 * For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
@@ -284,6 +305,7 @@ changes to languages because of Bugzilla reports.
 
 * South Azerbaijani (azb) added.
 * (bug 30040) Autonym for nds-nl is now 'Nedersaksies' (was 'Nedersaksisch').
+* (bug 45436) Autonym for pi (Pali) is now 'पालि' (was ''पाळि').
 * (bug 34977) Now formatted numbers in Spanish use space as separator
   for thousands, as mandated by the Real Academia Española.
 * (bug 35031) Kurdish formatted numbers now use period and comma
index fa42c29..ded3365 100644 (file)
                }
        ],
        "license": "GPL-2.0",
-       "repositories": [
-               {
-                       "type": "vcs",
-                       "url": "https://gerrit.wikimedia.org/r/p/mediawiki/core.git"
-               }
-       ],
        "support": {
                "issues": "https://bugzilla.wikimedia.org/",
                "irc": "irc://irc.freenode.net/mediawiki",
index cd1af96..c266dcc 100644 (file)
@@ -842,6 +842,11 @@ $title: the diff page title (nullable)
 $old: the ?old= param value from the url
 $new: the ?new= param value from the url
 
+'DiffRevisionTools': Override or extend the revision tools available from the
+diff view, i.e. undo, etc.
+$rev: Revision object
+&$links: Array of HTML links
+
 'DiffViewHeader': Called before diff display
 $diff: DifferenceEngine object that's calling
 $oldRev: Revision object of the "old" revision (may be null/invalid)
@@ -1200,6 +1205,11 @@ $result: User permissions error to add. If none, return true.
 Special:Version, use this to change the list.
 &$extTypes: associative array of repo URLS to viewer URLs.
 
+'HistoryRevisionTools': Override or extend the revision tools available from the
+page history view, i.e. undo, rollback, etc.
+$rev: Revision object
+&$links: Array of HTML links
+
 'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki
 image insertion. You can skip the default logic entirely by returning false, or
 just modify a few things using call-by-reference.
@@ -1668,6 +1678,7 @@ $baseRevId: the rev ID (or false) this edit was based on
 
 'PageHistoryBeforeList': When a history page list is about to be constructed.
 $article: the article that the history is loading for
+$context: RequestContext object
 
 'PageHistoryLineEnding' : Right before the end <li> is added to a history line.
 $row: the revision row for this line
@@ -2261,6 +2272,7 @@ $special: the special page object
 &$tables: array of tables to be queried
 &$join_conds: join conditions for the tables
 &$fields: array of query fields
+$values: array of variables with watchlist options
 
 'TestCanonicalRedirect': Called when about to force a redirect to a canonical
 URL for a title when we have no other parameters on the URL. Gives a chance for
index 7c3a3ba..2e0c88b 100644 (file)
@@ -32,7 +32,7 @@
  *
  * Actions generally fall into two groups: the show-a-form-then-do-something-with-the-input
  * format (protect, delete, move, etc), and the just-do-something format (watch, rollback,
- * patrol, etc). The FormAction and FormlessAction classes respresent these two groups.
+ * patrol, etc). The FormAction and FormlessAction classes represent these two groups.
  */
 abstract class Action {
 
index 23c31bf..d553652 100644 (file)
@@ -172,7 +172,7 @@ class AjaxResponse {
                        # tell the client to use a cached copy, without a way to purge it.
 
                        if ( $wgUseSquid ) {
-                               # Expect explicite purge of the proxy cache, but require end user agents
+                               # Expect explicit purge of the proxy cache, but require end user agents
                                # to revalidate against the proxy on each visit.
                                # Surrogate-Control controls our Squid, Cache-Control downstream caches
 
@@ -210,7 +210,7 @@ class AjaxResponse {
         * @param $timestamp string
         * @return bool Returns true if the response code was set to 304 Not Modified.
         */
-       function checkLastModified ( $timestamp ) {
+       function checkLastModified( $timestamp ) {
                global $wgCachePages, $wgCacheEpoch, $wgUser;
                $fname = 'AjaxResponse::checkLastModified';
 
index e5919cf..9b4afe4 100644 (file)
@@ -1727,7 +1727,7 @@ class Article implements Page {
         *
         * @param $oldid mixed integer Revision ID or null
         * @param $user User The relevant user
-        * @return ParserOutput or false if the given revsion ID is not found
+        * @return ParserOutput or false if the given revision ID is not found
         */
        public function getParserOutput( $oldid = null, User $user = null ) {
                //XXX: bypasses mParserOptions and thus setParserOptions()
index 7136232..42cea7a 100644 (file)
@@ -194,6 +194,7 @@ $wgAutoloadLocalClasses = array(
        'PoolCounter' => 'includes/PoolCounter.php',
        'PoolCounter_Stub' => 'includes/PoolCounter.php',
        'PoolCounterWork' => 'includes/PoolCounter.php',
+       'PoolCounterWorkViaCallback' => 'includes/PoolCounter.php',
        'PoolWorkArticleView' => 'includes/WikiPage.php',
        'Preferences' => 'includes/Preferences.php',
        'PreferencesForm' => 'includes/Preferences.php',
index 781f4fc..604b924 100644 (file)
@@ -140,8 +140,8 @@ class Autopromote {
                                return true;
                        }
                }
-               # If we got here, the array presumably does not contain other condi-
-               # tions; it's not recursive.  Pass it off to self::checkCondition.
+               // If we got here, the array presumably does not contain other conditions;
+               // it's not recursive.  Pass it off to self::checkCondition.
                if ( !is_array( $cond ) ) {
                        $cond = array( $cond );
                }
@@ -152,8 +152,7 @@ class Autopromote {
        /**
         * As recCheckCondition, but *not* recursive.  The only valid conditions
         * are those whose first element is APCOND_EMAILCONFIRMED/APCOND_EDITCOUNT/
-        * APCOND_AGE.  Other types will throw an exception if no extension evalu-
-        * ates them.
+        * APCOND_AGE.  Other types will throw an exception if no extension evaluates them.
         *
         * @param array $cond A condition, which must not contain other conditions
         * @param $user User The user to check the condition against
index 3843631..7ee36ce 100644 (file)
@@ -227,7 +227,7 @@ class Block {
        /**
         * Load a block from the database which affects the already-set $this->target:
         *     1) A block directly on the given user or IP
-        *     2) A rangeblock encompasing the given IP (smallest first)
+        *     2) A rangeblock encompassing the given IP (smallest first)
         *     3) An autoblock on the given IP
         * @param $vagueTarget User|String also search for blocks affecting this target.  Doesn't
         *     make any sense to use TYPE_AUTO / TYPE_ID here. Leave blank to skip IP lookups.
@@ -251,7 +251,7 @@ class Block {
                        list( $target, $type ) = self::parseTarget( $vagueTarget );
                        switch( $type ) {
                                case self::TYPE_USER:
-                                       # Slightly wierd, but who are we to argue?
+                                       # Slightly weird, but who are we to argue?
                                        $conds['ipb_address'][] = (string)$target;
                                        break;
 
@@ -330,9 +330,9 @@ class Block {
        }
 
        /**
-        * Get a set of SQL conditions which will select rangeblocks encompasing a given range
+        * Get a set of SQL conditions which will select rangeblocks encompassing a given range
         * @param string $start Hexadecimal IP representation
-        * @param string $end Hexadecimal IP represenation, or null to use $start = $end
+        * @param string $end Hexadecimal IP representation, or null to use $start = $end
         * @return String
         */
        public static function getRangeCond( $start, $end = null ) {
@@ -488,7 +488,7 @@ class Block {
         * Update a block in the DB with new parameters.
         * The ID field needs to be loaded first.
         *
-        * @return Int number of affected rows, which should probably be 1 or something's
+        * @return Int number of affected rows, which should probably be 1 or something has
         *     gone slightly awry
         */
        public function update() {
@@ -982,7 +982,7 @@ class Block {
        }
 
        /**
-        * Gets rid of uneeded numbers in quad-dotted/octet IP strings
+        * Gets rid of unneeded numbers in quad-dotted/octet IP strings
         * For example, 127.111.113.151/24 -> 127.111.113.0/24
         * @param string $range IP address to normalize
         * @return string
@@ -1193,7 +1193,7 @@ class Block {
 
        /**
         * Set the user who implemented (or will implement) this block
-        * @param $user User|string Local User object or username string for foriegn users
+        * @param $user User|string Local User object or username string for foreign users
         */
        public function setBlocker( $user ) {
                $this->blocker = $user;
index c8397f7..868d6c4 100644 (file)
@@ -167,7 +167,7 @@ class Category {
 
                # NOTE: the row often results from a LEFT JOIN on categorylinks. This may result in
                #       all the cat_xxx fields being null, if the category page exists, but nothing
-               #       was ever added to the category. This case should be treated linke an empty
+               #       was ever added to the category. This case should be treated link an empty
                #       category, if possible.
 
                if ( $row->cat_title === null ) {
index f9020b7..970adb5 100644 (file)
@@ -249,7 +249,7 @@ class CategoryViewer extends ContextSource {
                $link = Linker::link( $title );
                if ( $isRedirect ) {
                        // This seems kind of pointless given 'mw-redirect' class,
-                       // but keeping for back-compatiability with user css.
+                       // but keeping for back-compatibility with user css.
                        $link = '<span class="redirect-in-category">' . $link . '</span>';
                }
                $this->articles[] = $link;
@@ -392,7 +392,7 @@ class CategoryViewer extends ContextSource {
                $r = '';
 
                # @todo FIXME: Here and in the other two sections: we don't need to bother
-               # with this rigamarole if the entire category contents fit on one page
+               # with this rigmarole if the entire category contents fit on one page
                # and have already been retrieved.  We can just use $rescnt in that
                # case and save a query and some logic.
                $dbcnt = $this->cat->getPageCount() - $this->cat->getSubcatCount()
@@ -574,7 +574,7 @@ class CategoryViewer extends ContextSource {
         * Create paging links, as a helper method to getSectionPagingLinks().
         *
         * @param string $first The 'until' parameter for the generated URL
-        * @param string $last The 'from' parameter for the genererated URL
+        * @param string $last The 'from' parameter for the generated URL
         * @param string $type A prefix for parameters, 'page' or 'subcat' or
         *     'file'
         * @return String HTML
index 59e6593..6ef224b 100644 (file)
@@ -124,7 +124,7 @@ class Categoryfinder {
 
                $path[] = $id;
 
-               # Shortcut (runtime paranoia): No contitions=all matched
+               # Shortcut (runtime paranoia): No conditions=all matched
                if ( count( $conds ) == 0 ) {
                        return true;
                }
index 88f7d44..3adf58f 100644 (file)
@@ -79,7 +79,7 @@ class ChangeTags {
         * @param $rc_id int: rc_id of the change to add the tags to
         * @param $rev_id int: rev_id of the change to add the tags to
         * @param $log_id int: log_id of the change to add the tags to
-        * @param string $params params to put in the ct_params field of tabel 'change_tag'
+        * @param string $params params to put in the ct_params field of table 'change_tag'
         *
         * @throws MWException
         * @return bool: false if no changes are made, otherwise true
@@ -160,7 +160,7 @@ class ChangeTags {
         * Handles selecting tags, and filtering.
         * Needs $tables to be set up properly, so we can figure out which join conditions to use.
         *
-        * @param string|array $tables Tabel names, see DatabaseBase::select
+        * @param string|array $tables Table names, see DatabaseBase::select
         * @param string|array $fields Fields used in query, see DatabaseBase::select
         * @param string|array $conds conditions used in query, see DatabaseBase::select
         * @param $join_conds Array: join conditions, see DatabaseBase::select
index 451f2da..8461001 100644 (file)
@@ -60,7 +60,7 @@ class ChangesList extends ContextSource {
        protected $message;
 
        /**
-        * Changeslist contructor
+        * Changeslist constructor
         *
         * @param $obj Skin or IContextSource
         */
@@ -563,7 +563,7 @@ class ChangesList extends ContextSource {
        }
 
        public function insertExtra( &$s, &$rc, &$classes ) {
-               ## Empty, used for subclassers to add anything special.
+               // Empty, used for subclasses to add anything special.
        }
 
        protected function showAsUnpatrolled( RecentChange $rc ) {
index 8a78084..3f0fa7b 100644 (file)
@@ -149,6 +149,8 @@ class IdentityCollation extends Collation {
 }
 
 class IcuCollation extends Collation {
+       const FIRST_LETTER_VERSION = 1;
+
        var $primaryCollator, $mainCollator, $locale;
        var $firstLetterData;
 
@@ -181,7 +183,10 @@ class IcuCollation extends Collation {
 
        /**
         * Additional characters (or character groups) to be considered separate
-        * letters for given languages, compared to the data stored in the
+        * letters for given languages, or to be removed from the list of such
+        * letters (denoted by keys starting with '-').
+        *
+        * These are additions to (or subtractions from) the data stored in the
         * first-letters-root.ser file (which among others includes full basic latin,
         * cyrillic and greek alphabets).
         *
@@ -203,12 +208,16 @@ class IcuCollation extends Collation {
                'be-tarask' => array( "Ё" ),
                'en' => array(),
                'fi' => array( "Å", "Ä", "Ö" ),
+               '-fi' => array( "Ǥ", "Ŋ", "Ŧ", "Ʒ" ), // sorted like G, N, T, Z - bug 46330
                'hu' => array( "Cs", "Dz", "Dzs", "Gy", "Ly", "Ny", "Ö", "Sz", "Ty", "Ü", "Zs" ),
                'it' => array(),
                'pl' => array( "Ą", "Ć", "Ę", "Ł", "Ń", "Ó", "Ś", "Ź", "Ż" ),
                'pt' => array(),
                'ru' => array(),
+               'sv' => array( "Å", "Ä", "Ö" ),
+               '-sv' => array( "Þ" ), // sorted as "th" in Swedish, causing unexpected output - bug 45446
                'uk' => array( "Ґ", "Ь" ),
+               'vi' => array( "Ă", "Â", "Đ", "Ê", "Ô", "Ơ", "Ư" ),
                // Not verified, but likely correct
                'af' => array(),
                'ast' => array( "Ch", "Ll", "Ñ" ),
@@ -261,13 +270,11 @@ class IcuCollation extends Collation {
                'smn' => array( "Á", "Č", "Đ", "Ŋ", "Š", "Ŧ", "Ž", "Æ", "Ø", "Å", "Ä", "Ö" ),
                'sq' => array( "Ç", "Dh", "Ë", "Gj", "Ll", "Nj", "Rr", "Sh", "Th", "Xh", "Zh" ),
                'sr' => array(),
-               'sv' => array( "Å", "Ä", "Ö" ),
                'tk' => array( "Ç", "Ä", "Ž", "Ň", "Ö", "Ş", "Ü", "Ý" ),
                'tl' => array( "Ñ", "Ng" ),
                'tr' => array( "Ç", "Ğ", "İ", "Ö", "Ş", "Ü" ),
                'tt' => array( "Ә", "Ө", "Ү", "Җ", "Ң", "Һ" ),
                'uz' => array( "Ch", "G'", "Ng", "O'", "Sh" ),
-               'vi' => array( "Ă", "Â", "Đ", "Ê", "Ô", "Ơ", "Ư" ),
        );
 
        const RECORD_LENGTH = 14;
@@ -343,7 +350,9 @@ class IcuCollation extends Collation {
                $cacheKey = wfMemcKey( 'first-letters', $this->locale );
                $cacheEntry = $cache->get( $cacheKey );
 
-               if ( $cacheEntry ) {
+               if ( $cacheEntry && isset( $cacheEntry['version'] )
+                       && $cacheEntry['version'] == self::FIRST_LETTER_VERSION ) 
+               {
                        $this->firstLetterData = $cacheEntry;
                        return $this->firstLetterData;
                }
@@ -352,7 +361,12 @@ class IcuCollation extends Collation {
 
                if ( isset ( self::$tailoringFirstLetters[$this->locale] ) ) {
                        $letters = wfGetPrecompiledData( "first-letters-root.ser" );
+                       // Append additional characters
                        $letters = array_merge( $letters, self::$tailoringFirstLetters[$this->locale] );
+                       // Remove unnecessary ones, if any
+                       if ( isset( self::$tailoringFirstLetters[ '-' . $this->locale ] ) ) {
+                               $letters = array_diff( $letters, self::$tailoringFirstLetters[ '-' . $this->locale ] );
+                       }
                } else {
                        $letters = wfGetPrecompiledData( "first-letters-{$this->locale}.ser" );
                        if ( $letters === false ) {
@@ -385,7 +399,8 @@ class IcuCollation extends Collation {
                ksort( $letterMap, SORT_STRING );
                $data = array(
                        'chars' => array_values( $letterMap ),
-                       'keys' => array_keys( $letterMap )
+                       'keys' => array_keys( $letterMap ),
+                       'version' => self::FIRST_LETTER_VERSION,
                );
 
                // Reduce memory usage before caching
index 27a8507..1b22c0e 100644 (file)
@@ -197,7 +197,7 @@ class CookieJar {
         * Set a cookie in the cookie jar. Make sure only one cookie per-name exists.
         * @see Cookie::set()
         */
-       public function setCookie ( $name, $value, $attr ) {
+       public function setCookie( $name, $value, $attr ) {
                /* cookies: case insensitive, so this should work.
                 * We'll still send the cookies back in the same case we got them, though.
                 */
@@ -235,7 +235,7 @@ class CookieJar {
         * @param string $domain cookie's domain
         * @return null
         */
-       public function parseCookieResponseHeader ( $cookie, $domain ) {
+       public function parseCookieResponseHeader( $cookie, $domain ) {
                $len = strlen( 'Set-Cookie:' );
 
                if ( substr_compare( 'Set-Cookie:', $cookie, 0, $len, true ) === 0 ) {
index 01bbc44..d0305d8 100644 (file)
@@ -79,7 +79,7 @@ class MWCryptRand {
                // Include some information about the filesystem's current state in the random state
                $files = array();
 
-               // We know this file is here so grab some info about ourself
+               // We know this file is here so grab some info about ourselves
                $files[] = __FILE__;
 
                // We must also have a parent folder, and with the usual file structure, a grandparent
@@ -162,7 +162,7 @@ class MWCryptRand {
                $buffer = str_repeat( ' ', $bufLength );
                $bufPos = 0;
 
-               // Iterate for $duration seconds or at least $minIerations number of iterations
+               // Iterate for $duration seconds or at least $minIterations number of iterations
                $iterations = 0;
                $startTime = microtime( true );
                $currentTime = $startTime;
index 419d7e5..c1076b2 100644 (file)
@@ -34,7 +34,7 @@ abstract class DataUpdate implements DeferrableUpdate {
        /**
         * Constructor
         */
-       public function __construct( ) {
+       public function __construct() {
                # noop
        }
 
@@ -67,8 +67,8 @@ abstract class DataUpdate implements DeferrableUpdate {
         *
         * This methods supports transactions logic by first calling beginTransaction()
         * on all updates in the array, then calling doUpdate() on each, and, if all goes well,
-        * then calling commitTransaction() on each update. If an error occurrs,
-        * rollbackTransaction() will be called on any update object that had beginTranscation()
+        * then calling commitTransaction() on each update. If an error occurs,
+        * rollbackTransaction() will be called on any update object that had beginTransaction()
         * called but not yet commitTransaction().
         *
         * This allows for limited transactional logic across multiple backends for storing
index a03214b..26fe197 100644 (file)
@@ -55,13 +55,19 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 /**
  * wgConf hold the site configuration.
  * Not used for much in a default install.
+ * @since 1.5
  */
 $wgConf = new SiteConfiguration;
 
-/** MediaWiki version number */
+/**
+ * MediaWiki version number
+ * @since 1.2
+ */
 $wgVersion = '1.21alpha';
 
-/** Name of the site. It must be changed in LocalSettings.php */
+/**
+ * Name of the site. It must be changed in LocalSettings.php
+ */
 $wgSitename = 'MediaWiki';
 
 /**
@@ -87,6 +93,7 @@ $wgServer = WebRequest::detectServer();
  * Must be fully qualified, even if $wgServer is protocol-relative.
  *
  * Defaults to $wgServer, expanded to a fully qualified http:// URL if needed.
+ * @since 1.18
  */
 $wgCanonicalServer = false;
 
@@ -121,6 +128,7 @@ $wgScriptPath = '/wiki';
  * The default $wgArticlePath will be set based on this value at runtime, but if
  * you have customized it, having this incorrectly set to true can cause
  * redirect loops when "pretty URLs" are used.
+ * @since 1.2.1
  */
 $wgUsePathInfo = ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
        ( strpos( PHP_SAPI, 'apache2filter' ) === false ) &&
@@ -132,6 +140,7 @@ $wgUsePathInfo = ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
  *
  * Some hosting providers use PHP 4 for *.php files, and PHP 5 for *.php5. This
  * variable is provided to support those providers.
+ * @since 1.11
  */
 $wgScriptExtension = '.php';
 
@@ -174,12 +183,14 @@ $wgRedirectScript = false;
  * The URL path to load.php.
  *
  * Defaults to "{$wgScriptPath}/load{$wgScriptExtension}".
+ * @since 1.17
  */
 $wgLoadScript = false;
 
 /**
  * The URL path of the skins directory.
  * Defaults to "{$wgScriptPath}/skins".
+ * @since 1.3
  */
 $wgStylePath = false;
 $wgStyleSheetPath = &$wgStylePath;
@@ -187,6 +198,7 @@ $wgStyleSheetPath = &$wgStylePath;
 /**
  * The URL path of the skins directory. Should not point to an external domain.
  * Defaults to "{$wgScriptPath}/skins".
+ * @since 1.17
  */
 $wgLocalStylePath = false;
 
@@ -200,6 +212,7 @@ $wgExtensionAssetsPath = false;
 /**
  * Filesystem stylesheets directory.
  * Defaults to "{$IP}/skins".
+ * @since 1.3
  */
 $wgStyleDirectory = false;
 
@@ -237,12 +250,14 @@ $wgLogo = false;
 
 /**
  * The URL path of the shortcut icon.
+ * @since 1.6
  */
 $wgFavicon = '/favicon.ico';
 
 /**
  * The URL path of the icon for iPhone and iPod Touch web app bookmarks.
  * Defaults to no icon.
+ * @since 1.12
  */
 $wgAppleTouchIcon = false;
 
@@ -259,13 +274,13 @@ $wgAppleTouchIcon = false;
  *
  * @see wfTempDir()
  * @note Default changed to false in MediaWiki 1.20.
- *
  */
 $wgTmpDirectory = false;
 
 /**
  * If set, this URL is added to the start of $wgUploadPath to form a complete
  * upload URL.
+ * @since 1.4
  */
 $wgUploadBaseUrl = '';
 
@@ -274,6 +289,7 @@ $wgUploadBaseUrl = '';
  * Full thumbnail URL will be like $wgUploadStashScalerBaseUrl/e/e6/Foo.jpg/123px-Foo.jpg
  * where 'e6' are the first two characters of the MD5 hash of the file name.
  * If $wgUploadStashScalerBaseUrl is set to false, thumbs are rendered locally as needed.
+ * @since 1.17
  */
 $wgUploadStashScalerBaseUrl = false;
 
@@ -289,6 +305,7 @@ $wgUploadStashScalerBaseUrl = false;
  *
  * There must be an appropriate script or rewrite rule in place to handle these
  * URLs.
+ * @since 1.5
  */
 $wgActionPaths = array();
 
@@ -588,7 +605,6 @@ $wgCopyUploadProxy = false;
  * @endcode
  * Sets the maximum for all uploads to 250 kB except for upload-by-url, which
  * will have a maximum of 500 kB.
- *
  */
 $wgMaxUploadSize = 1024 * 1024 * 100; # 100MB
 
@@ -674,7 +690,7 @@ $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg' );
  * Files with these extensions will never be allowed as uploads.
  * An array of file extensions to blacklist. You should append to this array
  * if you want to blacklist additional files.
- * */
+ */
 $wgFileBlacklist = array(
        # HTML may contain cookie-stealing JavaScript and web bugs
        'html', 'htm', 'js', 'jsb', 'mhtml', 'mht', 'xhtml', 'xht',
@@ -859,7 +875,7 @@ $wgSVGConverters = array(
        'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
        'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
        'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input',
-       'rsvg' => '$path/rsvg -w$width -h$height $input $output',
+       'rsvg' => '$path/rsvg -w $width -h $height $input $output',
        'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output',
        'ImagickExt' => array( 'SvgHandler::rasterizeImagickExt' ),
 );
@@ -973,7 +989,7 @@ $wgUseImageResize = true;
 $wgEnableAutoRotation = null;
 
 /**
- * Internal name of virus scanner. This servers as a key to the
+ * Internal name of virus scanner. This serves as a key to the
  * $wgAntivirusSetup array. Set this to NULL to disable virus scanning. If not
  * null, every file uploaded will be scanned for viruses.
  */
@@ -2368,9 +2384,6 @@ $wgBrowserBlackList = array(
  * requires that the cur table be kept around for those revisions
  * to remain viewable.
  *
- * maintenance/migrateCurStubs.php can be used to complete the
- * migration in the background once the wiki is back online.
- *
  * This option affects the updaters *only*. Any present cur stub
  * revisions will be readable at runtime regardless of this setting.
  */
@@ -2749,7 +2762,6 @@ $wgEditPageFrameOptions = 'DENY';
  *   - 'SAMEORIGIN': Allow framing by pages on the same domain.
  *   - false: Allow all framing.
  */
-
 $wgApiFrameOptions = 'DENY';
 
 /**
@@ -3207,7 +3219,7 @@ $wgInterwikiFallbackSite = 'wiki';
 /** @} */ # end of Interwiki caching settings.
 
 /**
- * If local interwikies are set up which allow redirects,
+ * If local interwikis are set up which allow redirects,
  * set this regexp to restrict URLs which will be displayed
  * as 'redirected from' links.
  *
@@ -3633,7 +3645,6 @@ $wgReservedUsernames = array(
  * preferences used by anonymous visitors and newly created accounts.
  * For instance, to disable section editing links:
  * $wgDefaultUserOptions ['editsection'] = 0;
- *
  */
 $wgDefaultUserOptions = array(
        'ccmeonemails' => 0,
@@ -4062,7 +4073,6 @@ $wgImplicitGroups = array( '*', 'user', 'autoconfirmed' );
  * @endcode
  * This allows users in the '*' group (i.e. any user) to remove themselves from
  * any group that they happen to be in.
- *
  */
 $wgGroupsAddToSelf = array();
 
@@ -4401,14 +4411,13 @@ $wgPasswordAttemptThrottle = array( 'count' => 5, 'seconds' => 300 );
  * @warning Don't enable this. Many sysops will report "hostile TCP port scans"
  * to your ISP and ask for your server to be shut down.
  * You have been warned.
- *
  */
 $wgBlockOpenProxies = false;
 /** Port we want to scan for a proxy */
 $wgProxyPorts = array( 80, 81, 1080, 3128, 6588, 8000, 8080, 8888, 65506 );
 /** Script used to scan */
 $wgProxyScriptPath = "$IP/maintenance/proxyCheck.php";
-/** */
+/** Expiration time for cached proxy IPs */
 $wgProxyMemcExpiry = 86400;
 /** This should always be customised in LocalSettings.php */
 $wgSecretKey = false;
@@ -4515,7 +4524,7 @@ $wgSessionName = false;
  */
 $wgUseTeX = false;
 
-/* @} */ # end LaTeX }
+/** @} */ # end LaTeX }
 
 /************************************************************************//**
  * @name   Profiling, testing and debugging
@@ -4845,7 +4854,6 @@ $wgCountTotalSearchHits = false;
  * PHP wrapper to avoid firing up mediawiki for every keystroke
  *
  * Placeholders: {searchTerms}
- *
  */
 $wgOpenSearchTemplate = false;
 
@@ -4897,7 +4905,6 @@ $wgNamespacesToBeSearchedHelp = array(
  * logged-in users.
  * Useful for big wikis to maintain different search profiles for anonymous and
  * logged-in users.
- *
  */
 $wgSearchEverythingOnlyLoggedIn = false;
 
@@ -5825,8 +5832,9 @@ $wgDisableQueryPageUpdate = false;
  */
 $wgSpecialPageGroups = array();
 
-/** Whether or not to sort special pages in Special:Specialpages */
-
+/**
+ * Whether or not to sort special pages in Special:Specialpages
+ */
 $wgSortSpecialPages = true;
 
 /**
@@ -6097,7 +6105,6 @@ $wgCrossSiteAJAXdomains = array();
  * even if they match one of the domains allowed by $wgCrossSiteAJAXdomains
  * Uses the same syntax as $wgCrossSiteAJAXdomains
  */
-
 $wgCrossSiteAJAXdomainExceptions = array();
 
 /** @} */ # End AJAX and API }
@@ -6391,7 +6398,7 @@ $wgContentHandlerTextFallback = 'ignore';
  *
  * @since 1.21
  */
-$wgContentHandlerUseDB = false;
+$wgContentHandlerUseDB = true;
 
 /**
  * Determines which types of text are parsed as wikitext. This does not imply that these kinds
index 2ca646b..89c4df6 100644 (file)
@@ -34,7 +34,7 @@ interface DeferrableUpdate {
 }
 
 /**
- * Class for mananging the deferred updates.
+ * Class for managing the deferred updates.
  *
  * @since 1.19
  */
index 3123548..c4a8633 100644 (file)
@@ -137,7 +137,7 @@ define( 'MEDIATYPE_ARCHIVE',    'ARCHIVE' );     // archive file (zip, tar, etc)
  */
 define( 'AV_NO_VIRUS', 0 );  #scan ok, no virus found
 define( 'AV_VIRUS_FOUND', 1 );  #virus found!
-define( 'AV_SCAN_ABORTED', -1 );  #scan aborted, the file is probably imune
+define( 'AV_SCAN_ABORTED', -1 );  #scan aborted, the file is probably immune
 define( 'AV_SCAN_FAILED', false );  #scan failed (scanner not found or error in scanner)
 /**@}*/
 
index a0b6c93..8b2dbb5 100644 (file)
@@ -58,7 +58,7 @@ class EditPage {
        const AS_HOOK_ERROR_EXPECTED = 212;
 
        /**
-        * Status: User is blocked from editting this page
+        * Status: User is blocked from editing this page
         */
        const AS_BLOCKED_PAGE_FOR_USER = 215;
 
@@ -93,7 +93,7 @@ class EditPage {
        const AS_RATE_LIMITED = 221;
 
        /**
-        * Status: article was deleted while editting and param wpRecreate == false or form
+        * Status: article was deleted while editing and param wpRecreate == false or form
         * was not posted
         */
        const AS_ARTICLE_WAS_DELETED = 222;
@@ -116,7 +116,7 @@ class EditPage {
 
        /**
         * Status: no edit summary given and the user has forceeditsummary set and the user is not
-        * editting in his own userspace or talkspace and wpIgnoreBlankSummary == false
+        * editing in his own userspace or talkspace and wpIgnoreBlankSummary == false
         */
        const AS_SUMMARY_NEEDED = 226;
 
@@ -136,7 +136,7 @@ class EditPage {
        const AS_OK = 230;
 
        /**
-        * Status: WikiPage::doEdit() was unsuccessfull
+        * Status: WikiPage::doEdit() was unsuccessful
         */
        const AS_END = 231;
 
@@ -253,7 +253,7 @@ class EditPage {
        public $previewTextAfterContent = '';
        public $mPreloadContent = null;
 
-       /* $didSave should be set to true whenever an article was succesfully altered. */
+       /* $didSave should be set to true whenever an article was successfully altered. */
        public $didSave = false;
        public $undidRev = 0;
 
@@ -742,7 +742,7 @@ class EditPage {
                        $this->save = false;
                        $this->diff = false;
                        $this->minoredit = false;
-                       $this->watchthis = $request->getBool( 'watchthis', false ); // Watch may be overriden by request parameters
+                       $this->watchthis = $request->getBool( 'watchthis', false ); // Watch may be overridden by request parameters
                        $this->recreate = false;
 
                        // When creating a new section, we can preload a section title by passing it as the
@@ -790,7 +790,7 @@ class EditPage {
        /**
         * Subpage overridable method for extracting the page content data from the
         * posted form to be placed in $this->textbox1, if using customized input
-        * this method should be overrided and return the page text that will be used
+        * this method should be overridden and return the page text that will be used
         * for saving, preview parsing and so on...
         *
         * @param $request WebRequest
@@ -972,7 +972,7 @@ class EditPage {
         * section replaced in its context (using WikiPage::replaceSection())
         * to the original text of the edit.
         *
-        * This difers from Article::getContent() that when a missing revision is
+        * This differs from Article::getContent() that when a missing revision is
         * encountered the result will be null and not the
         * 'missing-revision' message.
         *
@@ -2181,7 +2181,7 @@ class EditPage {
                }
 
                if ( $this->hasPresetSummary ) {
-                       // If a summary has been preset using &summary= we dont want to prompt for
+                       // If a summary has been preset using &summary= we don't want to prompt for
                        // a different summary. Only prompt for a summary if the summary is blanked.
                        // (Bug 17416)
                        $this->autoSumm = md5( '' );
@@ -2207,7 +2207,7 @@ class EditPage {
                }
 
                if ( $this->isConflict ) {
-                       // In an edit conflict bypass the overrideable content form method
+                       // In an edit conflict bypass the overridable content form method
                        // and fallback to the raw wpTextbox1 since editconflicts can't be
                        // resolved between page source edits and custom ui edits using the
                        // custom edit ui.
@@ -2441,7 +2441,7 @@ class EditPage {
         * @return array An array in the format array( $label, $input )
         */
        function getSummaryInput( $summary = "", $labelText = null, $inputAttrs = null, $spanLabelAttrs = null ) {
-               // Note: the maxlength is overriden in JS to 255 and to make it use UTF-8 bytes, not characters.
+               // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
                $inputAttrs = ( is_array( $inputAttrs ) ? $inputAttrs : array() ) + array(
                        'id' => 'wpSummary',
                        'maxlength' => '200',
@@ -3620,7 +3620,7 @@ HTML
         * @private
         */
        function makesafe( $invalue ) {
-               // Armor existing references for reversability.
+               // Armor existing references for reversibility.
                $invalue = strtr( $invalue, array( "&#x" => "&#x0" ) );
 
                $bytesleft = 0;
@@ -3672,7 +3672,7 @@ HTML
                                        $i++;
                                } while ( ctype_xdigit( $invalue[$i] ) && ( $i < strlen( $invalue ) ) );
 
-                               // Do some sanity checks. These aren't needed for reversability,
+                               // Do some sanity checks. These aren't needed for reversibility,
                                // but should help keep the breakage down if the editor
                                // breaks one of the entities whilst editing.
                                if ( ( substr( $invalue, $i, 1 ) == ";" ) and ( strlen( $hexstring ) <= 6 ) ) {
@@ -3685,7 +3685,7 @@ HTML
                                $result .= substr( $invalue, $i, 1 );
                        }
                }
-               // reverse the transform that we made for reversability reasons.
+               // reverse the transform that we made for reversibility reasons.
                return strtr( $result, array( "&#x0" => "&#x" ) );
        }
 }
index 530afd0..0bd7a2a 100644 (file)
@@ -171,7 +171,7 @@ class MWException extends Exception {
 
        /**
         * Get a random ID for this error.
-        * This allows to link the exception to its correspoding log entry when
+        * This allows to link the exception to its corresponding log entry when
         * $wgShowExceptionDetails is set to false.
         *
         * @return string
index bfd561e..d8cc024 100644 (file)
@@ -348,7 +348,7 @@ class WikiExporter {
                                $join['revision'] = array( 'INNER JOIN', 'page_id=rev_page' );
                                $opts['ORDER BY'] = array( 'rev_page ASC', 'rev_id ASC' );
                        } else {
-                               # Uknown history specification parameter?
+                               # Unknown history specification parameter?
                                wfProfileOut( __METHOD__ );
                                throw new MWException( __METHOD__ . " given invalid history dump type." );
                        }
@@ -872,7 +872,7 @@ class XmlDumpWriter {
 }
 
 /**
- * Base class for output stream; prints to stdout or buffer or whereever.
+ * Base class for output stream; prints to stdout or buffer or wherever.
  * @ingroup Dump
  */
 class DumpOutput {
@@ -1442,7 +1442,7 @@ class DumpLatestFilter extends DumpFilter {
 }
 
 /**
- * Base class for output stream; prints to stdout or buffer or whereever.
+ * Base class for output stream; prints to stdout or buffer or wherever.
  * @ingroup Dump
  */
 class DumpMultiWriter {
index a30ba5c..caf2e57 100644 (file)
@@ -282,7 +282,7 @@ class RSSFeed extends ChannelFeed {
        }
 
        /**
-        * Ouput an RSS 2.0 header
+        * Output an RSS 2.0 header
         */
        function outHeader() {
                global $wgVersion;
@@ -318,7 +318,7 @@ class RSSFeed extends ChannelFeed {
        }
 
        /**
-        * Ouput an RSS 2.0 footer
+        * Output an RSS 2.0 footer
         */
        function outFooter() {
        ?>
@@ -362,7 +362,7 @@ class AtomFeed extends ChannelFeed {
        }
 
        /**
-        * Atom 1.0 requires a unique, opaque IRI as a unique indentifier
+        * Atom 1.0 requires a unique, opaque IRI as a unique identifier
         * for every feed we create. For now just use the URL, but who
         * can tell if that's right? If we put options on the feed, do we
         * have to change the id? Maybe? Maybe not.
@@ -409,7 +409,7 @@ class AtomFeed extends ChannelFeed {
        }
 
        /**
-        * Outputs the footer for Atom 1.0 feed (basicly '\</feed\>').
+        * Outputs the footer for Atom 1.0 feed (basically '\</feed\>').
         */
        function outFooter() {?>
        </feed><?php
index 5e4b24e..adc1f78 100644 (file)
@@ -106,7 +106,7 @@ class FeedUtils {
                global $wgFeedDiffCutoff, $wgLang;
                wfProfileIn( __METHOD__ );
 
-               # log enties
+               // log entries
                $completeText = '<p>' . implode( ' ',
                        array_filter(
                                array(
@@ -115,7 +115,7 @@ class FeedUtils {
 
                // NOTE: Check permissions for anonymous users, not current user.
                //       No "privileged" version should end up in the cache.
-               //       Most feed readers will not log in anway.
+               //       Most feed readers will not log in anyway.
                $anon = new User();
                $accErrors = $title->getUserPermissionsErrors( 'read', $anon, true );
 
index 54e546e..e1e1234 100644 (file)
@@ -311,7 +311,7 @@ function wfRandom() {
 }
 
 /**
- * Get a random string containing a number of pesudo-random hex
+ * Get a random string containing a number of pseudo-random hex
  * characters.
  * @note This is not secure, if you are trying to generate some sort
  *       of token please use MWCryptRand instead.
@@ -422,8 +422,8 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
 
 /**
  * This is the logical opposite of wfArrayToCgi(): it accepts a query string as
- * its argument and returns the same string in array form.  This allows compa-
- * tibility with legacy functions that accept raw query strings instead of nice
+ * its argument and returns the same string in array form.  This allows compatibility
+ * with legacy functions that accept raw query strings instead of nice
  * arrays.  Of course, keys and values are urldecode()d.
  *
  * @param string $query query string
@@ -1081,7 +1081,7 @@ function wfLogDBError( $text ) {
  * @param $function String
  * @param string|bool $version Version of MediaWiki that the function was deprecated in (Added in 1.19).
  * @param string|bool $component Added in 1.19.
- * @param $callerOffset integer: How far up the callstack is the original
+ * @param $callerOffset integer: How far up the call stack is the original
  *    caller. 2 = function that called the function that called
  *    wfDeprecated (Added in 1.20)
  *
@@ -1662,7 +1662,7 @@ function wfMsgWikiHtml( $key ) {
  *   <i>content</i>: fetch message for content language instead of interface
  * Also can accept a single associative argument, of the form 'language' => 'xx':
  *   <i>language</i>: Language object or language code to fetch message for
- *       (overriden by <i>content</i>).
+ *       (overridden by <i>content</i>).
  * Behavior for conflicting options (e.g., parse+parseinline) is undefined.
  *
  * @return String
@@ -1742,7 +1742,7 @@ function wfMsgExt( $key, $options ) {
 /**
  * Since wfMsg() and co suck, they don't return false if the message key they
  * looked up didn't exist but a XHTML string, this function checks for the
- * nonexistance of messages by checking the MessageCache::get() result directly.
+ * nonexistence of messages by checking the MessageCache::get() result directly.
  *
  * @deprecated since 1.18. Use Message::isDisabled().
  *
@@ -1825,7 +1825,7 @@ function wfReportTime() {
  *
  * With Zend Optimizer 3.2.0 loaded, this causes segfaults under somewhat
  * murky circumstances, which may be triggered in part by stub objects
- * or other fancy talkin'.
+ * or other fancy talking'.
  *
  * Will return an empty array if Zend Optimizer is detected or if
  * debug_backtrace is disabled, otherwise the output from
@@ -2090,7 +2090,7 @@ function wfEscapeWikiText( $text ) {
 }
 
 /**
- * Get the current unix timetstamp with microseconds.  Useful for profiling
+ * Get the current unix timestamp with microseconds.  Useful for profiling
  * @return Float
  */
 function wfTime() {
@@ -2710,7 +2710,7 @@ function wfDl( $extension, $fileName = null ) {
  * @param varargs
  * @return String
  */
-function wfEscapeShellArg( ) {
+function wfEscapeShellArg() {
        wfInitShellLocale();
 
        $args = func_get_args();
@@ -3321,7 +3321,7 @@ function wfHttpOnlySafe() {
 }
 
 /**
- * Check if there is sufficent entropy in php's built-in session generation
+ * Check if there is sufficient entropy in php's built-in session generation
  * @return bool true = there is sufficient entropy
  */
 function wfCheckEntropy() {
@@ -3655,7 +3655,7 @@ function wfWaitForSlaves( $maxLag = false, $wiki = false ) {
        // bug 27975 - Don't try to wait for slaves if there are none
        // Prevents permission error when getting master position
        if ( $lb->getServerCount() > 1 ) {
-               $dbw = $lb->getConnection( DB_MASTER );
+               $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
                $pos = $dbw->getMasterPos();
                $lb->waitForAll( $pos );
        }
@@ -3702,8 +3702,8 @@ function wfCountDown( $n ) {
  *              characters before hashing.
  * @return string
  * @codeCoverageIgnore
- * @deprecated since 1.20; Please use MWCryptRand for security purposes and wfRandomString for pesudo-random strings
- * @warning This method is NOT secure. Additionally it has many callers that use it for pesudo-random purposes.
+ * @deprecated since 1.20; Please use MWCryptRand for security purposes and wfRandomString for pseudo-random strings
+ * @warning This method is NOT secure. Additionally it has many callers that use it for pseudo-random purposes.
  */
 function wfGenerateToken( $salt = '' ) {
        wfDeprecated( __METHOD__, '1.20' );
@@ -3888,7 +3888,7 @@ function wfRunHooks( $event, $args = array() ) {
  *
  * @param string $format The format string (See php's docs)
  * @param $data: A binary string of binary data
- * @param $length integer or false: The minimun length of $data. This is to
+ * @param $length integer or false: The minimum length of $data. This is to
  *     prevent reading beyond the end of $data. false to disable the check.
  *
  * Also be careful when using this function to read unsigned 32 bit integer
index 23c5ca7..6863973 100644 (file)
@@ -378,7 +378,7 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * Validate all the fields, and call the submision callback
+        * Validate all the fields, and call the submission callback
         * function if everything is kosher.
         * @throws MWException
         * @return Mixed Bool true == Successful submission, Bool false
@@ -886,7 +886,7 @@ class HTMLForm extends ContextSource {
        /**
         * Set the prefix for various default messages
         * @todo currently only used for the "<fieldset>" legend on forms
-        * with multiple sections; should be used elsewhre?
+        * with multiple sections; should be used elsewhere?
         * @param $p String
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -1109,7 +1109,7 @@ abstract class HTMLFormField {
        /**
         * Get a translated interface message
         *
-        * This is a wrapper arround $this->mParent->msg() if $this->mParent is set
+        * This is a wrapper around $this->mParent->msg() if $this->mParent is set
         * and wfMessage() otherwise.
         *
         * Parameters are the same as wfMessage().
index 2757997..af4b4bb 100644 (file)
@@ -500,7 +500,7 @@ class Html {
                        if ( in_array( $key, $spaceSeparatedListAttributes ) ) {
                                // Apply some normalization and remove duplicates
 
-                               // Convert into correct array. Array can contain space-seperated
+                               // Convert into correct array. Array can contain space-separated
                                // values. Implode/explode to get those into the main array as well.
                                if ( is_array( $value ) ) {
                                        // If input wasn't an array, we can skip this step
@@ -512,7 +512,7 @@ class Html {
                                                        if ( !isset( $value[$v] ) ) {
                                                                // As a special case don't set 'foo' if a
                                                                // separate 'foo' => true/false exists in the array
-                                                               // keys should be authoritive
+                                                               // keys should be authoritative
                                                                $newValue[] = $v;
                                                        }
                                                } elseif ( $v ) {
@@ -796,7 +796,7 @@ class Html {
                        // Value is provided by user, the name shown is localized for the user.
                        $options[$params['all']] = wfMessage( 'namespacesall' )->text();
                }
-               // Add all namespaces as options (in the content langauge)
+               // Add all namespaces as options (in the content language)
                $options += $wgContLang->getFormattedNamespaces();
 
                // Convert $options to HTML and filter out namespaces below 0
@@ -807,7 +807,7 @@ class Html {
                        }
                        if ( $nsId === NS_MAIN ) {
                                // For other namespaces use use the namespace prefix as label, but for
-                               // main we don't use "" but the user message descripting it (e.g. "(Main)" or "(Article)")
+                               // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)")
                                $nsName = wfMessage( 'blanknamespace' )->text();
                        } elseif ( is_int( $nsId ) ) {
                                $nsName = $wgContLang->convertNamespace( $nsId );
index 27b1749..9e280db 100644 (file)
@@ -58,6 +58,8 @@ class Http {
         */
        public static function request( $method, $url, $options = array() ) {
                wfDebug( "HTTP: $method: $url\n" );
+               wfProfileIn( __METHOD__ . "-$method" );
+
                $options['method'] = strtoupper( $method );
 
                if ( !isset( $options['timeout'] ) ) {
@@ -67,11 +69,12 @@ class Http {
                $req = MWHttpRequest::factory( $url, $options );
                $status = $req->execute();
 
+               $content = false;
                if ( $status->isOK() ) {
-                       return $req->getContent();
-               } else {
-                       return false;
+                       $content = $req->getContent();
                }
+               wfProfileOut( __METHOD__ . "-$method" );
+               return $content;
        }
 
        /**
@@ -335,7 +338,7 @@ class MWHttpRequest {
        }
 
        /**
-        * Set the refererer header
+        * Set the referrer header
         */
        public function setReferer( $url ) {
                $this->setHeader( 'Referer', $url );
@@ -427,6 +430,8 @@ class MWHttpRequest {
        public function execute() {
                global $wgTitle;
 
+               wfProfileIn( __METHOD__ );
+
                $this->content = "";
 
                if ( strtoupper( $this->method ) == "HEAD" ) {
@@ -446,14 +451,18 @@ class MWHttpRequest {
                if ( !isset( $this->reqHeaders['User-Agent'] ) ) {
                        $this->setUserAgent( Http::userAgent() );
                }
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
         * Parses the headers, including the HTTP status code and any
-        * Set-Cookie headers.  This function expectes the headers to be
+        * Set-Cookie headers.  This function expects the headers to be
         * found in an array in the member variable headerList.
         */
        protected function parseHeader() {
+               wfProfileIn( __METHOD__ );
+
                $lastname = "";
 
                foreach ( $this->headerList as $header ) {
@@ -470,6 +479,8 @@ class MWHttpRequest {
                }
 
                $this->parseCookies();
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -603,6 +614,8 @@ class MWHttpRequest {
         * Parse the cookies in the response headers and store them in the cookie jar.
         */
        protected function parseCookies() {
+               wfProfileIn( __METHOD__ );
+
                if ( !$this->cookieJar ) {
                        $this->cookieJar = new CookieJar;
                }
@@ -613,6 +626,8 @@ class MWHttpRequest {
                                $this->cookieJar->parseCookieResponseHeader( $cookie, $url['host'] );
                        }
                }
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -700,9 +715,12 @@ class CurlHttpRequest extends MWHttpRequest {
        }
 
        public function execute() {
+               wfProfileIn( __METHOD__ );
+
                parent::execute();
 
                if ( !$this->status->isOK() ) {
+                       wfProfileOut( __METHOD__ );
                        return $this->status;
                }
 
@@ -746,6 +764,7 @@ class CurlHttpRequest extends MWHttpRequest {
                $curlHandle = curl_init( $this->url );
 
                if ( !curl_setopt_array( $curlHandle, $this->curlOptions ) ) {
+                       wfProfileOut( __METHOD__ );
                        throw new MWException( "Error setting curl options." );
                }
 
@@ -777,6 +796,8 @@ class CurlHttpRequest extends MWHttpRequest {
                $this->parseHeader();
                $this->setStatus();
 
+               wfProfileOut( __METHOD__ );
+
                return $this->status;
        }
 
@@ -811,6 +832,8 @@ class PhpHttpRequest extends MWHttpRequest {
        }
 
        public function execute() {
+               wfProfileIn( __METHOD__ );
+
                parent::execute();
 
                if ( is_array( $this->postData ) ) {
@@ -903,11 +926,13 @@ class PhpHttpRequest extends MWHttpRequest {
 
                if ( $fh === false ) {
                        $this->status->fatal( 'http-request-error' );
+                       wfProfileOut( __METHOD__ );
                        return $this->status;
                }
 
                if ( $result['timed_out'] ) {
                        $this->status->fatal( 'http-timed-out', $this->url );
+                       wfProfileOut( __METHOD__ );
                        return $this->status;
                }
 
@@ -930,6 +955,8 @@ class PhpHttpRequest extends MWHttpRequest {
                }
                fclose( $fh );
 
+               wfProfileOut( __METHOD__ );
+
                return $this->status;
        }
 }
index 955ee8b..72b9a52 100644 (file)
@@ -180,7 +180,7 @@ class IP {
                                $ip
                        );
                }
-               // Remove leading zereos from each bloc as needed
+               // Remove leading zeros from each bloc as needed
                $ip = preg_replace( '/(^|:)0+(' . RE_IPV6_WORD . ')/', '$1$2', $ip );
                return $ip;
        }
@@ -746,7 +746,7 @@ class IP {
        }
 
        /**
-        * Gets rid of uneeded numbers in quad-dotted/octet IP strings
+        * Gets rid of unneeded numbers in quad-dotted/octet IP strings
         * For example, 127.111.113.151/24 -> 127.111.113.0/24
         * @param string $range IP address to normalize
         * @return string
index 9660c07..1556ad9 100644 (file)
@@ -360,7 +360,7 @@ class ImageGallery {
                        # http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
 
                        # Weird double wrapping (the extra div inside the li) needed due to FF2 bug
-                       # Can be safely removed if FF2 falls completely out of existance
+                       # Can be safely removed if FF2 falls completely out of existence
                        $output .=
                                "\n\t\t" . '<li class="gallerybox" style="width: ' . ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING ) . 'px">'
                                        . '<div style="width: ' . ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING ) . 'px">'
index 55a8cc5..b3a485a 100644 (file)
@@ -108,7 +108,7 @@ class ImagePage extends Article {
                $diff = $request->getVal( 'diff' );
                $diffOnly = $request->getBool( 'diffonly', $this->getContext()->getUser()->getOption( 'diffonly' ) );
 
-               if ( $this->getTitle()->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) {
+               if ( $this->getTitle()->getNamespace() != NS_FILE || ( $diff !== null && $diffOnly ) ) {
                        parent::view();
                        return;
                }
@@ -116,7 +116,7 @@ class ImagePage extends Article {
                $this->loadFile();
 
                if ( $this->getTitle()->getNamespace() == NS_FILE && $this->mPage->getFile()->getRedirected() ) {
-                       if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || isset( $diff ) ) {
+                       if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || $diff !== null ) {
                                // mTitle is the same as the redirect target so ask Article
                                // to perform the redirect for us.
                                $request->setVal( 'diffonly', 'true' );
@@ -262,7 +262,7 @@ class ImagePage extends Article {
                                # @todo FIXME: Why is this using escapeId for a class?!
                                $class = Sanitizer::escapeId( $v['id'] );
                                if ( $type == 'collapsed' ) {
-                                       $class .= ' collapsable';
+                                       $class .= ' collapsable'; // sic
                                }
                                $r .= "<tr class=\"$class\">\n";
                                $r .= "<th>{$v['name']}</th>\n";
@@ -330,13 +330,13 @@ class ImagePage extends Article {
                                if ( $width > $maxWidth || $height > $maxHeight ) {
                                        # Calculate the thumbnail size.
                                        # First case, the limiting factor is the width, not the height.
-                                       if ( $width / $height >= $maxWidth / $maxHeight ) { // FIXME: Possible divison by 0. bug 36911
-                                               $height = round( $height * $maxWidth / $width ); // FIXME: Possible divison by 0. bug 36911
+                                       if ( $width / $height >= $maxWidth / $maxHeight ) { // FIXME: Possible division by 0. bug 36911
+                                               $height = round( $height * $maxWidth / $width ); // FIXME: Possible division by 0. bug 36911
                                                $width = $maxWidth;
                                                # Note that $height <= $maxHeight now.
                                        } else {
-                                               $newwidth = floor( $width * $maxHeight / $height ); // FIXME: Possible divison by 0. bug 36911
-                                               $height = round( $height * $newwidth / $width ); // FIXME: Possible divison by 0. bug 36911
+                                               $newwidth = floor( $width * $maxHeight / $height ); // FIXME: Possible division by 0. bug 36911
+                                               $height = round( $height * $newwidth / $width ); // FIXME: Possible division by 0. bug 36911
                                                $width = $newwidth;
                                                # Note that $height <= $maxHeight now, but might not be identical
                                                # because of rounding.
@@ -550,7 +550,7 @@ EOT
                                $nofile = 'filepage-nofile';
                        }
                        // Note, if there is an image description page, but
-                       // no image, then this setRobotPolicy is overriden
+                       // no image, then this setRobotPolicy is overridden
                        // by Article::View().
                        $out->setRobotPolicy( 'noindex,nofollow' );
                        $out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
@@ -906,7 +906,7 @@ EOT
        }
 
        /**
-        * Returns the corrosponding $wgImageLimits entry for the selected user option
+        * Returns the corresponding $wgImageLimits entry for the selected user option
         *
         * @param $user User
         * @param string $optionName Name of a option to check, typically imagesize or thumbsize
index b5411fc..fee636f 100644 (file)
@@ -225,7 +225,7 @@ class WikiImporter {
                                } else {
                                        // set namespace to 'all', so the namespace check in processTitle() can passed
                                        $this->setTargetNamespace( null );
-                                       $this->mTargetRootPage = $title->getPrefixedDBKey();
+                                       $this->mTargetRootPage = $title->getPrefixedDBkey();
                                }
                        }
                }
@@ -1531,7 +1531,7 @@ class WikiRevision {
                }
 
                if ( $status->isGood() ) {
-                       wfDebug( __METHOD__ . ": Succesful\n" );
+                       wfDebug( __METHOD__ . ": Successful\n" );
                        return true;
                } else {
                        wfDebug( __METHOD__ . ': failed: ' . $status->getXml() . "\n" );
@@ -1646,7 +1646,7 @@ class ImportStreamSource {
        static function newFromUpload( $fieldname = "xmlimport" ) {
                $upload =& $_FILES[$fieldname];
 
-               if( !isset( $upload ) || !$upload['name'] ) {
+               if( $upload === null || !$upload['name'] ) {
                        return Status::newFatal( 'importnofile' );
                }
                if( !empty( $upload['error'] ) ) {
index ae21011..66f9544 100644 (file)
@@ -173,7 +173,7 @@ class MWInit {
        }
 
        /**
-        * Determine wether a method exists within a class, using a method which works
+        * Determine whether a method exists within a class, using a method which works
         * under HipHop.
         *
         * Note that under HipHop when method_exists is given a string for it's class
index 26928bf..11b6559 100644 (file)
@@ -118,13 +118,13 @@ class LinkFilter {
                // Reverse the labels in the hostname, convert to lower case
                // For emails reverse domainpart only
                if ( $prot == 'mailto:' && strpos( $host, '@' ) ) {
-                       // complete email adress
+                       // complete email address
                        $mailparts = explode( '@', $host );
                        $domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
                        $host = $domainpart . '@' . $mailparts[0];
                        $like = array( "$prot$host", $db->anyString() );
                } elseif ( $prot == 'mailto:' ) {
-                       // domainpart of email adress only. do not add '.'
+                       // domainpart of email address only. do not add '.'
                        $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
                        $like = array( "$prot$host", $db->anyString() );
                } else {
index dc73ea2..972adfc 100644 (file)
@@ -36,8 +36,8 @@ class Linker {
        const TOOL_LINKS_EMAIL = 2;
 
        /**
-        * Get the appropriate HTML attributes to add to the "a" element of an ex-
-        * ternal link, as created by [wikisyntax].
+        * Get the appropriate HTML attributes to add to the "a" element of an
+        * external link, as created by [wikisyntax].
         *
         * @param string $class the contents of the class attribute; if an empty
         *   string is passed, which is the default value, defaults to 'external'.
@@ -50,8 +50,7 @@ class Linker {
        }
 
        /**
-        * Get the appropriate HTML attributes to add to the "a" element of an in-
-        * terwiki link.
+        * Get the appropriate HTML attributes to add to the "a" element of an interwiki link.
         *
         * @param string $title the title text for the link, URL-encoded (???) but
         *   not HTML-escaped
@@ -73,8 +72,7 @@ class Linker {
        }
 
        /**
-        * Get the appropriate HTML attributes to add to the "a" element of an in-
-        * ternal link.
+        * Get the appropriate HTML attributes to add to the "a" element of an internal link.
         *
         * @param string $title the title text for the link, URL-encoded (???) but
         *   not HTML-escaped
@@ -89,8 +87,8 @@ class Linker {
        }
 
        /**
-        * Get the appropriate HTML attributes to add to the "a" element of an in-
-        * ternal link, given the Title object for the page we want to link to.
+        * Get the appropriate HTML attributes to add to the "a" element of an internal
+        * link, given the Title object for the page we want to link to.
         *
         * @param $nt Title
         * @param string $unused unused
@@ -171,8 +169,8 @@ class Linker {
         *   the link text.  This is raw HTML and will not be escaped.  If null,
         *   defaults to the prefixed text of the Title; or if the Title is just a
         *   fragment, the contents of the fragment.
-        * @param array $customAttribs  A key => value array of extra HTML attri-
-        *   butes, such as title and class.  (href is ignored.)  Classes will be
+        * @param array $customAttribs  A key => value array of extra HTML attributes,
+        *   such as title and class.  (href is ignored.)  Classes will be
         *   merged with the default classes, while other attributes will replace
         *   default attributes.  All passed attribute values will be HTML-escaped.
         *   A false attribute value means to suppress that attribute.
@@ -382,13 +380,13 @@ class Linker {
         * @return string
         */
        private static function linkText( $target ) {
-               # We might be passed a non-Title by make*LinkObj().  Fail gracefully.
+               // We might be passed a non-Title by make*LinkObj().  Fail gracefully.
                if ( !$target instanceof Title ) {
                        return '';
                }
 
-               # If the target is just a fragment, with no title, we return the frag-
-               # ment text.  Otherwise, we return the title text itself.
+               // If the target is just a fragment, with no title, we return the fragment
+               // text.  Otherwise, we return the title text itself.
                if ( $target->getPrefixedText() === '' && $target->getFragment() !== '' ) {
                        return htmlspecialchars( $target->getFragment() );
                }
@@ -552,7 +550,7 @@ class Linker {
         *          caption         HTML for image caption.
         *          link-url        URL to link to
         *          link-title      Title object to link to
-        *          link-target     Value for the target attribue, only with link-url
+        *          link-target     Value for the target attribute, only with link-url
         *          no-link         Boolean, suppress description link
         *
         * @param array $handlerParams associative array of media handler parameters, to be passed
@@ -616,7 +614,7 @@ class Linker {
 
                        if ( isset( $fp['thumbnail'] ) || isset( $fp['framed'] ) || isset( $fp['frameless'] ) || !$hp['width'] ) {
                                global $wgThumbLimits, $wgThumbUpright;
-                               if ( !isset( $widthOption ) || !isset( $wgThumbLimits[$widthOption] ) ) {
+                               if ( $widthOption === null || !isset( $wgThumbLimits[$widthOption] ) ) {
                                        $widthOption = User::getDefaultOption( 'thumbsize' );
                                }
 
@@ -683,6 +681,7 @@ class Linker {
                                'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false,
                                'img-class' => $fp['class'] );
                        if ( isset( $fp['border'] ) ) {
+                               // TODO: BUG? Both values are identical
                                $params['img-class'] .= ( $params['img-class'] !== '' ) ? ' thumbborder' : 'thumbborder';
                        }
                        $params = self::getImageLinkMTOParams( $fp, $query, $parser ) + $params;
@@ -1565,7 +1564,7 @@ class Linker {
        public static function commentBlock( $comment, $title = null, $local = false ) {
                // '*' used to be the comment inserted by the software way back
                // in antiquity in case none was provided, here for backwards
-               // compatability, acc. to brion -ævar
+               // compatibility, acc. to brion -ævar
                if ( $comment == '' || $comment == '*' ) {
                        return '';
                } else {
@@ -1808,7 +1807,7 @@ class Linker {
         * is set and the user is the only contributor of the page.
         *
         * @param $rev Revision object
-        * @param bool $verify Try to verfiy that this revision can really be rolled back
+        * @param bool $verify Try to verify that this revision can really be rolled back
         * @return integer|bool|null
         */
        public static function getRollbackEditCount( $rev, $verify ) {
index 3bfaf4c..5719f83 100644 (file)
  */
 
 /**
- * The Message class provides methods which fullfil two basic services:
+ * The Message class provides methods which fulfil two basic services:
  *  - fetching interface messages
  *  - processing messages into a variety of formats
  *
- * First implemented with MediaWiki 1.17, the Message class is intented to
+ * First implemented with MediaWiki 1.17, the Message class is intended to
  * replace the old wfMsg* functions that over time grew unusable.
  * @see https://www.mediawiki.org/wiki/Manual:Messages_API for equivalences
  * between old and new functions.
@@ -261,7 +261,7 @@ class Message {
 
        /**
         * Factory function that is just wrapper for the real constructor. It is
-        * intented to be used instead of the real constructor, because it allows
+        * intended to be used instead of the real constructor, because it allows
         * chaining method calls, while new objects don't.
         * @since 1.17
         * @param string $key message key
@@ -554,7 +554,7 @@ class Message {
        }
 
        /**
-        * Returns the message text as-is, only parameters are subsituted.
+        * Returns the message text as-is, only parameters are substituted.
         * @since 1.17
         * @return String: Unescaped untransformed message text.
         */
@@ -633,7 +633,7 @@ class Message {
        }
 
        /**
-        * Substitutes any paramaters into the message text.
+        * Substitutes any parameters into the message text.
         * @since 1.17
         * @param string $message the message text
         * @param string $type either before or after
index bcccf1d..8a8142b 100644 (file)
@@ -29,7 +29,7 @@
  * A message blob is a JSON object containing the interface messages for a
  * certain resource in a certain language. These message blobs are cached
  * in the msg_resource table and automatically invalidated when one of their
- * consistuent messages or the resource itself is changed.
+ * constituent messages or the resource itself is changed.
  */
 class MessageBlobStore {
 
index 70feafd..edabd54 100644 (file)
@@ -153,11 +153,11 @@ class MimeMagic {
         */
        var $mMimeTypeAliases = null;
 
-       /** map of mime types to file extensions (as a space seprarated list)
+       /** map of mime types to file extensions (as a space separated list)
         */
        var $mMimeToExt = null;
 
-       /** map of file extensions types to mime types (as a space seprarated list)
+       /** map of file extensions types to mime types (as a space separated list)
         */
        var $mExtToMime = null;
 
@@ -346,7 +346,7 @@ class MimeMagic {
         * @return MimeMagic
         */
        public static function &singleton() {
-               if ( !isset( self::$instance ) ) {
+               if ( self::$instance === null ) {
                        self::$instance = new MimeMagic;
                }
                return self::$instance;
@@ -541,7 +541,7 @@ class MimeMagic {
        /**
         * Mime type detection. This uses detectMimeType to detect the mime type
         * of the file, but applies additional checks to determine some well known
-        * file formats that may be missed or misinterpreter by the default mime
+        * file formats that may be missed or misinterpreted by the default mime
         * detection (namely XML based formats like XHTML or SVG, as well as ZIP
         * based formats like OPC/ODF files).
         *
@@ -853,7 +853,7 @@ class MimeMagic {
         * Internal mime type detection. Detection is done using an external
         * program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo
         * extension and mime_content_type are tried (in this order), if they
-        * are available. If the dections fails and $ext is not false, the mime
+        * are available. If the detections fails and $ext is not false, the mime
         * type is guessed from the file extension, using guessTypesForExtension.
         *
         * If the mime type is still unknown, getimagesize is used to detect the
@@ -904,7 +904,7 @@ class MimeMagic {
                        # NOTE: this function is available since PHP 4.3.0, but only if
                        # PHP was compiled with --with-mime-magic or, before 4.3.2, with --enable-mime-magic.
                        #
-                       # On Windows, you must set mime_magic.magicfile in php.ini to point to the mime.magic file bundeled with PHP;
+                       # On Windows, you must set mime_magic.magicfile in php.ini to point to the mime.magic file bundled with PHP;
                        # sometimes, this may even be needed under linus/unix.
                        #
                        # Also note that this has been DEPRECATED in favor of the fileinfo extension by PECL, see above.
@@ -1041,7 +1041,7 @@ class MimeMagic {
         * File extensions are represented by a string starting with a dot (.) to
         * distinguish them from mime types.
         *
-        * This funktion relies on the mapping defined by $this->mMediaTypes
+        * This function relies on the mapping defined by $this->mMediaTypes
         * @access private
         * @return int|string
         */
index 71d737e..fccfbed 100644 (file)
@@ -182,7 +182,7 @@ class MWNamespace {
         * sure that code will not potentially break.
         *
         * @param int $ns1 The first namespace index
-        * @param int $ns2 The second namespae index
+        * @param int $ns2 The second namespace index
         *
         * @return bool
         * @since 1.19
@@ -197,7 +197,7 @@ class MWNamespace {
         *     NS_USER and NS_USER_TALK will return true.
         *
         * @param int $ns1 The first namespace index
-        * @param int $ns2 The second namespae index
+        * @param int $ns2 The second namespace index
         *
         * @return bool
         * @since 1.19
index abf091e..6b40c30 100644 (file)
@@ -92,7 +92,7 @@ function wfRequestExtension() {
  */
 function wfGzipHandler( $s ) {
        if( !function_exists( 'gzencode' ) ) {
-               wfDebug( __FUNCTION__ . "() skipping compression (gzencode unavaible)\n" );
+               wfDebug( __FUNCTION__ . "() skipping compression (gzencode unavailable)\n" );
                return $s;
        }
        if( headers_sent() ) {
index 39b1dba..1e0c396 100644 (file)
@@ -123,7 +123,7 @@ class OutputPage extends ContextSource {
        var $mScripts = '';
 
        /**
-        * Inline CSS styles. Use addInlineStyle() sparsingly
+        * Inline CSS styles. Use addInlineStyle() sparingly
         */
        var $mInlineStyles = '';
 
@@ -897,7 +897,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Replace the subtile with $str
+        * Replace the subtitle with $str
         *
         * @param string|Message $str new value of the subtitle. String should be safe HTML.
         */
@@ -1303,7 +1303,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * As for setAllowedModules(), but don't inadvertantly make the page more accessible
+        * As for setAllowedModules(), but don't inadvertently make the page more accessible
         * @param  $type String
         * @param  $level Int ResourceLoaderModule class constant
         */
@@ -1467,7 +1467,7 @@ class OutputPage extends ContextSource {
         * @param $interface Boolean: is this text in the user interface language?
         */
        public function addWikiText( $text, $linestart = true, $interface = true ) {
-               $title = $this->getTitle(); // Work arround E_STRICT
+               $title = $this->getTitle(); // Work around E_STRICT
                if ( !$title ) {
                        throw new MWException( 'Title is null' );
                }
@@ -1939,7 +1939,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Get the message associed with the HTTP response code $code
+        * Get the message associated with the HTTP response code $code
         *
         * @param $code Integer: status code
         * @return String or null: message or null if $code is not in the list of
@@ -2331,7 +2331,7 @@ $templates
        }
 
        /**
-        * Turn off regular page output and return an error reponse
+        * Turn off regular page output and return an error response
         * for when rate limiting has triggered.
         */
        public function rateLimited() {
@@ -2695,7 +2695,7 @@ $templates
                        }
                        // Special handling for the user group; because users might change their stuff
                        // on-wiki like user pages, or user preferences; we need to find the highest
-                       // timestamp of these user-changable modules so we can ensure cache misses on change
+                       // timestamp of these user-changeable modules so we can ensure cache misses on change
                        // This should NOT be done for the site group (bug 27564) because anons get that too
                        // and we shouldn't be putting timestamps in Squid-cached HTML
                        $version = null;
@@ -3008,7 +3008,7 @@ $templates
                        'wgCanonicalNamespace' => $nsname,
                        'wgCanonicalSpecialPageName' => $canonicalName,
                        'wgNamespaceNumber' => $title->getNamespace(),
-                       'wgPageName' => $title->getPrefixedDBKey(),
+                       'wgPageName' => $title->getPrefixedDBkey(),
                        'wgTitle' => $title->getText(),
                        'wgCurRevisionId' => $latestRevID,
                        'wgArticleId' => $pageID,
@@ -3024,7 +3024,7 @@ $templates
                        'wgDefaultDateFormat' => $lang->getDefaultDateFormat(),
                        'wgMonthNames' => $lang->getMonthNamesArray(),
                        'wgMonthNamesShort' => $lang->getMonthAbbreviationsArray(),
-                       'wgRelevantPageName' => $relevantTitle->getPrefixedDBKey(),
+                       'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
                );
                if ( $user->isLoggedIn() ) {
                        $vars['wgUserId'] = $user->getId();
@@ -3042,7 +3042,7 @@ $templates
                        $vars['wgIsMainPage'] = true;
                }
                if ( $this->mRedirectedFrom ) {
-                       $vars['wgRedirectedFrom'] = $this->mRedirectedFrom->getPrefixedDBKey();
+                       $vars['wgRedirectedFrom'] = $this->mRedirectedFrom->getPrefixedDBkey();
                }
 
                // Allow extensions to add their custom variables to the mw.config map.
@@ -3576,7 +3576,7 @@ $templates
                                        // Example supported values for $media: 'screen', 'only screen', 'screen and (min-width: 982px)' ),
                                        // Example NOT supported value for $media: '3d-glasses, screen, print and resolution > 90dpi'
                                        //
-                                       // If it's a print request, we never want any kind of screen styesheets
+                                       // If it's a print request, we never want any kind of screen stylesheets
                                        // If it's a handheld request (currently the only other choice with a switch),
                                        // 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
index cba77ee..7749bf1 100644 (file)
@@ -22,7 +22,7 @@
 
 /**
  * Display something vaguely comprehensible in the event of a totally unrecoverable error.
- * Does not assume access to *anything*; no globals, no autloader, no database, no localisation.
+ * Does not assume access to *anything*; no globals, no autoloader, no database, no localisation.
  * Safe for PHP4 (and putting this here means that WebStart.php and GlobalSettings.php
  * no longer need to be).
  *
  */
 function wfPHPVersionError( $type ) {
        $mwVersion = '1.21';
-       $phpVersion = PHP_VERSION;
-       $message = "MediaWiki $mwVersion requires at least PHP version 5.3.2, you are using PHP $phpVersion.";
-       if( $type == 'index.php' ) {
+       $minimumVersionPHP = '5.3.2';
+
+       $phpVersion = phpversion();
+       $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
+       $message = "MediaWiki $mwVersion requires at least PHP version $minimumVersionPHP, you are using PHP $phpVersion.";
+       if ( $type == 'cli' ) {
+               $finalOutput = "You are using PHP version $phpVersion but MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher. ABORTING.\n" .
+               "Check if you have a newer php executable with a different name, such as php5.\n";
+       } elseif ( $type == 'index.php' ) {
+               $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
                $encLogo = htmlspecialchars(
-                       str_replace( '//', '/', pathinfo( $_SERVER['SCRIPT_NAME'], PATHINFO_DIRNAME ) . '/'
-                       ) . 'skins/common/images/mediawiki.png'
+                       str_replace( '//', '/', $pathinfo['dirname'] . '/' ) .
+                       'skins/common/images/mediawiki.png'
                );
 
-               header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 );
+               header( "$protocol 500 MediaWiki configuration Error" );
                header( 'Content-type: text/html; charset=UTF-8' );
                // Don't cache error pages!  They cause no end of trouble...
                header( 'Cache-control: none' );
-               header( 'Pragma: nocache' );
+               header( 'Pragma: no-cache' );
 
                $finalOutput = <<<HTML
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -103,9 +110,7 @@ HTML;
        } else {
                // So nothing thinks this is JS or CSS
                $finalOutput = ( $type == 'load.php' ) ? "/* $message */" : $message;
-               if( $type != 'cli' ) {
-                       header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 );
-               }
+               header( "$protocol 500 MediaWiki configuration Error" );
        }
        echo( "$finalOutput\n" );
        die( 1 );
index 29ff894..d2ac904 100644 (file)
@@ -432,7 +432,7 @@ abstract class IndexPager extends ContextSource implements Pager {
         * Make a self-link
         *
         * @param string $text text displayed on the link
-        * @param array $query associative array of paramter to be in the query string
+        * @param array $query associative array of parameter to be in the query string
         * @param string $type value of the "rel" attribute
         *
         * @return String: HTML fragment
@@ -688,8 +688,8 @@ abstract class IndexPager extends ContextSource implements Pager {
        protected function getExtraSortFields() { return array(); }
 
        /**
-        * Return the default sorting direction: false for ascending, true for de-
-        * scending.  You can also have an associative array of ordertype => dir,
+        * Return the default sorting direction: false for ascending, true for
+        * descending.  You can also have an associative array of ordertype => dir,
         * if multiple order types are supported.  In this case getIndexField()
         * must return an array, and the keys of that must exactly match the keys
         * of this.
@@ -784,8 +784,8 @@ abstract class AlphabeticPager extends IndexPager {
 
        /**
         * If this supports multiple order type messages, give the message key for
-        * enabling each one in getNavigationBar.  The return type is an associa-
-        * tive array whose keys must exactly match the keys of the array returned
+        * enabling each one in getNavigationBar.  The return type is an associative
+        * array whose keys must exactly match the keys of the array returned
         * by getIndexField(), and whose values are message keys.
         *
         * @return Array
index 2ebef04..38c6f04 100644 (file)
  */
 
 /**
- *  When you have many workers (threads/servers) giving service, and a
+ * When you have many workers (threads/servers) giving service, and a
  * cached item expensive to produce expires, you may get several workers
  * doing the job at the same time.
  *
- *  Given enough requests and the item expiring fast (non-cacheable,
+ * Given enough requests and the item expiring fast (non-cacheable,
  * lots of edits...) that single work can end up unfairly using most (all)
  * of the cpu of the pool. This is also known as 'Michael Jackson effect'
  * since this effect triggered on the english wikipedia on the day Michael
  * Jackson died, the biographical article got hit with several edits per
  * minutes and hundreds of read hits.
  *
- *  The PoolCounter provides semaphore semantics for restricting the number
+ * The PoolCounter provides semaphore semantics for restricting the number
  * of workers that may be concurrently performing such single task.
  *
- *  By default PoolCounter_Stub is used, which provides no locking. You
+ * By default PoolCounter_Stub is used, which provides no locking. You
  * can get a useful one in the PoolCounter extension.
  */
 abstract class PoolCounter {
-
        /* Return codes */
        const LOCKED = 1; /* Lock acquired */
        const RELEASED = 2; /* Lock released */
@@ -52,39 +51,26 @@ abstract class PoolCounter {
        const TIMEOUT = -4; /* Timeout exceeded */
        const LOCK_HELD = -5; /* Cannot acquire another lock while you have one lock held */
 
-       /**
-        * I want to do this task and I need to do it myself.
-        *
-        * @return Locked/Error
-        */
-       abstract function acquireForMe();
-
-       /**
-        * I want to do this task, but if anyone else does it
-        * instead, it's also fine for me. I will read its cached data.
-        *
-        * @return Locked/Done/Error
-        */
-       abstract function acquireForAnyone();
-
-       /**
-        * I have successfully finished my task.
-        * Lets another one grab the lock, and returns the workers
-        * waiting on acquireForAnyone()
-        *
-        * @return Released/NotLocked/Error
-        */
-       abstract function release();
+       /** @var string All workers with the same key share the lock */
+       protected $key;
+       /** @var integer Maximum number of workers doing the task simultaneously */
+       protected $workers;
+       /** @var integer If this number of workers are already working/waiting, fail instead of wait */
+       protected $maxqueue;
+       /** @var float Maximum time in seconds to wait for the lock */
+       protected $timeout;
 
        /**
-        *  $key: All workers with the same key share the lock.
-        *  $workers: It wouldn't be a good idea to have more than this number of
-        * workers doing the task simultaneously.
-        *  $maxqueue: If this number of workers are already working/waiting,
-        * fail instead of wait.
-        *  $timeout: Maximum time in seconds to wait for the lock.
+        * @param array $conf
+        * @param string $type
+        * @param string $key
         */
-       protected $key, $workers, $maxqueue, $timeout;
+       protected function __construct( $conf, $type, $key ) {
+               $this->key = $key;
+               $this->workers = $conf['workers'];
+               $this->maxqueue = $conf['maxqueue'];
+               $this->timeout = $conf['timeout'];
+       }
 
        /**
         * Create a Pool counter. This should only be called from the PoolWorks.
@@ -105,58 +91,74 @@ abstract class PoolCounter {
                return new $class( $conf, $type, $key );
        }
 
-       protected function __construct( $conf, $type, $key ) {
-               $this->key = $key;
-               $this->workers = $conf['workers'];
-               $this->maxqueue = $conf['maxqueue'];
-               $this->timeout = $conf['timeout'];
-       }
-}
-
-class PoolCounter_Stub extends PoolCounter {
-
        /**
-        * @return Status
+        * I want to do this task and I need to do it myself.
+        *
+        * @return Status Value is one of Locked/Error
         */
-       function acquireForMe() {
-               return Status::newGood( PoolCounter::LOCKED );
-       }
+       abstract public function acquireForMe();
 
        /**
-        * @return Status
+        * I want to do this task, but if anyone else does it
+        * instead, it's also fine for me. I will read its cached data.
+        *
+        * @return Status Value is one of Locked/Done/Error
         */
-       function acquireForAnyone() {
-               return Status::newGood( PoolCounter::LOCKED );
-       }
+       abstract public function acquireForAnyone();
 
        /**
-        * @return Status
+        * I have successfully finished my task.
+        * Lets another one grab the lock, and returns the workers
+        * waiting on acquireForAnyone()
+        *
+        * @return Status value is one of Released/NotLocked/Error
         */
-       function release() {
-               return Status::newGood( PoolCounter::RELEASED );
-       }
+       abstract public function release();
+}
 
+class PoolCounter_Stub extends PoolCounter {
        public function __construct() {
                /* No parameters needed */
        }
+
+       public function acquireForMe() {
+               return Status::newGood( PoolCounter::LOCKED );
+       }
+
+       public function acquireForAnyone() {
+               return Status::newGood( PoolCounter::LOCKED );
+       }
+
+       public function release() {
+               return Status::newGood( PoolCounter::RELEASED );
+       }
 }
 
 /**
- * Handy class for dealing with PoolCounters using class members instead of callbacks.
+ * Class for dealing with PoolCounters using class members
  */
 abstract class PoolCounterWork {
        protected $cacheable = false; //Does this override getCachedWork() ?
 
        /**
-        * Actually perform the work, caching it if needed.
+        * @param string $type The type of PoolCounter to use
+        * @param string $key Key that identifies the queue this work is placed on
         */
-       abstract function doWork();
+       public function __construct( $type, $key ) {
+               $this->poolCounter = PoolCounter::factory( $type, $key );
+       }
+
+       /**
+        * Actually perform the work, caching it if needed
+        * @return mixed work result or false
+        */
+       abstract public function doWork();
 
        /**
         * Retrieve the work from cache
         * @return mixed work result or false
         */
-       function getCachedWork() {
+       public function getCachedWork() {
                return false;
        }
 
@@ -165,7 +167,7 @@ abstract class PoolCounterWork {
         * message.
         * @return mixed work result or false
         */
-       function fallback() {
+       public function fallback() {
                return false;
        }
 
@@ -181,6 +183,7 @@ abstract class PoolCounterWork {
         * Log an error
         *
         * @param $status Status
+        * @return void
         */
        function logError( $status ) {
                wfDebugLog( 'poolcounter', $status->getWikiText() );
@@ -191,7 +194,7 @@ abstract class PoolCounterWork {
         * @param $skipcache bool
         * @return bool|mixed
         */
-       function execute( $skipcache = false ) {
+       public function execute( $skipcache = false ) {
                if ( $this->cacheable && !$skipcache ) {
                        $status = $this->poolCounter->acquireForAnyone();
                } else {
@@ -232,15 +235,85 @@ abstract class PoolCounterWork {
                        /* These two cases should never be hit... */
                        case PoolCounter::ERROR:
                        default:
-                               $errors = array( PoolCounter::QUEUE_FULL => 'pool-queuefull', PoolCounter::TIMEOUT => 'pool-timeout' );
+                               $errors = array(
+                                       PoolCounter::QUEUE_FULL => 'pool-queuefull',
+                                       PoolCounter::TIMEOUT => 'pool-timeout' );
 
-                               $status = Status::newFatal( isset( $errors[$status->value] ) ? $errors[$status->value] : 'pool-errorunknown' );
+                               $status = Status::newFatal( isset( $errors[$status->value] )
+                                       ? $errors[$status->value]
+                                       : 'pool-errorunknown' );
                                $this->logError( $status );
                                return $this->error( $status );
                }
        }
+}
 
-       function __construct( $type, $key ) {
-               $this->poolCounter = PoolCounter::factory( $type, $key );
+/**
+ * Convenience class for dealing with PoolCounters using callbacks
+ * @since 1.22
+ */
+class PoolCounterWorkViaCallback extends PoolCounterWork {
+       /** @var callable */
+       protected $doWork;
+       /** @var callable|null */
+       protected $doCachedWork;
+       /** @var callable|null */
+       protected $fallback;
+       /** @var callable|null */
+       protected $error;
+
+       /**
+        * Build a PoolCounterWork class from a type, key, and callback map.
+        *
+        * The callback map must at least have a callback for the 'doWork' method.
+        * Additionally, callbacks can be provided for the 'doCachedWork', 'fallback',
+        * and 'error' methods. Methods without callbacks will be no-ops that return false.
+        * If a 'doCachedWork' callback is provided, then execute() may wait for any prior
+        * process in the pool to finish and reuse its cached result.
+        *
+        * @param string $type
+        * @param string $key
+        * @param array $callbacks Map of callbacks
+        * @throws MWException
+        */
+       public function __construct( $type, $key, array $callbacks ) {
+               parent::__construct( $type, $key );
+               foreach ( array( 'doWork', 'doCachedWork', 'fallback', 'error' ) as $name ) {
+                       if ( isset( $callbacks[$name] ) ) {
+                               if ( !is_callable( $callbacks[$name] ) ) {
+                                       throw new MWException( "Invalid callback provided for '$name' function." );
+                               }
+                               $this->$name = $callbacks[$name];
+                       }
+               }
+               if ( !isset( $this->doWork ) ) {
+                       throw new MWException( "No callback provided for 'doWork' function." );
+               }
+               $this->cacheable = isset( $this->doCachedWork );
+       }
+
+       public function doWork() {
+               return call_user_func_array( $this->doWork, array() );
+       }
+
+       public function getCachedWork() {
+               if ( $this->doCachedWork ) {
+                       return call_user_func_array( $this->doCachedWork, array() );
+               }
+               return false;
+       }
+
+       function fallback() {
+               if ( $this->fallback ) {
+                       return call_user_func_array( $this->fallback, array() );
+               }
+               return false;
+       }
+
+       function error( $status ) {
+               if ( $this->error ) {
+                       return call_user_func_array( $this->error, array( $status ) );
+               }
+               return false;
        }
 }
index c3b5bec..56dba05 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Form to edit user perferences.
+ * Form to edit user preferences.
  *
  * 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
index 8fa0163..d37d9e8 100644 (file)
@@ -32,7 +32,7 @@ class PrefixSearch {
         *
         * @param $search String
         * @param $limit Integer
-        * @param array $namespaces used if query is not explicitely prefixed
+        * @param array $namespaces used if query is not explicitly prefixed
         * @return Array of strings
         */
        public static function titleSearch( $search, $limit, $namespaces = array() ) {
index 1a147b1..b54a9a3 100644 (file)
@@ -60,8 +60,8 @@ function wfGetIP() {
 }
 
 /**
- * Checks if an IP is a trusted proxy providor.
- * Useful to tell if X-Fowarded-For data is possibly bogus.
+ * Checks if an IP is a trusted proxy provider.
+ * Useful to tell if X-Forwarded-For data is possibly bogus.
  * Squid cache servers for the site are whitelisted.
  *
  * @param $ip String
index e41285b..e1f24fa 100644 (file)
@@ -149,7 +149,7 @@ abstract class QueryPage extends SpecialPage {
 
        /**
         * For back-compat, subclasses may return a raw SQL query here, as a string.
-        * This is stronly deprecated; getQueryInfo() should be overridden instead.
+        * This is strongly deprecated; getQueryInfo() should be overridden instead.
         * @throws MWException
         * @return string
         */
@@ -228,7 +228,7 @@ abstract class QueryPage extends SpecialPage {
        }
 
        /**
-        * Sometime we dont want to build rss / atom feeds.
+        * Sometime we don't want to build rss / atom feeds.
         *
         * @return Boolean
         */
index fcad0c9..d7cf995 100644 (file)
@@ -321,7 +321,7 @@ class RecentChange {
        }
 
        /**
-        * Remove newlines, carriage returns and decode html entites
+        * Remove newlines, carriage returns and decode html entities
         * @param $text String
         * @return String
         */
index d3f8958..2b34984 100644 (file)
@@ -383,7 +383,7 @@ class Revision implements IDBAccessObject {
        }
 
        /**
-        * Return the value of a select() page conds array for the paeg table.
+        * Return the value of a select() page conds array for the page table.
         * This will assure that the revision(s) are not orphaned from live pages.
         * @since 1.19
         * @return Array
index 3c5cfa8..d87c540 100644 (file)
@@ -190,7 +190,7 @@ abstract class RevisionItemBase {
        }
 
        /**
-        * Get the date, formatted in user's languae
+        * Get the date, formatted in user's language
         * @return String
         */
        public function formatDate() {
@@ -199,7 +199,7 @@ abstract class RevisionItemBase {
        }
 
        /**
-        * Get the time, formatted in user's languae
+        * Get the time, formatted in user's language
         * @return String
         */
        public function formatTime() {
index 4a3aaf8..2dff081 100644 (file)
@@ -372,7 +372,7 @@ class Sanitizer {
                wfProfileIn( __METHOD__ );
 
                // Base our staticInitialised variable off of the global config state so that if the globals
-               // are changed (like in the secrewed up test system) we will re-initialise the settings.
+               // are changed (like in the screwed up test system) we will re-initialise the settings.
                $globalContext = implode( '-', compact( 'wgHtml5', 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
                if ( !$staticInitialised || $staticInitialised != $globalContext ) {
 
@@ -514,7 +514,7 @@ class Sanitizer {
                                                isset( $htmlpairs[$t] ) ) {
                                                        $badtag = true;
                                                } elseif ( isset( $htmlsingleonly[$t] ) ) {
-                                                       # Hack to force empty tag for uncloseable elements
+                                                       # Hack to force empty tag for unclosable elements
                                                        $brace = '/>';
                                                } elseif ( isset( $htmlsingle[$t] ) ) {
                                                        # Hack to not close $htmlsingle tags
@@ -676,7 +676,7 @@ class Sanitizer {
         *
         * - Discards attributes not on a whitelist for the given element
         * - Unsafe style attributes are discarded
-        * - Invalid id attributes are reencoded
+        * - Invalid id attributes are re-encoded
         *
         * @param $attribs Array
         * @param $element String
@@ -696,7 +696,7 @@ class Sanitizer {
         *
         * - Discards attributes not the given whitelist
         * - Unsafe style attributes are discarded
-        * - Invalid id attributes are reencoded
+        * - Invalid id attributes are re-encoded
         *
         * @param $attribs Array
         * @param array $whitelist list of allowed attribute names
@@ -1077,7 +1077,7 @@ class Sanitizer {
        }
 
        /**
-        * Given HTML input, escape with htmlspecialchars but un-escape entites.
+        * Given HTML input, escape with htmlspecialchars but un-escape entities.
         * This allows (generally harmless) entities like &#160; to survive.
         *
         * @param string $html to escape
@@ -1448,7 +1448,7 @@ class Sanitizer {
                }
 
                if ( $wgHtml5 && $wgAllowMicrodataAttributes ) {
-                       # add HTML5 microdata tages as pecified by http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#the-microdata-model
+                       # add HTML5 microdata tags as specified by http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#the-microdata-model
                        $common = array_merge( $common, array(
                            'itemid', 'itemprop', 'itemref', 'itemscope', 'itemtype'
                        ) );
index 1d5b26b..8ecd874 100644 (file)
@@ -22,6 +22,8 @@
 
 /**
  * Class for asserting that a callback happens when an dummy object leaves scope
+ *
+ * @since 1.21
  */
 class ScopedCallback {
        /** @var Closure */
@@ -34,7 +36,34 @@ class ScopedCallback {
                $this->callback = $callback;
        }
 
+       /**
+        * Trigger a scoped callback and destroy it.
+        * This is the same is just setting it to null.
+        *
+        * @param ScopedCallback $sc
+        */
+       public static function consume( ScopedCallback &$sc = null ) {
+               $sc = null;
+       }
+
+       /**
+        * Destroy a scoped callback without triggering it
+        *
+        * @param ScopedCallback $sc
+        */
+       public static function cancel( ScopedCallback &$sc = null ) {
+               if ( $sc ) {
+                       $sc->callback = null;
+               }
+               $sc = null;
+       }
+
+       /**
+        * Trigger the callback when this leaves scope
+        */
        function __destruct() {
-               call_user_func( $this->callback );
+               if ( $this->callback !== null ) {
+                       call_user_func( $this->callback );
+               }
        }
 }
index 0e4decf..7715484 100644 (file)
@@ -64,7 +64,7 @@ if ( isset( $_GET['setupTestSuite'] ) ) {
        }
 
        $testIncludes = array(); // array containing all the includes needed for this test
-       $testGlobalConfigs = array(); // an array containg all the global configs needed for this test
+       $testGlobalConfigs = array(); // an array containing all the global configs needed for this test
        $testResourceFiles = array(); // an array containing all the resource files needed for this test
        $callback = $wgSeleniumTestConfigs[$setupTestSuiteName];
        call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
@@ -109,7 +109,7 @@ if ( isset( $_COOKIE[$cookieName] ) ) {
        }
 
        $testIncludes = array(); // array containing all the includes needed for this test
-       $testGlobalConfigs = array(); // an array containg all the global configs needed for this test
+       $testGlobalConfigs = array(); // an array containing all the global configs needed for this test
        $testResourceFiles = array(); // an array containing all the resource files needed for this test
        $callback = $wgSeleniumTestConfigs[$testSuiteName];
        call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
index 9023492..0cc1086 100644 (file)
@@ -167,7 +167,7 @@ abstract class Skin extends ContextSource {
                                require_once( "{$wgStyleDirectory}/{$skinName}.php" );
                        }
 
-                       # Check if we got if not failback to default skin
+                       # Check if we got if not fallback to default skin
                        if ( !MWInit::classExists( $className ) ) {
                                # DO NOT die if the class isn't found. This breaks maintenance
                                # scripts and can cause a user account to be unrecoverable
@@ -481,7 +481,7 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Render the array as a serie of links.
+        * Render the array as a series of links.
         * @param array $tree categories tree returned by Title::getParentCategoryTree
         * @return String separated by &gt;, terminate with "\n"
         */
@@ -850,7 +850,7 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Renders a $wgFooterIcons icon acording to the method's arguments
+        * Renders a $wgFooterIcons icon according to the method's arguments
         * @param array $icon The icon to build the html for, see $wgFooterIcons for the format of this array
         * @param bool|String $withImage Whether to use the icon's image or output a text-only footericon
         * @return String HTML
@@ -977,7 +977,7 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Return a fully resolved style path url to images or styles stored in the curent skins's folder.
+        * Return a fully resolved style path url to images or styles stored in the current skins's folder.
         * This method returns a url resolved using the configured skin style path
         * and includes the style version inside of the url.
         * @param string $name The name or path of a skin resource file
index 299df67..59e1ccf 100644 (file)
@@ -262,7 +262,7 @@ class SkinTemplate extends Skin {
                $tpl->set( 'helppage', $this->msg( 'helppage' )->text() );
                */
                $tpl->set( 'searchaction', $this->escapeSearchLink() );
-               $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBKey() );
+               $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBkey() );
                $tpl->set( 'search', trim( $request->getVal( 'search' ) ) );
                $tpl->setRef( 'stylepath', $wgStylePath );
                $tpl->setRef( 'articlepath', $wgArticlePath );
@@ -526,7 +526,7 @@ class SkinTemplate extends Skin {
        }
 
        /**
-        * Output a boolean indiciating if buildPersonalUrls should output separate
+        * Output a boolean indicating if buildPersonalUrls should output separate
         * login and create account links or output a combined link
         * By default we simply return a global config setting that affects most skins
         * This is setup as a method so that like with $wgLogo and getLogo() a skin
@@ -779,7 +779,7 @@ class SkinTemplate extends Skin {
         * variants: Used to list the language variants for the page
         *
         * Each section's value is a key/value array of links for that section.
-        * The links themseves have these common keys:
+        * The links themselves have these common keys:
         * - class: The css classes to apply to the tab
         * - text: The text to display on the tab
         * - href: The href for the tab to point to
@@ -1073,8 +1073,8 @@ class SkinTemplate extends Skin {
                # We don't want to give the watch tab an accesskey if the
                # page is being edited, because that conflicts with the
                # accesskey on the watch checkbox.  We also don't want to
-               # give the edit tab an accesskey, because that's fairly su-
-               # perfluous and conflicts with an accesskey (Ctrl-E) often
+               # give the edit tab an accesskey, because that's fairly
+               # superfluous and conflicts with an accesskey (Ctrl-E) often
                # used for editing in Safari.
                if ( in_array( $action, array( 'edit', 'submit' ) ) ) {
                        if ( isset( $content_navigation['views']['edit'] ) ) {
@@ -1419,7 +1419,7 @@ abstract class BaseTemplate extends QuickTemplate {
        /**
         * Create an array of common toolbox items from the data in the quicktemplate
         * stored by SkinTemplate.
-        * The resulting array is built acording to a format intended to be passed
+        * The resulting array is built according to a format intended to be passed
         * through makeListItem to generate the html.
         * @return array
         */
@@ -1483,7 +1483,7 @@ abstract class BaseTemplate extends QuickTemplate {
        /**
         * Create an array of personal tools items from the data in the quicktemplate
         * stored by SkinTemplate.
-        * The resulting array is built acording to a format intended to be passed
+        * The resulting array is built according to a format intended to be passed
         * through makeListItem to generate the html.
         * This is in reality the same list as already stored in personal_urls
         * however it is reformatted so that you can just pass the individual items
index 5354da6..c32738f 100644 (file)
@@ -670,7 +670,7 @@ class SpecialPage {
        /**
         * Outputs a summary message on top of special pages
         * Per default the message key is the canonical name of the special page
-        * May be overriden, i.e. by extensions to stick with the naming conventions
+        * May be overridden, i.e. by extensions to stick with the naming conventions
         * for message keys: 'extensionname-xxx'
         *
         * @param string $summaryMessageKey message key of the summary
@@ -827,7 +827,7 @@ class SpecialPage {
                // RequestContext passes context to wfMessage, and the language is set from
                // the context, but setting the language for Message class removes the
                // interface message status, which breaks for example usernameless gender
-               // invokations. Restore the flag when not including special page in content.
+               // invocations. Restore the flag when not including special page in content.
                if ( $this->including() ) {
                        $message->setInterfaceMessageFlag( false );
                }
@@ -864,7 +864,7 @@ class SpecialPage {
                $name = $this->getName();
                $group = '-';
 
-               // Allow overridding the group from the wiki side
+               // Allow overbidding the group from the wiki side
                $msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
                if ( !$msg->isBlank() ) {
                        $group = $msg->text();
@@ -873,7 +873,7 @@ class SpecialPage {
                        $group = $this->getGroupName();
 
                        // Group '-' is used as default to have the chance to determine,
-                       // if the special pages overriddes this method,
+                       // if the special pages overrides this method,
                        // if not overridden, $wgSpecialPageGroups is checked for b/c
                        if ( $group === '-' && isset( $wgSpecialPageGroups[$name] ) ) {
                                $group = $wgSpecialPageGroups[$name];
@@ -1082,7 +1082,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
        // Query parameters that can be passed through redirects
        protected $mAllowedRedirectParams = array();
 
-       // Query parameteres added by redirects
+       // Query parameters added by redirects
        protected $mAddedRedirectParams = array();
 
        public function execute( $par ) {
@@ -1191,7 +1191,7 @@ class SpecialCreateAccount extends SpecialRedirectToSpecial {
 }
 /**
  * SpecialMypage, SpecialMytalk and SpecialMycontributions special pages
- * are used to get user independant links pointing to the user page, talk
+ * are used to get user independent links pointing to the user page, talk
  * page and list of contributions.
  * This can let us cache a single copy of any generated content for all
  * users.
index 719763c..7368ab7 100644 (file)
@@ -222,7 +222,7 @@ class SpecialPageFactory {
        /**
         * Initialise and return the list of special page aliases.  Returns an object with
         * properties which can be accessed $obj->pagename - each property is an array of
-        * aliases; the first in the array is the cannonical alias.  All registered special
+        * aliases; the first in the array is the canonical alias.  All registered special
         * pages are guaranteed to have a property entry, and for that property array to
         * contain at least one entry (English fallbacks will be added if necessary).
         * @return Object
index c01cdd0..79dcdc5 100644 (file)
@@ -48,7 +48,7 @@ abstract class SqlDataUpdate extends DataUpdate {
        public function __construct( $withTransaction = true ) {
                global $wgAntiLockFlags;
 
-               parent::__construct( );
+               parent::__construct();
 
                if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
                        $this->mOptions = array();
index 8203b40..f4c98f1 100644 (file)
@@ -49,7 +49,7 @@ class StringUtils {
        static function isUtf8( $value, $disableMbstring = false ) {
 
                if ( preg_match( '/[\x80-\xff]/', $value ) === 0 ) {
-                       # no high bit set, this is pure ASCII which is defacto
+                       # no high bit set, this is pure ASCII which is de facto
                        # valid UTF-8
                        return true;
                }
@@ -405,7 +405,7 @@ class ReplacementArray {
        /**
         * Set an element of the replacement array
         * @param $from string
-        * @param $to stromg
+        * @param $to string
         */
        function setPair( $from, $to ) {
                $this->data[$from] = $to;
index 77c242f..f0a3574 100644 (file)
@@ -43,7 +43,7 @@ class StubObject {
         *
         * @param string $global name of the global variable.
         * @param string $class name of the class of the real object.
-        * @param array $params parameters to pass to contructor of the real
+        * @param array $params parameters to pass to constructor of the real
         *               object.
         */
        function __construct( $global = null, $class = null, $params = array() ) {
@@ -53,7 +53,7 @@ class StubObject {
        }
 
        /**
-        * Returns a bool value whetever $obj is a stub object. Can be used to break
+        * Returns a bool value whenever $obj is a stub object. Can be used to break
         * a infinite loop when unstubbing an object.
         *
         * @param $obj Object to check.
@@ -106,7 +106,7 @@ class StubObject {
         * properties, e.g. eval.php
         *
         * @param string $name name of the method called in this object.
-        * @param $level Integer: level to go in the stact trace to get the function
+        * @param $level Integer: level to go in the stack trace to get the function
         *               who called this function.
         * @throws MWException
         */
index 236afbd..974ea91 100644 (file)
@@ -117,8 +117,8 @@ class Title {
         *
         * @param string $text the link text; spaces, prefixes, and an
         *   initial ':' indicating the main namespace are accepted.
-        * @param int $defaultNamespace the namespace to use if none is speci-
-        *   fied by a prefix.  If you want to force a specific namespace even if
+        * @param int $defaultNamespace the namespace to use if none is specified
+        *   by a prefix.  If you want to force a specific namespace even if
         *   $text might begin with a namespace prefix, use makeTitle() or
         *   makeTitleSafe().
         * @throws MWException
@@ -680,7 +680,6 @@ class Title {
        public function getContentModel() {
                if ( !$this->mContentModel ) {
                        $linkCache = LinkCache::singleton();
-                       $linkCache->addLinkObj( $this );
                        $this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
                }
 
@@ -869,7 +868,7 @@ class Title {
         * is either NS_USER or NS_USER_TALK since both of them have NS_USER
         * as their subject namespace.
         *
-        * This is MUCH simpler than individually testing for equivilance
+        * This is MUCH simpler than individually testing for equivalence
         * against both NS_USER and NS_USER_TALK, and is also forward compatible.
         * @since 1.19
         * @param $ns int
@@ -911,7 +910,7 @@ class Title {
         * Is this the mainpage?
         * @note Title::newFromText seems to be sufficiently optimized by the title
         * cache that we don't need to over-optimize by doing direct comparisons and
-        * acidentally creating new bugs where $title->equals( Title::newFromText() )
+        * accidentally creating new bugs where $title->equals( Title::newFromText() )
         * ends up reporting something differently than $title->isMainPage();
         *
         * @since 1.18
@@ -970,7 +969,7 @@ class Title {
                                || $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) );
 
                #NOTE: this hook is also called in ContentHandler::getDefaultModel. It's called here again to make sure
-               #      hook funktions can force this method to return true even outside the mediawiki namespace.
+               #      hook functions can force this method to return true even outside the mediawiki namespace.
 
                wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ) );
 
@@ -1331,7 +1330,7 @@ class Title {
         * second argument named variant. This was deprecated in favor
         * of passing an array of option with a "variant" key
         * Once $query2 is removed for good, this helper can be dropped
-        * andthe wfArrayToCgi moved to getLocalURL();
+        * and the wfArrayToCgi moved to getLocalURL();
         *
         * @since 1.19 (r105919)
         * @param $query
@@ -2020,7 +2019,7 @@ class Title {
        }
 
        /**
-        * Check that the user isn't blocked from editting.
+        * Check that the user isn't blocked from editing.
         *
         * @param string $action the action to check
         * @param $user User to check
@@ -2140,7 +2139,7 @@ class Title {
                        # Time to check the whitelist
                        # Only do these checks is there's something to check against
                        $name = $this->getPrefixedText();
-                       $dbName = $this->getPrefixedDBKey();
+                       $dbName = $this->getPrefixedDBkey();
 
                        // Check for explicit whitelisting with and without underscores
                        if ( in_array( $name, $wgWhitelistRead, true ) || in_array( $dbName, $wgWhitelistRead, true ) ) {
@@ -2948,21 +2947,22 @@ class Title {
         * @return Bool
         */
        public function isRedirect( $flags = 0 ) {
-               if ( !( $flags & Title::GAID_FOR_UPDATE ) && !is_null( $this->mRedirect ) ) {
+               if ( !is_null( $this->mRedirect ) ) {
                        return $this->mRedirect;
                }
-
+               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->getArticleID( $flags ) ) {
                        return $this->mRedirect = false;
                }
 
                $linkCache = LinkCache::singleton();
-               $linkCache->addLinkObj( $this );
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'redirect' );
-
                if ( $cached === null ) {
-                       // Should not happen
-                       throw new MWException( "LinkCache doesn't know redirect status of this title: " . $this->getPrefixedDBkey() );
+                       // TODO: check the assumption that the cache actually knows about this title
+                       // and handle this, such as get the title from the database.
+                       // See https://bugzilla.wikimedia.org/show_bug.cgi?id=37209
+                       wfDebug( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+                       wfDebug( wfBacktrace() );
                }
 
                $this->mRedirect = (bool)$cached;
@@ -2978,21 +2978,20 @@ class Title {
         * @return Int
         */
        public function getLength( $flags = 0 ) {
-               if ( !( $flags & Title::GAID_FOR_UPDATE ) && $this->mLength != -1 ) {
+               if ( $this->mLength != -1 ) {
                        return $this->mLength;
                }
-
+               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->getArticleID( $flags ) ) {
                        return $this->mLength = 0;
                }
-
                $linkCache = LinkCache::singleton();
-               $linkCache->addLinkObj( $this );
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'length' );
-
-               if ( $cached === null ) {
-                       // Should not happen
-                       throw new MWException( "LinkCache doesn't know redirect status of this title: " . $this->getPrefixedDBkey() );
+               if ( $cached === null ) { # check the assumption that the cache actually knows about this title
+                       # XXX: this does apparently happen, see https://bugzilla.wikimedia.org/show_bug.cgi?id=37209
+                       #      as a stop gap, perhaps log this, but don't throw an exception?
+                       wfDebug( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+                       wfDebug( wfBacktrace() );
                }
 
                $this->mLength = intval( $cached );
@@ -3011,18 +3010,17 @@ class Title {
                if ( !( $flags & Title::GAID_FOR_UPDATE ) && $this->mLatestID !== false ) {
                        return intval( $this->mLatestID );
                }
-
+               # Calling getArticleID() loads the field from cache as needed
                if ( !$this->getArticleID( $flags ) ) {
                        return $this->mLatestID = 0;
                }
-
                $linkCache = LinkCache::singleton();
                $linkCache->addLinkObj( $this );
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'revision' );
-
-               if ( $cached === null ) {
-                       // Should not happen
-                       throw new MWException( "LinkCache doesn't know latest revision ID of this title: " . $this->getPrefixedDBkey() );
+               if ( $cached === null ) { # check the assumption that the cache actually knows about this title
+                       # XXX: this does apparently happen, see https://bugzilla.wikimedia.org/show_bug.cgi?id=37209
+                       #      as a stop gap, perhaps log this, but don't throw an exception?
+                       throw new MWException( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
                }
 
                $this->mLatestID = intval( $cached );
@@ -3838,6 +3836,7 @@ class Title {
 
                $this->resetArticleID( 0 );
                $nt->resetArticleID( $oldid );
+               $newpage->loadPageData( WikiPage::READ_LOCKING ); // bug 46397
 
                $newpage->updateRevisionOn( $dbw, $nullRevision );
 
@@ -3855,6 +3854,7 @@ class Title {
                        WikiPage::onArticleDelete( $this );
                } else {
                        $redirectArticle = WikiPage::factory( $this );
+                       $redirectArticle->loadFromRow( false, WikiPage::READ_LOCKING ); // bug 46397
                        $newid = $redirectArticle->insertOn( $dbw );
                        if ( $newid ) { // sanity
                                $redirectRevision = new Revision( array(
@@ -4497,7 +4497,7 @@ class Title {
        /**
         * Updates page_touched for this page; called from LinksUpdate.php
         *
-        * @return Bool true if the update succeded
+        * @return Bool true if the update succeeded
         */
        public function invalidateCache() {
                global $wgMemc;
@@ -4598,7 +4598,7 @@ class Title {
                global $wgContLang;
                // Gets the subject namespace if this title
                $namespace = MWNamespace::getSubject( $this->getNamespace() );
-               // Checks if cononical namespace name exists for namespace
+               // Checks if canonical namespace name exists for namespace
                if ( MWNamespace::exists( $this->getNamespace() ) ) {
                        // Uses canonical namespace name
                        $namespaceKey = MWNamespace::getCanonicalName( $namespace );
@@ -4664,7 +4664,7 @@ class Title {
        public function isValidRedirectTarget() {
                global $wgInvalidRedirectTargets;
 
-               // invalid redirect targets are stored in a global array, but explicity disallow Userlogout here
+               // invalid redirect targets are stored in a global array, but explicitly disallow Userlogout here
                if ( $this->isSpecial( 'Userlogout' ) ) {
                        return false;
                }
index 5cdec16..90fb861 100644 (file)
@@ -3,8 +3,8 @@
  * Classes to walk into a list of Title objects.
  *
  * Note: this entire file is a byte-for-byte copy of UserArray.php with
- * s/User/Title/.  If anyone can figure out how to do this nicely with inheri-
- * tance or something, please do so.
+ * s/User/Title/.  If anyone can figure out how to do this nicely with
+ * inheritance or something, please do so.
  *
  * 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
index 816c3b8..b042d8c 100644 (file)
@@ -39,7 +39,7 @@ class UIDGenerator {
        /** @var Array */
        protected $fileHandles = array(); // cache file handles
 
-       const QUICK_RAND = 1; // get randomness from fast and unsecure sources
+       const QUICK_RAND = 1; // get randomness from fast and insecure sources
 
        protected function __construct() {
                $idFile = wfTempDir() . '/mw-' . __CLASS__ . '-UID-nodeid';
@@ -152,7 +152,7 @@ class UIDGenerator {
        }
 
        /**
-        * @param array $info (UIDGenerator::milltime(), counter, clock sequence)
+        * @param array $info (UIDGenerator::millitime(), counter, clock sequence)
         * @return string 128 bits
         */
        protected function getTimestampedID128( array $info ) {
index 047ba25..6b7348a 100644 (file)
@@ -437,8 +437,7 @@ class User {
         * Create a new user object using data from session or cookies. If the
         * login credentials are invalid, the result is an anonymous user.
         *
-        * @param $request WebRequest object to use; $wgRequest will be used if
-        *        ommited.
+        * @param $request WebRequest object to use; $wgRequest will be used if omitted.
         * @return User object
         */
        public static function newFromSession( WebRequest $request = null ) {
@@ -554,7 +553,7 @@ class User {
         * Is the input a valid username?
         *
         * Checks if the input is a valid username, we don't want an empty string,
-        * an IP address, anything that containins slashes (would mess up subpages),
+        * an IP address, anything that contains slashes (would mess up subpages),
         * is longer than the maximum allowed username size or doesn't begin with
         * a capital letter.
         *
@@ -1631,7 +1630,7 @@ class User {
        /**
         * Check if user is blocked on all wikis.
         * Do not use for actual edit permission checks!
-        * This is intented for quick UI checks.
+        * This is intended for quick UI checks.
         *
         * @param string $ip IP address, uses current client if none given
         * @return Bool True if blocked, false otherwise
@@ -1737,7 +1736,7 @@ class User {
         * address for an anonymous user to something other than the current
         * remote IP.
         *
-        * @note User::newFromName() has rougly the same function, when the named user
+        * @note User::newFromName() has roughly the same function, when the named user
         * does not exist.
         * @param string $str New user name to set
         */
@@ -3511,7 +3510,7 @@ class User {
         * Generate a looking random token for various uses.
         *
         * @return String The new random token
-        * @deprecated since 1.20; Use MWCryptRand for secure purposes or wfRandomString for pesudo-randomness
+        * @deprecated since 1.20; Use MWCryptRand for secure purposes or wfRandomString for pseudo-randomness
         */
        public static function generateToken() {
                return MWCryptRand::generateHex( 32 );
index d302e89..6eb9917 100644 (file)
@@ -255,7 +255,7 @@ class UserMailer {
 
                if ( is_array( $body ) ) {
                        // we are sending a multipart message
-                       wfDebug( "Assembling mulitpart mime email\n" );
+                       wfDebug( "Assembling multipart mime email\n" );
                        if ( !stream_resolve_include_path( 'Mail/mime.php' ) ) {
                                wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" );
                        }
@@ -489,7 +489,7 @@ class EmailNotification {
                        return;
                }
 
-               // Build a list of users to notfiy
+               // Build a list of users to notify
                $watchers = array();
                if ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) {
                        $dbw = wfGetDB( DB_MASTER );
index ae465e6..98007ef 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Deal with importing all those nasssty globals and things
+ * Deal with importing all those nasty globals and things
  *
  * Copyright © 2003 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
@@ -503,7 +503,7 @@ class WebRequest {
         */
        public function getCheck( $name ) {
                # Checkboxes and buttons are only present when clicked
-               # Presence connotes truth, abscense false
+               # Presence connotes truth, absence false
                return $this->getVal( $name, null ) !== null;
        }
 
@@ -1133,21 +1133,6 @@ HTML;
        public function setIP( $ip ) {
                $this->ip = $ip;
        }
-
-       /**
-        * Export the resolved user IP, HTTP headers, and session ID.
-        * The result will be reasonably sized to allow for serialization.
-        *
-        * @return Array
-        * @since 1.21
-        */
-       public function exportUserSession() {
-               return array(
-                       'ip'        => $this->getIP(),
-                       'headers'   => $this->getAllHeaders(),
-                       'sessionId' => session_id()
-               );
-       }
 }
 
 /**
index 48767d0..e6f3135 100644 (file)
@@ -57,7 +57,7 @@ if ( ini_get( 'register_globals' ) ) {
        }
 }
 
-# bug 15461: Make IE8 turn off content sniffing. Everbody else should ignore this
+# bug 15461: Make IE8 turn off content sniffing. Everybody else should ignore this
 # We're adding it here so that it's *always* set, even for alternate entry
 # points and when $wgOut gets disabled or overridden.
 header( 'X-Content-Type-Options: nosniff' );
index 6e1795d..f8f699c 100644 (file)
@@ -247,7 +247,7 @@ class MediaWiki {
                // Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
                } elseif ( $request->getVal( 'action', 'view' ) == 'view' && !$request->wasPosted()
                        && ( $request->getVal( 'title' ) === null ||
-                               $title->getPrefixedDBKey() != $request->getVal( 'title' ) )
+                               $title->getPrefixedDBkey() != $request->getVal( 'title' ) )
                        && !count( $request->getValueNames( array( 'action', 'title' ) ) )
                        && wfRunHooks( 'TestCanonicalRedirect', array( $request, $title, $output ) ) )
                {
index fa23072..5e603d3 100644 (file)
@@ -107,7 +107,7 @@ class WikiFilePage extends WikiPage {
        /**
         * @return bool
         */
-       public function isRedirect( ) {
+       public function isRedirect() {
                $this->loadFile();
                if ( $this->mFile->isLocal() ) {
                        return parent::isRedirect();
index 893954f..8d9d740 100644 (file)
@@ -345,7 +345,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                } elseif ( $from === self::READ_NORMAL ) {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
-                       // Use a "last rev inserted" timestamp key to dimish the issue of slave lag.
+                       // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
                        // Note that DB also stores the master position in the session and checks it.
                        $touched = $this->getCachedLastEditTime();
                        if ( $touched ) { // key set
@@ -460,7 +460,7 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @return bool
         */
-       public function isRedirect( ) {
+       public function isRedirect() {
                $content = $this->getContent();
                if ( !$content ) return false;
 
@@ -821,7 +821,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $content = $this->getContent();
                }
 
-               if ( !$content || $content->isRedirect( ) ) {
+               if ( !$content || $content->isRedirect() ) {
                        return false;
                }
 
@@ -2273,7 +2273,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $changed = true;
                }
 
-               // If nothing's changed, do nothing
+               // If nothing has changed, do nothing
                if ( !$changed ) {
                        return Status::newGood();
                }
@@ -2663,7 +2663,7 @@ class WikiPage implements Page, IDBAccessObject {
         * performs permissions checks on $user, then calls commitRollback()
         * to do the dirty work
         *
-        * @todo: seperate the business/permission stuff out from backend code
+        * @todo: separate the business/permission stuff out from backend code
         *
         * @param string $fromP Name of the user whose edits to rollback.
         * @param string $summary Custom summary. Set to default summary if empty.
index 032493d..ee19dee 100644 (file)
@@ -359,7 +359,7 @@ class Xml {
         * Convenience function to build an HTML form label
         * @param string $label text of the label
         * @param $id
-        * @param array $attribs an attribute array.  This will usuall be
+        * @param array $attribs an attribute array.  This will usually be
         *     the same array as is passed to the corresponding input element,
         *     so this function will cherry-pick appropriate attributes to
         *     apply to the label as well; only class and title are applied.
@@ -460,7 +460,7 @@ class Xml {
 
        /**
         * Convenience function to build an HTML drop-down list item.
-        * @param string $text text for this item
+        * @param string $text text for this item. Will be HTML escaped
         * @param string $value form submission value; if empty, use text
         * @param $selected boolean: if true, will be the default selected item
         * @param array $attribs optional additional HTML attributes
index b9c3d6b..fd03ec4 100644 (file)
@@ -50,7 +50,7 @@ class ZhClient {
        }
 
        /**
-        * Establish conncetion
+        * Establish connection
         *
         * @access private
         *
index a24c01b..646180d 100644 (file)
@@ -538,7 +538,7 @@ class ZipDirectoryReader {
         * of length self::SEGSIZE. The result is cached. This is a helper function
         * for getBlock().
         *
-        * If there are not enough bytes in the file to satsify the request, the
+        * If there are not enough bytes in the file to satisfy the request, the
         * return value will be truncated. If a request is made for a segment beyond
         * the end of the file, an empty string will be returned.
         * @return string
index d21f9ae..bfdda7b 100644 (file)
@@ -1,22 +1,8 @@
 <?php
-
 /**
  * Abstract action class with scaffolding for caching HTML and other values
  * in a single blob.
  *
- * Before using any of the caching functionality, call startCache.
- * After the last call to either getCachedValue or addCachedHTML, call saveCache.
- *
- * To get a cached value or compute it, use getCachedValue like this:
- * $this->getCachedValue( $callback );
- *
- * To add HTML that should be cached, use addCachedHTML like this:
- * $this->addCachedHTML( $callback );
- *
- * The callback function is only called when needed, so do all your expensive
- * computations here. This function should returns the HTML to be cached.
- * It should not add anything to the PageOutput object!
- *
  * 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
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @ingroup Action
+ * @ingroup Actions
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  * @since 1.20
  */
+
+/**
+ * Abstract action class with scaffolding for caching HTML and other values
+ * in a single blob.
+ *
+ * Before using any of the caching functionality, call startCache.
+ * After the last call to either getCachedValue or addCachedHTML, call saveCache.
+ *
+ * To get a cached value or compute it, use getCachedValue like this:
+ * $this->getCachedValue( $callback );
+ *
+ * To add HTML that should be cached, use addCachedHTML like this:
+ * $this->addCachedHTML( $callback );
+ *
+ * The callback function is only called when needed, so do all your expensive
+ * computations here. This function should returns the HTML to be cached.
+ * It should not add anything to the PageOutput object!
+ *
+ * @ingroup Actions
+ */
 abstract class CachedAction extends FormlessAction implements ICacheHelper {
 
        /**
index a63e992..4d3c41b 100644 (file)
@@ -23,6 +23,9 @@
  * @author <evan@wikitravel.org>
  */
 
+/**
+ * @ingroup Actions
+ */
 class CreditsAction extends FormlessAction {
 
        public function getName() {
index 3cb24e6..db7123d 100644 (file)
  * @author Timo Tijhof
  */
 
+/**
+ * Handle page deletion
+ *
+ * This is a wrapper that will call Article::delete().
+ *
+ * @ingroup Actions
+ */
 class DeleteAction extends FormlessAction {
 
        public function getName() {
index eb261fc..dec3d84 100644 (file)
  * @author Timo Tijhof
  */
 
+/**
+ * Page edition handler
+ *
+ * This is a wrapper that will call the EditPage class, or ExternalEdit
+ * if $wgUseExternalEditor is set to true and requested by the user.
+ *
+ * @ingroup Actions
+ */
 class EditAction extends FormlessAction {
 
        public function getName() {
@@ -56,6 +64,13 @@ class EditAction extends FormlessAction {
 
 }
 
+/**
+ * Edit submission handler
+ *
+ * This is the same as EditAction; except that it sets the session cookie.
+ *
+ * @ingroup Actions
+ */
 class SubmitAction extends EditAction {
 
        public function getName() {
index 1dd8645..f2e61a5 100644 (file)
@@ -20,6 +20,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
+ * @ingroup Actions
  */
 
 /**
@@ -30,6 +31,7 @@
  * Construct it by passing in an Article, and call $h->history() to print the
  * history.
  *
+ * @ingroup Actions
  */
 class HistoryAction extends FormlessAction {
        const DIR_PREV = 0;
@@ -174,7 +176,7 @@ class HistoryAction extends FormlessAction {
                                false,
                                array( 'id' => 'mw-history-search' )
                        ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBKey() ) . "\n" .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
                        Html::hidden( 'action', 'history' ) . "\n" .
                        Xml::dateMenu( ( $year == null ? date( "Y" ) : $year ), $month ) . '&#160;' .
                        ( $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '' ) .
@@ -183,7 +185,7 @@ class HistoryAction extends FormlessAction {
                        '</fieldset></form>'
                );
 
-               wfRunHooks( 'PageHistoryBeforeList', array( &$this->page ) );
+               wfRunHooks( 'PageHistoryBeforeList', array( &$this->page, $this->getContext() ) );
 
                // Create and output the list.
                $pager = new HistoryPager( $this, $year, $month, $tagFilter, $conds );
@@ -331,6 +333,7 @@ class HistoryAction extends FormlessAction {
 
 /**
  * @ingroup Pager
+ * @ingroup Actions
  */
 class HistoryPager extends ReverseChronologicalPager {
        public $lastRow = false, $counter, $historyPage, $buttons, $conds;
@@ -440,7 +443,7 @@ class HistoryPager extends ReverseChronologicalPager {
                $this->getOutput()->wrapWikiMsg( "<div class='mw-history-legend'>\n$1\n</div>", 'histlegend' );
                $s = Html::openElement( 'form', array( 'action' => $wgScript,
                        'id' => 'mw-history-compare' ) ) . "\n";
-               $s .= Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) . "\n";
+               $s .= Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n";
                $s .= Html::hidden( 'action', 'historysubmit' ) . "\n";
 
                // Button container stored in $this->buttons for re-use in getEndBody()
@@ -580,7 +583,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        // Otherwise, show the link...
                        } else {
                                $query = array( 'type' => 'revision',
-                                       'target' => $this->getTitle()->getPrefixedDbkey(), 'ids' => $rev->getId() );
+                                       'target' => $this->getTitle()->getPrefixedDBkey(), 'ids' => $rev->getId() );
                                $del .= Linker::revDeleteLink( $query,
                                        $rev->isDeleted( Revision::DELETED_RESTRICTED ), false );
                        }
@@ -654,6 +657,8 @@ class HistoryPager extends ReverseChronologicalPager {
                                $tools[] = "<span class=\"mw-history-undo\">{$undolink}</span>";
                        }
                }
+               // Allow extension to add their own links here
+               wfRunHooks( 'HistoryRevisionTools', array( $rev, &$tools ) );
 
                if ( $tools ) {
                        $s2 .= ' '. $this->msg( 'parentheses' )->rawParams( $lang->pipeList( $tools ) )->escaped();
index 317e59d..1e312d7 100644 (file)
  * @ingroup Actions
  */
 
+/**
+ * Displays information about a page.
+ *
+ * @ingroup Actions
+ */
 class InfoAction extends FormlessAction {
        /**
         * Returns the name of the action this object responds to.
index ae9223f..ff6cf13 100644 (file)
  * @ingroup Actions
  */
 
+/**
+ * Mark a revision as patrolled on a page
+ *
+ * @ingroup Actions
+ */
 class MarkpatrolledAction extends FormlessAction {
 
        public function getName() {
index 1b55a3c..ec6648e 100644 (file)
  * @author Timo Tijhof
  */
 
+/**
+ * Handle page protection
+ *
+ * This is a wrapper that will call Article::protect().
+ *
+ * @ingroup Actions
+ */
 class ProtectAction extends FormlessAction {
 
        public function getName() {
@@ -41,6 +48,13 @@ class ProtectAction extends FormlessAction {
 
 }
 
+/**
+ * Handle page unprotection
+ *
+ * This is a wrapper that will call Article::unprotect().
+ *
+ * @ingroup Actions
+ */
 class UnprotectAction extends ProtectAction {
 
        public function getName() {
index 4c5171c..00bb961 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 /**
- * Formats credits for articles
- *
- * Copyright 2004, Evan Prodromou <evan@wikitravel.org>.
+ * User-requested page cache purging.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  * @file
  * @ingroup Actions
- * @author <evan@wikitravel.org>
  */
 
+/**
+ * User-requested page cache purging.
+ *
+ * For users with 'purge', this will directly trigger the cache purging and
+ * for users without that right, it will show a confirmation form.
+ *
+ * @ingroup Actions
+ */
 class PurgeAction extends FormAction {
 
        private $redirectParams;
index da6ba1e..d1d457c 100644 (file)
@@ -29,6 +29,8 @@
 /**
  * A simple method to retrieve the plain source of an article,
  * using "action=raw" in the GET request string.
+ *
+ * @ingroup Actions
  */
 class RawAction extends FormlessAction {
        private $mGen;
index 23cae6a..3d244fb 100644 (file)
  * @author Timo Tijhof
  */
 
+/**
+ * Handle action=render
+ *
+ * This is a wrapper that will call Article::render().
+ *
+ * @ingroup Actions
+ */
 class RenderAction extends FormlessAction {
 
        public function getName() {
index 14da2fc..2949fa9 100644 (file)
  * @author Alexandre Emsenhuber
  */
 
+/**
+ * An action that just pass the request to Special:RevisionDelete
+ *
+ * @ingroup Actions
+ */
 class RevisiondeleteAction extends FormlessAction {
 
        public function getName() {
index af5a674..e227197 100644 (file)
  * @author Timo Tijhof
  */
 
+/**
+ * An action that views article content
+ *
+ * This is a wrapper that will call Article::render().
+ *
+ * @ingroup Actions
+ */
 class ViewAction extends FormlessAction {
 
        public function getName() {
index e263645..ae5f76c 100644 (file)
  * @ingroup Actions
  */
 
+/**
+ * Page addition to a user's watchlist
+ *
+ * @ingroup Actions
+ */
 class WatchAction extends FormAction {
 
        public function getName() {
@@ -148,6 +153,11 @@ class WatchAction extends FormAction {
        }
 }
 
+/**
+ * Page removal from a user's watchlist
+ *
+ * @ingroup Actions
+ */
 class UnwatchAction extends WatchAction {
 
        public function getName() {
index ee6f2c0..d2d50ae 100644 (file)
@@ -822,7 +822,7 @@ abstract class ApiBase extends ContextSource {
         *      If not set will magically default to either watchdefault or watchcreations
         * @return bool
         */
-       protected function getWatchlistValue ( $watchlist, $titleObj, $userOption = null ) {
+       protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
 
                $userWatching = $this->getUser()->isWatched( $titleObj );
 
@@ -1568,7 +1568,7 @@ abstract class ApiBase extends ContextSource {
                $params = $this->getFinalParams();
                if ( $params ) {
                        foreach ( $params as $paramName => $paramSettings ) {
-                               if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] ) ) {
+                               if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] ) && $paramSettings[ApiBase::PARAM_REQUIRED] ) {
                                        $ret[] = array( 'missingparam', $paramName );
                                }
                        }
index 3f059d6..55c60cc 100644 (file)
  */
 class ApiCreateAccount extends ApiBase {
        public function execute() {
+
+               // $loginForm->addNewaccountInternal will throw exceptions
+               // if wiki is read only (already handled by api), user is blocked or does not have rights.
+               // Use userCan in order to hit GlobalBlock checks (according to Special:userlogin)
+               $loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
+               if ( !$loginTitle->userCan( 'createaccount', $this->getUser() ) ) {
+                       $this->dieUsage( 'You do not have the right to create a new account', 'permdenied-createaccount' );
+               }
+               if ( $this->getUser()->isBlockedFromCreateAccount() ) {
+                       $this->dieUsage( 'You cannot create a new account because you are blocked', 'blocked' );
+               }
+
                $params = $this->extractRequestParams();
 
                $result = array();
@@ -230,16 +242,19 @@ class ApiCreateAccount extends ApiBase {
        }
 
        public function getPossibleErrors() {
+               // Note the following errors aren't possible and don't need to be listed:
+               // sessionfailure, nocookiesfornew, badretype
                $localErrors = array(
-                       'wrongpassword',
+                       'wrongpassword', // Actually caused by wrong domain field. Riddle me that...
                        'sorbs_create_account_reason',
                        'noname',
                        'userexists',
-                       'password-name-match',
-                       'password-login-forbidden',
+                       'password-name-match', // from User::getPasswordValidity
+                       'password-login-forbidden', // from User::getPasswordValidity
                        'noemailtitle',
                        'invalidemailaddress',
-                       'externaldberror'
+                       'externaldberror',
+                       'acct_creation_throttle_hit',
                );
 
                $errors = parent::getPossibleErrors();
@@ -248,6 +263,19 @@ class ApiCreateAccount extends ApiBase {
                        $errors[] = array( 'code' => $error, 'info' => wfMessage( $error )->parse() );
                }
 
+               $errors[] = array(
+                       'code' => 'permdenied-createaccount',
+                       'info' => 'You do not have the right to create a new account'
+               );
+               $errors[] = array(
+                       'code' => 'blocked',
+                       'info' => 'You cannot create a new account because you are blocked'
+               );
+               $errors[] = array(
+                       'code' => 'aborted',
+                       'info' => 'Account creation aborted by hook (info may vary)'
+               );
+
                // 'passwordtooshort' has parameters. :(
                global $wgMinimalPasswordLength;
                $errors[] = array(
index cba3489..4916145 100644 (file)
@@ -496,7 +496,6 @@ class ApiEditPage extends ApiBase {
                        'section' => null,
                        'sectiontitle' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => false,
                        ),
                        'text' => null,
                        'token' => array(
index 6c793b3..fdbdcc3 100644 (file)
@@ -33,6 +33,9 @@
  */
 class ApiFeedWatchlist extends ApiBase {
 
+       private $linkToDiffs = false;
+       private $watchlistModule = null;
+
        /**
         * This module uses a custom feed wrapper printer.
         *
@@ -42,8 +45,6 @@ class ApiFeedWatchlist extends ApiBase {
                return new ApiFormatFeedWrapper( $this->getMain() );
        }
 
-       private $linkToDiffs = false;
-
        /**
         * Make a nested call to the API to request watchlist items in the last $hours.
         * Wrap the result as an RSS/Atom feed.
@@ -86,6 +87,9 @@ class ApiFeedWatchlist extends ApiBase {
                        if ( $params['wlexcludeuser'] !== null ) {
                                $fauxReqArr['wlexcludeuser'] = $params['wlexcludeuser'];
                        }
+                       if ( $params['wlshow'] !== null ) {
+                               $fauxReqArr['wlshow'] = $params['wlshow'];
+                       }
 
                        // Support linking to diffs instead of article
                        if ( $params['linktodiffs'] ) {
@@ -168,10 +172,18 @@ class ApiFeedWatchlist extends ApiBase {
                return new FeedItem( $titleStr, $completeText, $titleUrl, $timestamp, $user );
        }
 
-       public function getAllowedParams() {
+       private function getWatchlistModule() {
+               if ( $this->watchlistModule === null ) {
+                       $this->watchlistModule = $this->getMain()->getModuleManager()->getModule( 'query' )
+                               ->getModuleManager()->getModule( 'watchlist' );
+               }
+               return $this->watchlistModule;
+       }
+
+       public function getAllowedParams( $flags = 0 ) {
                global $wgFeedClasses;
                $feedFormatNames = array_keys( $wgFeedClasses );
-               return array (
+               $ret = array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
                                ApiBase::PARAM_TYPE => $feedFormatNames
@@ -182,29 +194,36 @@ class ApiFeedWatchlist extends ApiBase {
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => 72,
                        ),
-                       'allrev' => false,
-                       'wlowner' => array(
-                               ApiBase::PARAM_TYPE => 'user'
-                       ),
-                       'wltoken' => array(
-                               ApiBase::PARAM_TYPE => 'string'
-                       ),
-                       'wlexcludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
-                       ),
                        'linktodiffs' => false,
                );
+               if ( $flags ) {
+                       $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
+                       $ret['allrev'] = $wlparams['allrev'];
+                       $ret['wlowner'] = $wlparams['owner'];
+                       $ret['wltoken'] = $wlparams['token'];
+                       $ret['wlshow'] = $wlparams['show'];
+                       $ret['wlexcludeuser'] = $wlparams['excludeuser'];
+               } else {
+                       $ret['allrev'] = null;
+                       $ret['wlowner'] = null;
+                       $ret['wltoken'] = null;
+                       $ret['wlshow'] = null;
+                       $ret['wlexcludeuser'] = null;
+               }
+               return $ret;
        }
 
        public function getParamDescription() {
+               $wldescr = $this->getWatchlistModule()->getParamDescription();
                return array(
                        'feedformat' => 'The format of the feed',
-                       'hours'      => 'List pages modified within this many hours from now',
-                       'allrev'     => 'Include multiple revisions of the same page within given timeframe',
-                       'wlowner'    => "The user whose watchlist you want (must be accompanied by {$this->getModulePrefix()}wltoken if it's not you)",
-                       'wltoken'    => 'Security token that requested user set in their preferences',
-                       'wlexcludeuser' => 'A user whose edits should not be shown in the watchlist',
+                       'hours' => 'List pages modified within this many hours from now',
                        'linktodiffs' => 'Link to change differences instead of article pages',
+                       'allrev' => $wldescr['allrev'],
+                       'wlowner' => $wldescr['owner'],
+                       'wltoken' => $wldescr['token'],
+                       'wlshow' => $wldescr['show'],
+                       'wlexcludeuser' => $wldescr['excludeuser'],
                );
        }
 
index 9520dc7..cbb2ba6 100644 (file)
@@ -187,7 +187,7 @@ class ApiFileRevert extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&archivename=20110305152740!Wiki.png&token=+\\'
+                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&archivename=20110305152740!Wiki.png&token=123ABC'
                                => 'Revert Wiki.png to the version of 20110305152740',
                );
        }
index d8aa163..e8e6acf 100644 (file)
@@ -85,7 +85,7 @@ abstract class ApiFormatBase extends ApiBase {
         *
         * @param bool $b Whether or not ampersands should be escaped.
         */
-       public function setUnescapeAmps ( $b ) {
+       public function setUnescapeAmps( $b ) {
                $this->mUnescapeAmps = $b;
        }
 
index 62b69bb..5685d93 100644 (file)
@@ -46,7 +46,7 @@ class ApiFormatWddx extends ApiFormatBase {
                } else {
                        // Don't do newlines and indentation if we weren't asked
                        // for pretty output
-                       $nl = ( $this->getIsHtml() ? '' : "\n" );
+                       $nl = ( $this->getIsHtml() ? "\n" : '' );
                        $indstr = ' ';
                        $this->printText( "<?xml version=\"1.0\"?>$nl" );
                        $this->printText( "<wddxPacket version=\"1.0\">$nl" );
@@ -64,44 +64,43 @@ class ApiFormatWddx extends ApiFormatBase {
         * @param $indent int
         */
        function slowWddxPrinter( $elemValue, $indent = 0 ) {
-               $indstr = ( $this->getIsHtml() ? '' : str_repeat( ' ', $indent ) );
-               $indstr2 = ( $this->getIsHtml() ? '' : str_repeat( ' ', $indent + 2 ) );
-               $nl = ( $this->getIsHtml() ? '' : "\n" );
-               switch ( gettype( $elemValue ) ) {
-                       case 'array':
-                               // Check whether we've got an associative array (<struct>)
-                               // or a regular array (<array>)
-                               $cnt = count( $elemValue );
-                               if ( $cnt == 0 || array_keys( $elemValue ) === range( 0, $cnt - 1 ) ) {
-                                       // Regular array
-                                       $this->printText( $indstr . Xml::element( 'array', array(
-                                               'length' => $cnt ), null ) . $nl );
-                                       foreach ( $elemValue as $subElemValue ) {
-                                               $this->slowWddxPrinter( $subElemValue, $indent + 2 );
-                                       }
-                                       $this->printText( "$indstr</array>$nl" );
-                               } else {
-                                       // Associative array (<struct>)
-                                       $this->printText( "$indstr<struct>$nl" );
-                                       foreach ( $elemValue as $subElemName => $subElemValue ) {
-                                               $this->printText( $indstr2 . Xml::element( 'var', array(
-                                                       'name' => $subElemName
-                                               ), null ) . $nl );
-                                               $this->slowWddxPrinter( $subElemValue, $indent + 4 );
-                                               $this->printText( "$indstr2</var>$nl" );
-                                       }
-                                       $this->printText( "$indstr</struct>$nl" );
+               $indstr = ( $this->getIsHtml() ? str_repeat( ' ', $indent ) : '' );
+               $indstr2 = ( $this->getIsHtml() ? str_repeat( ' ', $indent + 2 ) : '' );
+               $nl = ( $this->getIsHtml() ? "\n" : '' );
+               if ( is_array( $elemValue ) ) {
+                       // Check whether we've got an associative array (<struct>)
+                       // or a regular array (<array>)
+                       $cnt = count( $elemValue );
+                       if ( $cnt == 0 || array_keys( $elemValue ) === range( 0, $cnt - 1 ) ) {
+                               // Regular array
+                               $this->printText( $indstr . Xml::element( 'array', array(
+                                       'length' => $cnt ), null ) . $nl );
+                               foreach ( $elemValue as $subElemValue ) {
+                                       $this->slowWddxPrinter( $subElemValue, $indent + 2 );
                                }
-                               break;
-                       case 'integer':
-                       case 'double':
-                               $this->printText( $indstr . Xml::element( 'number', null, $elemValue ) . $nl );
-                               break;
-                       case 'string':
-                               $this->printText( $indstr . Xml::element( 'string', null, $elemValue ) . $nl );
-                               break;
-                       default:
-                               ApiBase::dieDebug( __METHOD__, 'Unknown type ' . gettype( $elemValue ) );
+                               $this->printText( "$indstr</array>$nl" );
+                       } else {
+                               // Associative array (<struct>)
+                               $this->printText( "$indstr<struct>$nl" );
+                               foreach ( $elemValue as $subElemName => $subElemValue ) {
+                                       $this->printText( $indstr2 . Xml::element( 'var', array(
+                                               'name' => $subElemName
+                                       ), null ) . $nl );
+                                       $this->slowWddxPrinter( $subElemValue, $indent + 4 );
+                                       $this->printText( "$indstr2</var>$nl" );
+                               }
+                               $this->printText( "$indstr</struct>$nl" );
+                       }
+               } elseif ( is_int( $elemValue ) || is_float( $elemValue ) ) {
+                       $this->printText( $indstr . Xml::element( 'number', null, $elemValue ) . $nl );
+               } elseif ( is_string( $elemValue ) ) {
+                       $this->printText( $indstr . Xml::element( 'string', null, $elemValue ) . $nl );
+               } elseif ( is_bool( $elemValue ) ) {
+                       $this->printText( $indstr . Xml::element( 'boolean',
+                               array( 'value' => $elemValue ? 'true' : 'false' ) ) . $nl
+                       );
+               } else {
+                       ApiBase::dieDebug( __METHOD__, 'Unknown type ' . gettype( $elemValue ) );
                }
        }
 
index b4e8e33..183d48c 100644 (file)
@@ -131,84 +131,78 @@ class ApiFormatXml extends ApiFormatBase {
                }
                $elemName = str_replace( ' ', '_', $elemName );
 
-               switch ( gettype( $elemValue ) ) {
-                       case 'array':
-                               if ( isset( $elemValue['*'] ) ) {
-                                       $subElemContent = $elemValue['*'];
-                                       if ( $doublequote ) {
-                                               $subElemContent = Sanitizer::encodeAttribute( $subElemContent );
-                                       }
-                                       unset( $elemValue['*'] );
-
-                                       // Add xml:space="preserve" to the
-                                       // element so XML parsers will leave
-                                       // whitespace in the content alone
-                                       $elemValue['xml:space'] = 'preserve';
-                               } else {
-                                       $subElemContent = null;
+               if ( is_array( $elemValue ) ) {
+                       if ( isset( $elemValue['*'] ) ) {
+                               $subElemContent = $elemValue['*'];
+                               if ( $doublequote ) {
+                                       $subElemContent = Sanitizer::encodeAttribute( $subElemContent );
                                }
-
-                               if ( isset( $elemValue['_element'] ) ) {
-                                       $subElemIndName = $elemValue['_element'];
-                                       unset( $elemValue['_element'] );
-                               } else {
-                                       $subElemIndName = null;
-                               }
-
-                               $indElements = array();
-                               $subElements = array();
-                               foreach ( $elemValue as $subElemId => & $subElemValue ) {
-                                       if ( is_string( $subElemValue ) && $doublequote ) {
-                                               $subElemValue = Sanitizer::encodeAttribute( $subElemValue );
-                                       }
-
-                                       if ( gettype( $subElemId ) === 'integer' ) {
-                                               $indElements[] = $subElemValue;
-                                               unset( $elemValue[$subElemId] );
-                                       } elseif ( is_array( $subElemValue ) ) {
-                                               $subElements[$subElemId] = $subElemValue;
-                                               unset ( $elemValue[$subElemId] );
-                                       }
+                               unset( $elemValue['*'] );
+
+                               // Add xml:space="preserve" to the
+                               // element so XML parsers will leave
+                               // whitespace in the content alone
+                               $elemValue['xml:space'] = 'preserve';
+                       } else {
+                               $subElemContent = null;
+                       }
+
+                       if ( isset( $elemValue['_element'] ) ) {
+                               $subElemIndName = $elemValue['_element'];
+                               unset( $elemValue['_element'] );
+                       } else {
+                               $subElemIndName = null;
+                       }
+
+                       $indElements = array();
+                       $subElements = array();
+                       foreach ( $elemValue as $subElemId => & $subElemValue ) {
+                               if ( is_string( $subElemValue ) && $doublequote ) {
+                                       $subElemValue = Sanitizer::encodeAttribute( $subElemValue );
                                }
 
-                               if ( is_null( $subElemIndName ) && count( $indElements ) ) {
-                                       ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys without _element value. Use ApiResult::setIndexedTagName()." );
+                               if ( is_int( $subElemId ) ) {
+                                       $indElements[] = $subElemValue;
+                                       unset( $elemValue[$subElemId] );
+                               } elseif ( is_array( $subElemValue ) ) {
+                                       $subElements[$subElemId] = $subElemValue;
+                                       unset ( $elemValue[$subElemId] );
                                }
+                       }
 
-                               if ( count( $subElements ) && count( $indElements ) && !is_null( $subElemContent ) ) {
-                                       ApiBase::dieDebug( __METHOD__, "($elemName, ...) has content and subelements" );
-                               }
+                       if ( is_null( $subElemIndName ) && count( $indElements ) ) {
+                               ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys without _element value. Use ApiResult::setIndexedTagName()." );
+                       }
 
-                               if ( !is_null( $subElemContent ) ) {
-                                       $retval .= $indstr . Xml::element( $elemName, $elemValue, $subElemContent );
-                               } elseif ( !count( $indElements ) && !count( $subElements ) ) {
-                                       $retval .= $indstr . Xml::element( $elemName, $elemValue );
-                               } else {
-                                       $retval .= $indstr . Xml::element( $elemName, $elemValue, null );
+                       if ( count( $subElements ) && count( $indElements ) && !is_null( $subElemContent ) ) {
+                               ApiBase::dieDebug( __METHOD__, "($elemName, ...) has content and subelements" );
+                       }
 
-                                       foreach ( $subElements as $subElemId => & $subElemValue ) {
-                                               $retval .= self::recXmlPrint( $subElemId, $subElemValue, $indent );
-                                       }
+                       if ( !is_null( $subElemContent ) ) {
+                               $retval .= $indstr . Xml::element( $elemName, $elemValue, $subElemContent );
+                       } elseif ( !count( $indElements ) && !count( $subElements ) ) {
+                               $retval .= $indstr . Xml::element( $elemName, $elemValue );
+                       } else {
+                               $retval .= $indstr . Xml::element( $elemName, $elemValue, null );
 
-                                       foreach ( $indElements as &$subElemValue ) {
-                                               $retval .= self::recXmlPrint( $subElemIndName, $subElemValue, $indent );
-                                       }
-
-                                       $retval .= $indstr . Xml::closeElement( $elemName );
+                               foreach ( $subElements as $subElemId => & $subElemValue ) {
+                                       $retval .= self::recXmlPrint( $subElemId, $subElemValue, $indent );
                                }
-                               break;
-                       case 'object':
-                               // ignore
-                               break;
-                       default:
-                               // to make sure null value doesn't produce unclosed element,
-                               // which is what Xml::element( $elemName, null, null ) returns
-                               if ( $elemValue === null ) {
-                                       $retval .= $indstr . Xml::element( $elemName );
-                               } else {
-                                       $retval .= $indstr . Xml::element( $elemName, null, $elemValue );
+
+                               foreach ( $indElements as &$subElemValue ) {
+                                       $retval .= self::recXmlPrint( $subElemIndName, $subElemValue, $indent );
                                }
-                               break;
+
+                               $retval .= $indstr . Xml::closeElement( $elemName );
+                       }
+               } elseif ( !is_object( $elemValue ) ) {
+                       // to make sure null value doesn't produce unclosed element,
+                       // which is what Xml::element( $elemName, null, null ) returns
+                       if ( $elemValue === null ) {
+                               $retval .= $indstr . Xml::element( $elemName );
+                       } else {
+                               $retval .= $indstr . Xml::element( $elemName, null, $elemValue );
+                       }
                }
                return $retval;
        }
index f9c8058..b2d7582 100644 (file)
@@ -59,10 +59,6 @@ class ApiImageRotate extends ApiBase {
                $rotation = $params[ 'rotation' ];
                $user = $this->getUser();
 
-               if( is_null( $rotation ) || $rotation % 90 ) {
-                       $this->dieUsage( "Rotation: {$rotation}", 'rotation must be multiple of 90 degrees' );
-               }
-
                $pageSet = $this->getPageSet();
                $pageSet->execute();
 
@@ -73,32 +69,47 @@ class ApiImageRotate extends ApiBase {
                self::addValues( $result, $pageSet->getSpecialTitles(), 'special', 'title' );
                self::addValues( $result, $pageSet->getMissingPageIDs(), 'missing', 'pageid' );
                self::addValues( $result, $pageSet->getMissingRevisionIDs(), 'missing', 'revid' );
-               self::addValues( $result, $pageSet->getMissingTitles(), 'missing' );
                self::addValues( $result, $pageSet->getInterwikiTitlesAsResult() );
 
                foreach ( $pageSet->getTitles() as $title ) {
-                       $file = wfFindFile( $title );
-
                        $r = array();
-                       $r[ 'title' ] = $title->getFullText();
-                       if ( !$file ) {
+                       $r['id'] = $title->getArticleID();
+                       ApiQueryBase::addTitleInfo( $r, $title );
+                       if ( !$title->exists() ) {
                                $r['missing'] = '';
+                       }
+
+                       $file = wfFindFile( $title );
+                       if ( !$file ) {
                                $r['result'] = 'Failure';
+                               $r['errormessage'] = 'File does not exist';
                                $result[] = $r;
                                continue;
                        }
                        $handler = $file->getHandler();
                        if ( !$handler || !$handler->canRotate() ) {
-                               $r['invalid'] = '';
                                $r['result'] = 'Failure';
+                               $r['errormessage'] = 'File type cannot be rotated';
                                $result[] = $r;
                                continue;
                        }
 
                        // Check whether we're allowed to rotate this file
-                       $this->checkPermissions( $this->getUser(), $file->getTitle() );
+                       $permError = $this->checkPermissions( $this->getUser(), $file->getTitle() );
+                       if ( $permError !== null ) {
+                               $r['result'] = 'Failure';
+                               $r['errormessage'] = $permError;
+                               $result[] = $r;
+                               continue;
+                       }
 
                        $srcPath = $file->getLocalRefPath();
+                       if ( $srcPath === false ) {
+                               $r['result'] = 'Failure';
+                               $r['errormessage'] = 'Cannot get local file path';
+                               $result[] = $r;
+                               continue;
+                       }
                        $ext = strtolower( pathinfo( "$srcPath", PATHINFO_EXTENSION ) );
                        $tmpFile = TempFSFile::factory( 'rotate_', $ext);
                        $dstPath = $tmpFile->getPath();
@@ -141,8 +152,8 @@ class ApiImageRotate extends ApiBase {
 
        /**
         * Checks that the user has permissions to perform rotations.
-        * Dies with usage message on inadequate permissions.
         * @param $user User The user to check.
+        * @return string|null Permission error message, or null if there is no error
         */
        protected function checkPermissions( $user, $title ) {
                $permissionErrors = array_merge(
@@ -151,8 +162,12 @@ class ApiImageRotate extends ApiBase {
                );
 
                if ( $permissionErrors ) {
-                       $this->dieUsageMsg( $permissionErrors[0] );
+                       // Just return the first error
+                       $msg = $this->parseMsg( $permissionErrors[0] );
+                       return $msg['info'];
                }
+
+               return null;
        }
 
        public function mustBePosted() {
@@ -167,7 +182,8 @@ class ApiImageRotate extends ApiBase {
                $pageSet = $this->getPageSet();
                $result = array(
                        'rotation' => array(
-                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_TYPE => array( '90', '180', '270' ),
+                               ApiBase::PARAM_REQUIRED => true
                        ),
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
@@ -183,8 +199,8 @@ class ApiImageRotate extends ApiBase {
        public function getParamDescription() {
                $pageSet = $this->getPageSet();
                return $pageSet->getParamDescription() + array(
-                       'rotation' => 'Degrees to rotate image, values can be 0, 90, 180 or 270',
-                       'token' => 'Edit token. You can get one of these through prop=info',
+                       'rotation' => 'Degrees to rotate image clockwise',
+                       'token' => 'Edit token. You can get one of these through action=tokens',
                );
        }
 
@@ -210,7 +226,7 @@ class ApiImageRotate extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=imagerotate&titles=Example.jpg&rotation=90&token=+\\',
+                       'api.php?action=imagerotate&titles=Example.jpg&rotation=90&token=123ABC',
                );
        }
 }
index 4d17080..80bca2f 100644 (file)
@@ -274,7 +274,7 @@ class ApiMain extends ApiBase {
                        return;
                }
 
-               if ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) ) {
+               if ( !User::groupHasPermission( '*', 'read' ) ) {
                        // Private wiki, only private headers
                        if ( $mode !== 'private' ) {
                                wfDebug( __METHOD__ . ": ignoring request for $mode cache mode, private wiki\n" );
@@ -769,7 +769,7 @@ class ApiMain extends ApiBase {
         */
        protected function checkExecutePermissions( $module ) {
                $user = $this->getUser();
-               if ( $module->isReadMode() && !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) &&
+               if ( $module->isReadMode() && !User::groupHasPermission( '*', 'read' ) &&
                        !$user->isAllowed( 'read' ) )
                {
                        $this->dieUsageMsg( 'readrequired' );
index ba1d6c9..3e846e3 100644 (file)
@@ -291,7 +291,7 @@ class ApiMove extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=move&from=Exampel&to=Example&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect='
+                       'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect='
                );
        }
 
index bab59b7..074efe4 100644 (file)
@@ -217,6 +217,30 @@ class ApiPageSet extends ApiBase {
                return $this->mResolveRedirects;
        }
 
+       /**
+        * Return the parameter name that is the source of data for this PageSet
+        *
+        * If multiple source parameters are specified (e.g. titles and pageids),
+        * one will be named arbitrarily.
+        *
+        * @return string|null
+        */
+       public function getDataSource() {
+               if ( $this->mAllowGenerator && isset( $this->mParams['generator'] ) ) {
+                       return 'generator';
+               }
+               if ( isset( $this->mParams['titles'] ) ) {
+                       return 'titles';
+               }
+               if ( isset( $this->mParams['pageids'] ) ) {
+                       return 'pageids';
+               }
+               if ( isset( $this->mParams['revids'] ) ) {
+                       return 'revids';
+               }
+               return null;
+       }
+
        /**
         * Request an additional field from the page table.
         * Must be called before execute()
index 0555a39..c9811b0 100644 (file)
@@ -40,6 +40,8 @@ class ApiQueryAllMessages extends ApiQueryBase {
 
                if ( is_null( $params['lang'] ) ) {
                        $langObj = $this->getLanguage();
+               } elseif ( !Language::isValidCode( $params['lang'] ) ) {
+                       $this->dieUsage( 'Invalid language code for parameter lang', 'invalidlang' );
                } else {
                        $langObj = Language::factory( $params['lang'] );
                }
@@ -255,6 +257,12 @@ class ApiQueryAllMessages extends ApiQueryBase {
                );
        }
 
+       public function getPossibleErrors() {
+               return array_merge( parent::getPossibleErrors(), array(
+                       array( 'code' => 'invalidlang', 'info' => 'Invalid language code for parameter lang' ),
+               ) );
+       }
+
        public function getResultProperties() {
                return array(
                        '' => array(
index 8cd4fde..7819ead 100644 (file)
@@ -419,7 +419,7 @@ abstract class ApiQueryBase extends ApiBase {
                if ( !$t ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $title ) );
                }
-               return $t->getPrefixedDbKey();
+               return $t->getPrefixedDBkey();
        }
 
        /**
index c4a39d6..761b49e 100644 (file)
@@ -148,7 +148,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Returns all external urls (not interwikies) from the given page(s)';
+               return 'Returns all external urls (not interwikis) from the given page(s)';
        }
 
        public function getPossibleErrors() {
index 95c2745..556f147 100644 (file)
@@ -228,7 +228,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @param string $otherParams of otherParams (iiurlparam).
         * @return Array of parameters for transform.
         */
-       protected function mergeThumbParams ( $image, $thumbParams, $otherParams ) {
+       protected function mergeThumbParams( $image, $thumbParams, $otherParams ) {
                if ( !$otherParams ) {
                        return $thumbParams;
                }
index e0637ff..22480c6 100644 (file)
@@ -133,8 +133,7 @@ class ApiQueryTags extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => array(
-                       ),
+                       'continue' => null,
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
index b40476a..58d5d9a 100644 (file)
@@ -44,8 +44,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
                $this->requireMaxOneParameter( $params, 'timestamp', 'torevid', 'newerthanrevid' );
 
                $pageSet = $this->getPageSet();
-               $args = array_merge( array( $params, 'entirewatchlist' ), array_keys( $pageSet->getAllowedParams() ) );
-               call_user_func_array( array( $this, 'requireOnlyOneParameter' ), $args );
+               if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
+                       $this->dieUsage( "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'", 'multisource' );
+               }
 
                $dbw = wfGetDB( DB_MASTER, 'api' );
 
index f2733bd..2dcf392 100644 (file)
@@ -81,7 +81,7 @@ class ApiUpload extends ApiBase {
 
                // Check if the uploaded file is sane
                if ( $this->mParams['chunk'] ) {
-                       $maxSize = $this->mUpload->getMaxUploadSize( );
+                       $maxSize = $this->mUpload->getMaxUploadSize();
                        if( $this->mParams['filesize'] > $maxSize ) {
                                $this->dieUsage( 'The file you submitted was too large', 'file-too-large' );
                        }
@@ -224,8 +224,7 @@ class ApiUpload extends ApiBase {
                                        array(
                                                'filename'  => $this->mParams['filename'],
                                                'filekey'   => $this->mParams['filekey'],
-                                               'session'   => $this->getRequest()->exportUserSession(),
-                                               'userid'    => $this->getUser()->getId()
+                                               'session'   => $this->getContext()->exportSession()
                                        )
                                ) );
                                if ( $ok ) {
@@ -441,8 +440,8 @@ class ApiUpload extends ApiBase {
        /**
         * Performs file verification, dies on error.
         */
-       protected function verifyUpload( ) {
-               $verification = $this->mUpload->verifyUpload( );
+       protected function verifyUpload() {
+               $verification = $this->mUpload->verifyUpload();
                if ( $verification['status'] === UploadBase::OK ) {
                        return;
                } else {
@@ -594,8 +593,7 @@ class ApiUpload extends ApiBase {
                                        'comment'   => $this->mParams['comment'],
                                        'text'      => $this->mParams['text'],
                                        'watch'     => $watch,
-                                       'session'   => $this->getRequest()->exportUserSession(),
-                                       'userid'    => $this->getUser()->getId()
+                                       'session'   => $this->getContext()->exportSession()
                                )
                        ) );
                        if ( $ok ) {
index 01ceeed..0e41e26 100644 (file)
@@ -78,7 +78,7 @@ class LinkCache {
         * @return mixed
         */
        public function getGoodLinkFieldObj( $title, $field ) {
-               $dbkey = $title->getPrefixedDbKey();
+               $dbkey = $title->getPrefixedDBkey();
                if ( array_key_exists( $dbkey, $this->mGoodLinkFields ) ) {
                        return $this->mGoodLinkFields[$dbkey][$field];
                } else {
@@ -105,7 +105,7 @@ class LinkCache {
         * @param $model Integer: latest revision's content model ID
         */
        public function addGoodLinkObj( $id, $title, $len = -1, $redir = null, $revision = false, $model = false ) {
-               $dbkey = $title->getPrefixedDbKey();
+               $dbkey = $title->getPrefixedDBkey();
                $this->mGoodLinks[$dbkey] = intval( $id );
                $this->mGoodLinkFields[$dbkey] = array(
                        'length' => intval( $len ),
@@ -122,7 +122,7 @@ class LinkCache {
         *  page_latest and page_content_model
         */
        public function addGoodLinkObjFromRow( $title, $row ) {
-               $dbkey = $title->getPrefixedDbKey();
+               $dbkey = $title->getPrefixedDBkey();
                $this->mGoodLinks[$dbkey] = intval( $row->page_id );
                $this->mGoodLinkFields[$dbkey] = array(
                        'length' => intval( $row->page_len ),
@@ -136,7 +136,7 @@ class LinkCache {
         * @param $title Title
         */
        public function addBadLinkObj( $title ) {
-               $dbkey = $title->getPrefixedDbKey();
+               $dbkey = $title->getPrefixedDBkey();
                if ( !$this->isBadLink( $dbkey ) ) {
                        $this->mBadLinks[$dbkey] = 1;
                }
@@ -150,7 +150,7 @@ class LinkCache {
         * @param $title Title
         */
        public function clearLink( $title ) {
-               $dbkey = $title->getPrefixedDbKey();
+               $dbkey = $title->getPrefixedDBkey();
                unset( $this->mBadLinks[$dbkey] );
                unset( $this->mGoodLinks[$dbkey] );
                unset( $this->mGoodLinkFields[$dbkey] );
index 009b950..2de7b48 100644 (file)
@@ -110,7 +110,7 @@ class LocalisationCache {
                'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
                'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
                'imageFiles', 'preloadedMessages', 'namespaceGenderAliases',
-               'digitGroupingPattern', 'pluralRules', 'compiledPluralRules',
+               'digitGroupingPattern', 'pluralRules', 'pluralRuleTypes', 'compiledPluralRules',
        );
 
        /**
@@ -160,6 +160,20 @@ class LocalisationCache {
         */
        var $pluralRules = null;
 
+       /**
+        * Associative array of cached plural rule types. The key is the language
+        * code, the value is an array of plural rule types for that language. For
+        * example, $pluralRuleTypes['ar'] = ['zero', 'one', 'two', 'few', 'many'].
+        * The index for each rule type matches the index for the rule in
+        * $pluralRules, thus allowing correlation between the two. The reason we
+        * don't just use the type names as the keys in $pluralRules is because
+        * Language::convertPlural applies the rules based on numeric order (or
+        * explicit numeric parameter), not based on the name of the rule type. For
+        * example, {{plural:count|wordform1|wordform2|wordform3}}, rather than
+        * {{plural:count|one=wordform1|two=wordform2|many=wordform3}}.
+        */
+       var $pluralRuleTypes = null;
+
        var $mergeableKeys = null;
 
        /**
@@ -519,17 +533,8 @@ class LocalisationCache {
         * @since 1.20
         */
        public function getPluralRules( $code ) {
-               global $IP;
-
                if ( $this->pluralRules === null ) {
-                       $cldrPlural = "$IP/languages/data/plurals.xml";
-                       $mwPlural = "$IP/languages/data/plurals-mediawiki.xml";
-                       // Load CLDR plural rules
-                       $this->loadPluralFile( $cldrPlural );
-                       if ( file_exists( $mwPlural ) ) {
-                               // Override or extend
-                               $this->loadPluralFile( $mwPlural );
-                       }
+                       $this->loadPluralFiles();
                }
                if ( !isset( $this->pluralRules[$code] ) ) {
                        return null;
@@ -538,6 +543,37 @@ class LocalisationCache {
                }
        }
 
+       /**
+        * Get the plural rule types for a given language from the XML files.
+        * Cached.
+        * @since 1.21
+        */
+       public function getPluralRuleTypes( $code ) {
+               if ( $this->pluralRuleTypes === null ) {
+                       $this->loadPluralFiles();
+               }
+               if ( !isset( $this->pluralRuleTypes[$code] ) ) {
+                       return null;
+               } else {
+                       return $this->pluralRuleTypes[$code];
+               }
+       }
+
+       /**
+        * Load the plural XML files.
+        */
+       protected function loadPluralFiles() {
+               global $IP;
+               $cldrPlural = "$IP/languages/data/plurals.xml";
+               $mwPlural = "$IP/languages/data/plurals-mediawiki.xml";
+               // Load CLDR plural rules
+               $this->loadPluralFile( $cldrPlural );
+               if ( file_exists( $mwPlural ) ) {
+                       // Override or extend
+                       $this->loadPluralFile( $mwPlural );
+               }
+       }
+
        /**
         * Load a plural XML file with the given filename, compile the relevant
         * rules, and save the compiled rules in a process-local cache.
@@ -549,12 +585,16 @@ class LocalisationCache {
                foreach ( $rulesets as $ruleset ) {
                        $codes = $ruleset->getAttribute( 'locales' );
                        $rules = array();
+                       $ruleTypes = array();
                        $ruleElements = $ruleset->getElementsByTagName( "pluralRule" );
                        foreach ( $ruleElements as $elt ) {
+                               $ruleType = $elt->getAttribute( 'count' );
                                $rules[] = $elt->nodeValue;
+                               $ruleTypes[] = $ruleType;
                        }
                        foreach ( explode( ' ', $codes ) as $code ) {
                                $this->pluralRules[$code] = $rules;
+                               $this->pluralRuleTypes[$code] = $ruleTypes;
                        }
                }
        }
@@ -579,6 +619,8 @@ class LocalisationCache {
                $data['pluralRules'] = $this->getPluralRules( $code );
                # And for PHP
                $data['compiledPluralRules'] = $this->getCompiledPluralRules( $code );
+               # Load plural rule types
+               $data['pluralRuleTypes'] = $this->getPluralRuleTypes( $code );
 
                $deps['plurals'] = new FileDependency( "$IP/languages/data/plurals.xml" );
                $deps['plurals-mw'] = new FileDependency( "$IP/languages/data/plurals-mediawiki.xml" );
@@ -786,6 +828,10 @@ class LocalisationCache {
                if ( $allData['compiledPluralRules'] === null ) {
                        $allData['compiledPluralRules'] = array();
                }
+               # If there were no plural rule types, return an empty array
+               if ( $allData['pluralRuleTypes'] === null ) {
+                       $allData['pluralRuleTypes'] = array();
+               }
 
                # Set the list keys
                $allData['list'] = array();
@@ -1284,5 +1330,4 @@ class LocalisationCache_BulkLoad extends LocalisationCache {
                        $this->unload( $code );
                }
        }
-
 }
index 6e9d413..7425978 100644 (file)
@@ -327,31 +327,39 @@ class MessageCache {
                        $where[] = 'cache is empty';
                        $where[] = 'loading from database';
 
-                       $this->lock( $cacheKey );
+                       if ( $this->lock( $cacheKey ) ) {
+                               $that = $this;
+                               $osc = new ScopedCallback( function() use ( $that, $cacheKey ) {
+                                       $that->unlock( $cacheKey );
+                               } );
+                       }
                        # Limit the concurrency of loadFromDB to a single process
                        # This prevents the site from going down when the cache expires
                        $statusKey = wfMemcKey( 'messages', $code, 'status' );
                        $success = $this->mMemc->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT );
                        if ( $success ) { // acquired lock
+                               $cache = $this->mMemc;
+                               $isc = new ScopedCallback( function() use ( $cache, $statusKey ) {
+                                       $cache->delete( $statusKey );
+                               } );
                                $cache = $this->loadFromDB( $code );
                                $success = $this->setCache( $cache, $code );
                                if ( $success ) { // messages loaded
                                        $success = $this->saveToCaches( $cache, true, $code );
-                                       if ( $success ) {
-                                               $this->mMemc->delete( $statusKey );
-                                       } else {
+                                       $isc = null; // unlock
+                                       if ( !$success ) {
                                                $this->mMemc->set( $statusKey, 'error', 60 * 5 );
                                                wfDebug( __METHOD__ . ": set() error: restart memcached server!\n" );
                                                $exception = new MWException( "Could not save cache for '$code'." );
                                        }
                                } else {
-                                       $this->mMemc->delete( $statusKey );
+                                       $isc = null; // unlock
                                        $exception = new MWException( "Could not load cache from DB for '$code'." );
                                }
                        } else {
                                $exception = new MWException( "Could not acquire '$statusKey' lock." );
                        }
-                       $this->unlock( $cacheKey );
+                       $osc = null; // unlock
                }
 
                if ( !$success ) {
index 0c91222..a15e80b 100644 (file)
@@ -55,14 +55,6 @@ class RedisConnectionPool {
        const SERVER_DOWN_TTL = 30; // integer; seconds to cache servers as "down"
 
        /**
-        * $options include:
-        *   - connectTimeout : The timeout for new connections, in seconds.
-        *                      Optional, default is 1 second.
-        *   - persistent     : Set this to true to allow connections to persist across
-        *                      multiple web requests. False by default.
-        *   - password       : The authentication password, will be sent to Redis in clear text.
-        *                      Optional, if it is unspecified, no AUTH command will be sent.
-        *   - serializer     : Set to "php" or "igbinary". Default is "php".
         * @param array $options
         */
        protected function __construct( array $options ) {
@@ -77,6 +69,8 @@ class RedisConnectionPool {
                        $this->serializer = Redis::SERIALIZER_PHP;
                } elseif ( $options['serializer'] === 'igbinary' ) {
                        $this->serializer = Redis::SERIALIZER_IGBINARY;
+               } elseif ( $options['serializer'] === 'none' ) {
+                       $this->serializer = Redis::SERIALIZER_NONE;
                } else {
                        throw new MWException( "Invalid serializer specified." );
                }
@@ -94,13 +88,21 @@ class RedisConnectionPool {
                        $options['persistent'] = false;
                }
                if ( !isset( $options['password'] ) ) {
-                       $options['password'] = '';
+                       $options['password'] = null;
                }
                return $options;
        }
 
        /**
         * @param $options Array
+        * $options include:
+        *   - connectTimeout : The timeout for new connections, in seconds.
+        *                      Optional, default is 1 second.
+        *   - persistent     : Set this to true to allow connections to persist across
+        *                      multiple web requests. False by default.
+        *   - password       : The authentication password, will be sent to Redis in clear text.
+        *                      Optional, if it is unspecified, no AUTH command will be sent.
+        *   - serializer     : Set to "php", "igbinary", or "none". Default is "php".
         * @return RedisConnectionPool
         */
        public static function singleton( array $options ) {
@@ -255,15 +257,14 @@ class RedisConnectionPool {
         * object and let it be reopened during the next request.
         *
         * @param $server string
-        * @param $conn RedisConnRef
+        * @param $cref RedisConnRef
         * @param $e RedisException
         * @return void
         */
-       public function handleException( $server, RedisConnRef $conn, RedisException $e ) {
-               wfDebugLog( 'redis',
-                       "Redis exception on server $server: " . $e->getMessage() . "\n" );
+       public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
+               wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() . "\n" );
                foreach ( $this->connections[$server] as $key => $connection ) {
-                       if ( $connection['conn'] === $conn ) {
+                       if ( $cref->isConnIdentical( $connection['conn'] ) ) {
                                $this->idlePoolSize -= $connection['free'] ? 1 : 0;
                                unset( $this->connections[$server][$key] );
                                break;
@@ -281,12 +282,11 @@ class RedisConnectionPool {
 class RedisConnRef {
        /** @var RedisConnectionPool */
        protected $pool;
-
-       protected $server; // string
-
        /** @var Redis */
        protected $conn;
 
+       protected $server; // string
+
        /**
         * @param $pool RedisConnectionPool
         * @param $server string
@@ -302,6 +302,10 @@ class RedisConnRef {
                return call_user_func_array( array( $this->conn, $name ), $arguments );
        }
 
+       public function isConnIdentical( Redis $conn ) {
+               return $this->conn === $conn;
+       }
+
        function __destruct() {
                $this->pool->freeConnection( $this->server, $this->conn );
        }
index 9b59a27..72729b0 100644 (file)
@@ -231,7 +231,7 @@ interface Content {
         *
         * @return Content. A copy of this object
         */
-       public function copy( );
+       public function copy();
 
        /**
         * Returns true if this content is countable as a "real" wiki page, provided
index 75f1aa0..569d122 100644 (file)
@@ -54,10 +54,10 @@ class CssContent extends TextContent {
                return new CssContent( $pst );
        }
 
-       protected function getHtml( ) {
+       protected function getHtml() {
                $html = "";
                $html .= "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n";
-               $html .= $this->getHighlightHtml( );
+               $html .= $this->getHighlightHtml();
                $html .= "\n</pre>\n";
 
                return $html;
index 5221168..9cd947f 100644 (file)
@@ -55,10 +55,10 @@ class JavaScriptContent extends TextContent {
                return new JavaScriptContent( $pst );
        }
 
-       protected function getHtml( ) {
+       protected function getHtml() {
                $html = "";
                $html .= "<pre class=\"mw-code mw-js\" dir=\"ltr\">\n";
-               $html .= $this->getHighlightHtml( );
+               $html .= $this->getHighlightHtml();
                $html .= "\n</pre>\n";
 
                return $html;
index 91ba6ef..8fafcb6 100644 (file)
@@ -72,8 +72,8 @@ class TextContent extends AbstractContent {
         *
         * @return int The size
         */
-       public function getSize( ) {
-               $text = $this->getNativeData( );
+       public function getSize() {
+               $text = $this->getNativeData();
                return strlen( $text );
        }
 
@@ -89,7 +89,7 @@ class TextContent extends AbstractContent {
        public function isCountable( $hasLinks = null ) {
                global $wgArticleCountMethod;
 
-               if ( $this->isRedirect( ) ) {
+               if ( $this->isRedirect() ) {
                        return false;
                }
 
@@ -105,7 +105,7 @@ class TextContent extends AbstractContent {
         *
         * @return string: the raw text
         */
-       public function getNativeData( ) {
+       public function getNativeData() {
                $text = $this->mText;
                return $text;
        }
@@ -115,7 +115,7 @@ class TextContent extends AbstractContent {
         *
         * @return string: the raw text
         */
-       public function getTextForSearchIndex( ) {
+       public function getTextForSearchIndex() {
                return $this->getNativeData();
        }
 
@@ -127,7 +127,7 @@ class TextContent extends AbstractContent {
         *
         * @return string|false: the raw text, or null if the conversion failed
         */
-       public function getWikitextForTransclusion( ) {
+       public function getWikitextForTransclusion() {
                $wikitext = $this->convert( CONTENT_MODEL_WIKITEXT, 'lossy' );
 
                if ( $wikitext ) {
@@ -248,7 +248,7 @@ class TextContent extends AbstractContent {
         *
         * @return string an HTML representation of the content's markup
         */
-       protected function getHighlightHtml( ) {
+       protected function getHighlightHtml() {
                # TODO: make Highlighter interface, use highlighter here, if available
                return htmlspecialchars( $this->getNativeData() );
        }
index 7d3cd37..8be4eba 100644 (file)
@@ -231,7 +231,7 @@ class WikitextContent extends TextContent {
        public function isCountable( $hasLinks = null, Title $title = null ) {
                global $wgArticleCountMethod;
 
-               if ( $this->isRedirect( ) ) {
+               if ( $this->isRedirect() ) {
                        return false;
                }
 
index 4a02f0b..33f51cb 100644 (file)
@@ -164,4 +164,15 @@ abstract class ContextSource implements IContextSource {
                $args = func_get_args();
                return call_user_func_array( array( $this->getContext(), 'msg' ), $args );
        }
+
+       /**
+        * Export the resolved user IP, HTTP headers, user ID, and session ID.
+        * The result will be reasonably sized to allow for serialization.
+        *
+        * @return Array
+        * @since 1.21
+        */
+       public function exportSession() {
+               return $this->getContext()->exportSession();
+       }
 }
index 0399081..c7b221b 100644 (file)
@@ -105,4 +105,13 @@ interface IContextSource {
         * @return Message
         */
        public function msg();
+
+       /**
+        * Export the resolved user IP, HTTP headers, user ID, and session ID.
+        * The result will be reasonably sized to allow for serialization.
+        *
+        * @return Array
+        * @since 1.21
+        */
+       public function exportSession();
 }
index 60c8cd3..6aefc98 100644 (file)
@@ -393,59 +393,92 @@ class RequestContext implements IContextSource {
        }
 
        /**
-        * Import the resolved user IP, HTTP headers, and session ID.
+        * Export the resolved user IP, HTTP headers, user ID, and session ID.
+        * The result will be reasonably sized to allow for serialization.
+        *
+        * @return Array
+        * @since 1.21
+        */
+       public function exportSession() {
+               return array(
+                       'ip'        => $this->getRequest()->getIP(),
+                       'headers'   => $this->getRequest()->getAllHeaders(),
+                       'sessionId' => session_id(),
+                       'userId'    => $this->getUser()->getId()
+               );
+       }
+
+       /**
+        * Import the resolved user IP, HTTP headers, user ID, and session ID.
         * This sets the current session and sets $wgUser and $wgRequest.
         * Once the return value falls out of scope, the old context is restored.
         * This function can only be called within CLI mode scripts.
         *
         * This will setup the session from the given ID. This is useful when
-        * background scripts inherit some context when acting on behalf of a user.
+        * background scripts inherit context when acting on behalf of a user.
         *
-        * $param array $params Result of WebRequest::exportUserSession()
+        * $param array $params Result of RequestContext::exportSession()
         * @return ScopedCallback
         * @throws MWException
         * @since 1.21
         */
        public static function importScopedSession( array $params ) {
                if ( PHP_SAPI !== 'cli' ) {
-                       // Don't send random private cookie headers to other random users
+                       // Don't send random private cookies or turn $wgRequest into FauxRequest
                        throw new MWException( "Sessions can only be imported in cli mode." );
+               } elseif ( !strlen( $params['sessionId'] ) ) {
+                       throw new MWException( "No session ID was specified." );
                }
 
-               $importSessionFunction = function( array $params ) {
+               if ( $params['userId'] ) { // logged-in user
+                       $user = User::newFromId( $params['userId'] );
+                       if ( !$user ) {
+                               throw new MWException( "No user with ID '{$params['userId']}'." );
+                       }
+               } elseif ( !IP::isValid( $params['ip'] ) ) {
+                       throw new MWException( "Could not load user '{$params['ip']}'." );
+               } else { // anon user
+                       $user = User::newFromName( $params['ip'], false );
+               }
+
+               $importSessionFunction = function( User $user, array $params ) {
                        global $wgRequest, $wgUser;
 
-                       // Write and close any current session
+                       $context = RequestContext::getMain();
+                       // Commit and close any current session
                        session_write_close(); // persist
                        session_id( '' ); // detach
                        $_SESSION = array(); // clear in-memory array
-                       // Load the new session from the session ID
-                       if ( strlen( $params['sessionId'] ) ) {
+                       // Remove any user IP or agent information
+                       $context->setRequest( new FauxRequest() );
+                       $wgRequest = $context->getRequest(); // b/c
+                       // Now that all private information is detached from the user, it should
+                       // be safe to load the new user. If errors occur or an exception is thrown
+                       // and caught (leaving the main context in a mixed state), there is no risk
+                       // of the User object being attached to the wrong IP, headers, or session.
+                       $context->setUser( $user );
+                       $wgUser = $context->getUser(); // b/c
+                       if ( strlen( $params['sessionId'] ) ) { // don't make a new random ID
                                wfSetupSession( $params['sessionId'] ); // sets $_SESSION
                        }
-                       // Build the new WebRequest object
                        $request = new FauxRequest( array(), false, $_SESSION );
                        $request->setIP( $params['ip'] );
                        foreach ( $params['headers'] as $name => $value ) {
                                $request->setHeader( $name, $value );
                        }
-
-                       $context = RequestContext::getMain();
                        // Set the current context to use the new WebRequest
                        $context->setRequest( $request );
                        $wgRequest = $context->getRequest(); // b/c
-                       // Set the current user based on the new session and WebRequest
-                       $context->setUser( User::newFromSession( $request ) ); // uses $_SESSION
-                       $wgUser = $context->getUser(); // b/c
                };
 
                // Stash the old session and load in the new one
-               $oldParams = self::getMain()->getRequest()->exportUserSession();
-               $importSessionFunction( $params );
+               $oUser = self::getMain()->getUser();
+               $oParams = self::getMain()->exportSession();
+               $importSessionFunction( $user, $params );
 
                // Set callback to save and close the new session and reload the old one
-               return new ScopedCallback( function() use ( $importSessionFunction, $oldParams ) {
-                       $importSessionFunction( $oldParams );
+               return new ScopedCallback( function() use ( $importSessionFunction, $oUser, $oParams ) {
+                       $importSessionFunction( $oUser, $oParams );
                } );
        }
 
index 65a74ab..5ad196d 100644 (file)
@@ -2488,7 +2488,7 @@ abstract class DatabaseBase implements DatabaseType {
                        }
 
                        # Now insert the row
-                       $this->insert( $table, $row );
+                       $this->insert( $table, $row, $fname );
                }
        }
 
index 331b8ae..628a2af 100644 (file)
@@ -37,7 +37,7 @@ class DBError extends MWException {
         * @param $db DatabaseBase object which threw the error
         * @param string $error A simple error message to be used for debugging
         */
-       function __construct( DatabaseBase &$db, $error ) {
+       function __construct( DatabaseBase $db = null, $error ) {
                $this->db = $db;
                parent::__construct( $error );
        }
@@ -91,7 +91,7 @@ class DBError extends MWException {
 class DBConnectionError extends DBError {
        public $error;
 
-       function __construct( DatabaseBase &$db, $error = 'unknown error' ) {
+       function __construct( DatabaseBase $db = null, $error = 'unknown error' ) {
                $msg = 'DB connection error';
 
                if ( trim( $error ) != '' ) {
@@ -158,7 +158,7 @@ class DBConnectionError extends DBError {
                # No database access
                MessageCache::singleton()->disable();
 
-               if ( trim( $this->error ) == '' ) {
+               if ( trim( $this->error ) == '' && $this->db ) {
                        $this->error = $this->db->getProperty( 'mServer' );
                }
 
@@ -288,7 +288,7 @@ class DBQueryError extends DBError {
         * @param $sql string
         * @param $fname string
         */
-       function __construct( DatabaseBase &$db, $error, $errno, $sql, $fname ) {
+       function __construct( DatabaseBase $db, $error, $errno, $sql, $fname ) {
                $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
                        "Query: $sql\n" .
                        "Function: $fname\n" .
index 6c45ffa..575f629 100644 (file)
@@ -661,7 +661,7 @@ class DatabaseMssql extends DatabaseBase {
                return $version;
        }
 
-       function tableExists ( $table, $fname = __METHOD__, $schema = false ) {
+       function tableExists( $table, $fname = __METHOD__, $schema = false ) {
                $res = sqlsrv_query( $this->mConn, "SELECT * FROM information_schema.tables
                        WHERE table_type='BASE TABLE' AND table_name = '$table'" );
                if ( $res === false ) {
@@ -952,7 +952,7 @@ class DatabaseMssql extends DatabaseBase {
  */
 class MssqlField implements Field {
        private $name, $tablename, $default, $max_length, $nullable, $type;
-       function __construct ( $info ) {
+       function __construct( $info ) {
                $this->name = $info['COLUMN_NAME'];
                $this->tablename = $info['TABLE_NAME'];
                $this->default = $info['COLUMN_DEFAULT'];
index ef7692c..0f7eb9e 100644 (file)
@@ -208,7 +208,7 @@ class DatabaseMysql extends DatabaseBase {
                // Unfortunately, mysql_fetch_object does not reset the last errno.
                // Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
                // these are the only errors mysql_fetch_object can cause.
-               // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+               // See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
                if( $errno == 2000 || $errno == 2013 ) {
                        throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
                }
@@ -232,7 +232,7 @@ class DatabaseMysql extends DatabaseBase {
                // Unfortunately, mysql_fetch_array does not reset the last errno.
                // Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
                // these are the only errors mysql_fetch_object can cause.
-               // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+               // See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
                if( $errno == 2000 || $errno == 2013 ) {
                        throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
                }
@@ -251,9 +251,11 @@ class DatabaseMysql extends DatabaseBase {
                wfSuppressWarnings();
                $n = mysql_num_rows( $res );
                wfRestoreWarnings();
-               if( $this->lastErrno() ) {
-                       throw new DBUnexpectedError( $this, 'Error in numRows(): ' . htmlspecialchars( $this->lastError() ) );
-               }
+               // Unfortunately, mysql_num_rows does not reset the last errno.
+               // We are not checking for any errors here, since
+               // these are no errors mysql_num_rows can cause.
+               // See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
+               // See https://bugzilla.wikimedia.org/42430
                return $n;
        }
 
@@ -963,7 +965,7 @@ class MySQLField implements Field {
        private $name, $tablename, $default, $max_length, $nullable,
                $is_pk, $is_unique, $is_multiple, $is_key, $type;
 
-       function __construct ( $info ) {
+       function __construct( $info ) {
                $this->name = $info->name;
                $this->tablename = $info->table;
                $this->default = $info->def;
index 75b3550..7db032f 100644 (file)
@@ -493,7 +493,7 @@ class DatabaseOracle extends DatabaseBase {
                return $retVal;
        }
 
-       private function fieldBindStatement ( $table, $col, &$val, $includeCol = false ) {
+       private function fieldBindStatement( $table, $col, &$val, $includeCol = false ) {
                $col_info = $this->fieldInfoMulti( $table, $col );
                $col_type = $col_info != false ? $col_info->type() : 'CONSTANT';
 
@@ -1121,7 +1121,7 @@ class DatabaseOracle extends DatabaseBase {
                }
        }
 
-       private function wrapConditionsForWhere ( $table, $conds, $parentCol = null ) {
+       private function wrapConditionsForWhere( $table, $conds, $parentCol = null ) {
                $conds2 = array();
                foreach ( $conds as $col => $val ) {
                        if ( is_array( $val ) ) {
index f32d775..c6ac11a 100644 (file)
@@ -218,7 +218,7 @@ class SavepointPostgres {
        protected $id;
        protected $didbegin;
 
-       public function __construct ( $dbw, $id ) {
+       public function __construct( $dbw, $id ) {
                $this->dbw = $dbw;
                $this->id = $id;
                $this->didbegin = false;
@@ -450,7 +450,7 @@ class DatabasePostgres extends DatabaseBase {
                return $this->mLastResult;
        }
 
-       protected function dumpError () {
+       protected function dumpError() {
                $diags = array( PGSQL_DIAG_SEVERITY,
                                PGSQL_DIAG_SQLSTATE,
                                PGSQL_DIAG_MESSAGE_PRIMARY,
@@ -647,7 +647,7 @@ class DatabasePostgres extends DatabaseBase {
         * @since 1.19
         * @return Array
         */
-       function indexAttributes ( $index, $schema = false ) {
+       function indexAttributes( $index, $schema = false ) {
                if ( $schema === false )
                        $schema = $this->getCoreSchema();
                /*
index 2434650..0789e1b 100644 (file)
@@ -471,7 +471,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function makeSelectOptions( $options ) {
                foreach ( $options as $k => $v ) {
-                       if ( is_numeric( $k ) && $v == 'FOR UPDATE' ) {
+                       if ( is_numeric( $k ) && ($v == 'FOR UPDATE' || $v == 'LOCK IN SHARE MODE') ) {
                                $options[$k] = '';
                        }
                }
index b41c1e8..9a1c8bd 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * This file contains database-related utiliy classes.
+ * This file contains database-related utility classes.
  *
  * 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
index aeebb13..187870f 100644 (file)
@@ -407,7 +407,7 @@ class LoadBalancer {
                                wfDebug( __METHOD__ . ": no connection open\n" );
                                return false;
                        } else {
-                               $conn = $this->openConnection( $index );
+                               $conn = $this->openConnection( $index, '' );
                                if ( !$conn ) {
                                        wfDebug( __METHOD__ . ": failed to open connection\n" );
                                        return false;
@@ -481,7 +481,7 @@ class LoadBalancer {
                        if ( $i === false ) {
                                $this->mLastError = 'No working slave server: ' . $this->mLastError;
                                wfProfileOut( __METHOD__ );
-                               return $this->reportConnectionError( $this->mErrorConnection );
+                               return $this->reportConnectionError();
                        }
                }
 
@@ -489,7 +489,7 @@ class LoadBalancer {
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
                        wfProfileOut( __METHOD__ );
-                       return $this->reportConnectionError( $this->mErrorConnection );
+                       return $this->reportConnectionError();
                }
 
                wfProfileOut( __METHOD__ );
@@ -708,17 +708,18 @@ class LoadBalancer {
        }
 
        /**
-        * @param $conn
-        * @return bool
         * @throws DBConnectionError
+        * @return bool
         */
-       function reportConnectionError( &$conn ) {
+       private function reportConnectionError() {
+               $conn = $this->mErrorConnection; // The connection which caused the error
+
                if ( !is_object( $conn ) ) {
                        // No last connection, probably due to all servers being too busy
                        wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}\n" );
-                       $conn = new Database;
+
                        // If all servers were busy, mLastError will contain something sensible
-                       throw new DBConnectionError( $conn, $this->mLastError );
+                       throw new DBConnectionError( null, $this->mLastError );
                } else {
                        $server = $conn->getProperty( 'mServer' );
                        wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
index 7fb7ae1..6c1f27f 100644 (file)
@@ -261,6 +261,11 @@ class ORMRow implements IORMRow {
                        if ( array_key_exists( $name, $this->fields ) ) {
                                $value = $this->fields[$name];
 
+                               // Skip null id fields so that the DBMS can set the default.
+                               if ( $name === 'id' && is_null ( $value ) ) {
+                                       continue;
+                               }
+
                                switch ( $type ) {
                                        case 'array':
                                                $value = (array)$value;
index 94ffc06..1a26d0c 100644 (file)
@@ -183,7 +183,7 @@ class _DiffEngine {
         * @param $to_lines
         * @return array
         */
-       function diff ( $from_lines, $to_lines ) {
+       function diff( $from_lines, $to_lines ) {
                wfProfileIn( __METHOD__ );
 
                // Diff and store locally
@@ -241,7 +241,7 @@ class _DiffEngine {
         * @param $from_lines
         * @param $to_lines
         */
-       function diff_local ( $from_lines, $to_lines ) {
+       function diff_local( $from_lines, $to_lines ) {
                global $wgExternalDiffEngine;
                wfProfileIn( __METHOD__ );
 
@@ -469,7 +469,7 @@ class _DiffEngine {
         * @param $yoff
         * @param $ylim
         */
-       function _compareseq ( $xoff, $xlim, $yoff, $ylim ) {
+       function _compareseq( $xoff, $xlim, $yoff, $ylim ) {
                // Slide down the bottom initial diagonal.
                while ( $xoff < $xlim && $yoff < $ylim
                && $this->xv[$xoff] == $this->yv[$yoff] ) {
@@ -1204,7 +1204,7 @@ class _HWLDF_WordAccumulator {
         * @param $words
         * @param $tag string
         */
-       function addWords ( $words, $tag = '' ) {
+       function addWords( $words, $tag = '' ) {
                if ( $tag != $this->_tag ) {
                        $this->_flushGroup( $tag );
                }
@@ -1244,7 +1244,7 @@ class WordLevelDiff extends MappedDiff {
         * @param $orig_lines
         * @param $closing_lines
         */
-       function __construct ( $orig_lines, $closing_lines ) {
+       function __construct( $orig_lines, $closing_lines ) {
                wfProfileIn( __METHOD__ );
 
                list( $orig_words, $orig_stripped ) = $this->_split( $orig_lines );
index 67af7ae..0f3c77f 100644 (file)
@@ -267,6 +267,8 @@ class DifferenceEngine extends ContextSource {
                $deleted = $suppressed = false;
                $allowed = $this->mNewRev->userCan( Revision::DELETED_TEXT, $user );
 
+               $revisionTools = array();
+
                # mOldRev is false if the difference engine is called with a "vague" query for
                # a diff between a version V and its previous version V' AND the version V
                # is the first version of that article. In that case, V' does not exist.
@@ -301,8 +303,7 @@ class DifferenceEngine extends ContextSource {
                                        }
                                }
                                if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
-                                       $undoLink = ' ' . $this->msg( 'parentheses' )->rawParams(
-                                               Html::element( 'a', array(
+                                       $undoLink = Html::element( 'a', array(
                                                        'href' => $this->mNewPage->getLocalUrl( array(
                                                                'action' => 'edit',
                                                                'undoafter' => $this->mOldid,
@@ -310,7 +311,8 @@ class DifferenceEngine extends ContextSource {
                                                        'title' => Linker::titleAttrib( 'undo' )
                                                ),
                                                $this->msg( 'editundo' )->text()
-                                       ) )->escaped();
+                                       );
+                                       $revisionTools[] = $undoLink;
                                }
                        }
 
@@ -376,7 +378,15 @@ class DifferenceEngine extends ContextSource {
 
                # Handle RevisionDelete links...
                $rdel = $this->revisionDeleteLink( $this->mNewRev );
-               $newRevisionHeader = $this->getRevisionHeader( $this->mNewRev, 'complete' ) . $undoLink;
+
+               # Allow extensions to define their own revision tools
+               wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools ) );
+               $formattedRevisionTools = array();
+               // Put each one in parentheses (poor man's button)
+               foreach ( $revisionTools as $tool ) {
+                       $formattedRevisionTools[] = $this->msg( 'parentheses' )->rawParams( $tool )->escaped();
+               }
+               $newRevisionHeader = $this->getRevisionHeader( $this->mNewRev, 'complete' ) . ' ' . implode( ' ', $formattedRevisionTools );
 
                $newHeader = '<div id="mw-diff-ntitle1"><strong>' . $newRevisionHeader . '</strong></div>' .
                        '<div id="mw-diff-ntitle2">' . Linker::revUserTools( $this->mNewRev, !$this->unhide ) .
index 10a6d45..ea6f6e5 100644 (file)
@@ -29,7 +29,7 @@
  * (http://citeseer.ist.psu.edu/myers86ond.html) with range compression (see Wu et al.'s
  * "An O(NP) Sequence Comparison Algorithm").
  *
- * This implementation supports an upper bound on the excution time.
+ * This implementation supports an upper bound on the execution time.
  *
  * Complexity: O((M + N)D) worst case time, O(M + N + D^2) expected time, O(M + N) space
  *
index 6c13f8e..4ca193d 100644 (file)
  * Constructor class for key/value blob data kept in external repositories.
  *
  * Objects in external stores are defined by a special URL. The URL is of
- * the form "<store protocal>://<location>/<object name>". The protocal is used
+ * the form "<store protocol>://<location>/<object name>". The protocol is used
  * to determine what ExternalStoreMedium class is used. The location identifies
  * particular storage instances or database clusters for store class to use.
  *
  * When an object is inserted into a store, the calling code uses a partial URL of
- * the form "<store protocal>://<location>" and receives the full object URL on success.
+ * the form "<store protocol>://<location>" and receives the full object URL on success.
  * This is useful since object names can be sequential IDs, UUIDs, or hashes.
  * Callers are not responsible for unique name generation.
  *
index 00fd6fb..638e7cd 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
  * @defgroup FileBackend File backend
- * @ingroup  FileRepo
  *
  * File backend is used to interact with file storage systems,
  * such as the local file system, NFS, or cloud storage systems.
@@ -191,7 +190,6 @@ abstract class FileBackend {
         *         'content'             => <string of new file contents>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
-        *         'disposition'         => <Content-Disposition header value>,
         *         'headers'             => <HTTP header name/value map> # since 1.21
         *     );
         * @endcode
@@ -204,7 +202,6 @@ abstract class FileBackend {
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
-        *         'disposition'         => <Content-Disposition header value>,
         *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
@@ -218,7 +215,7 @@ abstract class FileBackend {
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
         *         'ignoreMissingSource' => <boolean>, # since 1.21
-        *         'disposition'         => <Content-Disposition header value>
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
         *
@@ -231,7 +228,7 @@ abstract class FileBackend {
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
         *         'ignoreMissingSource' => <boolean>, # since 1.21
-        *         'disposition'         => <Content-Disposition header value>
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
         *
@@ -249,7 +246,6 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'describe',
         *         'src'                 => <storage path>,
-        *         'disposition'         => <Content-Disposition header value>,
         *         'headers'             => <HTTP header name/value map>
         *     )
         * @endcode
@@ -268,13 +264,11 @@ abstract class FileBackend {
         *   - overwriteSame       : An error will not be given if a file already
         *                           exists at the destination that has the same
         *                           contents as the new contents to be written there.
-        *   - disposition         : If supplied, the backend will return a Content-Disposition
-        *                           header when GETs/HEADs of the destination file are made.
-        *                           Backends that don't support metadata ignore this.
-        *                           See http://tools.ietf.org/html/rfc6266. (since 1.20)
         *   - headers             : If supplied, the backend will return these headers when
         *                           GETs/HEADs of the destination file are made. Header values
         *                           should be smaller than 256 bytes, often options or numbers.
+        *                           Content-Disposition headers can be longer, though the system
+        *                           might ignore or truncate ones that are too long to store.
         *                           Existing headers will remain, but these will replace any
         *                           conflicting previous headers, and headers will be removed
         *                           if they are set to an empty string.
@@ -321,6 +315,11 @@ abstract class FileBackend {
                if ( empty( $opts['force'] ) ) { // sanity
                        unset( $opts['nonLocking'] );
                }
+               foreach ( $ops as &$op ) {
+                       if ( isset( $op['disposition'] ) ) { // b/c (MW 1.20)
+                               $op['headers']['Content-Disposition'] = $op['disposition'];
+                       }
+               }
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doOperationsInternal( $ops, $opts );
        }
@@ -452,7 +451,6 @@ abstract class FileBackend {
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>,
-        *         'disposition'         => <Content-Disposition header value>,
         *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
@@ -463,7 +461,6 @@ abstract class FileBackend {
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
         *         'dst'                 => <storage path>,
-        *         'disposition'         => <Content-Disposition header value>,
         *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
@@ -475,7 +472,7 @@ abstract class FileBackend {
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>,
         *         'ignoreMissingSource' => <boolean>, # since 1.21
-        *         'disposition'         => <Content-Disposition header value>
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
         *
@@ -486,7 +483,7 @@ abstract class FileBackend {
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>,
         *         'ignoreMissingSource' => <boolean>, # since 1.21
-        *         'disposition'         => <Content-Disposition header value>
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
         *
@@ -504,7 +501,6 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'describe',
         *         'src'                 => <storage path>,
-        *         'disposition'         => <Content-Disposition header value>,
         *         'headers'             => <HTTP header name/value map>
         *     )
         * @endcode
@@ -519,13 +515,11 @@ abstract class FileBackend {
         * @par Boolean flags for operations (operation-specific):
         *   - ignoreMissingSource : The operation will simply succeed and do
         *                           nothing if the source file does not exist.
-        *   - disposition         : When supplied, the backend will add a Content-Disposition
-        *                           header when GETs/HEADs of the destination file are made.
-        *                           Backends that don't support file metadata will ignore this.
-        *                           See http://tools.ietf.org/html/rfc6266 (since 1.20).
         *   - headers             : If supplied with a header name/value map, the backend will
         *                           reply with these headers when GETs/HEADs of the destination
         *                           file are made. Header values should be smaller than 256 bytes.
+        *                           Content-Disposition headers can be longer, though the system
+        *                           might ignore or truncate ones that are too long to store.
         *                           Existing headers will remain, but these will replace any
         *                           conflicting previous headers, and headers will be removed
         *                           if they are set to an empty string.
@@ -551,6 +545,9 @@ abstract class FileBackend {
                }
                foreach ( $ops as &$op ) {
                        $op['overwrite'] = true; // avoids RTTs in key/value stores
+                       if ( isset( $op['disposition'] ) ) { // b/c (MW 1.20)
+                               $op['headers']['Content-Disposition'] = $op['disposition'];
+                       }
                }
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doQuickOperationsInternal( $ops );
@@ -684,7 +681,7 @@ abstract class FileBackend {
         * except they are only applied *if* the directory/container had to be created.
         * These flags should always be set for directories that have private files.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - dir            : storage directory
         *   - noAccess       : try to deny file access (since 1.20)
@@ -712,7 +709,7 @@ abstract class FileBackend {
         * access to the storage user representing end-users in web requests.
         * This is not guaranteed to actually do anything.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - dir            : storage directory
         *   - noAccess       : try to deny file access
@@ -740,7 +737,7 @@ abstract class FileBackend {
         * access to the storage user representing end-users in web requests.
         * This essentially can undo the result of secure() calls.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - dir            : storage directory
         *   - access         : try to allow file access
@@ -767,7 +764,7 @@ abstract class FileBackend {
         * Backends using key/value stores may do nothing unless the directory
         * is that of an empty container, in which case it will be deleted.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - dir            : storage directory
         *   - recursive      : recursively delete empty subdirectories first (since 1.20)
@@ -806,7 +803,7 @@ abstract class FileBackend {
         * Check if a file exists at a storage path in the backend.
         * This returns false if only a directory exists at the path.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -817,7 +814,7 @@ abstract class FileBackend {
        /**
         * Get the last-modified timestamp of the file at a storage path.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -829,7 +826,7 @@ abstract class FileBackend {
         * Get the contents of a file at a storage path in the backend.
         * This should be avoided for potentially large files.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -849,7 +846,7 @@ abstract class FileBackend {
         *
         * @see FileBackend::getFileContents()
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
@@ -862,7 +859,7 @@ abstract class FileBackend {
        /**
         * Get the size (bytes) of a file at a storage path in the backend.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -878,7 +875,7 @@ abstract class FileBackend {
         *   - size   : the file size (bytes)
         * Additional values may be included for internal use only.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -889,7 +886,7 @@ abstract class FileBackend {
        /**
         * Get a SHA-1 hash of the file at a storage path in the backend.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -901,7 +898,7 @@ abstract class FileBackend {
         * Get the properties of the file at a storage path in the backend.
         * This gives the result of FSFile::getProps() on a local copy of the file.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -916,7 +913,7 @@ abstract class FileBackend {
         * will be sent if streaming began, while none will be sent otherwise.
         * Implementations should flush the output buffer before sending data.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src     : source storage path
         *   - headers : list of additional HTTP headers to send on success
@@ -938,7 +935,7 @@ abstract class FileBackend {
         * In that later case, there are copies of the file that must stay in sync.
         * Additionally, further calls to this function may return the same file.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -958,7 +955,7 @@ abstract class FileBackend {
         *
         * @see FileBackend::getLocalReference()
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
@@ -973,7 +970,7 @@ abstract class FileBackend {
         * The temporary copy will have the same file extension as the source.
         * Temporary files may be purged when the file object falls out of scope.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
@@ -993,7 +990,7 @@ abstract class FileBackend {
         *
         * @see FileBackend::getLocalCopy()
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
@@ -1013,7 +1010,7 @@ abstract class FileBackend {
         * Otherwise, one would need to use getLocalReference(), which involves loading
         * the entire file on to local disk.
         *
-        * @param $params Array
+        * @param array $params
         * $params include:
         *   - src : source storage path
         *   - ttl : lifetime (seconds) if pre-authenticated; default is 1 day
index 1e98adc..939315d 100644 (file)
@@ -343,7 +343,13 @@ class FileBackendMultiWrite extends FileBackend {
                $paths = array();
                foreach ( $ops as $op ) {
                        if ( isset( $op['src'] ) ) {
-                               $paths[] = $op['src'];
+                               // For things like copy/move/delete with "ignoreMissingSource" and there
+                               // is no source file, nothing should happen and there should be no errors.
+                               if ( empty( $op['ignoreMissingSource'] )
+                                       || $this->fileExists( array( 'src' => $op['src'] ) ) )
+                               {
+                                       $paths[] = $op['src'];
+                               }
                        }
                        if ( isset( $op['srcs'] ) ) {
                                $paths = array_merge( $paths, $op['srcs'] );
index 3723df0..1a9ac3b 100644 (file)
@@ -92,7 +92,6 @@ abstract class FileBackendStore extends FileBackend {
         * $params include:
         *   - content     : the raw file contents
         *   - dst         : destination storage path
-        *   - disposition : Content-Disposition header value for the destination
         *   - headers     : HTTP header name/value map
         *   - async       : Status will be returned immediately if supported.
         *                   If the status is OK, then its value field will be
@@ -100,7 +99,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - dstExists   : Whether a file exists at the destination (optimization).
         *                   Callers can use "false" if no existing file is being changed.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function createInternal( array $params ) {
@@ -135,7 +134,6 @@ abstract class FileBackendStore extends FileBackend {
         * $params include:
         *   - src         : source path on disk
         *   - dst         : destination storage path
-        *   - disposition : Content-Disposition header value for the destination
         *   - headers     : HTTP header name/value map
         *   - async       : Status will be returned immediately if supported.
         *                   If the status is OK, then its value field will be
@@ -143,7 +141,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - dstExists   : Whether a file exists at the destination (optimization).
         *                   Callers can use "false" if no existing file is being changed.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function storeInternal( array $params ) {
@@ -179,14 +177,14 @@ abstract class FileBackendStore extends FileBackend {
         *   - src                 : source storage path
         *   - dst                 : destination storage path
         *   - ignoreMissingSource : do nothing if the source file does not exist
-        *   - disposition         : Content-Disposition header value for the destination
+        *   - headers             : HTTP header name/value map
         *   - async               : Status will be returned immediately if supported.
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
         *   - dstExists           : Whether a file exists at the destination (optimization).
         *                           Callers can use "false" if no existing file is being changed.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function copyInternal( array $params ) {
@@ -219,7 +217,7 @@ abstract class FileBackendStore extends FileBackend {
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function deleteInternal( array $params ) {
@@ -248,14 +246,14 @@ abstract class FileBackendStore extends FileBackend {
         *   - src                 : source storage path
         *   - dst                 : destination storage path
         *   - ignoreMissingSource : do nothing if the source file does not exist
-        *   - disposition         : Content-Disposition header value for the destination
+        *   - headers             : HTTP header name/value map
         *   - async               : Status will be returned immediately if supported.
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
         *   - dstExists           : Whether a file exists at the destination (optimization).
         *                           Callers can use "false" if no existing file is being changed.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function moveInternal( array $params ) {
@@ -294,13 +292,12 @@ abstract class FileBackendStore extends FileBackend {
         *
         * $params include:
         *   - src           : source storage path
-        *   - disposition   : Content-Disposition header value for the destination
         *   - headers       : HTTP header name/value map
         *   - async         : Status will be returned immediately if supported.
         *                     If the status is OK, then its value field will be
         *                     set to a FileBackendStoreOpHandle object.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function describeInternal( array $params ) {
@@ -326,7 +323,7 @@ abstract class FileBackendStore extends FileBackend {
         * No-op file operation that does nothing.
         * Do not call this function from places outside FileBackend and FileOp.
         *
-        * @param $params Array
+        * @param array $params
         * @return Status
         */
        final public function nullInternal( array $params ) {
@@ -971,7 +968,7 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param $params Array
+        * @param array $params
         * @return bool|null
         */
        abstract protected function doDirectoryExists( $container, $dir, array $params );
@@ -1004,7 +1001,7 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param $params Array
+        * @param array $params
         * @return Traversable|Array|null Returns null on failure
         */
        abstract public function getDirectoryListInternal( $container, $dir, array $params );
@@ -1037,7 +1034,7 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param $params Array
+        * @param array $params
         * @return Traversable|Array|null Returns null on failure
         */
        abstract public function getFileListInternal( $container, $dir, array $params );
@@ -1277,15 +1274,20 @@ abstract class FileBackendStore extends FileBackend {
        }
 
        /**
-        * Strip long HTTP headers from a file operation
+        * Strip long HTTP headers from a file operation.
+        * Most headers are just numbers, but some are allowed to be long.
+        * This function is useful for cleaning up headers and avoiding backend
+        * specific errors, especially in the middle of batch file operations.
         *
         * @param array $op Same format as doOperation()
         * @return Array
         */
        protected function stripInvalidHeadersFromOp( array $op ) {
-               if ( isset( $op['headers'] ) ) {
+               static $longs = array( 'Content-Disposition' );
+               if ( isset( $op['headers'] ) ) { // op sets HTTP headers
                        foreach ( $op['headers'] as $name => $value ) {
-                               if ( strlen( $name ) > 255 || strlen( $value ) > 255 ) {
+                               $maxHVLen = in_array( $name, $longs ) ? INF : 255;
+                               if ( strlen( $name ) > 255 || strlen( $value ) > $maxHVLen ) {
                                        trigger_error( "Header '$name: $value' is too long." );
                                        unset( $op['headers'][$name] );
                                } elseif ( !strlen( $value ) ) {
@@ -1809,7 +1811,7 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
         * @param string $container Full storage container name
         * @param string $dir Storage directory relative to container
         * @param array $suffixes List of container shard suffixes
-        * @param $params Array
+        * @param array $params
         */
        public function __construct(
                FileBackendStore $backend, $container, $dir, array $suffixes, array $params
@@ -1937,7 +1939,7 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param $params Array
+        * @param array $params
         * @return Traversable|Array|null
         */
        abstract protected function listFromShard( $container, $dir, array $params );
index bb0ab57..e019324 100644 (file)
@@ -457,7 +457,7 @@ abstract class FileOp {
 class CreateFileOp extends FileOp {
        protected function allowedParams() {
                return array( array( 'content', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'disposition', 'headers' ) );
+                       array( 'overwrite', 'overwriteSame', 'headers' ) );
        }
 
        protected function doPrecheck( array &$predicates ) {
@@ -521,7 +521,7 @@ class StoreFileOp extends FileOp {
         */
        protected function allowedParams() {
                return array( array( 'src', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'disposition', 'headers' ) );
+                       array( 'overwrite', 'overwriteSame', 'headers' ) );
        }
 
        /**
@@ -596,7 +596,7 @@ class CopyFileOp extends FileOp {
         */
        protected function allowedParams() {
                return array( array( 'src', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'ignoreMissingSource', 'disposition' ) );
+                       array( 'overwrite', 'overwriteSame', 'ignoreMissingSource', 'headers' ) );
        }
 
        /**
@@ -673,7 +673,7 @@ class MoveFileOp extends FileOp {
         */
        protected function allowedParams() {
                return array( array( 'src', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'ignoreMissingSource', 'disposition' ) );
+                       array( 'overwrite', 'overwriteSame', 'ignoreMissingSource', 'headers' ) );
        }
 
        /**
@@ -813,7 +813,7 @@ class DescribeFileOp extends FileOp {
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src' ), array( 'disposition', 'headers' ) );
+               return array( array( 'src' ), array( 'headers' ) );
        }
 
        /**
index 78386e0..aadad5c 100644 (file)
@@ -194,7 +194,19 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        /**
-        * @param string $disposition Content-Disposition header value
+        * @param $headers array
+        * @return array
+        */
+       protected function sanitizeHdrs( array $headers ) {
+               // By default, Swift has annoyingly low maximum header value limits
+               if ( isset( $headers['Content-Disposition'] ) ) {
+                       $headers['Content-Disposition'] = $this->truncDisp( $headers['Content-Disposition'] );
+               }
+               return $headers;
+       }
+
+       /**
+        * @param $disposition string Content-Disposition header value
         * @return string Truncated Content-Disposition header value to meet Swift limits
         */
        protected function truncDisp( $disposition ) {
@@ -252,13 +264,9 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( !strlen( $obj->content_type ) ) { // special case
                                $obj->content_type = 'unknown/unknown';
                        }
-                       // Set the Content-Disposition header if requested
-                       if ( isset( $params['disposition'] ) ) {
-                               $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
-                       }
                        // Set any other custom headers if requested
                        if ( isset( $params['headers'] ) ) {
-                               $obj->headers += $params['headers'];
+                               $obj->headers += $this->sanitizeHdrs( $params['headers'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $obj->write_async( $params['content'] );
@@ -337,13 +345,9 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( !strlen( $obj->content_type ) ) { // special case
                                $obj->content_type = 'unknown/unknown';
                        }
-                       // Set the Content-Disposition header if requested
-                       if ( isset( $params['disposition'] ) ) {
-                               $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
-                       }
                        // Set any other custom headers if requested
                        if ( isset( $params['headers'] ) ) {
-                               $obj->headers += $params['headers'];
+                               $obj->headers += $this->sanitizeHdrs( $params['headers'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
@@ -411,7 +415,9 @@ class SwiftFileBackend extends FileBackendStore {
                        $sContObj = $this->getContainer( $srcCont );
                        $dContObj = $this->getContainer( $dstCont );
                } catch ( NoSuchContainerException $e ) {
-                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                       if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
+                               $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                       }
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
@@ -422,8 +428,9 @@ class SwiftFileBackend extends FileBackendStore {
                try {
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
                        $hdrs = array(); // source file headers to override with new values
-                       if ( isset( $params['disposition'] ) ) {
-                               $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+                       // Set any other custom headers if requested
+                       if ( isset( $params['headers'] ) ) {
+                               $hdrs += $this->sanitizeHdrs( $params['headers'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
@@ -481,7 +488,9 @@ class SwiftFileBackend extends FileBackendStore {
                        $sContObj = $this->getContainer( $srcCont );
                        $dContObj = $this->getContainer( $dstCont );
                } catch ( NoSuchContainerException $e ) {
-                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                       if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
+                               $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                       }
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
@@ -493,8 +502,9 @@ class SwiftFileBackend extends FileBackendStore {
                        $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
                        $hdrs = array(); // source file headers to override with new values
-                       if ( isset( $params['disposition'] ) ) {
-                               $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+                       // Set any other custom headers if requested
+                       if ( isset( $params['headers'] ) ) {
+                               $hdrs += $this->sanitizeHdrs( $params['headers'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
@@ -557,7 +567,9 @@ class SwiftFileBackend extends FileBackendStore {
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
                } catch ( NoSuchContainerException $e ) {
-                       $status->fatal( 'backend-fail-delete', $params['src'] );
+                       if ( empty( $params['ignoreMissingSource'] ) ) {
+                               $status->fatal( 'backend-fail-delete', $params['src'] );
+                       }
                } catch ( NoSuchObjectException $e ) {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
@@ -597,19 +609,15 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               $hdrs = isset( $params['headers'] ) ? $params['headers'] : array();
-               // Set the Content-Disposition header if requested
-               if ( isset( $params['disposition'] ) ) {
-                       $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
-               }
-
                try {
                        $sContObj = $this->getContainer( $srcCont );
                        // Get the latest version of the current metadata
                        $srcObj = $sContObj->get_object( $srcRel,
                                $this->headersFromParams( array( 'latest' => true ) ) );
                        // Merge in the metadata updates...
-                       $srcObj->headers = $hdrs + $srcObj->headers;
+                       if ( isset( $params['headers'] ) ) {
+                               $srcObj->headers = $this->sanitizeHdrs( $params['headers'] ) + $srcObj->headers;
+                       }
                        $srcObj->sync_metadata(); // save to Swift
                        $this->purgeCDNCache( array( $srcObj ) );
                } catch ( CDNNotEnabledException $e ) {
@@ -1257,7 +1265,7 @@ class SwiftFileBackend extends FileBackendStore {
         * on a FileBackend params array, e.g. that of getLocalCopy().
         * $params is currently only checked for a 'latest' flag.
         *
-        * @param $params Array
+        * @param array $params
         * @return Array
         */
        protected function headersFromParams( array $params ) {
@@ -1514,7 +1522,7 @@ class SwiftFileBackend extends FileBackendStore {
         * @param $e Exception
         * @param $status Status|null
         * @param $func string
-        * @param $params Array
+        * @param array $params
         * @return void
         */
        protected function handleException( Exception $e, $status, $func, array $params ) {
@@ -1583,7 +1591,7 @@ abstract class SwiftFileBackendList implements Iterator {
         * @param $backend SwiftFileBackend
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved directory relative to container
-        * @param $params Array
+        * @param array $params
         */
        public function __construct( SwiftFileBackend $backend, $fullCont, $dir, array $params ) {
                $this->backend = $backend;
@@ -1656,7 +1664,7 @@ abstract class SwiftFileBackendList implements Iterator {
         * @param string $dir Resolved path relative to container
         * @param $after string|null
         * @param $limit integer
-        * @param $params Array
+        * @param array $params
         * @return Traversable|Array|null Returns null on failure
         */
        abstract protected function pageFromList( $container, $dir, &$after, $limit, array $params );
index ae33a24..f02387d 100644 (file)
@@ -256,27 +256,38 @@ class MySqlLockManager extends DBLockManager {
                $status = Status::newGood();
 
                $db = $this->getConnection( $lockSrv ); // checked in isServerUp()
-               $keys = array_unique( array_map( array( $this, 'sha1Base36Absolute' ), $paths ) );
+
+               $keys = array(); // list of hash keys for the paths
+               $data = array(); // list of rows to insert
+               $checkEXKeys = array(); // list of hash keys that this has no EX lock on
                # Build up values for INSERT clause
-               $data = array();
-               foreach ( $keys as $key ) {
+               foreach ( $paths as $path ) {
+                       $key = $this->sha1Base36Absolute( $path );
+                       $keys[] = $key;
                        $data[] = array( 'fls_key' => $key, 'fls_session' => $this->session );
+                       if ( !isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
+                               $checkEXKeys[] = $key;
+                       }
                }
-               # Block new writers...
+
+               # Block new writers (both EX and SH locks leave entries here)...
                $db->insert( 'filelocks_shared', $data, __METHOD__, array( 'IGNORE' ) );
                # Actually do the locking queries...
                if ( $type == self::LOCK_SH ) { // reader locks
+                       $blocked = false;
                        # Bail if there are any existing writers...
-                       $blocked = $db->selectField( 'filelocks_exclusive', '1',
-                               array( 'fle_key' => $keys ),
-                               __METHOD__
-                       );
-                       # Prospective writers that haven't yet updated filelocks_exclusive
-                       # will recheck filelocks_shared after doing so and bail due to our entry.
+                       if ( count( $checkEXKeys ) ) {
+                               $blocked = $db->selectField( 'filelocks_exclusive', '1',
+                                       array( 'fle_key' => $checkEXKeys ),
+                                       __METHOD__
+                               );
+                       }
+                       # Other prospective writers that haven't yet updated filelocks_exclusive
+                       # will recheck filelocks_shared after doing so and bail due to this entry.
                } else { // writer locks
                        $encSession = $db->addQuotes( $this->session );
                        # Bail if there are any existing writers...
-                       # The may detect readers, but the safe check for them is below.
+                       # This may detect readers, but the safe check for them is below.
                        # Note: if two writers come at the same time, both bail :)
                        $blocked = $db->selectField( 'filelocks_shared', '1',
                                array( 'fls_key' => $keys, "fls_session != $encSession" ),
index f374fdd..eacba70 100644 (file)
@@ -43,7 +43,7 @@ class FSLockManager extends LockManager {
 
        protected $lockDir; // global dir for all servers
 
-       /** @var Array Map of (locked key => lock type => lock file handle) */
+       /** @var Array Map of (locked key => lock file handle) */
        protected $handles = array();
 
        /**
@@ -115,12 +115,16 @@ class FSLockManager extends LockManager {
                } elseif ( isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
                        $this->locksHeld[$path][$type] = 1;
                } else {
-                       wfSuppressWarnings();
-                       $handle = fopen( $this->getLockPath( $path ), 'a+' );
-                       wfRestoreWarnings();
-                       if ( !$handle ) { // lock dir missing?
-                               wfMkdirParents( $this->lockDir );
-                               $handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
+                       if ( isset( $this->handles[$path] ) ) {
+                               $handle = $this->handles[$path];
+                       } else {
+                               wfSuppressWarnings();
+                               $handle = fopen( $this->getLockPath( $path ), 'a+' );
+                               wfRestoreWarnings();
+                               if ( !$handle ) { // lock dir missing?
+                                       wfMkdirParents( $this->lockDir );
+                                       $handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
+                               }
                        }
                        if ( $handle ) {
                                // Either a shared or exclusive lock
@@ -128,7 +132,7 @@ class FSLockManager extends LockManager {
                                if ( flock( $handle, $lock | LOCK_NB ) ) {
                                        // Record this lock as active
                                        $this->locksHeld[$path][$type] = 1;
-                                       $this->handles[$path][$type] = $handle;
+                                       $this->handles[$path] = $handle;
                                } else {
                                        fclose( $handle );
                                        $status->fatal( 'lockmanager-fail-acquirelock', $path );
@@ -160,24 +164,13 @@ class FSLockManager extends LockManager {
                        --$this->locksHeld[$path][$type];
                        if ( $this->locksHeld[$path][$type] <= 0 ) {
                                unset( $this->locksHeld[$path][$type] );
-                               // If a LOCK_SH comes in while we have a LOCK_EX, we don't
-                               // actually add a handler, so check for handler existence.
-                               if ( isset( $this->handles[$path][$type] ) ) {
-                                       if ( $type === self::LOCK_EX
-                                               && isset( $this->locksHeld[$path][self::LOCK_SH] )
-                                               && !isset( $this->handles[$path][self::LOCK_SH] ) )
-                                       {
-                                               // EX lock came first: move this handle to the SH one
-                                               $this->handles[$path][self::LOCK_SH] = $this->handles[$path][$type];
-                                       } else {
-                                               // Mark this handle to be unlocked and closed
-                                               $handlesToClose[] = $this->handles[$path][$type];
-                                       }
-                                       unset( $this->handles[$path][$type] );
-                               }
                        }
                        if ( !count( $this->locksHeld[$path] ) ) {
                                unset( $this->locksHeld[$path] ); // no locks on this path
+                               if ( isset( $this->handles[$path] ) ) {
+                                       $handlesToClose[] = $this->handles[$path];
+                                       unset( $this->handles[$path] );
+                               }
                        }
                        // Unlock handles to release locks and delete
                        // any lock files that end up with no locks on them...
index 6d155df..0512a01 100644 (file)
@@ -54,6 +54,7 @@ abstract class LockManager {
        protected $locksHeld = array();
 
        protected $domain; // string; domain (usually wiki ID)
+       protected $lockTTL; // integer; maximum time locks can be held
 
        /* Lock types; stronger locks have higher values */
        const LOCK_SH = 1; // shared lock (for reads)
@@ -64,12 +65,22 @@ abstract class LockManager {
         * Construct a new instance from configuration
         *
         * $config paramaters include:
-        *   - domain : Domain (usually wiki ID) that all resources are relative to [optional]
+        *   - domain  : Domain (usually wiki ID) that all resources are relative to [optional]
+        *   - lockTTL : Age (in seconds) at which resource locks should expire.
+        *               This only applies if locks are not tied to a connection/process.
         *
         * @param $config Array
         */
        public function __construct( array $config ) {
                $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
+               if ( isset( $config['lockTTL'] ) ) {
+                       $this->lockTTL = max( 1, $config['lockTTL'] );
+               } elseif ( PHP_SAPI === 'cli' ) {
+                       $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 );
+               }
        }
 
        /**
index 6eb8b85..fafc588 100644 (file)
@@ -28,8 +28,8 @@
  * 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 memcached.
+ * 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 memcached.
  * A majority of peers must agree for a lock to be acquired.
  *
  * @ingroup LockManager
@@ -48,8 +48,7 @@ class MemcLockManager extends QuorumLockManager {
        /** @var Array */
        protected $serversUp = array(); // (server name => bool)
 
-       protected $lockExpiry; // integer; maximum time locks can be held
-       protected $session = ''; // string; random SHA-1 UUID
+       protected $session = ''; // string; random UUID
 
        /**
         * Construct a new instance from configuration.
@@ -86,9 +85,6 @@ class MemcLockManager extends QuorumLockManager {
                        }
                }
 
-               $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
-               $this->lockExpiry = $met ? 2*(int)$met : 2*3600;
-
                $this->session = wfRandomString( 32 );
        }
 
@@ -118,8 +114,8 @@ class MemcLockManager extends QuorumLockManager {
                foreach ( $paths as $path ) {
                        $locksKey = $this->recordKeyForPath( $path );
                        $locksHeld = isset( $lockRecords[$locksKey] )
-                               ? $lockRecords[$locksKey]
-                               : array( self::LOCK_SH => array(), self::LOCK_EX => array() ); // init
+                               ? self::sanitizeLockArray( $lockRecords[$locksKey] )
+                               : self::newLockArray(); // init
                        foreach ( $locksHeld[self::LOCK_EX] as $session => $expiry ) {
                                if ( $expiry < $now ) { // stale?
                                        unset( $locksHeld[self::LOCK_EX][$session] );
@@ -138,7 +134,7 @@ class MemcLockManager extends QuorumLockManager {
                        }
                        if ( $status->isOK() ) {
                                // Register the session in the lock record array
-                               $locksHeld[$type][$this->session] = $now + $this->lockExpiry;
+                               $locksHeld[$type][$this->session] = $now + $this->lockTTL;
                                // We will update this record if none of the other locks conflict
                                $lockRecords[$locksKey] = $locksHeld;
                        }
@@ -146,9 +142,15 @@ class MemcLockManager extends QuorumLockManager {
 
                // If there were no lock conflicts, update all the lock records...
                if ( $status->isOK() ) {
-                       foreach ( $lockRecords as $locksKey => $locksHeld ) {
-                               $memc->set( $locksKey, $locksHeld );
-                               wfDebug( __METHOD__ . ": acquired lock on key $locksKey.\n" );
+                       foreach ( $paths as $path ) {
+                               $locksKey = $this->recordKeyForPath( $path );
+                               $locksHeld = $lockRecords[$locksKey];
+                               $ok = $memc->set( $locksKey, $locksHeld, 7*86400 );
+                               if ( !$ok ) {
+                                       $status->fatal( 'lockmanager-fail-acquirelock', $path );
+                               } else {
+                                       wfDebug( __METHOD__ . ": acquired lock on key $locksKey.\n" );
+                               }
                        }
                }
 
@@ -183,17 +185,22 @@ class MemcLockManager extends QuorumLockManager {
                foreach ( $paths as $path ) {
                        $locksKey = $this->recordKeyForPath( $path ); // lock record
                        if ( !isset( $lockRecords[$locksKey] ) ) {
+                               $status->warning( 'lockmanager-fail-releaselock', $path );
                                continue; // nothing to do
                        }
-                       $locksHeld = $lockRecords[$locksKey];
-                       if ( is_array( $locksHeld ) && isset( $locksHeld[$type] ) ) {
-                               unset( $locksHeld[$type][$this->session] );
-                               $ok = $memc->set( $locksKey, $locksHeld );
+                       $locksHeld = self::sanitizeLockArray( $lockRecords[$locksKey] );
+                       if ( isset( $locksHeld[$type][$this->session] ) ) {
+                               unset( $locksHeld[$type][$this->session] ); // unregister this session
+                               if ( $locksHeld === self::newLockArray() ) {
+                                       $ok = $memc->delete( $locksKey );
+                               } else {
+                                       $ok = $memc->set( $locksKey, $locksHeld );
+                               }
+                               if ( !$ok ) {
+                                       $status->fatal( 'lockmanager-fail-releaselock', $path );
+                               }
                        } else {
-                               $ok = true;
-                       }
-                       if ( !$ok ) {
-                               $status->fatal( 'lockmanager-fail-releaselock', $path );
+                               $status->warning( 'lockmanager-fail-releaselock', $path );
                        }
                        wfDebug( __METHOD__ . ": released lock on key $locksKey.\n" );
                }
@@ -231,7 +238,7 @@ class MemcLockManager extends QuorumLockManager {
                if ( isset( $this->bagOStuffs[$lockSrv] ) ) {
                        $memc = $this->bagOStuffs[$lockSrv];
                        if ( !isset( $this->serversUp[$lockSrv] ) ) {
-                               $this->serversUp[$lockSrv] = $memc->set( 'MemcLockManager:ping', 1, 1 );
+                               $this->serversUp[$lockSrv] = $memc->set( __CLASS__ . ':ping', 1, 1 );
                                if ( !$this->serversUp[$lockSrv] ) {
                                        trigger_error( __METHOD__ . ": Could not contact $lockSrv.", E_USER_WARNING );
                                }
@@ -251,6 +258,26 @@ class MemcLockManager extends QuorumLockManager {
                return implode( ':', array( __CLASS__, 'locks', $this->sha1Base36Absolute( $path ) ) );
        }
 
+       /**
+        * @return Array An empty lock structure for a key
+        */
+       protected static function newLockArray() {
+               return array( self::LOCK_SH => array(), self::LOCK_EX => array() );
+       }
+
+       /**
+        * @param $a array
+        * @return Array An empty lock structure for a key
+        */
+       protected static function sanitizeLockArray( $a ) {
+               if ( is_array( $a ) && isset( $a[self::LOCK_EX] ) && isset( $a[self::LOCK_SH] ) ) {
+                       return $a;
+               } else {
+                       trigger_error( __METHOD__ . ": reset invalid lock array.", E_USER_WARNING );
+                       return self::newLockArray();
+               }
+       }
+
        /**
         * @param $memc MemcachedBagOStuff
         * @param array $keys List of keys to acquire
@@ -279,10 +306,10 @@ class MemcLockManager extends QuorumLockManager {
                                        continue; // acquire in order
                                }
                        }
-               } while ( count( $lockedKeys ) < count( $keys ) && ( microtime( true ) - $start ) <= 6 );
+               } while ( count( $lockedKeys ) < count( $keys ) && ( microtime( true ) - $start ) <= 3 );
 
                if ( count( $lockedKeys ) != count( $keys ) ) {
-                       $this->releaseMutexes( $lockedKeys ); // failed; release what was locked
+                       $this->releaseMutexes( $memc, $lockedKeys ); // failed; release what was locked
                        return false;
                }
 
index 010a38d..b331b54 100644 (file)
@@ -46,8 +46,6 @@ abstract class QuorumLockManager extends LockManager {
                foreach ( $paths as $path ) {
                        if ( isset( $this->locksHeld[$path][$type] ) ) {
                                ++$this->locksHeld[$path][$type];
-                       } elseif ( isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
-                               $this->locksHeld[$path][$type] = 1;
                        } else {
                                $bucket = $this->getBucketFromPath( $path );
                                $pathsToLock[$bucket][] = $path;
index 997255d..bb7e877 100644 (file)
@@ -191,7 +191,7 @@ class CliInstaller extends Installer {
                }
        }
 
-       public function envCheckPath( ) {
+       public function envCheckPath() {
                if ( !$this->specifiedScriptPath ) {
                        $this->showMessage( 'config-no-cli-uri', $this->getVar( "wgScriptPath" ) );
                }
index 3472b7f..8231e7f 100644 (file)
@@ -335,6 +335,8 @@ abstract class DatabaseInstaller {
         * @return String
         */
        public function getReadableName() {
+               // Give grep a chance to find the usages:
+               // config-type-mysql, config-type-postgres, config-type-sqlite, config-type-oracle
                return wfMessage( 'config-type-' . $this->getName() )->text();
        }
 
index 4b4bc23..b88ae61 100644 (file)
@@ -402,7 +402,7 @@ abstract class DatabaseUpdater {
 
                if( $this->fileHandle ) {
                        $this->skipSchema = false;
-                       $this->writeSchemaUpdateFile( );
+                       $this->writeSchemaUpdateFile();
                        $this->setAppliedUpdates( "$wgVersion-schema", $this->updatesSkipped );
                }
 
index e2fb735..a508e24 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Installer-specific wikitext formating.
+ * Installer-specific wikitext formatting.
  *
  * 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
index 863ec54..ee07a13 100644 (file)
@@ -315,7 +315,7 @@ This is '''not recommended''' unless you are having problems with your wiki.",
        'config-upgrade-done-no-regenerate' => "Upgrade complete.
 
 You can now [$1 start using your wiki].",
-       'config-regenerate'               => 'Regenerate <code>LocalSettings.php</code> →',
+       'config-regenerate'               => 'Regenerate LocalSettings.php →',
        'config-show-table-status'        => '<code>SHOW TABLE STATUS</code> query failed!',
        'config-unknown-collation'        => "'''Warning:''' Database is using unrecognized collation.",
        'config-db-web-account'           => 'Database account for web access',
@@ -580,11 +580,22 @@ $messages['qqq'] = array(
        'config-title' => 'Parameters:
 * $1 is the version of MediaWiki that is being installed.',
        'config-information' => '{{Identical|Information}}',
+       'config-localsettings-upgrade' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>$wgUpgradeKey</code>.}}',
        'config-localsettings-cli-upgrade' => '{{doc-important|Do not translate the <code>LocalSettings.php</code> and the <code>update.php</code> parts.}}',
+       'config-upgrade-key-missing' => 'Used in info box. Parameters:
+* $1 - the upgrade key, enclosed in <code><nowiki><pre></nowikI></code> tag.',
+       'config-localsettings-incomplete' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code><nowiki>{{int:Config-continue}}</nowiki><code>.}}
+Parameters:
+* $1 - name of variable (any one of required variables or installer-specific global variables)',
+       'config-localsettings-connection-error' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>AdminSettings.php</code>.}}
+Used as error message. Parameters:
+* $1 - (probably empty string)',
        'config-session-error' => 'Parameters:
 * $1 is the error that was encountered with the session.',
        'config-session-expired' => 'Parameters:
 * $1 is the configured session lifetime.',
+       'config-no-session' => '{{doc-important|Do not translate <code>php.ini</code> and <code>session.save_path</code>.}}
+Used as error message.',
        'config-back' => '{{Identical|Back}}',
        'config-continue' => '{{Identical|Continue}}',
        'config-page-language' => '{{Identical|Language}}',
@@ -593,14 +604,28 @@ $messages['qqq'] = array(
        'config-page-install' => '{{Identical|Install}}',
        'config-page-copying' => 'This is a link to the full GPL text',
        'config-restart' => 'Button text to confirm the installation procedure has to be restarted.',
+       'config-copyright' => 'This message follows {{msg-mw|config-env-good}}.
+
+Parameters:
+* $1 - copyright and author list',
        'config-sidebar' => 'Maximum width for words is 24 characters. Only visible part of the translation counts to this limit.',
        'config-env-php' => 'Parameters:
-* $1 is the version of PHP that has been installed.',
+* $1 - the version of PHP that has been installed
+See also:
+* {{msg-mw|config-env-php-toolow}}',
+       'config-env-php-toolow' => 'Parameters:
+* $1 - the version of PHP that has been installed
+* $2 - minimum PHP version number
+See also:
+* {{msg-mw|config-env-php}}',
        'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.',
        'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
        'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysql</code>" and "<code>php5-mysql</code>".}}
 Parameters:
 * $1 is comma separated list of database types supported by MediaWiki.',
+       'config-outdated-sqlite' => 'Used as warning. Parameters:
+* $1 - the version of SQLite that has been installed
+* $2 - minimum version',
        'config-no-fts3' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
        'config-magic-quotes-runtime' => '{{Related|Config-fatal}}',
        'config-magic-quotes-sybase' => '{{Related|Config-fatal}}',
@@ -623,16 +648,32 @@ Parameters:
 Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
        'config-no-cli-uri' => 'Parameters:
 * $1 is the default value for scriptpath.',
+       'config-using-server' => 'Used as a part of environment check result. Parameters:
+* $1 - default server name',
+       'config-using-uri' => 'Used as a part of environment check result. Parameters:
+* $1 - server name
+* $2 - script path',
+       'config-uploads-not-safe' => 'Used as a part of environment check result. Parameters:
+* $1 - name of directory for images: <code>$IP/images/</code>',
        'config-no-cli-uploads-check' => 'CLI = [[w:Command-line interface|command-line interface]] (i.e. the installer runs as a command-line script, not using HTML interface via an internet browser)',
+       'config-using531' => 'Used as error message. Parameters:
+* $1 - the version of PHP that has been installed',
        'config-suhosin-max-value-length' => '{{doc-important|Do not translate "length", "suhosin.get.max_value_length", "php.ini", "$wgResourceLoaderMaxQueryLength" and "LocalSettings.php".}}
 Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is between 0 and 1023 (that max value is hard set in MediaWiki software).',
        'config-db-host-help' => '{{doc-singularthey}}',
        'config-db-host-oracle' => 'TNS = [[:wikipedia:Transparent Network Substrate|Transparent Network Substrate]] (<== wikipedia link)',
        'config-db-wiki-settings' => 'This is more acurate: "Enter identifying or distinguishing data for this wiki" since a MySQL database can host tables of several wikis.',
        'config-db-account-oracle-warn' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
+       'config-db-password-empty' => 'Used as error message. Parameters:
+* $1 - database username',
        'config-db-account-lock' => "It might be easier to translate ''normal operation'' as \"also after the installation process\"",
+       'config-mysql-old' => 'Used as error message. Parameters:
+* $1 - minimum version
+* $2 - the version of MySQL that has been installed',
        'config-pg-test-error' => '* $1 - database name
 * $2 - error message',
+       'config-sqlite-dir-help' => '{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}}
+Used in help box.',
        'config-type-mysql' => '{{optional}}',
        'config-type-postgres' => '{{optional}}',
        'config-type-sqlite' => '{{optional}}',
@@ -647,20 +688,105 @@ Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is be
 * $1 - a link to the SQLite home page having the anchor text "SQLite".',
        'config-support-oracle' => 'Parameters:
 * $1 - a link to the Oracle home page, the anchor text of which is "Oracle".',
+       'config-invalid-db-server-oracle' => 'Used as error message. Parameters:
+* $1 - database server name
+See also:
+* {{msg-mw|Config-invalid-db-name}}
+* {{msg-mw|Config-invalid-db-prefix}}',
+       'config-invalid-db-name' => 'Used as error message. Parameters:
+* $1 - database name
+See also:
+* {{msg-mw|Config-invalid-db-server-oracle}}
+* {{msg-mw|Config-invalid-db-prefix}}',
+       'config-invalid-db-prefix' => 'Used as error message. Parameters:
+* $1 - database prefix
+See also:
+* {{msg-mw|Config-invalid-db-server-oracle}}
+* {{msg-mw|Config-invalid-db-name}}',
        'config-connection-error' => '$1 is the external error from the database, such as "DB connection error: Access denied for user \'dba\'@\'localhost\' (using password: YES) (localhost)."
 
 If you\'re translating this message to a right-to-left language, consider writing <nowiki><div dir="ltr">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir="auto">$1.</div></nowiki>.)',
        'config-invalid-schema' => '*$1 - schema name',
+       'config-db-sys-user-exists-oracle' => 'Used as error message. Parameters:
+* $1 - database username',
+       'config-postgres-old' => 'Used as error message. Used as warning. Parameters:
+* $1 - minimum version
+* $2 - the version of PostgreSQL that has been installed',
+       'config-sqlite-parent-unwritable-group' => 'Used as SQLite error message. Parameters:
+* $1 - data directory
+* $2 - "dirname" part of $1
+* $3 - "basename" part of $1
+* $4 - web server\'s primary group name
+See also:
+* {{msg-mw|Config-sqlite-parent-unwritable-nogroup}}',
+       'config-sqlite-parent-unwritable-nogroup' => 'Used as SQLite error message. Parameters:
+* $1 - data directory
+* $2 - "dirname" part of $1
+* $3 - "basename" part of $1
+See also:
+* {{msg-mw|Config-sqlite-parent-unwritable-group}}',
+       'config-sqlite-mkdir-error' => 'Used as SQLite error message. Parameters:
+* $1 - data directory name',
        'config-sqlite-dir-unwritable' => 'webserver refers to a software like Apache or Lighttpd.',
+       'config-sqlite-connection-error' => 'Used as SQLite error message. Parameters:
+* $1 - error message which SQLite server returned',
+       'config-sqlite-readonly' => 'Used as SQLite error message. Parameters:
+* $1 - filename',
+       'config-sqlite-cant-create-db' => 'Used as SQLite error message. Parameters:
+* $1 - filename',
        'config-can-upgrade' => 'Parameters:
 * $1 - Version or Revision indicator.',
+       'config-upgrade-done' => 'Used as success message. Parameters:
+* $1 - full URL of index.php
+See also:
+* {{msg-mw|config-upgrade-done-no-regenerate}}',
+       'config-upgrade-done-no-regenerate' => 'Used as success message. Parameters:
+* $1 - full URL of index.php
+See also:
+* {{msg-mw|config-upgrade-done}}',
        'config-show-table-status' => '{{doc-important|"<code>SHOW TABLE STATUS</code>" is a MySQL command. Do not translate this.}}',
        'config-db-web-account-same' => 'checkbox label',
        'config-db-web-create' => 'checkbox label',
-       'config-ns-generic' => '{{Identical|Project}}',
+       'config-ns-generic' => 'Used as label for "namespace type" radio button.
+
+See also:
+* {{msg-mw|Config-ns-site-name}}
+* {{msg-mw|Config-ns-other}}
+{{Identical|Project}}',
+       'config-ns-site-name' => 'Used as label for "namespace type" radio button. Parameters:
+* $1 - wiki name
+See also:
+* {{msg-mw|Config-ns-generic}}
+* {{msg-mw|Config-ns-other}}',
+       'config-ns-other' => "Used as label for \"namespace type\" radio button.
+
+This message is followed by the input box which enables to '''specify''' a namespace name.
+
+See also:
+* {{msg-mw|Config-ns-site-name}}
+* {{msg-mw|Config-ns-generic}}",
+       'config-ns-invalid' => 'Used as error message. Parameters:
+* $1 - namespace name
+See also:
+* {{msg-mw|Config-ns-conflict}}',
+       'config-ns-conflict' => 'Used as error message. Parameters:
+* $1 - namespace name
+See also:
+* {{msg-mw|Config-ns-invalid}}',
        'config-admin-name' => '{{Identical|Your name}}',
        'config-admin-password' => '{{Identical|Password}}',
+       'config-admin-name-invalid' => 'Used as error message. Parameters:
+* $1 - username of administrator',
        'config-admin-email' => '{{Identical|E-mail address}}',
+       'config-admin-error-user' => 'Used as error message. Parameters:
+* $1 - username of administrator
+See also:
+* {{msg-mw|Config-admin-error-password}}',
+       'config-admin-error-password' => 'Used as error message. Parameters:
+* $1 - username of administrator
+* $2 - error message
+See also:
+* {{msg-mw|Config-admin-error-user}}',
        'config-subscribe' => 'Used as label for the installer checkbox',
        'config-subscribe-help' => '"Low-volume" in this context means that there will be few e-mails to that mailing list per time period.',
        'config-profile-help' => 'Messages referenced:
@@ -672,11 +798,34 @@ If you\'re translating this message to a right-to-left language, consider writin
        'config-email-user' => '{{Identical|Enable user-to-user e-mail}}',
        'config-upload-help' => 'The word "mode" here refers to the access rights given to various user groups when attempting to create and store files and/or subdiretories in the said directory on the server. It also refers to the <code>mode</code> command used to maipulate said right mask under Unix, Linux, and similar operating systems. A less operating-system-centric translation is fine.',
        'config-logo-help' => '',
+       'config-instantcommons' => 'Used as label for the checkbox.
+
+The help message for this checkbox is:
+* {{msg-mw|Config-instantcommons-help}}',
+       'config-instantcommons-help' => 'Used as help message for the checkbox which is labeled {{msg-mw|config-instantcommons}}.',
        'config-cc-not-chosen' => '{{doc-important|Do not translate the "<code>proceed</code>" part.}}
 This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to click "proceed" so as to return to the MediaWiki installer page.',
        'config-memcached-servers' => '{{doc-important|Do not translate "memcached".}}
 {{Identical|Memcached server}}',
+       'config-memcache-badip' => 'Used as error message. Parameters:
+* $1 - IP address for Memcached
+See also:
+* {{msg-mw|Config-memcache-noport}}
+* {{msg-mw|Config-memcache-badport}}',
+       'config-memcache-noport' => 'Used as error message. Parameters:
+* $1 - Memcached server name
+See also:
+* {{msg-mw|Config-memcache-badip}}
+* {{msg-mw|Config-memcache-badport}}',
+       'config-memcache-badport' => 'Used as error message. Parameters:
+* $1 - 1 (hard-coded)
+* $2 - 65535 (hard-coded)
+See also:
+* {{msg-mw|Config-memcache-badip}}
+* {{msg-mw|Config-memcache-noport}}',
        'config-extensions' => '{{Identical|Extension}}',
+       'config-extensions-help' => '{{doc-important|Do not translate <code>./extensions</code>.}}
+Used in help box.',
        'config-install-step-done' => '{{Identical|Done}}',
        'config-install-step-failed' => '{{Identical|Failed}}',
        'config-install-database' => '*{{msg-mw|Config-install-database}}
@@ -700,6 +849,8 @@ This message refers to a block of HTML being embedded into the installer page. I
        'config-install-pg-schema-failed' => 'Parameters:
 * $1 = database user name (usernames in the database are unrelated to wiki user names)
 * $2 =',
+       'config-pg-no-plpgsql' => 'Used as error message. Parameters:
+* $1 - database name',
        'config-install-user' => 'Message indicates that the user is being created
 
 See also:
@@ -712,9 +863,22 @@ See also:
 *{{msg-mw|Config-install-keys}}
 *{{msg-mw|Config-install-sysop}}
 *{{msg-mw|Config-install-mainpage}}',
+       'config-install-user-alreadyexists' => 'Used as warning. Parameters:
+* $1 - database username',
+       'config-install-user-create-failed' => 'Used as MySQL warning and as PostgreSQL error. Parameters:
+* $1 - database username
+* $2 - detailed warning/error message',
        'config-install-user-grant-failed' => 'Parameters:
 * $1 is the database username for which granting rights failed
 * $2 is the error message',
+       'config-install-user-missing' => 'Used as PostgreSQL error message. Parameters:
+* $1 - database username
+See also:
+* {{msg-mw|Config-install-user-missing-create}}',
+       'config-install-user-missing-create' => 'Used as PostgreSQL error message. Parameters:
+* $1 - database username
+See also:
+* {{msg-mw|Config-install-user-missing}}',
        'config-install-tables' => 'Message indicates that the tables are being created
 
 See also:
@@ -727,6 +891,8 @@ See also:
 *{{msg-mw|Config-install-keys}}
 *{{msg-mw|Config-install-sysop}}
 *{{msg-mw|Config-install-mainpage}}',
+       'config-install-tables-failed' => 'Used as PostgreSQL error message. Parameters:
+* $1 - detailed error message',
        'config-install-interwiki' => 'Message indicates that the interwikitables are being populated
 
 See also:
@@ -739,6 +905,8 @@ See also:
 *{{msg-mw|Config-install-keys}}
 *{{msg-mw|Config-install-sysop}}
 *{{msg-mw|Config-install-mainpage}}',
+       'config-install-interwiki-list' => '{{doc-important|Do not translate <code>interwiki.list</code>.}}
+Used as error message.',
        'config-install-stats' => '*{{msg-mw|Config-install-database}}
 *{{msg-mw|Config-install-tables}}
 *{{msg-mw|Config-install-schema}}
@@ -782,6 +950,8 @@ See also:
 *{{msg-mw|Config-install-keys}}
 *{{msg-mw|Config-install-sysop}}
 *{{msg-mw|Config-install-mainpage}}',
+       'config-install-mainpage-failed' => 'Used as error message. Parameters:
+* $1 - detailed error message',
        'config-install-done' => 'Parameters:
 * $1 is the URL to LocalSettings download
 * $2 is a link to the wiki.
@@ -789,6 +959,8 @@ See also:
        'config-download-localsettings' => 'The link text used in the download link in config-install-done.',
        'config-help' => 'This is used in help boxes.
 {{Identical|Help}}',
+       'config-nofile' => 'Used as failure message. Parameters:
+* $1 - filename',
        'mainpagetext' => 'Along with {{msg-mw|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.',
        'mainpagedocfooter' => 'Along with {{msg-mw|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.
 This might be a good place to put information about <nowiki>{{GRAMMAR:}}</nowiki>. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/fi]] for an example. For languages having grammatical distinctions and not having an appropriate <nowiki>{{GRAMMAR:}}</nowiki> software available, a suggestion to check and possibly amend the messages having <nowiki>{{SITENAME}}</nowiki> may be valuable. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/ksh]] for an example.',
@@ -1035,12 +1207,13 @@ $messages['ang'] = array(
 
 /** Arabic (العربية)
  * @author Meno25
+ * @author Mido
  * @author OsamaK
  * @author روخو
  */
 $messages['ar'] = array(
        'config-desc' => 'مثبت لميدياويكي',
-       'config-title' => 'ميدياويكي 1$ التثبيت', # Fuzzy
+       'config-title' => 'تثبيت ميدياويكي $1',
        'config-information' => 'معلومات',
        'config-back' => '→ ارجع',
        'config-continue' => 'استمر ←',
@@ -1061,7 +1234,7 @@ $messages['ar'] = 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 القائمة البريدية الخاصة بإصدار ميدياويكي]', # Fuzzy
 );
 
 /** Aramaic (ܐܪܡܝܐ)
@@ -2888,6 +3061,7 @@ Gwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».",
        'config-install-mainpage-failed' => "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
        'config-download-localsettings' => 'Pellgargañ <code>LocalSettings.php</code>',
        'config-help' => 'skoazell',
+       'config-nofile' => 'N\'eus ket bet gallet kavout ar restr "$1". Daoust ha dilamet eo bet ?',
        'mainpagetext' => "'''Meziant MediaWiki staliet.'''",
        'mainpagedocfooter' => "Sellit ouzh [//meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.
 
@@ -3930,7 +4104,6 @@ Es ist daher zu erwägen die Datendatei an gänzlich anderer Stelle abzulegen, b
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki unterstützt die folgenden Datenbanksysteme:
 
 $1
@@ -3940,12 +4113,10 @@ Sofern nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, gibt
        'config-support-postgres' => '* $1 ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL ([http://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung]). Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird.',
        'config-support-sqlite' => '* $1 ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([http://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))',
        'config-support-oracle' => '* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung (en)])',
-       'config-support-ibm_db2' => '* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/ibm-db2.installation.php PHP mit IBM-DB2-Support kompilieren])',
        'config-header-mysql' => 'MySQL-Einstellungen',
        'config-header-postgres' => 'PostgreSQL-Einstellungen',
        'config-header-sqlite' => 'SQLite-Einstellungen',
        'config-header-oracle' => 'Oracle-Einstellungen',
-       'config-header-ibm_db2' => 'IBM DB2-Einstellungen',
        'config-invalid-db-type' => 'Unzulässiges Datenbanksystem',
        'config-missing-db-name' => 'Bei „Datenbankname“ muss ein Wert angegeben werden.',
        'config-missing-db-host' => 'Bei „Datenbankhost“ muss ein Wert angegeben werden.',
@@ -4039,7 +4210,6 @@ Dies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwen
 
 Im '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren,
 allerdings können keine Zeichen außerhalb des [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.",
-       'config-ibm_db2-low-db-pagesize' => "Die DB2-Datenbank verfügt über einen Standardtabellenraum mit einer unzureichenden Seitengröße. Die Seitengröße muss '''32 000'' oder größer sein.",
        'config-site-name' => 'Name des Wikis:',
        'config-site-name-help' => 'Er wird in der Titelleiste des Browsers, wie auch verschiedenen anderen Stellen, genutzt.',
        'config-site-name-blank' => 'Den Namen des Wikis angeben.',
@@ -4161,7 +4331,7 @@ Die Lizenz ist daher jetzt manuell einzugeben.',
 Es wird sehr empfohlen es für mittelgroße bis große Wikis zu nutzen, aber auch für kleine Wikis ergeben sich erkennbare Geschwindigkeitsverbesserungen.',
        'config-cache-none' => 'Kein Objektcaching (es wird keine Funktion entfernt, allerdings kann dies die Geschwindigkeit größerer Wikis negativ beeinflussen)',
        'config-cache-accel' => 'Objektcaching von PHP (APC, XCache oder WinCache)',
-       'config-cache-memcached' => 'Memchached Cacheserver nutzen (erfordert einen zusätzliche Installationsvorgang mitsamt Konfiguration)',
+       'config-cache-memcached' => 'Memcached Cacheserver nutzen (erfordert einen zusätzlichen Installationsvorgang mitsamt Konfiguration)',
        'config-memcached-servers' => 'Memcached Cacheserver',
        'config-memcached-help' => 'Liste der für Memcached nutzbaren IP-Adressen.
 Es sollte eine je Zeile mitsamt des vorgesehenen Ports angegeben werden. Beispiele:
@@ -4329,16 +4499,20 @@ $messages['diq'] = array(
 );
 
 /** Lower Sorbian (dolnoserbski)
+ * @author Michawiki
  */
 $messages['dsb'] = array(
        'mainpagetext' => "'''MediaWiki jo se wuspěšnje instalěrowało.'''",
        'mainpagedocfooter' => "Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
 
+Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
+
 == Na zachopjenje ==
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfiguracija lisćiny połoženjow]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (pšašanja a wótegrona)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lisćina e-mailowych nakładow MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lisćina e-mailowych nakładow MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twóju rěc lokalizěrowaś]",
 );
 
 /** Central Dusun (Dusun Bundu-liwan)
@@ -7973,7 +8147,7 @@ Standardna lisćina sp přeskakuje.",
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Wo nastajenjach]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]',
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twoju rěč lokalizować]',
 );
 
 /** Haitian (Kreyòl ayisyen)
@@ -10260,8 +10434,8 @@ chmod a+w $3</pre>',
 
 [$1 ウィキを使い始める]ことができます。
 
-もし、<code>LocalSettings.php</code>ファイルを再生成したいのならば、下のボタンを押してください。
\82¦ã\82£ã\82­ã\81«å\95\8fé¡\8cã\81\8cã\81ªã\81\84ã\81®ã\81§ã\81\82ã\82\8cã\81°ã\80\81ã\81\93ã\82\8cは'''推奨されません'''。",
+<code>LocalSettings.php</code> ファイルを再生成したい場合は、下のボタンを押してください。
\82¦ã\82£ã\82­ã\81«å\95\8fé¡\8cã\81\8cã\81\82ã\82\8bå ´å\90\88ã\82\92é\99¤ã\81\8dã\80\81å\86\8dç\94\9fæ\88\90は'''推奨されません'''。",
        'config-upgrade-done-no-regenerate' => 'アップグレードが完了しました。
 
 [$1 ウィキの使用を開始]することができます。',
@@ -10395,10 +10569,10 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
 
 ロゴが不要の場合は、このボックスを空白のままにしてください。',
        'config-instantcommons' => 'Instant Commons 機能を有効にする',
-       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons]は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトで見つかった画像や音声、その他のメディアをウィキ上で利用することができるようになる機能です。
-これを有効化するには、MediaWikiはインターネットに接続できなければなりません
+       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトにある画像、音声、その他のメディアをウィキ上で利用できるようにする機能です。
+これを使用するには、MediaWiki がインターネットに接続できる必要があります
 
-ウィキメディア・コモンズ以外のウィキを同じように設定する方法など、この機能に関する詳細な情報は、[//mediawiki.org/wiki/Manual:$wgForeignFileRepos マニュアル]をご覧ください。',
+ウィキメディア・コモンズ以外のウィキを同様に設定する手順など、この機能に関する詳細な情報は、[//mediawiki.org/wiki/Manual:$wgForeignFileRepos マニュアル]をご覧ください。',
        'config-cc-error' => 'クリエイティブ・コモンズ・ライセンスの選択器から結果が得られませんでした。
 ライセンスの名前を手動で入力してください。',
        'config-cc-again' => 'もう一度選択してください...',
@@ -10415,6 +10589,9 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
 カンマ区切りで、利用する特定のポートの指定が必要です。例:
 127.0.0.1:11211
 192.168.1.25:1234',
+       'config-memcache-noport' => 'Memcached サーバー $1 で使用するポート番号を指定していません。
+ポート番号が分からない場合、既定値は 11211 です。',
+       'config-memcache-badport' => 'Memcached のポート番号は $1 から $2 の範囲にしてください。',
        'config-extensions' => '拡張機能',
        'config-extensions-help' => '<code>./extensions</code>ディレクトリ内で、上記リストの拡張機能が発見されました。
 
@@ -10432,6 +10609,7 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
        'config-install-pg-schema-failed' => 'テーブルの作成に失敗しました。
 利用者「$1」がスキーマ「$2」に書き込めるようにしてください。',
        'config-install-pg-commit' => '変更を送信',
+       'config-pg-no-plpgsql' => 'データベース $1 内に PL/pgSQL 言語をインストールする必要があります。',
        'config-install-user' => 'データベースユーザーの作成',
        'config-install-user-alreadyexists' => 'ユーザー「$1」は既に存在します',
        'config-install-user-create-failed' => 'ユーザー「$1」の作成に失敗しました: $2',
@@ -16606,16 +16784,29 @@ Se você não pretende usar um logotipo, deixe este campo em branco.', # Fuzzy
 );
 
 /** Quechua (Runa Simi)
+ * @author AlimanRuna
  */
 $messages['qu'] = array(
+       'config-desc' => 'MediaWiki tiyachiq',
+       'config-title' => 'MediaWiki $1 tiyachiy',
+       'config-information' => 'Willay',
+       'config-your-language' => 'Rimayniyki:',
+       'config-wiki-language' => 'Wiki rimay:',
+       'config-back' => '← Ñawpaqman',
+       'config-extensions' => "Mast'ariykuna",
+       'config-install-step-done' => 'rurasqañam',
+       'config-install-step-failed' => 'manam aypasqachu',
+       'config-help' => 'yanapay',
+       'config-nofile' => '"$1" sutiyuq willañiqiqa manam tarisqachu. Qullusqachu?',
        'mainpagetext' => "'''MediaWiki nisqa llamp'u kaqqa aypaylla takyachisqañam.'''",
        'mainpagedocfooter' => "Wiki llamp'u kaqmanta willasunaykipaqqa [//meta.wikimedia.org/wiki/Help:Contents Ruraqpaq yanapana] ''(User's Guide)'' sutiyuq p'anqata qhaway.
 
 == Qallarichkaspa ==
 
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Kunphigurasyun churanamanta sutisuyu]
+* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki nisqamanta pasaq tapuykuna]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki kachaykuy e-chaski sutisuyu]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki nisqata qampa rimaykiman t'ikray]",
 );
 
 /** Romagnol (Rumagnôl)
index 4d8e5f0..8aee15c 100644 (file)
@@ -643,6 +643,8 @@ abstract class Installer {
 
                $allNames = array();
 
+               // Give grep a chance to find the usages:
+               // config-type-mysql, config-type-postgres, config-type-oracle, config-type-sqlite
                foreach ( self::getDBTypes() as $name ) {
                        $allNames[] = wfMessage( "config-type-$name" )->text();
                }
@@ -1318,13 +1320,16 @@ abstract class Installer {
         */
        public function findExtensions() {
                if( $this->getVar( 'IP' ) === null ) {
-                       return false;
+                       return array();
                }
 
-               $exts = array();
                $extDir = $this->getVar( 'IP' ) . '/extensions';
-               $dh = opendir( $extDir );
+               if ( !is_readable( $extDir ) || !is_dir( $extDir ) ) {
+                       return array();
+               }
 
+               $dh = opendir( $extDir );
+               $exts = array();
                while ( ( $file = readdir( $dh ) ) !== false ) {
                        if( !is_dir( "$extDir/$file" ) ) {
                                continue;
@@ -1333,6 +1338,7 @@ abstract class Installer {
                                $exts[] = $file;
                        }
                }
+               closedir( $dh );
                natcasesort( $exts );
 
                return $exts;
index f9a8ce7..06821f8 100644 (file)
@@ -361,6 +361,9 @@ class MysqlInstaller extends DatabaseInstaller {
                }
 
                if ( count( $engines ) >= 2 ) {
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-mysql-innodb, config-mysql-myisam
                        $s .= $this->getRadioSet( array(
                                'var' => '_MysqlEngine',
                                'label' => 'config-mysql-engine',
@@ -385,6 +388,9 @@ class MysqlInstaller extends DatabaseInstaller {
 
                // Do charset selector
                if ( count( $charsets ) >= 2 ) {
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-mysql-binary, config-mysql-utf8
                        $s .= $this->getRadioSet( array(
                                'var' => '_MysqlCharset',
                                'label' => 'config-mysql-charset',
index a325507..35d649b 100644 (file)
@@ -1086,7 +1086,7 @@ class WebInstaller extends Installer {
        /**
         * @return bool
         */
-       public function envCheckPath( ) {
+       public function envCheckPath() {
                // PHP_SELF isn't available sometimes, such as when PHP is CGI but
                // cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME
                // to get the path to the current script... hopefully it's reliable. SIGH
index afbb9ab..d61d843 100644 (file)
@@ -157,7 +157,7 @@ class WebInstallerOutput {
         * "<link>" to index.php?css=foobar for the "<head>"
         * @return String
         */
-       private function getCssUrl( ) {
+       private function getCssUrl() {
                return Html::linkedStyle( $_SERVER['PHP_SELF'] . '?css=' . $this->getDir() );
        }
 
index f352cf1..9119c12 100644 (file)
@@ -84,12 +84,14 @@ abstract class WebInstallerPage {
 
                if ( $continue ) {
                        // Fake submit button for enter keypress (bug 26267)
+                       // Give grep a chance to find the usages: config-continue
                        $s .= Xml::submitButton( wfMessage( "config-$continue" )->text(),
                                array( 'name' => "enter-$continue", 'style' =>
                                        'visibility:hidden;overflow:hidden;width:1px;margin:0' ) ) . "\n";
                }
 
                if ( $back ) {
+                       // Give grep a chance to find the usages: config-back
                        $s .= Xml::submitButton( wfMessage( "config-$back" )->text(),
                                array(
                                        'name' => "submit-$back",
@@ -98,6 +100,7 @@ abstract class WebInstallerPage {
                }
 
                if ( $continue ) {
+                       // Give grep a chance to find the usages: config-continue
                        $s .= Xml::submitButton( wfMessage( "config-$continue" )->text(),
                                array(
                                        'name' => "submit-$continue",
@@ -452,6 +455,8 @@ class WebInstaller_DBConnect extends WebInstallerPage {
                $settings = '';
                $defaultType = $this->getVar( 'wgDBtype' );
 
+               // Give grep a chance to find the usages:
+               // config-support-mysql, config-support-postgres, config-support-oracle, config-support-sqlite
                $dbSupport = '';
                foreach( $this->parent->getDBTypes() as $type ) {
                        $link = DatabaseBase::factory( $type )->getSoftwareLink();
@@ -474,6 +479,8 @@ class WebInstaller_DBConnect extends WebInstallerPage {
                                ) .
                                "</li>\n";
 
+                       // Give grep a chance to find the usages:
+                       // config-header-mysql, config-header-postgres, config-header-oracle, config-header-sqlite
                        $settings .=
                                Html::openElement( 'div', array( 'id' => 'DB_wrapper_' . $type,
                                                'class' => 'dbWrapper' ) ) .
@@ -647,6 +654,9 @@ class WebInstaller_Name extends WebInstallerPage {
                                'label' => 'config-site-name',
                                'help' => $this->parent->getHelpBox( 'config-site-name-help' )
                        ) ) .
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-ns-site-name, config-ns-generic, config-ns-other
                        $this->parent->getRadioSet( array(
                                'var' => '_NamespaceType',
                                'label' => 'config-project-namespace',
@@ -688,6 +698,9 @@ class WebInstaller_Name extends WebInstallerPage {
                        ) ) .
                        $this->getFieldSetEnd() .
                        $this->parent->getInfoBox( wfMessage( 'config-almost-done' )->text() ) .
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-optional-continue, config-optional-skip
                        $this->parent->getRadioSet( array(
                                'var' => '_SkipOptional',
                                'itemLabelPrefix' => 'config-optional-',
@@ -831,6 +844,9 @@ class WebInstaller_Options extends WebInstallerPage {
                $this->startForm();
                $this->addHTML(
                        # User Rights
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-profile-wiki, config-profile-no-anon, config-profile-fishbowl, config-profile-private
                        $this->parent->getRadioSet( array(
                                'var' => '_RightsProfile',
                                'label' => 'config-profile',
@@ -840,6 +856,11 @@ class WebInstaller_Options extends WebInstallerPage {
                        $this->parent->getInfoBox( wfMessage( 'config-profile-help' )->plain() ) .
 
                        # Licensing
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-license-cc-by, config-license-cc-by-sa, config-license-cc-by-nc-sa,
+                       // config-license-cc-0, config-license-pd, config-license-gfdl,
+                       // config-license-none, config-license-cc-choose
                        $this->parent->getRadioSet( array(
                                'var' => '_LicenseCode',
                                'label' => 'config-license',
@@ -966,6 +987,9 @@ class WebInstaller_Options extends WebInstallerPage {
                        # Advanced settings
                        $this->getFieldSetStart( 'config-advanced-settings' ) .
                        # Object cache settings
+                       // getRadioSet() builds a set of labeled radio buttons.
+                       // For grep: The following messages are used as the item labels:
+                       // config-cache-none, config-cache-accel, config-cache-memcached
                        $this->parent->getRadioSet( array(
                                'var' => 'wgMainCacheType',
                                'label' => 'config-cache-options',
@@ -1092,6 +1116,10 @@ class WebInstaller_Options extends WebInstallerPage {
                                return false;
                        }
                } elseif ( in_array( $code, array_keys( $this->parent->licenses ) ) ) {
+                       // Give grep a chance to find the usages:
+                       // config-license-cc-by, config-license-cc-by-sa, config-license-cc-by-nc-sa,
+                       // config-license-cc-0, config-license-pd, config-license-gfdl,
+                       // config-license-none, config-license-cc-choose
                        $entry = $this->parent->licenses[$code];
                        if ( isset( $entry['text'] ) ) {
                                $this->setVar( 'wgRightsText', $entry['text'] );
@@ -1261,7 +1289,7 @@ abstract class WebInstaller_Document extends WebInstallerPage {
 
        abstract protected function getFileName();
 
-       public  function execute() {
+       public function execute() {
                $text = $this->getFileContents();
                $text = InstallDocFormatter::format( $text );
                $this->parent->output->addWikiText( $text );
index 0f42611..d8f55c3 100644 (file)
@@ -111,7 +111,7 @@ abstract class Job {
         * runners.
         *
         * @param $type string
-        * @return Job
+        * @return Job|bool Returns false if there are no jobs
         * @deprecated 1.21
         */
        public static function pop_type( $type ) {
@@ -176,6 +176,16 @@ abstract class Job {
                return $this->params;
        }
 
+       /**
+        * @return integer|null UNIX timestamp to delay running this job until, otherwise null
+        * @since 1.22
+        */
+       public function getReleaseTimestamp() {
+               return isset( $this->params['jobReleaseTimestamp'] )
+                       ? wfTimestampOrNull( TS_UNIX, $this->params['jobReleaseTimestamp'] )
+                       : null;
+       }
+
        /**
         * @return bool Whether only one of each identical set of jobs should be run
         */
index b0dd925..9c152cd 100644 (file)
@@ -34,9 +34,12 @@ abstract class JobQueue {
        protected $order; // string; job priority for pop()
        protected $claimTTL; // integer; seconds
        protected $maxTries; // integer; maximum number of times to try a job
+       protected $checkDelay; // boolean; allow delayed jobs
 
        const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
 
+       const ROOTJOB_TTL = 2419200; // integer; seconds to remember root jobs (28 days)
+
        /**
         * @param $params array
         */
@@ -53,28 +56,36 @@ abstract class JobQueue {
                if ( !in_array( $this->order, $this->supportedOrders() ) ) {
                        throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
                }
+               $this->checkDelay = !empty( $params['checkDelay'] );
+               if ( $this->checkDelay && !$this->supportsDelayedJobs() ) {
+                       throw new MWException( __CLASS__ . " does not support delayed jobs." );
+               }
        }
 
        /**
         * Get a job queue object of the specified type.
         * $params includes:
-        *   - class    : What job class to use (determines job type)
-        *   - wiki     : wiki ID of the wiki the jobs are for (defaults to current wiki)
-        *   - type     : The name of the job types this queue handles
-        *   - order    : Order that pop() selects jobs, one of "fifo", "timestamp" or "random".
-        *                If "fifo" is used, the queue will effectively be FIFO. Note that
-        *                job completion will not appear to be exactly FIFO if there are multiple
-        *                job runners since jobs can take different times to finish once popped.
-        *                If "timestamp" is used, the queue will at least be loosely ordered
-        *                by timestamp, allowing for some jobs to be popped off out of order.
-        *                If "random" is used, pop() will pick jobs in random order.
-        *                Note that it may only be weakly random (e.g. a lottery of the oldest X).
-        *                If "any" is choosen, the queue will use whatever order is the fastest.
-        *                This might be useful for improving concurrency for job acquisition.
-        *   - claimTTL : If supported, the queue will recycle jobs that have been popped
-        *                but not acknowledged as completed after this many seconds. Recycling
-        *                of jobs simple means re-inserting them into the queue. Jobs can be
-        *                attempted up to three times before being discarded.
+        *   - class      : What job class to use (determines job type)
+        *   - wiki       : wiki ID of the wiki the jobs are for (defaults to current wiki)
+        *   - type       : The name of the job types this queue handles
+        *   - order      : Order that pop() selects jobs, one of "fifo", "timestamp" or "random".
+        *                  If "fifo" is used, the queue will effectively be FIFO. Note that job
+        *                  completion will not appear to be exactly FIFO if there are multiple
+        *                  job runners since jobs can take different times to finish once popped.
+        *                  If "timestamp" is used, the queue will at least be loosely ordered
+        *                  by timestamp, allowing for some jobs to be popped off out of order.
+        *                  If "random" is used, pop() will pick jobs in random order.
+        *                  Note that it may only be weakly random (e.g. a lottery of the oldest X).
+        *                  If "any" is choosen, the queue will use whatever order is the fastest.
+        *                  This might be useful for improving concurrency for job acquisition.
+        *   - claimTTL   : If supported, the queue will recycle jobs that have been popped
+        *                  but not acknowledged as completed after this many seconds. Recycling
+        *                  of jobs simple means re-inserting them into the queue. Jobs can be
+        *                  attempted up to three times before being discarded.
+        *   - checkDelay : If supported, respect Job::getReleaseTimestamp() in the push functions.
+        *                  This lets delayed jobs wait in a staging area until a given timestamp is
+        *                  reached, at which point they will enter the queue. If this is not enabled
+        *                  or not supported, an exception will be thrown on delayed job insertion.
         *
         * Queue classes should throw an exception if they do not support the options given.
         *
@@ -126,7 +137,14 @@ abstract class JobQueue {
        abstract protected function optimalOrder();
 
        /**
-        * Quickly check if the queue is empty (has no available jobs).
+        * @return boolean Whether delayed jobs are supported
+        */
+       protected function supportsDelayedJobs() {
+               return false; // not implemented
+       }
+
+       /**
+        * Quickly check if the queue has no available (unacquired, non-delayed) jobs.
         * Queue classes should use caching if they are any slower without memcached.
         *
         * If caching is used, this might return false when there are actually no jobs.
@@ -151,7 +169,7 @@ abstract class JobQueue {
        abstract protected function doIsEmpty();
 
        /**
-        * Get the number of available (unacquired) jobs in the queue.
+        * Get the number of available (unacquired, non-delayed) jobs in the queue.
         * Queue classes should use caching if they are any slower without memcached.
         *
         * If caching is used, this number might be out of date for a minute.
@@ -194,6 +212,31 @@ abstract class JobQueue {
         */
        abstract protected function doGetAcquiredCount();
 
+       /**
+        * Get the number of delayed jobs (these are temporarily out of the queue).
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this number might be out of date for a minute.
+        *
+        * @return integer
+        * @throws MWException
+        * @since 1.22
+        */
+       final public function getDelayedCount() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetDelayedCount();
+               wfProfileOut( __METHOD__ );
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getDelayedCount()
+        * @return integer
+        */
+       protected function doGetDelayedCount() {
+               return 0; // not implemented
+       }
+
        /**
         * Push a single jobs into the queue.
         * This does not require $wgJobClasses to be set for the given job type.
@@ -225,7 +268,11 @@ abstract class JobQueue {
 
                foreach ( $jobs as $job ) {
                        if ( $job->getType() !== $this->type ) {
-                               throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+                               throw new MWException(
+                                       "Got '{$job->getType()}' job; expected a '{$this->type}' job." );
+                       } elseif ( $job->getReleaseTimestamp() && !$this->checkDelay ) {
+                               throw new MWException(
+                                       "Got delayed '{$job->getType()}' job; delays are not supported." );
                        }
                }
 
@@ -262,6 +309,15 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $job = $this->doPop();
                wfProfileOut( __METHOD__ );
+
+               // Flag this job as an old duplicate based on its "root" job...
+               try {
+                       if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
+                               wfIncrStats( 'job-pop-duplicate' );
+                               $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
+                       }
+               } catch ( MWException $e ) {} // don't lose jobs over this
+
                return $job;
        }
 
@@ -344,7 +400,76 @@ abstract class JobQueue {
         * @return bool
         */
        protected function doDeduplicateRootJob( Job $job ) {
-               return true;
+               global $wgMemc;
+
+               $params = $job->getParams();
+               if ( !isset( $params['rootJobSignature'] ) ) {
+                       throw new MWException( "Cannot register root job; missing 'rootJobSignature'." );
+               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
+                       throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
+               }
+               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
+               // Callers should call batchInsert() and then this function so that if the insert
+               // fails, the de-duplication registration will be aborted. Since the insert is
+               // deferred till "transaction idle", do the same here, so that the ordering is
+               // maintained. Having only the de-duplication registration succeed would cause
+               // jobs to become no-ops without any actual jobs that made them redundant.
+               $timestamp = $wgMemc->get( $key ); // current last timestamp of this job
+               if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
+                       return true; // a newer version of this root job was enqueued
+               }
+
+               // Update the timestamp of the last root job started at the location...
+               return $wgMemc->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
+       }
+
+       /**
+        * Check if the "root" job of a given job has been superseded by a newer one
+        *
+        * @param $job Job
+        * @return bool
+        * @throws MWException
+        */
+       final protected function isRootJobOldDuplicate( Job $job ) {
+               if ( $job->getType() !== $this->type ) {
+                       throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
+               }
+               wfProfileIn( __METHOD__ );
+               $isDuplicate = $this->doIsRootJobOldDuplicate( $job );
+               wfProfileOut( __METHOD__ );
+               return $isDuplicate;
+       }
+
+       /**
+        * @see JobQueue::isRootJobOldDuplicate()
+        * @param Job $job
+        * @return bool
+        */
+       protected function doIsRootJobOldDuplicate( Job $job ) {
+               global $wgMemc;
+
+               $params = $job->getParams();
+               if ( !isset( $params['rootJobSignature'] ) ) {
+                       return false; // job has no de-deplication info
+               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
+                       trigger_error( "Cannot check root job; missing 'rootJobTimestamp'." );
+                       return false;
+               }
+
+               // Get the last time this root job was enqueued
+               $timestamp = $wgMemc->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
+
+               // Check if a new root job was started at the location after this one's...
+               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
+       }
+
+       /**
+        * @param string $signature Hash identifier of the root job
+        * @return string
+        */
+       protected function getRootJobCacheKey( $signature ) {
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
        }
 
        /**
@@ -413,15 +538,27 @@ abstract class JobQueue {
        protected function doFlushCaches() {}
 
        /**
-        * Get an iterator to traverse over all of the jobs in this queue.
-        * This does not include jobs that are current acquired. In general,
-        * this should only be called on a queue that is no longer being popped.
+        * Get an iterator to traverse over all available jobs in this queue.
+        * This does not include jobs that are currently acquired or delayed.
+        * This should only be called on a queue that is no longer being popped.
         *
         * @return Iterator|Traversable|Array
         * @throws MWException
         */
        abstract public function getAllQueuedJobs();
 
+       /**
+        * Get an iterator to traverse over all delayed jobs in this queue.
+        * This should only be called on a queue that is no longer being popped.
+        *
+        * @return Iterator|Traversable|Array
+        * @throws MWException
+        * @since 1.22
+        */
+       public function getAllDelayedJobs() {
+               return array(); // not implemented
+       }
+
        /**
         * Namespace the queue with a key to isolate it for testing
         *
index 74e9171..512a24a 100644 (file)
@@ -25,6 +25,7 @@
  * Class to handle tracking information about all queues using PhpRedis
  *
  * @ingroup JobQueue
+ * @ingroup Redis
  * @since 1.21
  */
 class JobQueueAggregatorRedis extends JobQueueAggregator {
index a7a459f..4b22e94 100644 (file)
@@ -28,7 +28,6 @@
  * @since 1.21
  */
 class JobQueueDB extends JobQueue {
-       const ROOTJOB_TTL = 1209600; // integer; seconds to remember root jobs (14 days)
        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
        const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed
@@ -252,11 +251,6 @@ class JobQueueDB extends JobQueue {
                        $job = Job::factory( $row->job_cmd, $title,
                                self::extractBlob( $row->job_params ), $row->job_id );
                        $job->id = $row->job_id; // XXX: work around broken subclasses
-                       // Flag this job as an old duplicate based on its "root" job...
-                       if ( $this->isRootJobOldDuplicate( $job ) ) {
-                               wfIncrStats( 'job-pop-duplicate' );
-                               $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
-                       }
                        break; // done
                } while( true );
 
@@ -533,30 +527,6 @@ class JobQueueDB extends JobQueue {
                return true;
        }
 
-       /**
-        * Check if the "root" job of a given job has been superseded by a newer one
-        *
-        * @param $job Job
-        * @return bool
-        */
-       protected function isRootJobOldDuplicate( Job $job ) {
-               global $wgMemc;
-
-               $params = $job->getParams();
-               if ( !isset( $params['rootJobSignature'] ) ) {
-                       return false; // job has no de-deplication info
-               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
-                       trigger_error( "Cannot check root job; missing 'rootJobTimestamp'." );
-                       return false;
-               }
-
-               // Get the last time this root job was enqueued
-               $timestamp = $wgMemc->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
-
-               // Check if a new root job was started at the location after this one's...
-               return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
-       }
-
        /**
         * @see JobQueue::doWaitForBackups()
         * @return void
@@ -671,15 +641,6 @@ class JobQueueDB extends JobQueue {
                return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
        }
 
-       /**
-        * @param string $signature Hash identifier of the root job
-        * @return string
-        */
-       private function getRootJobCacheKey( $signature ) {
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
-       }
-
        /**
         * @param $params
         * @return string
index 50b5471..351c71a 100644 (file)
@@ -201,6 +201,25 @@ class JobQueueGroup {
                return $this->get( $job->getType() )->deduplicateRootJob( $job );
        }
 
+       /**
+        * Wait for any slaves or backup queue servers to catch up.
+        *
+        * This does nothing for certain queue classes.
+        *
+        * @return void
+        * @throws MWException
+        */
+       public function waitForBackups() {
+               global $wgJobTypeConf;
+
+               wfProfileIn( __METHOD__ );
+               // Try to avoid doing this more than once per queue storage medium
+               foreach ( $wgJobTypeConf as $type => $conf ) {
+                       $this->get( $type )->waitForBackups();
+               }
+               wfProfileOut( __METHOD__ );
+       }
+
        /**
         * Get the list of queue types
         *
index 3db8260..bd23174 100644 (file)
 /**
  * Class to handle job queues stored in Redis
  *
+ * This is faster, less resource intensive, queue that JobQueueDB.
+ * All data for a queue using this class is placed into one redis server.
+ *
+ * There are eight main redis keys used to track jobs:
+ *   - l-unclaimed  : A list of job IDs used for ready unclaimed jobs
+ *   - z-claimed    : A sorted set of (job ID, UNIX timestamp as score) used for job retries
+ *   - 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-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
+ * 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.
+ * Aside from root job keys, all keys have no expiry, and are only removed when jobs are run.
+ * All the keys are prefixed with the relevant wiki ID information.
+ *
+ * This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations.
+ * Additionally, it should be noted that redis has different persistence modes, such
+ * as rdb snapshots, journaling, and no persistent. Appropriate configuration should be
+ * made on the servers based on what queues are using it and what tolerance they have.
+ *
  * @ingroup JobQueue
+ * @ingroup Redis
  * @since 1.21
  */
 class JobQueueRedis extends JobQueue {
@@ -33,7 +62,6 @@ class JobQueueRedis extends JobQueue {
 
        protected $server; // string; server address
 
-       const ROOTJOB_TTL = 1209600; // integer; seconds to remember root jobs (14 days)
        const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed (7 days)
 
        protected $key; // string; key to prefix the queue keys with (used for testing)
@@ -41,6 +69,7 @@ class JobQueueRedis extends JobQueue {
        /**
         * @params include:
         *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
+        *                   Note that the serializer option is ignored "none" is always used.
         *   - redisServer : A hostname/port combination or the absolute path of a UNIX socket.
         *                   If a hostname is specified but no port, the standard port number
         *                   6379 will be used. Required.
@@ -48,6 +77,7 @@ class JobQueueRedis extends JobQueue {
         */
        public function __construct( array $params ) {
                parent::__construct( $params );
+               $params['redisConfig']['serializer'] = 'none'; // make it easy to use Lua
                $this->server = $params['redisServer'];
                $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
        }
@@ -60,18 +90,17 @@ class JobQueueRedis extends JobQueue {
                return 'fifo';
        }
 
+       protected function supportsDelayedJobs() {
+               return true;
+       }
+
        /**
         * @see JobQueue::doIsEmpty()
         * @return bool
         * @throws MWException
         */
        protected function doIsEmpty() {
-               $conn = $this->getConnection();
-               try {
-                       return ( $conn->lSize( $this->getQueueKey( 'l-unclaimed' ) ) == 0 );
-               } catch ( RedisException $e ) {
-                       $this->throwRedisException( $this->server, $conn, $e );
-               }
+               return $this->doGetSize() == 0;
        }
 
        /**
@@ -99,7 +128,27 @@ class JobQueueRedis extends JobQueue {
                }
                $conn = $this->getConnection();
                try {
-                       return $conn->lSize( $this->getQueueKey( 'l-claimed' ) );
+                       $conn->multi( Redis::PIPELINE );
+                       $conn->zSize( $this->getQueueKey( 'z-claimed' ) );
+                       $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
+                       return array_sum( $conn->exec() );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $this->server, $conn, $e );
+               }
+       }
+
+       /**
+        * @see JobQueue::doGetDelayedCount()
+        * @return integer
+        * @throws MWException
+        */
+       protected function doGetDelayedCount() {
+               if ( !$this->checkDelay ) {
+                       return 0; // no delayed jobs
+               }
+               $conn = $this->getConnection();
+               try {
+                       return $conn->zSize( $this->getQueueKey( 'z-delayed' ) );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -113,65 +162,45 @@ class JobQueueRedis extends JobQueue {
         * @throws MWException
         */
        protected function doBatchPush( array $jobs, $flags ) {
-               if ( !count( $jobs ) ) {
-                       return true;
-               }
-
-               // Convert the jobs into a list of field maps
-               $items = array(); // (uid => job fields map)
+               // Convert the jobs into field maps (de-duplicated against each other)
+               $items = array(); // (job ID => job fields map)
                foreach ( $jobs as $job ) {
                        $item = $this->getNewJobFields( $job );
-                       $items[$item['uid']] = $item;
+                       if ( strlen( $item['sha1'] ) ) { // hash identifier => de-duplicate
+                               $items[$item['sha1']] = $item;
+                       } else {
+                               $items[$item['uuid']] = $item;
+                       }
                }
 
-               $dedupUids = array(); // list of uids to check for duplicates
-               foreach ( $items as $item ) {
-                       if ( $this->isHashUid( $item['uid'] ) ) { // hash identifier => de-duplicate
-                               $dedupUids[] = $item['uid'];
-                       }
+               if ( !count( $items ) ) {
+                       return true; // nothing to do
                }
 
                $conn = $this->getConnection();
                try {
-                       // Find which of these jobs are duplicates of unclaimed jobs in the queue...
-                       if ( count( $dedupUids ) ) {
-                               $conn->multi( Redis::PIPELINE );
-                               foreach ( $dedupUids as $uid ) { // check if job data exists
-                                       $conn->exists( $this->prefixWithQueueKey( 'data', $uid ) );
-                               }
-                               if ( $this->claimTTL > 0 ) { // check which jobs were claimed
-                                       foreach ( $dedupUids as $uid ) {
-                                               $conn->hExists( $this->prefixWithQueueKey( 'h-meta', $uid ), 'ctime' );
-                                       }
-                                       list( $exists, $claimed ) = array_chunk( $conn->exec(), count( $dedupUids ) );
+                       // Actually push the non-duplicate jobs into the queue...
+                       if ( $flags & self::QoS_Atomic ) {
+                               $batches = array( $items ); // all or nothing
+                       } else {
+                               $batches = array_chunk( $items, 500 ); // avoid tying up the server
+                       }
+                       $failed = 0;
+                       $pushed = 0;
+                       foreach ( $batches as $itemBatch ) {
+                               $added = $this->pushBlobs( $conn, $itemBatch );
+                               if ( is_int( $added ) ) {
+                                       $pushed += $added;
                                } else {
-                                       $exists = $conn->exec();
-                                       $claimed = array(); // no claim system
-                               }
-                               // Remove the duplicate jobs to cut down on pushing duplicate uids...
-                               foreach ( $dedupUids as $k => $uid ) {
-                                       if ( $exists[$k] && empty( $claimed[$k] ) ) {
-                                               unset( $items[$uid] );
-                                       }
+                                       $failed += count( $itemBatch );
                                }
                        }
-                       // Actually push the non-duplicate jobs into the queue...
-                       if ( count( $items ) ) {
-                               $uids = array_keys( $items );
-                               $conn->multi( Redis::MULTI ); // begin (atomic trx)
-                               $conn->mSet( $this->prefixKeysWithQueueKey( 'data', $items ) );
-                               call_user_func_array(
-                                       array( $conn, 'lPush' ),
-                                       array_merge( array( $this->getQueueKey( 'l-unclaimed' ) ), $uids )
-                               );
-                               $res = $conn->exec(); // commit (atomic trx)
-                               if ( in_array( false, $res, true ) ) {
-                                       wfDebugLog( 'JobQueueRedis', "Could not insert {$this->type} job(s)." );
-                                       return false;
-                               }
+                       if ( $failed > 0 ) {
+                               wfDebugLog( 'JobQueueRedis', "Could not insert {$failed} {$this->type} job(s)." );
+                               return false;
                        }
                        wfIncrStats( 'job-insert', count( $items ) );
-                       wfIncrStats( 'job-insert-duplicate', count( $jobs ) - count( $items ) );
+                       wfIncrStats( 'job-insert-duplicate', count( $items ) - $failed - $pushed );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -179,6 +208,59 @@ class JobQueueRedis extends JobQueue {
                return true;
        }
 
+       /**
+        * @param RedisConnRef $conn
+        * @param array $items List of results from JobQueueRedis::getNewJobFields()
+        * @return integer Number of jobs inserted (duplicates are ignored)
+        * @throws RedisException
+        */
+       protected function pushBlobs( RedisConnRef $conn, array $items ) {
+               $args = array(); // ([id, sha1, blob [, id, sha1, blob ... ] ] )
+               foreach ( $items as $item ) {
+                       $args[] = (string)$item['uuid'];
+                       $args[] = (string)$item['sha1'];
+                       $args[] = (string)$item['rtimestamp'];
+                       $args[] = (string)serialize( $item );
+               }
+               static $script =
+<<<LUA
+               if #ARGV % 4 ~= 0 then return redis.error_reply('Unmatched arguments') end
+               local pushed = 0
+               for i = 1,#ARGV,4 do
+                       local id,sha1,rtimestamp,blob = ARGV[i],ARGV[i+1],ARGV[i+2],ARGV[i+3]
+                       if sha1 == '' or redis.call('hExists',KEYS[3],sha1) == 0 then
+                               if 1*rtimestamp > 0 then
+                                       -- Insert into delayed queue (release time as score)
+                                       redis.call('zAdd',KEYS[4],rtimestamp,id)
+                               else
+                                       -- Insert into unclaimed queue
+                                       redis.call('lPush',KEYS[1],id)
+                               end
+                               if sha1 ~= '' then
+                                       redis.call('hSet',KEYS[2],id,sha1)
+                                       redis.call('hSet',KEYS[3],sha1,id)
+                               end
+                               redis.call('hSet',KEYS[5],id,blob)
+                               pushed = pushed + 1
+                       end
+               end
+               return pushed
+LUA;
+               return $this->redisEval( $conn, $script,
+                       array_merge(
+                               array(
+                                       $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
+                                       $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
+                                       $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
+                                       $this->getQueueKey( 'z-delayed' ), # KEYS[4]
+                                       $this->getQueueKey( 'h-data' ), # KEYS[5]
+                               ),
+                               $args
+                       ),
+                       5 # number of first argument(s) that are keys
+               );
+       }
+
        /**
         * @see JobQueue::doPop()
         * @return Job|bool
@@ -187,42 +269,33 @@ class JobQueueRedis extends JobQueue {
        protected function doPop() {
                $job = false;
 
-               if ( $this->claimTTL <= 0 && mt_rand( 0, 99 ) == 0 ) {
-                       $this->cleanupClaimedJobs(); // prune jobs and IDs from the "garbage" list
+               // Push ready delayed jobs into the queue every 10 jobs to spread the load.
+               // This is also done as a periodic task, but we don't want too much done at once.
+               if ( $this->checkDelay && mt_rand( 0, 9 ) == 0 ) {
+                       $this->releaseReadyDelayedJobs();
                }
 
                $conn = $this->getConnection();
                try {
                        do {
-                               // Atomically pop an item off the queue and onto the "claimed" list
-                               $uid = $conn->rpoplpush(
-                                       $this->getQueueKey( 'l-unclaimed' ),
-                                       $this->getQueueKey( 'l-claimed' )
-                               );
-                               if ( $uid === false ) {
+                               if ( $this->claimTTL > 0 ) {
+                                       // Keep the claimed job list down for high-traffic queues
+                                       if ( mt_rand( 0, 99 ) == 0 ) {
+                                               $this->recycleAndDeleteStaleJobs();
+                                       }
+                                       $blob = $this->popAndAcquireBlob( $conn );
+                               } else {
+                                       $blob = $this->popAndDeleteBlob( $conn );
+                               }
+                               if ( $blob === false ) {
                                        break; // no jobs; nothing to do
                                }
 
                                wfIncrStats( 'job-pop' );
-                               $conn->multi( Redis::PIPELINE );
-                               $conn->get( $this->prefixWithQueueKey( 'data', $uid ) );
-                               if ( $this->claimTTL > 0 ) {
-                                       // Set the claim timestamp metadata. If this step fails, then
-                                       // the timestamp will be assumed to be the current timestamp by
-                                       // recycleAndDeleteStaleJobs() as of the next time that it runs.
-                                       // If two runners claim duplicate jobs, one will abort here.
-                                       $conn->hSetNx( $this->prefixWithQueueKey( 'h-meta', $uid ), 'ctime', time() );
-                               } else {
-                                       // If this fails, the message key will be deleted in cleanupClaimedJobs().
-                                       // If two runners claim duplicate jobs, one of them will abort here.
-                                       $conn->delete(
-                                               $this->prefixWithQueueKey( 'h-meta', $uid ),
-                                               $this->prefixWithQueueKey( 'data', $uid ) );
-                               }
-                               list( $item, $ok ) = $conn->exec();
-                               if ( $item === false || ( $this->claimTTL && !$ok ) ) {
-                                       wfDebug( "Could not find or delete job $uid; probably was a duplicate." );
-                                       continue; // job was probably a duplicate
+                               $item = unserialize( $blob );
+                               if ( $item === false ) {
+                                       wfDebugLog( 'JobQueueRedis', "Could not unserialize {$this->type} job." );
+                                       continue;
                                }
 
                                // If $item is invalid, recycleAndDeleteStaleJobs() will cleanup as needed
@@ -232,17 +305,75 @@ class JobQueueRedis extends JobQueue {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
 
-               // Flag this job as an old duplicate based on its "root" job...
-               try {
-                       if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
-                               wfIncrStats( 'job-pop-duplicate' );
-                               return DuplicateJob::newFromJob( $job ); // convert to a no-op
-                       }
-               } catch ( MWException $e ) {} // don't lose jobs over this
-
                return $job;
        }
 
+       /**
+        * @param RedisConnRef $conn
+        * @return array serialized string or false
+        * @throws RedisException
+        */
+       protected function popAndDeleteBlob( RedisConnRef $conn ) {
+               static $script =
+<<<LUA
+               -- Pop an item off the queue
+               local id = redis.call('rpop',KEYS[1])
+               if not id then return false end
+               -- Get the job data and remove it
+               local item = redis.call('hGet',KEYS[4],id)
+               redis.call('hDel',KEYS[4],id)
+               -- Allow new duplicates of this job
+               local sha1 = redis.call('hGet',KEYS[2],id)
+               if sha1 then redis.call('hDel',KEYS[3],sha1) end
+               redis.call('hDel',KEYS[2],id)
+               -- Return the job data
+               return item
+LUA;
+               return $this->redisEval( $conn, $script,
+                       array(
+                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
+                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
+                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
+                               $this->getQueueKey( 'h-data' ), # KEYS[4]
+                       ),
+                       4 # number of first argument(s) that are keys
+               );
+       }
+
+       /**
+        * @param RedisConnRef $conn
+        * @return array serialized string or false
+        * @throws RedisException
+        */
+       protected function popAndAcquireBlob( RedisConnRef $conn ) {
+               static $script =
+<<<LUA
+               -- Pop an item off the queue
+               local id = redis.call('rPop',KEYS[1])
+               if not id then return false end
+               -- Allow new duplicates of this job
+               local sha1 = redis.call('hGet',KEYS[2],id)
+               if sha1 then redis.call('hDel',KEYS[3],sha1) end
+               redis.call('hDel',KEYS[2],id)
+               -- Mark the jobs as claimed and return it
+               redis.call('zAdd',KEYS[4],ARGV[1],id)
+               redis.call('hIncrBy',KEYS[5],id,1)
+               return redis.call('hGet',KEYS[6],id)
+LUA;
+               return $this->redisEval( $conn, $script,
+                       array(
+                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
+                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
+                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
+                               $this->getQueueKey( 'z-claimed' ), # KEYS[4]
+                               $this->getQueueKey( 'h-attempts' ), # KEYS[5]
+                               $this->getQueueKey( 'h-data' ), # KEYS[6]
+                               time(), # ARGV[1] (injected to be replication-safe)
+                       ),
+                       6 # number of first argument(s) that are keys
+               );
+       }
+
        /**
         * @see JobQueue::doAck()
         * @param Job $job
@@ -257,20 +388,25 @@ class JobQueueRedis extends JobQueue {
                                // the job was transformed into a DuplicateJob or anything of the sort.
                                $item = $job->metadata['sourceFields'];
 
-                               $conn->multi( Redis::MULTI ); // begin (atomic trx)
-                               // Remove the first instance of this job scanning right-to-left.
-                               // This is O(N) in the worst case, but is likely to be much faster since
-                               // jobs are pushed to the left and we are starting from the right, where
-                               // the longest running jobs are likely to be. These should be the first
-                               // jobs to be acknowledged assuming that job run times are roughly equal.
-                               $conn->lRem( $this->getQueueKey( 'l-claimed' ), $item['uid'], -1 );
-                               // Delete the job data and its claim metadata
-                               $conn->delete(
-                                       $this->prefixWithQueueKey( 'h-meta', $item['uid'] ),
-                                       $this->prefixWithQueueKey( 'data', $item['uid'] ) );
-                               $res = $conn->exec(); // commit (atomic trx)
-
-                               if ( in_array( false, $res, true ) ) {
+                               static $script =
+<<<LUA
+                               -- Unmark the job as claimed
+                               redis.call('zRem',KEYS[1],ARGV[1])
+                               redis.call('hDel',KEYS[2],ARGV[1])
+                               -- Delete the job data itself
+                               return redis.call('hDel',KEYS[3],ARGV[1])
+LUA;
+                               $res = $this->redisEval( $conn, $script,
+                                       array(
+                                               $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+                                               $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+                                               $this->getQueueKey( 'h-data' ), # KEYS[3]
+                                               $item['uuid'] # ARGV[1]
+                                       ),
+                                       3 # number of first argument(s) that are keys
+                               );
+
+                               if ( !$res ) {
                                        wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
                                        return false;
                                }
@@ -294,7 +430,7 @@ class JobQueueRedis extends JobQueue {
                } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
                        throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
                }
-               $key = $this->getRootJobKey( $params['rootJobSignature'] );
+               $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
 
                $conn = $this->getConnection();
                try {
@@ -310,13 +446,11 @@ class JobQueueRedis extends JobQueue {
        }
 
        /**
-        * Check if the "root" job of a given job has been superseded by a newer one
-        *
-        * @param $job Job
+        * @see JobQueue::doIsRootJobOldDuplicate()
+        * @param Job $job
         * @return bool
-        * @throws MWException
         */
-       protected function isRootJobOldDuplicate( Job $job ) {
+       protected function doIsRootJobOldDuplicate( Job $job ) {
                $params = $job->getParams();
                if ( !isset( $params['rootJobSignature'] ) ) {
                        return false; // job has no de-deplication info
@@ -328,7 +462,7 @@ class JobQueueRedis extends JobQueue {
                $conn = $this->getConnection();
                try {
                        // Get the last time this root job was enqueued
-                       $timestamp = $conn->get( $this->getRootJobKey( $params['rootJobSignature'] ) );
+                       $timestamp = $conn->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -360,7 +494,29 @@ class JobQueueRedis extends JobQueue {
        }
 
        /**
-        * This function should not be called outside RedisJobQueue
+        * @see JobQueue::getAllQueuedJobs()
+        * @return Iterator
+        */
+       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
+                               $conn->zRange( $this->getQueueKey( 'z-delayed' ), 0, -1 ),
+                               function( $uid ) use ( $that, $conn ) {
+                                       return $that->getJobFromUidInternal( $uid, $conn );
+                               }
+                       );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $this->server, $conn, $e );
+               }
+       }
+
+       /**
+        * This function should not be called outside JobQueueRedis
         *
         * @param $uid string
         * @param $conn RedisConnRef
@@ -369,14 +525,13 @@ class JobQueueRedis extends JobQueue {
         */
        public function getJobFromUidInternal( $uid, RedisConnRef $conn ) {
                try {
-                       $fields = $conn->get( $this->prefixWithQueueKey( 'data', $uid ) );
-                       if ( !is_array( $fields ) ) { // wtf?
-                               $conn->delete( $this->prefixWithQueueKey( 'data', $uid ) );
-                               throw new MWException( "Could not find job with UID '$uid'." );
+                       $item = unserialize( $conn->hGet( $this->getQueueKey( 'h-data' ), $uid ) );
+                       if ( !is_array( $item ) ) { // this shouldn't happen
+                               throw new MWException( "Could not find job with ID '$uid'." );
                        }
-                       $title = Title::makeTitle( $fields['namespace'], $fields['title'] );
-                       $job = Job::factory( $fields['type'], $title, $fields['params'] );
-                       $job->metadata['sourceFields'] = $fields;
+                       $title = Title::makeTitle( $item['namespace'], $item['title'] );
+                       $job = Job::factory( $item['type'], $title, $item['params'] );
+                       $job->metadata['sourceFields'] = $item;
                        return $job;
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -384,90 +539,35 @@ class JobQueueRedis extends JobQueue {
        }
 
        /**
-        * Recycle or destroy any jobs that have been claimed for too long
+        * Release any ready delayed jobs into the queue
         *
-        * @return integer Number of jobs recycled/deleted
+        * @return integer Number of jobs released
         * @throws MWException
         */
-       public function recycleAndDeleteStaleJobs() {
-               if ( $this->claimTTL <= 0 ) { // sanity
-                       throw new MWException( "Cannot recycle jobs since acknowledgements are disabled." );
-               }
+       public function releaseReadyDelayedJobs() {
                $count = 0;
-               // For each job item that can be retried, we need to add it back to the
-               // main queue and remove it from the list of currenty claimed job items.
+
                $conn = $this->getConnection();
                try {
-                       // Avoid duplicate insertions of items to be re-enqueued
-                       $conn->multi( Redis::MULTI );
-                       $conn->setnx( $this->getQueueKey( 'lock' ), 1 );
-                       $conn->expire( $this->getQueueKey( 'lock' ), 3600 );
-                       if ( $conn->exec() !== array( true, true ) ) { // lock
-                               return $count; // already in progress
-                       }
-
-                       $now = time();
-                       $claimCutoff = $now - $this->claimTTL;
-                       $pruneCutoff = $now - self::MAX_AGE_PRUNE;
-
-                       // Get the list of all claimed jobs
-                       $claimedUids = $conn->lRange( $this->getQueueKey( 'l-claimed' ), 0, -1 );
-                       // Get a map of (uid => claim metadata) for all claimed jobs
-                       $metadata = $conn->mGet( $this->prefixValuesWithQueueKey( 'h-meta', $claimedUids ) );
-
-                       $uidsPush = array(); // items IDs to move to the "unclaimed" queue
-                       $uidsRemove = array(); // item IDs to remove from "claimed" queue
-                       foreach ( $claimedUids as $i => $uid ) { // all claimed items
-                               $info = $metadata[$i] ? $metadata[$i] : array();
-                               if ( isset( $info['ctime'] ) || isset( $info['rctime'] ) ) {
-                                       // Prefer "ctime" (set by pop()) over "rctime" (set by this function)
-                                       $ctime = isset( $info['ctime'] ) ? $info['ctime'] : $info['rctime'];
-                                       // Claimed job claimed for too long?
-                                       if ( $ctime < $claimCutoff ) {
-                                               // Get the number of failed attempts
-                                               $attempts = isset( $info['attempts'] ) ? $info['attempts'] : 0;
-                                               if ( $attempts < $this->maxTries ) {
-                                                       $uidsPush[] = $uid; // retry it
-                                               } elseif ( $ctime < $pruneCutoff ) {
-                                                       $uidsRemove[] = $uid; // just remove it
-                                               }
-                                       }
-                               } else {
-                                       // If pop() failed to set the claim timestamp, set it to the current time.
-                                       // Since that function sets this non-atomically *after* moving the job to
-                                       // the "claimed" queue, it may be the case that it just didn't set it yet.
-                                       $conn->hSet( $this->prefixWithQueueKey( 'h-meta', $uid ), 'rctime', $now );
-                               }
-                       }
-
-                       $conn->multi( Redis::MULTI ); // begin (atomic trx)
-                       if ( count( $uidsPush ) ) { // move from "l-claimed" to "l-unclaimed"
-                               call_user_func_array(
-                                       array( $conn, 'lPush' ),
-                                       array_merge( array( $this->getQueueKey( 'l-unclaimed' ) ), $uidsPush )
-                               );
-                               foreach ( $uidsPush as $uid ) {
-                                       $conn->lRem( $this->getQueueKey( 'l-claimed' ), $uid, -1 );
-                                       $conn->hDel( $this->prefixWithQueueKey( 'h-meta', $uid ), 'ctime', 'rctime' );
-                                       $conn->hIncrBy( $this->prefixWithQueueKey( 'h-meta', $uid ), 'attempts', 1 );
-                               }
-                       }
-                       foreach ( $uidsRemove as $uid ) { // remove from "l-claimed"
-                               $conn->lRem( $this->getQueueKey( 'l-claimed' ), $uid, -1 );
-                               $conn->delete( // delete job data and metadata
-                                       $this->prefixWithQueueKey( 'h-meta', $uid ),
-                                       $this->prefixWithQueueKey( 'data', $uid ) );
-                       }
-                       $res = $conn->exec(); // commit (atomic trx)
-
-                       if ( in_array( false, $res, true ) ) {
-                               wfDebugLog( 'JobQueueRedis', "Could not recycle {$this->type} job(s)." );
-                       } else {
-                               $count += ( count( $uidsPush ) + count( $uidsRemove ) );
-                               wfIncrStats( 'job-recycle', count( $uidsPush ) );
-                       }
-
-                       $conn->delete( $this->getQueueKey( 'lock' ) ); // unlock
+                       static $script =
+<<<LUA
+                       -- Get the list of ready delayed jobs, sorted by readiness
+                       local ids = redis.call('zRangeByScore',KEYS[1],0,ARGV[1])
+                       -- Migrate the jobs from the "delayed" set to the "unclaimed" list
+                       for k,id in ipairs(ids) do
+                               redis.call('lPush',KEYS[2],id)
+                               redis.call('zRem',KEYS[1],id)
+                       end
+                       return #ids
+LUA;
+                       $count += (int)$this->redisEval( $conn, $script,
+                               array(
+                                       $this->getQueueKey( 'z-delayed' ), // KEYS[1]
+                                       $this->getQueueKey( 'l-unclaimed' ), // KEYS[2]
+                                       time() // ARGV[1]; max "delay until" UNIX timestamp
+                               ),
+                               2 # first two arguments are keys
+                       );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -476,45 +576,73 @@ class JobQueueRedis extends JobQueue {
        }
 
        /**
-        * Destroy any jobs that have been claimed
+        * Recycle or destroy any jobs that have been claimed for too long
         *
-        * @return integer Number of jobs deleted
+        * @return integer Number of jobs recycled/deleted
         * @throws MWException
         */
-       protected function cleanupClaimedJobs() {
+       public function recycleAndDeleteStaleJobs() {
+               if ( $this->claimTTL <= 0 ) { // sanity
+                       throw new MWException( "Cannot recycle jobs since acknowledgements are disabled." );
+               }
                $count = 0;
-               // Make sure the message for claimed jobs was deleted
-               // and remove the claimed job IDs from the "claimed" list.
+               // For each job item that can be retried, we need to add it back to the
+               // main queue and remove it from the list of currenty claimed job items.
+               // For those that cannot, they are marked as dead and kept around for
+               // investigation and manual job restoration but are eventually deleted.
                $conn = $this->getConnection();
                try {
-                       // Avoid races and duplicate effort
-                       $conn->multi( Redis::MULTI );
-                       $conn->setnx( $this->getQueueKey( 'lock' ), 1 );
-                       $conn->expire( $this->getQueueKey( 'lock' ), 3600 );
-                       if ( $conn->exec() !== array( true, true ) ) { // lock
-                               return $count; // already in progress
-                       }
-                       // Get the list of all claimed jobs
-                       $uids = $conn->lRange( $this->getQueueKey( 'l-claimed' ), 0, -1 );
-                       if ( count( $uids ) ) {
-                               // Delete the message keys and delist the corresponding ids.
-                               // Since the only other changes to "l-claimed" are left pushes, we can just strip
-                               // off the elements read here using a right trim based on the number of ids read.
-                               $conn->multi( Redis::MULTI ); // begin (atomic trx)
-                               $conn->lTrim( $this->getQueueKey( 'l-claimed' ), 0, -count( $uids ) - 1 );
-                               $conn->delete( array_merge(
-                                       $this->prefixValuesWithQueueKey( 'h-meta', $uids ),
-                                       $this->prefixValuesWithQueueKey( 'data', $uids )
-                               ) );
-                               $res = $conn->exec(); // commit (atomic trx)
-
-                               if ( in_array( false, $res, true ) ) {
-                                       wfDebugLog( 'JobQueueRedis', "Could not purge {$this->type} job(s)." );
-                               } else {
-                                       $count += count( $uids );
-                               }
+                       $now = time();
+                       static $script =
+<<<LUA
+                       local released,abandoned,pruned = 0,0,0
+                       -- Get all non-dead jobs that have an expired claim on them.
+                       -- The score for each item is the last claim timestamp (UNIX).
+                       local staleClaims = redis.call('zRangeByScore',KEYS[1],0,ARGV[1],'WITHSCORES')
+                       for id,timestamp in ipairs(staleClaims) do
+                               local attempts = redis.call('hGet',KEYS[2],id)
+                               if attempts < ARGV[3] then
+                                       -- Claim expired and retries left: re-enqueue the job
+                                       redis.call('lPush',KEYS[3],id)
+                                       redis.call('hIncrBy',KEYS[2],id,1)
+                                       released = released + 1
+                               else
+                                       -- Claim expired and no retries left: mark the job as dead
+                                       redis.call('zAdd',KEYS[5],timestamp,id)
+                                       abandoned = abandoned + 1
+                               end
+                               redis.call('zRem',KEYS[1],id)
+                       end
+                       -- Get all of the dead jobs that have been marked as dead for too long.
+                       -- The score for each item is the last claim timestamp (UNIX).
+                       local deadClaims = redis.call('zRangeByScore',KEYS[5],0,ARGV[2],'WITHSCORES')
+                       for id,timestamp in ipairs(deadClaims) do
+                               -- Stale and out of retries: remove any traces of the job
+                               redis.call('zRem',KEYS[5],id)
+                               redis.call('hDel',KEYS[2],id)
+                               redis.call('hDel',KEYS[4],id)
+                               pruned = pruned + 1
+                       end
+                       return {released,abandoned,pruned}
+LUA;
+                       $res = $this->redisEval( $conn, $script,
+                               array(
+                                       $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+                                       $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+                                       $this->getQueueKey( 'l-unclaimed' ), # KEYS[3]
+                                       $this->getQueueKey( 'h-data' ), # KEYS[4]
+                                       $this->getQueueKey( 'z-abandoned' ), # KEYS[5]
+                                       $now - $this->claimTTL, # ARGV[1]
+                                       $now - self::MAX_AGE_PRUNE, # ARGV[2]
+                                       $this->maxTries # ARGV[3]
+                               ),
+                               5 # number of first argument(s) that are keys
+                       );
+                       if ( $res ) {
+                               list( $released, $abandoned, $pruned ) = $res;
+                               $count += $released + $pruned;
+                               wfIncrStats( 'job-recycle', count( $released ) );
                        }
-                       $conn->delete( $this->getQueueKey( 'lock' ) ); // unlock
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -526,16 +654,47 @@ class JobQueueRedis extends JobQueue {
         * @return Array
         */
        protected function doGetPeriodicTasks() {
+               $tasks = array();
                if ( $this->claimTTL > 0 ) {
-                       return array(
-                               'recycleAndDeleteStaleJobs' => array(
-                                       'callback' => array( $this, 'recycleAndDeleteStaleJobs' ),
-                                       'period'   => ceil( $this->claimTTL / 2 )
-                               )
+                       $tasks['recycleAndDeleteStaleJobs'] = array(
+                               'callback' => array( $this, 'recycleAndDeleteStaleJobs' ),
+                               'period'   => ceil( $this->claimTTL / 2 )
                        );
-               } else {
-                       return array();
                }
+               if ( $this->checkDelay ) {
+                       $tasks['releaseReadyDelayedJobs'] = array(
+                               'callback' => array( $this, 'releaseReadyDelayedJobs' ),
+                               'period'   => 300 // 5 minutes
+                       );
+               }
+               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;
        }
 
        /**
@@ -545,15 +704,18 @@ class JobQueueRedis extends JobQueue {
        protected function getNewJobFields( Job $job ) {
                return array(
                        // Fields that describe the nature of the job
-                       'type'      => $job->getType(),
-                       'namespace' => $job->getTitle()->getNamespace(),
-                       'title'     => $job->getTitle()->getDBkey(),
-                       'params'    => $job->getParams(),
-                       // Additional metadata
-                       'uid'       => $job->ignoreDuplicates()
+                       'type'       => $job->getType(),
+                       'namespace'  => $job->getTitle()->getNamespace(),
+                       'title'      => $job->getTitle()->getDBkey(),
+                       'params'     => $job->getParams(),
+                       // Some jobs cannot run until a "release timestamp"
+                       'rtimestamp' => $job->getReleaseTimestamp() ?: 0,
+                       // Additional job metadata
+                       'uuid'       => UIDGenerator::newRawUUIDv4( UIDGenerator::QUICK_RAND ),
+                       'sha1'       => $job->ignoreDuplicates()
                                ? wfBaseConvert( sha1( serialize( $job->getDeduplicationInfo() ) ), 16, 36, 31 )
-                               : wfRandomString( 32 ),
-                       'timestamp' => time() // UNIX timestamp
+                               : '',
+                       'timestamp'  => time() // UNIX timestamp
                );
        }
 
@@ -571,14 +733,6 @@ class JobQueueRedis extends JobQueue {
                return false;
        }
 
-       /**
-        * @param string $uid Job UID
-        * @return bool Whether $uid is a SHA-1 hash based identifier for de-duplication
-        */
-       protected function isHashUid( $uid ) {
-               return strlen( $uid ) == 31;
-       }
-
        /**
         * Get a connection to the server that handles all sub-queues for this queue
         *
@@ -617,50 +771,6 @@ class JobQueueRedis extends JobQueue {
                }
        }
 
-       /**
-        * @param string $signature Hash identifier of the root job
-        * @return string
-        */
-       private function getRootJobKey( $signature ) {
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
-       }
-
-       /**
-        * @param $prop string
-        * @param $string string
-        * @return string
-        */
-       private function prefixWithQueueKey( $prop, $string ) {
-               return $this->getQueueKey( $prop ) . ':' . $string;
-       }
-
-       /**
-        * @param $prop string
-        * @param $items array
-        * @return Array
-        */
-       private function prefixValuesWithQueueKey( $prop, array $items ) {
-               $res = array();
-               foreach ( $items as $item ) {
-                       $res[] = $this->prefixWithQueueKey( $prop, $item );
-               }
-               return $res;
-       }
-
-       /**
-        * @param $prop string
-        * @param $items array
-        * @return Array
-        */
-       private function prefixKeysWithQueueKey( $prop, array $items ) {
-               $res = array();
-               foreach ( $items as $key => $item ) {
-                       $res[$this->prefixWithQueueKey( $prop, $key )] = $item;
-               }
-               return $res;
-       }
-
        /**
         * @param $key string
         * @return void
index deb8fb0..c11d5a7 100644 (file)
@@ -52,7 +52,7 @@ require durable queues, whereas other jobs might be more important.
 
 The aggregators are used by nextJobDB.php, which is a script that will return a
 random ready queue (on any wiki in the farm) that can be used with runJobs.php.
-This can be used in conjuction with any scripts that handle wiki farm job queues.
+This can be used in conjunction with any scripts that handle wiki farm job queues.
 Note that $wgLocalDatabases defines what wikis are in the wiki farm.
 
 Since each job type has its own queue, and wiki-farms may have many wikis,
index 840a398..c5dd9ea 100644 (file)
@@ -37,9 +37,9 @@ class AssembleUploadChunksJob extends Job {
                $context = RequestContext::getMain();
                try {
                        $user = $context->getUser();
-                       if ( !$user->isLoggedIn() || $user->getId() != $this->params['userid'] ) {
+                       if ( !$user->isLoggedIn() ) {
                                $this->setLastError( "Could not load the author user from session." );
-                               return true; // no retries
+                               return false;
                        }
 
                        UploadBase::setSessionStatus(
@@ -62,7 +62,7 @@ class AssembleUploadChunksJob extends Job {
                                        array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
                                );
                                $this->setLastError( $status->getWikiText() );
-                               return true; // no retries
+                               return false;
                        }
 
                        // We have a new filekey for the fully concatenated file
@@ -99,13 +99,11 @@ class AssembleUploadChunksJob extends Job {
                                )
                        );
                        $this->setLastError( get_class( $e ) . ": " . $e->getText() );
+                       return false;
                }
-               return true; // returns true on success and erro (no retries)
+               return true;
        }
 
-       /**
-        * @return Array
-        */
        public function getDeduplicationInfo() {
                $info = parent::getDeduplicationInfo();
                if ( is_array( $info['params'] ) ) {
@@ -113,4 +111,8 @@ class AssembleUploadChunksJob extends Job {
                }
                return $info;
        }
+
+       public function allowRetries() {
+               return false;
+       }
 }
index 594d304..d3feda2 100644 (file)
@@ -37,9 +37,9 @@ class PublishStashedFileJob extends Job {
                $context = RequestContext::getMain();
                try {
                        $user = $context->getUser();
-                       if ( !$user->isLoggedIn() || $user->getId() != $this->params['userid'] ) {
+                       if ( !$user->isLoggedIn() ) {
                                $this->setLastError( "Could not load the author user from session." );
-                               return true; // no retries
+                               return false;
                        }
 
                        UploadBase::setSessionStatus(
@@ -64,7 +64,7 @@ class PublishStashedFileJob extends Job {
                                        array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
                                );
                                $this->setLastError( "Could not verify upload." );
-                               return true; // no retries
+                               return false;
                        }
 
                        // Upload the stashed file to a permanent location
@@ -80,7 +80,7 @@ class PublishStashedFileJob extends Job {
                                        array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
                                );
                                $this->setLastError( $status->getWikiText() );
-                               return true; // no retries
+                               return false;
                        }
 
                        // Build the image info array while we have the local reference handy
@@ -111,13 +111,11 @@ class PublishStashedFileJob extends Job {
                                )
                        );
                        $this->setLastError( get_class( $e ) . ": " . $e->getText() );
+                       return false;
                }
-               return true; // returns true on success and erro (no retries)
+               return true;
        }
 
-       /**
-        * @return Array
-        */
        public function getDeduplicationInfo() {
                $info = parent::getDeduplicationInfo();
                if ( is_array( $info['params'] ) ) {
@@ -125,4 +123,8 @@ class PublishStashedFileJob extends Job {
                }
                return $info;
        }
+
+       public function allowRetries() {
+               return false;
+       }
 }
index 216b3a5..eececcb 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Simple wrapper for json_econde and json_decode that falls back on Services_JSON class.
+ * Simple wrapper for json_encode and json_decode that falls back on Services_JSON class.
  *
  * 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
index 13bb183..b7c101a 100644 (file)
@@ -100,7 +100,7 @@ define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
  * // create a new instance of Services_JSON
  * $json = new Services_JSON();
  *
- * // convert a complexe value to JSON notation, and send it to the browser
+ * // convert a complex value to JSON notation, and send it to the browser
  * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
  * $output = $json->encode($value);
  *
@@ -155,7 +155,7 @@ class Services_JSON
         *
         * Normally should be handled by mb_convert_encoding, but
         * provides a slower PHP-only method for installations
-        * that lack the multibye string extension.
+        * that lack the multibyte string extension.
         *
         * @param string $utf16 UTF-16 character
         * @return String: UTF-8 character
@@ -210,7 +210,7 @@ class Services_JSON
         *
         * Normally should be handled by mb_convert_encoding, but
         * provides a slower PHP-only method for installations
-        * that lack the multibye string extension.
+        * that lack the multibyte string extension.
         *
         * @param string $utf8 UTF-8 character
         * @return String: UTF-16 character
@@ -268,7 +268,7 @@ class Services_JSON
         *
         * @param $var Mixed: any number, boolean, string, array, or object to be encoded.
         *                      see argument 1 to Services_JSON() above for array-parsing behavior.
-        *                      if var is a strng, note that encode() always expects it
+        *                      if var is a string, note that encode() always expects it
         *                      to be in ASCII or UTF-8 format!
         * @param $pretty Boolean: pretty-print output with indents and newlines
         *
@@ -288,7 +288,7 @@ class Services_JSON
         *
         * @param $var Mixed: any number, boolean, string, array, or object to be encoded.
         *                      see argument 1 to Services_JSON() above for array-parsing behavior.
-        *                      if var is a strng, note that encode() always expects it
+        *                      if var is a string, note that encode() always expects it
         *                      to be in ASCII or UTF-8 format!
         *
         * @return mixed JSON string representation of input var or an error if a problem occurs
index 7c4e32b..f250217 100644 (file)
@@ -256,7 +256,7 @@ class JSMinPlus
                                                        }
                                                        elseif ($type == KEYWORD_VAR && $type == $lastType)
                                                        {
-                                                               // mutiple var-statements can go into one
+                                                               // multiple var-statements can go into one
                                                                $t = ',' . substr($t, 4);
                                                        }
                                                        else
@@ -298,7 +298,7 @@ class JSMinPlus
 
                                if ($elsePart)
                                {
-                                       // be carefull and always make a block out of the thenPart; could be more optimized but is a lot of trouble
+                                       // be careful and always make a block out of the thenPart; could be more optimized but is a lot of trouble
                                        if ($thenPart != ';' && $thenPart[0] != '{')
                                                $thenPart = '{' . $thenPart . '}';
 
@@ -521,7 +521,7 @@ class JSMinPlus
                                        break;
 
                                        case TOKEN_STRING:
-                                               //combine concatted strings with same quotestyle
+                                               //combine concatenated strings with same quote style
                                                if ($n->type == OP_PLUS && substr($left, -1) == $right[0])
                                                {
                                                        $s = substr($left, 0, -1) . substr($right, 1);
index 56209b9..ace26bb 100644 (file)
@@ -994,7 +994,7 @@ class DeleteLogFormatter extends LogFormatter {
                                                $this->msg( 'diff' )->escaped(),
                                                array(),
                                                array(
-                                                       'target'    => $this->entry->getTarget()->getPrefixedDBKey(),
+                                                       'target'    => $this->entry->getTarget()->getPrefixedDBkey(),
                                                        'diff'      => 'prev',
                                                        'timestamp' => $ids[0]
                                                )
index 345e786..3876c52 100644 (file)
@@ -54,7 +54,7 @@ class BitmapMetadataHandler {
         *
         * @param string $app13 String containing app13 block from jpeg file
         */
-       private function doApp13 ( $app13 ) {
+       private function doApp13( $app13 ) {
                try {
                        $this->iptcType = JpegMetadataExtractor::doPSIR( $app13 );
                } catch ( MWException $e ) {
@@ -79,7 +79,7 @@ class BitmapMetadataHandler {
         * @param $filename string
         * @param $byteOrder string
         */
-       function getExif ( $filename, $byteOrder ) {
+       function getExif( $filename, $byteOrder ) {
                global $wgShowEXIF;
                if ( file_exists( $filename ) && $wgShowEXIF ) {
                        $exif = new Exif( $filename, $byteOrder );
@@ -95,7 +95,7 @@ class BitmapMetadataHandler {
         * @param array $metaArray array of metadata values
         * @param string $type type. defaults to other. if two things have the same type they're merged
         */
-       function addMetadata ( $metaArray, $type = 'other' ) {
+       function addMetadata( $metaArray, $type = 'other' ) {
                if ( isset( $this->metadata[$type] ) ) {
                        /* merge with old data */
                        $metaArray = $metaArray + $this->metadata[$type];
@@ -113,7 +113,7 @@ class BitmapMetadataHandler {
         *
         * @return Array metadata array
         */
-       function getMetadataArray () {
+       function getMetadataArray() {
                // this seems a bit ugly... This is all so its merged in right order
                // based on the MWG recomendation.
                $temp = Array();
@@ -147,7 +147,7 @@ class BitmapMetadataHandler {
         * @return array metadata result array.
         * @throws MWException on invalid file.
         */
-       static function Jpeg ( $filename ) {
+       static function Jpeg( $filename ) {
                $showXMP = function_exists( 'xml_parser_create_ns' );
                $meta = new self();
 
@@ -189,7 +189,7 @@ class BitmapMetadataHandler {
         * @param string $filename full path to file
         * @return Array Array for storage in img_metadata.
         */
-       public static function PNG ( $filename ) {
+       public static function PNG( $filename ) {
                $showXMP = function_exists( 'xml_parser_create_ns' );
 
                $meta = new self();
@@ -218,7 +218,7 @@ class BitmapMetadataHandler {
         * @param string $filename full path to file
         * @return Array metadata array
         */
-       public static function GIF ( $filename ) {
+       public static function GIF( $filename ) {
 
                $meta = new self();
                $baseArray = GIFMetadataExtractor::getMetadata( $filename );
@@ -259,7 +259,7 @@ class BitmapMetadataHandler {
         * @throws MWException
         * @return Array The metadata.
         */
-       public static function Tiff ( $filename ) {
+       public static function Tiff( $filename ) {
                if ( file_exists( $filename ) ) {
                        $byteOrder = self::getTiffByteOrder( $filename );
                        if ( !$byteOrder ) {
index c50b2f0..52d3195 100644 (file)
@@ -363,7 +363,7 @@ class Exif {
         * As an alternative approach, some of this could be done in the validate phase
         * if we make up our own types like Exif::DATE.
         */
-       function collapseData( ) {
+       function collapseData() {
 
                $this->exifGPStoNumber( 'GPSLatitude' );
                $this->exifGPStoNumber( 'GPSDestLatitude' );
@@ -439,7 +439,7 @@ class Exif {
         * This has not been tested on any shift-JIS strings.
         * @param string $prop prop name.
         */
-       private function charCodeString ( $prop ) {
+       private function charCodeString( $prop ) {
                if ( isset( $this->mFilteredExifData[$prop] ) ) {
 
                        if ( strlen( $this->mFilteredExifData[$prop] ) <= 8 ) {
@@ -500,7 +500,7 @@ class Exif {
         * the type of UNDEFINED field
         * @param string $prop name of property
         */
-       private function exifPropToOrd ( $prop ) {
+       private function exifPropToOrd( $prop ) {
                if ( isset( $this->mFilteredExifData[$prop] ) ) {
                        $this->mFilteredExifData[$prop] = ord( $this->mFilteredExifData[$prop] );
                }
@@ -510,7 +510,7 @@ class Exif {
         * for example 10 degress 20`40`` S -> -10.34444
         * @param string $prop a gps coordinate exif tag name (like GPSLongitude)
         */
-       private function exifGPStoNumber ( $prop ) {
+       private function exifGPStoNumber( $prop ) {
                $loc =& $this->mFilteredExifData[$prop];
                $dir =& $this->mFilteredExifData[$prop . 'Ref'];
                $res = false;
@@ -545,7 +545,7 @@ class Exif {
         *
         * @deprecated since 1.18
         */
-       function makeFormattedData( ) {
+       function makeFormattedData() {
                wfDeprecated( __METHOD__, '1.18' );
                $this->mFormattedExifData = FormatMetadata::getFormattedData(
                        $this->mFilteredExifData );
@@ -677,7 +677,7 @@ class Exif {
         */
        private function isRational( $in ) {
                $m = array();
-               if ( !is_array( $in ) && @preg_match( '/^(\d+)\/(\d+[1-9]|[1-9]\d*)$/', $in, $m ) ) { # Avoid division by zero
+               if ( !is_array( $in ) && preg_match( '/^(\d+)\/(\d+[1-9]|[1-9]\d*)$/', $in, $m ) ) { # Avoid division by zero
                        return $this->isLong( $m[1] ) && $this->isLong( $m[2] );
                } else {
                        $this->debug( $in, __FUNCTION__, 'fed a non-fraction value' );
@@ -808,7 +808,7 @@ class Exif {
                }
                $type = gettype( $in );
                $class = ucfirst( __CLASS__ );
-               if ( $type === 'array' ) {
+               if ( is_array( $in ) ) {
                        $in = print_r( $in, true );
                }
 
index f22a5a0..1a7d772 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Formating of image metadata values into human readable form.
+ * Formatting of image metadata values into human readable form.
  *
  * 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
index 4191cde..a1b3fd8 100644 (file)
@@ -423,7 +423,7 @@ class IPTC {
         *
         * @return string|array
         */
-       private static function convIPTC ( $data, $charset ) {
+       private static function convIPTC( $data, $charset ) {
                if ( is_array( $data ) ) {
                        foreach ( $data as &$val ) {
                                $val = self::convIPTCHelper( $val, $charset );
@@ -441,7 +441,7 @@ class IPTC {
         *
         * @return string
         */
-       private static function convIPTCHelper ( $data, $charset ) {
+       private static function convIPTCHelper( $data, $charset ) {
                if ( $charset ) {
                        wfSuppressWarnings();
                        $data = iconv( $charset, "UTF-8//IGNORE", $data );
index 8b5d651..3551943 100644 (file)
@@ -32,7 +32,7 @@
  */
 class JpegHandler extends ExifBitmapHandler {
 
-       function getMetadata ( $image, $filename ) {
+       function getMetadata( $image, $filename ) {
                try {
                        $meta = BitmapMetadataHandler::Jpeg( $filename );
                        if ( !is_array( $meta ) ) {
index b0682d3..121652f 100644 (file)
@@ -25,7 +25,7 @@
  * Class for reading jpegs and extracting metadata.
  * see also BitmapMetadataHandler.
  *
- * Based somewhat on GIFMetadataExtrator.
+ * Based somewhat on GIFMetadataExtractor.
  *
  * @ingroup Media
  */
@@ -47,7 +47,7 @@ class JpegMetadataExtractor {
         * @return Array of interesting segments.
         * @throws MWException if given invalid file.
         */
-       static function segmentSplitter ( $filename ) {
+       static function segmentSplitter( $filename ) {
                $showXMP = function_exists( 'xml_parser_create_ns' );
 
                $segmentCount = 0;
@@ -195,7 +195,7 @@ class JpegMetadataExtractor {
         * @throws MWException (It gets caught next level up though)
         * @return String if the iptc hash is good or not.
         */
-       public static function doPSIR ( $app13 ) {
+       public static function doPSIR( $app13 ) {
                if ( !$app13 ) {
                        throw new MWException( "No App13 segment given" );
                }
index 9a3f645..b36bfa9 100644 (file)
@@ -133,7 +133,7 @@ abstract class MediaHandler {
         *
         * @return string version string
         */
-       static function getMetadataVersion () {
+       static function getMetadataVersion() {
                $version = Array( '2' ); // core metadata version
                wfRunHooks( 'GetMetadataVersion', Array( &$version ) );
                return implode( ';', $version);
index f8cd6df..e07fd86 100644 (file)
@@ -278,7 +278,7 @@ class SVGReader {
         *
         * The parser has to be in the start element of "<svg>"
         */
-       private function handleSVGAttribs( ) {
+       private function handleSVGAttribs() {
                $defaultWidth = self::DEFAULT_WIDTH;
                $defaultHeight = self::DEFAULT_HEIGHT;
                $aspect = 1.0;
index 62738a0..d9cca3f 100644 (file)
@@ -414,7 +414,7 @@ class XMPReader {
         *
         * @param string $elm Namespace of element followed by a space and then tag name of element.
         */
-       private function endElementModeIgnore ( $elm ) {
+       private function endElementModeIgnore( $elm ) {
                if ( $this->curItem[0] === $elm ) {
                        array_shift( $this->curItem );
                        array_shift( $this->mode );
@@ -436,7 +436,7 @@ class XMPReader {
         *
         * @param string $elm namespace, space, and tag name.
         */
-       private function endElementModeSimple ( $elm ) {
+       private function endElementModeSimple( $elm ) {
                if ( $this->charContent !== false ) {
                        if ( $this->processingArray ) {
                                // if we're processing an array, use the original element
index 01b07db..3b64fd3 100644 (file)
@@ -31,7 +31,7 @@ class XMPInfo {
        /** get the items array
         * @return Array XMP item configuration array.
         */
-       public static function getItems ( ) {
+       public static function getItems() {
                if( !self::$ranHooks ) {
                        // This is for if someone makes a custom metadata extension.
                        // For example, a medical wiki might want to decode DICOM xmp properties.
index f98f0b5..b7b35dc 100644 (file)
@@ -335,7 +335,7 @@ class XMPValidate {
         *           or DDD,MM.mmk form
         * @param $standalone Boolean if its a simple prop (should always be true)
         */
-       public static function validateGPS ( $info, &$val, $standalone ) {
+       public static function validateGPS( $info, &$val, $standalone ) {
                if ( !$standalone ) {
                        return;
                }
index f0c340f..66348ee 100644 (file)
@@ -8,7 +8,7 @@
 # Explicitly using Unicode 6.0
 BASE=http://www.unicode.org/Public/6.0.0/ucd
 
-# Can override to php-cli or php5 or whatevah
+# Can override to php-cli or php5 or whatever
 PHP=php
 #PHP=php-cli
 
index 186ca04..77ddb79 100644 (file)
@@ -37,7 +37,7 @@ define( 'NORMALIZE_INTL', function_exists( 'normalizer_normalize' ) );
  *
  * Not as fast as I'd like, but should be usable for most purposes.
  * UtfNormal::toNFC() will bail early if given ASCII text or text
- * it can quickly deterimine is already normalized.
+ * it can quickly determine is already normalized.
  *
  * All functions can be called static.
  *
index 36f5ead..3192429 100644 (file)
@@ -47,7 +47,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                if ( $params['persistent'] ) {
                        // The pool ID must be unique to the server/option combination.
                        // The Memcached object is essentially shared for each pool ID.
-                       // We can only resuse a pool ID if we keep the config consistent.
+                       // We can only reuse a pool ID if we keep the config consistent.
                        $this->client = new Memcached( md5( serialize( $params ) ) );
                        if ( count( $this->client->getServerList() ) ) {
                                wfDebug( __METHOD__ . ": persistent Memcached object already loaded.\n" );
index 167424a..a2da307 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 /**
- * Date formatter, recognises dates in plain text and formats them accoding to user preferences.
+ * Date formatter, recognises dates in plain text and formats them according to user preferences.
  * @todo preferences, OutputPage
  * @ingroup Parser
  */
index 7f21449..8209f8a 100644 (file)
@@ -3140,7 +3140,6 @@ class Parser {
         * @private
         */
        function braceSubstitution( $piece, $frame ) {
-               global $wgContLang;
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-setup' );
 
@@ -3237,70 +3236,22 @@ class Parser {
 
                        $colonPos = strpos( $part1, ':' );
                        if ( $colonPos !== false ) {
-                               # Case sensitive functions
-                               $function = substr( $part1, 0, $colonPos );
-                               if ( isset( $this->mFunctionSynonyms[1][$function] ) ) {
-                                       $function = $this->mFunctionSynonyms[1][$function];
-                               } else {
-                                       # Case insensitive functions
-                                       $function = $wgContLang->lc( $function );
-                                       if ( isset( $this->mFunctionSynonyms[0][$function] ) ) {
-                                               $function = $this->mFunctionSynonyms[0][$function];
-                                       } else {
-                                               $function = false;
-                                       }
+                               $func = substr( $part1, 0, $colonPos );
+                               $funcArgs = array( trim( substr( $part1, $colonPos + 1 ) ) );
+                               for ( $i = 0; $i < $args->getLength(); $i++ ) {
+                                       $funcArgs[] = $args->item( $i );
                                }
-                               if ( $function ) {
-                                       wfProfileIn( __METHOD__ . '-pfunc-' . $function );
-                                       list( $callback, $flags ) = $this->mFunctionHooks[$function];
-                                       $initialArgs = array( &$this );
-                                       $funcArgs = array( trim( substr( $part1, $colonPos + 1 ) ) );
-                                       if ( $flags & SFH_OBJECT_ARGS ) {
-                                               # Add a frame parameter, and pass the arguments as an array
-                                               $allArgs = $initialArgs;
-                                               $allArgs[] = $frame;
-                                               for ( $i = 0; $i < $args->getLength(); $i++ ) {
-                                                       $funcArgs[] = $args->item( $i );
-                                               }
-                                               $allArgs[] = $funcArgs;
-                                       } else {
-                                               # Convert arguments to plain text
-                                               for ( $i = 0; $i < $args->getLength(); $i++ ) {
-                                                       $funcArgs[] = trim( $frame->expand( $args->item( $i ) ) );
-                                               }
-                                               $allArgs = array_merge( $initialArgs, $funcArgs );
-                                       }
-
-                                       # Workaround for PHP bug 35229 and similar
-                                       if ( !is_callable( $callback ) ) {
-                                               wfProfileOut( __METHOD__ . '-pfunc-' . $function );
-                                               wfProfileOut( __METHOD__ . '-pfunc' );
-                                               wfProfileOut( __METHOD__ );
-                                               throw new MWException( "Tag hook for $function is not callable\n" );
-                                       }
-                                       $result = call_user_func_array( $callback, $allArgs );
-                                       $found = true;
-                                       $noparse = true;
-                                       $preprocessFlags = 0;
-
-                                       if ( is_array( $result ) ) {
-                                               if ( isset( $result[0] ) ) {
-                                                       $text = $result[0];
-                                                       unset( $result[0] );
-                                               }
-
-                                               # Extract flags into the local scope
-                                               # This allows callers to set flags such as nowiki, found, etc.
-                                               extract( $result );
-                                       } else {
-                                               $text = $result;
-                                       }
-                                       if ( !$noparse ) {
-                                               $text = $this->preprocessToDom( $text, $preprocessFlags );
-                                               $isChildObj = true;
-                                       }
-                                       wfProfileOut( __METHOD__ . '-pfunc-' . $function );
+                               try {
+                                       $result = $this->callParserFunction( $frame, $func, $funcArgs );
+                               } catch ( Exception $ex ) {
+                                       wfProfileOut( __METHOD__ . '-pfunc' );
+                                       throw $ex;
                                }
+
+                               # The interface for parser functions allows for extracting
+                               # flags into the local scope. Extract any forwarded flags
+                               # here.
+                               extract( $result );
                        }
                        wfProfileOut( __METHOD__ . '-pfunc' );
                }
@@ -3497,6 +3448,120 @@ class Parser {
                return $ret;
        }
 
+       /**
+        * Call a parser function and return an array with text and flags.
+        *
+        * The returned array will always contain a boolean 'found', indicating
+        * whether the parser function was found or not. It may also contain the
+        * following:
+        *  text: string|object, resulting wikitext or PP DOM object
+        *  isHTML: bool, $text is HTML, armour it against wikitext transformation
+        *  isChildObj: bool, $text is a DOM node needing expansion in a child frame
+        *  isLocalObj: bool, $text is a DOM node needing expansion in the current frame
+        *  nowiki: bool, wiki markup in $text should be escaped
+        *
+        * @since 1.21
+        * @param $frame PPFrame The current frame, contains template arguments
+        * @param $function string Function name
+        * @param $args array Arguments to the function
+        * @return array
+        */
+       public function callParserFunction( $frame, $function, array $args = array() ) {
+               global $wgContLang;
+
+               wfProfileIn( __METHOD__ );
+
+               # Case sensitive functions
+               if ( isset( $this->mFunctionSynonyms[1][$function] ) ) {
+                       $function = $this->mFunctionSynonyms[1][$function];
+               } else {
+                       # Case insensitive functions
+                       $function = $wgContLang->lc( $function );
+                       if ( isset( $this->mFunctionSynonyms[0][$function] ) ) {
+                               $function = $this->mFunctionSynonyms[0][$function];
+                       } else {
+                               wfProfileOut( __METHOD__ );
+                               return array( 'found' => false );
+                       }
+               }
+
+               wfProfileIn( __METHOD__ . '-pfunc-' . $function );
+               list( $callback, $flags ) = $this->mFunctionHooks[$function];
+
+               # Workaround for PHP bug 35229 and similar
+               if ( !is_callable( $callback ) ) {
+                       wfProfileOut( __METHOD__ . '-pfunc-' . $function );
+                       wfProfileOut( __METHOD__ );
+                       throw new MWException( "Tag hook for $function is not callable\n" );
+               }
+
+               $allArgs = array( &$this );
+               if ( $flags & SFH_OBJECT_ARGS ) {
+                       # Convert arguments to PPNodes and collect for appending to $allArgs
+                       $funcArgs = array();
+                       foreach ( $args as $k => $v ) {
+                               if ( $v instanceof PPNode || $k === 0 ) {
+                                       $funcArgs[] = $v;
+                               } else {
+                                       $funcArgs[] = $this->mPreprocessor->newPartNodeArray( array( $k => $v ) )->item( 0 );
+                               }
+                       }
+
+                       # Add a frame parameter, and pass the arguments as an array
+                       $allArgs[] = $frame;
+                       $allArgs[] = $funcArgs;
+               } else {
+                       # Convert arguments to plain text and append to $allArgs
+                       foreach ( $args as $k => $v ) {
+                               if ( $v instanceof PPNode ) {
+                                       $allArgs[] = trim( $frame->expand( $v ) );
+                               } elseif ( is_int( $k ) && $k >= 0 ) {
+                                       $allArgs[] = trim( $v );
+                               } else {
+                                       $allArgs[] = trim( "$k=$v" );
+                               }
+                       }
+               }
+
+               $result = call_user_func_array( $callback, $allArgs );
+
+               # The interface for function hooks allows them to return a wikitext
+               # string or an array containing the string and any flags. This mungs
+               # things around to match what this method should return.
+               if ( !is_array( $result ) ) {
+                       $result = array(
+                               'found' => true,
+                               'text' => $result,
+                       );
+               } else {
+                       if ( isset( $result[0] ) && !isset( $result['text'] ) ) {
+                               $result['text'] = $result[0];
+                       }
+                       unset( $result[0] );
+                       $result += array(
+                               'found' => true,
+                       );
+               }
+
+               $noparse = true;
+               $preprocessFlags = 0;
+               if ( isset( $result['noparse'] ) ) {
+                       $noparse = $result['noparse'];
+               }
+               if ( isset( $result['preprocessFlags'] ) ) {
+                       $preprocessFlags = $result['preprocessFlags'];
+               }
+
+               if ( !$noparse ) {
+                       $result['text'] = $this->preprocessToDom( $result['text'], $preprocessFlags );
+                       $result['isChildObj'] = true;
+               }
+               wfProfileOut( __METHOD__ . '-pfunc-' . $function );
+               wfProfileOut( __METHOD__ );
+
+               return $result;
+       }
+
        /**
         * Get the semi-parsed DOM representation of a template with a given title,
         * and its redirect destination title. Cached.
@@ -4043,7 +4108,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>.*?'.'>)(?P<header>.*?)<\/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.
@@ -4105,7 +4170,7 @@ class Parser {
                                $serial = $markerMatches[1];
                                list( $titleText, $sectionIndex ) = $this->mHeadings[$serial];
                                $isTemplate = ( $titleText != $baseTitleText );
-                               $headline = preg_replace( "/^$markerRegex/", "", $headline );
+                               $headline = preg_replace( "/^$markerRegex\\s*/", "", $headline );
                        }
 
                        if ( $toclevel ) {
@@ -4158,7 +4223,7 @@ class Parser {
                        $levelCount[$toclevel] = $level;
 
                        # count number of headlines for each level
-                       @$sublevelCount[$toclevel]++;
+                       $sublevelCount[$toclevel]++;
                        $dot = 0;
                        for( $i = 1; $i <= $toclevel; $i++ ) {
                                if ( !empty( $sublevelCount[$i] ) ) {
@@ -4351,7 +4416,7 @@ class Parser {
                }
 
                # split up and insert constructed headlines
-               $blocks = preg_split( '/<H[1-6].*?' . '>.*?<\/H[1-6]>/i', $text );
+               $blocks = preg_split( '/<H[1-6].*?' . '>[\s\S]*?<\/H[1-6]>/i', $text );
                $i = 0;
 
                // build an array of document sections
index db649f1..3af3b7a 100644 (file)
@@ -143,10 +143,10 @@ class ParserOutput extends CacheTime {
        function setNewSection( $value ) {
                $this->mNewSection = (bool)$value;
        }
-       function hideNewSection ( $value ) {
+       function hideNewSection( $value ) {
                $this->mHideNewSection = (bool)$value;
        }
-       function getHideNewSection () {
+       function getHideNewSection() {
                return (bool)$this->mHideNewSection;
        }
        function getNewSection() {
index 7d04927..03f3cc3 100644 (file)
@@ -99,7 +99,7 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Set this module's origin. This is called by ResourceLodaer::register()
+        * Set this module's origin. This is called by ResourceLoader::register()
         * when registering the module. Other code should not call this.
         *
         * @param int $origin origin
index 20da4a3..c9c82ad 100644 (file)
@@ -97,17 +97,19 @@ class ActiveUsersPager extends UsersPager {
                        $conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0'; // don't show hidden names
                }
                $conds[] = 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' );
-               $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
+               $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes(
+                       $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
 
                if( $this->requestedUser != '' ) {
                        $conds[] = 'rc_user_text >= ' . $dbr->addQuotes( $this->requestedUser );
                }
 
-               $query = array(
-                       'tables' => array( 'recentchanges', 'user', 'ipblocks' ),
-                       'fields' => array( 'user_name' => 'rc_user_text', // inheritance
+               return array(
+                       'tables' => array( 'recentchanges', 'ipblocks' ),
+                       'fields' => array(
+                               'user_name' => 'rc_user_text', // for Pager inheritance
                                'rc_user_text', // for Pager
-                               'user_id',
+                               'user_id' => 'rc_user',
                                'recentedits' => 'COUNT(*)',
                                'ipb_deleted' => 'MAX(ipb_deleted)'
                        ),
@@ -115,16 +117,14 @@ class ActiveUsersPager extends UsersPager {
                                'GROUP BY' => array( 'rc_user_text', 'user_id' ),
                                'USE INDEX' => array( 'recentchanges' => 'rc_user_text' )
                        ),
-                       'join_conds' => array(
-                               'user' => array( 'INNER JOIN', 'rc_user_text=user_name' ),
+                       'join_conds' => array( // check for suppression blocks
                                'ipblocks' => array( 'LEFT JOIN', array(
-                                       'user_id=ipb_user',
-                                       'ipb_auto' => 0
+                                       'rc_user=ipb_user',
+                                       'ipb_auto' => 0 # avoid duplicate blocks
                                )),
                        ),
                        'conds' => $conds
                );
-               return $query;
        }
 
        function formatRow( $row ) {
index f245816..3fe64e6 100644 (file)
@@ -114,7 +114,7 @@ class FileDuplicateSearchPage extends QueryPage {
                # Create the input form
                $out->addHTML(
                        Xml::openElement( 'form', array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => $wgScript ) ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
                        Xml::openElement( 'fieldset' ) .
                        Xml::element( 'legend', null, $this->msg( 'fileduplicatesearch-legend' )->text() ) .
                        Xml::inputLabel( $this->msg( 'fileduplicatesearch-filename' )->text(), 'filename', 'filename', 50, $this->filename ) . ' ' .
index 53625cf..030416f 100644 (file)
@@ -42,7 +42,7 @@ class LinkSearchPage extends QueryPage {
        }
 
        function execute( $par ) {
-               global $wgUrlProtocols, $wgMiserMode;
+               global $wgUrlProtocols, $wgMiserMode, $wgScript;
 
                $this->setHeaders();
                $this->outputHeader();
@@ -88,11 +88,11 @@ class LinkSearchPage extends QueryPage {
                        '<nowiki>' . $this->getLanguage()->commaList( $protocols_list ) . '</nowiki>',
                        count( $protocols_list )
                );
-               $s = Xml::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $GLOBALS['wgScript'] ) ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
-                       '<fieldset>' .
-                       Xml::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) .
-                       Xml::inputLabel( $this->msg( 'linksearch-pat' )->text(), 'target', 'target', 50, $target ) . ' ';
+               $s = Html::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $wgScript ) ) . "\n" .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
+                       Html::openElement( 'fieldset' ) . "\n" .
+                       Html::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) . "\n" .
+                       Xml::inputLabel( $this->msg( 'linksearch-pat' )->text(), 'target', 'target', 50, $target ) . "\n";
                if ( !$wgMiserMode ) {
                        $s .= Html::namespaceSelector(
                                array(
@@ -106,9 +106,9 @@ class LinkSearchPage extends QueryPage {
                                )
                        );
                }
-               $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) .
-                       '</fieldset>' .
-                       Xml::closeElement( 'form' );
+               $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) . "\n" .
+                       Html::closeElement( 'fieldset' ) . "\n" .
+                       Html::closeElement( 'form' ) . "\n";
                $out->addHTML( $s );
 
                if( $target != '' ) {
index ed21396..d253a4d 100644 (file)
@@ -206,7 +206,7 @@ class UsersPager extends AlphabeticPager {
        /**
         * @return string
         */
-       function getPageHeader( ) {
+       function getPageHeader() {
                global $wgScript;
 
                list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
index c68f2df..1476e15 100644 (file)
@@ -141,7 +141,7 @@ class SpecialMergeHistory extends SpecialPage {
                        '<fieldset>' .
                        Xml::element( 'legend', array(),
                                $this->msg( 'mergehistory-box' )->text() ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
                        Html::hidden( 'submitted', '1' ) .
                        Html::hidden( 'mergepoint', $this->mTimestamp ) .
                        Xml::openElement( 'table' ) .
index b59f834..ba5a4ac 100644 (file)
@@ -41,7 +41,7 @@ class RandomPage extends SpecialPage {
                return $this->namespaces;
        }
 
-       public function setNamespace ( $ns ) {
+       public function setNamespace( $ns ) {
                if( !$ns || $ns < NS_MAIN ) {
                        $ns = NS_MAIN;
                }
index 6d7173b..391c4a7 100644 (file)
@@ -128,7 +128,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
 
                if( $ns == NS_CATEGORY && !$showlinkedto ) {
                        // special handling for categories
-                       // XXX: should try to make this less klugy
+                       // XXX: should try to make this less kludgy
                        $link_tables = array( 'categorylinks' );
                        $showlinkedto = true;
                } else {
index c85e891..5a5f8ff 100644 (file)
@@ -147,7 +147,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                } else {
                        $this->typeName = $request->getVal( 'type' );
                        $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
-                       if ( $this->targetObj && $this->targetObj->isSpecial( 'Log' ) ) {
+                       if ( $this->targetObj && $this->targetObj->isSpecial( 'Log' ) && count( $this->ids ) !== 0 ) {
                                $result = wfGetDB( DB_SLAVE )->select( 'logging',
                                        'log_type',
                                        array( 'log_id' => $this->ids ),
index 6d16103..026b936 100644 (file)
@@ -68,20 +68,25 @@ class SpecialTags extends SpecialPage {
                        return '';
                }
 
+               $user = $this->getUser();
                $newRow = '';
                $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
 
                $disp = ChangeTags::tagDescription( $tag );
-               $disp .= ' ';
-               $editLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag" ), $this->msg( 'tags-edit' )->escaped() );
-               $disp .= $this->msg( 'parentheses' )->rawParams( $editLink )->escaped();
+               if ( $user->isAllowed( 'editinterface' ) ) {
+                       $disp .= ' ';
+                       $editLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag" ), $this->msg( 'tags-edit' )->escaped() );
+                       $disp .= $this->msg( 'parentheses' )->rawParams( $editLink )->escaped();
+               }
                $newRow .= Xml::tags( 'td', null, $disp );
 
                $msg = $this->msg( "tag-$tag-description" );
                $desc = !$msg->exists() ? '' : $msg->parse();
-               $desc .= ' ';
-               $editDescLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag-description" ), $this->msg( 'tags-edit' )->escaped() );
-               $desc .= $this->msg( 'parentheses' )->rawParams( $editDescLink )->escaped();
+               if ( $user->isAllowed( 'editinterface' ) ) {
+                       $desc .= ' ';
+                       $editDescLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag-description" ), $this->msg( 'tags-edit' )->escaped() );
+                       $desc .= $this->msg( 'parentheses' )->rawParams( $editDescLink )->escaped();
+               }
                $newRow .= Xml::tags( 'td', null, $desc );
 
                $hitcount = $this->msg( 'tags-hitcount' )->numParams( $hitcount )->escaped();
index 54b20dd..ebc32cf 100644 (file)
@@ -38,7 +38,7 @@ class UncategorizedCategoriesPage extends UncategorizedPagesPage {
         * @param $result The query result
         * @return string The category link
         */
-       function formatResult ( $skin, $result ) {
+       function formatResult( $skin, $result ) {
                $title = Title::makeTitle( NS_CATEGORY, $result->title );
                $text = $title->getText();
 
index 34a30a0..e036348 100644 (file)
@@ -781,7 +781,7 @@ class SpecialUndelete extends SpecialPage {
                                'action' => $wgScript ) ) .
                        Xml::fieldset( $this->msg( 'undelete-search-box' )->text() ) .
                        Html::hidden( 'title',
-                               $this->getTitle()->getPrefixedDbKey() ) .
+                               $this->getTitle()->getPrefixedDBkey() ) .
                        Xml::inputLabel( $this->msg( 'undelete-search-prefix' )->text(),
                                'prefix', 'prefix', 20,
                                $this->mSearchPrefix ) . ' ' .
@@ -965,7 +965,7 @@ class SpecialUndelete extends SpecialPage {
                        Xml::element( 'input', array(
                                'type' => 'hidden',
                                'name' => 'target',
-                               'value' => $this->mTargetObj->getPrefixedDbKey() ) ) .
+                               'value' => $this->mTargetObj->getPrefixedDBkey() ) ) .
                        Xml::element( 'input', array(
                                'type' => 'hidden',
                                'name' => 'timestamp',
index dc350bf..eef6691 100644 (file)
@@ -230,7 +230,7 @@ class LoginForm extends SpecialPage {
         * @return bool
         */
        function addNewAccount() {
-               global $wgUser, $wgEmailAuthentication, $wgLoginLanguageSelector;
+               global $wgContLang, $wgUser, $wgEmailAuthentication, $wgLoginLanguageSelector;
 
                # Create the account and abort if there's a problem doing so
                $status = $this->addNewAccountInternal();
@@ -242,10 +242,22 @@ class LoginForm extends SpecialPage {
 
                $u = $status->getValue();
 
-               # If we showed up language selection links, and one was in use, be
-               # smart (and sensible) and save that language as the user's preference
-               if( $wgLoginLanguageSelector && $this->mLanguage ) {
-                       $u->setOption( 'language', $this->mLanguage );
+               # Only save preferences if the user is not creating an account for someone else.
+               if ( $this->getUser()->isAnon() ) {
+                       # If we showed up language selection links, and one was in use, be
+                       # smart (and sensible) and save that language as the user's preference
+                       if( $wgLoginLanguageSelector && $this->mLanguage ) {
+                               $u->setOption( 'language', $this->mLanguage );
+                       } else {
+
+                               # Otherwise the user's language preference defaults to $wgContLang,
+                               # but it may be better to set it to their preferred $wgContLang variant,
+                               # based on browser preferences or URL parameters.
+                               $u->setOption( 'language', $wgContLang->getPreferredVariant() );
+                       }
+                       if ( $wgContLang->hasVariants() ) {
+                               $u->setOption( 'variant', $wgContLang->getPreferredVariant() );
+                       }
                }
 
                $out = $this->getOutput();
index 89c2e76..c7f122b 100644 (file)
@@ -116,7 +116,7 @@ class SpecialWatchlist extends SpecialPage {
                $this->customFilters = array();
                wfRunHooks( 'SpecialWatchlistFilters', array( $this, &$this->customFilters ) );
                foreach( $this->customFilters as $key => $params ) {
-                       $defaults[$key] = $params['msg'];
+                       $defaults[$key] = $params['default'];
                }
 
                # Extract variables from the request, falling back to user preferences or
@@ -131,7 +131,7 @@ class SpecialWatchlist extends SpecialPage {
                $values['hidePatrolled'] = (int)$request->getBool( 'hidePatrolled', $defaults['hidePatrolled'] );
                $values['extended'] = (int)$request->getBool( 'extended', $defaults['extended'] );
                foreach( $this->customFilters as $key => $params ) {
-                       $values[$key] = (int)$request->getBool( $key );
+                       $values[$key] = (int)$request->getBool( $key, $defaults[$key] );
                }
 
                # Get namespace value, if supplied, and prepare a WHERE fragment
@@ -293,7 +293,7 @@ class SpecialWatchlist extends SpecialPage {
                }
 
                ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' );
-               wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields ) );
+               wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields, $values ) );
 
                $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $join_conds );
                $numRows = $res->numRows();
index 569200d..541d9e4 100644 (file)
@@ -108,7 +108,7 @@ class UsercreateTemplate extends QuickTemplate {
                        $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
                }
        ?>
-               <tr>
+               <tr id="mw-user-domain-section">
                        <td class="mw-label"><?php $this->msg( 'yourdomainname' ) ?></td>
                        <td class="mw-input">
                                <select name="wpDomain" value="<?php $this->text( 'domain' ) ?>"
index f4b98b0..8381b4c 100644 (file)
@@ -108,7 +108,7 @@ abstract class UploadBase {
        /**
         * Returns true if the user can use this upload module or else a string
         * identifying the missing permission.
-        * Can be overriden by subclasses.
+        * Can be overridden by subclasses.
         *
         * @param $user User
         * @return bool
@@ -252,7 +252,7 @@ abstract class UploadBase {
                $repo = RepoGroup::singleton()->getLocalRepo();
                if ( $repo->isVirtualUrl( $srcPath ) ) {
                        // @TODO: just make uploads work with storage paths
-                       // UploadFromStash loads files via virtuals URLs
+                       // UploadFromStash loads files via virtual URLs
                        $tmpFile = $repo->getLocalCopy( $srcPath );
                        $tmpFile->bind( $this ); // keep alive with $this
                        wfProfileOut( __METHOD__ );
@@ -967,7 +967,7 @@ abstract class UploadBase {
 
                $chunk = trim( $chunk );
 
-               # @todo FIXME: Convert from UTF-16 if necessarry!
+               # @todo FIXME: Convert from UTF-16 if necessary!
                wfDebug( __METHOD__ . ": checking for embedded scripts and HTML stuff\n" );
 
                # check for HTML doctype
@@ -1100,13 +1100,13 @@ abstract class UploadBase {
                                return true;
                        }
 
-                       # href with embeded svg as target
+                       # href with embedded svg as target
                        if( $stripped == 'href' && preg_match( '!data:[^,]*image/svg[^,]*,!sim', $value ) ) {
                                wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
                                return true;
                        }
 
-                       # href with embeded (text/xml) svg as target
+                       # href with embedded (text/xml) svg as target
                        if( $stripped == 'href' && preg_match( '!data:[^,]*text/xml[^,]*,!sim', $value ) ) {
                                wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
                                return true;
@@ -1120,13 +1120,13 @@ abstract class UploadBase {
 
                        # use set to add href attribute to parent element
                        if( $strippedElement == 'set' && $stripped == 'attributename' && strpos( $value, 'href' ) !== false ) {
-                               wfDebug( __METHOD__ . ": Found svg setting href attibute '$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found svg setting href attribute '$value' in uploaded file.\n" );
                                return true;
                        }
 
                        # use set to add a remote / data / script target to an element
                        if( $strippedElement == 'set' && $stripped == 'to' && preg_match( '!(http|https|data|script):!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found svg setting attibute to '$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found svg setting attribute to '$value' in uploaded file.\n" );
                                return true;
                        }
 
@@ -1377,10 +1377,10 @@ abstract class UploadBase {
                $similarFiles = RepoGroup::singleton()->getLocalRepo()->findFilesByPrefix(
                                "{$partname}.", 1 );
                if ( count( $similarFiles ) ) {
-                       return array(\r
-                               'warning' => 'exists-normalized',\r
-                               'file' => $file,\r
-                               'normalizedFile' => $similarFiles[0],\r
+                       return array(
+                               'warning' => 'exists-normalized',
+                               'file' => $file,
+                               'normalizedFile' => $similarFiles[0],
                        );
                }
 
index fb0c786..e784e51 100644 (file)
@@ -66,7 +66,7 @@ class UploadFromChunks extends UploadFromFile {
         *
         * @return UploadStashFile stashed file
         */
-       public function stashFile() {
+       public function stashFile( User $user = null ) {
                // Stash file is the called on creating a new chunk session:
                $this->mChunkIndex = 0;
                $this->mOffset = 0;
index cfa3879..326d91d 100644 (file)
@@ -158,7 +158,7 @@ class UploadStash {
         * @param string $key key under which file information is stored
         * @return Array
         */
-       public function getMetadata ( $key ) {
+       public function getMetadata( $key ) {
                $this->getFile( $key );
                return $this->fileMetadata[$key];
        }
@@ -169,7 +169,7 @@ class UploadStash {
         * @param string $key key under which file information is stored
         * @return Array
         */
-       public function getFileProps ( $key ) {
+       public function getFileProps( $key ) {
                $this->getFile( $key );
                return $this->fileProps[$key];
        }
index 01751db..42883b5 100644 (file)
@@ -44,7 +44,6 @@ if ( function_exists( 'mb_strtoupper' ) ) {
  * @ingroup Language
  */
 class FakeConverter {
-
        /**
         * @var Language
         */
@@ -349,12 +348,12 @@ class Language {
        public static function isValidBuiltInCode( $code ) {
 
                if ( !is_string( $code ) ) {
-                       $type = gettype( $code );
-                       if ( $type === 'object' ) {
+                       if ( is_object( $code ) ) {
                                $addmsg = " of class " . get_class( $code );
                        } else {
                                $addmsg = '';
                        }
+                       $type = gettype( $code );
                        throw new MWException( __METHOD__ . " must be passed a string, $type given$addmsg" );
                }
 
@@ -531,7 +530,7 @@ class Language {
        /**
         * Resets all of the namespace caches. Mainly used for testing
         */
-       public function resetNamespaces( ) {
+       public function resetNamespaces() {
                $this->namespaceNames = null;
                $this->mNamespaceIds = null;
                $this->namespaceAliases = null;
@@ -3544,7 +3543,7 @@ class Language {
                }
                $forms = array_values( $forms );
 
-               $pluralForm = $this->getPluralForm( $count );
+               $pluralForm = $this->getPluralRuleIndexNumber( $count );
                $pluralForm = min( $pluralForm, count( $forms ) - 1 );
                return $forms[$pluralForm];
        }
@@ -4410,7 +4409,7 @@ class Language {
        /**
         * Get the plural rules for the language
         * @since 1.20
-        * @return array Associative array with plural form, and plural rule as key-value pairs
+        * @return array Associative array with plural form number and plural rule as key-value pairs
         */
        public function getPluralRules() {
                $pluralRules = self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
@@ -4427,13 +4426,48 @@ class Language {
        }
 
        /**
-        * Find the plural form matching to the given number
-        * It return the form index.
-        * @return int The index of the plural form
+        * Get the plural rule types for the language
+        * @since 1.21
+        * @return array Associative array with plural form number and plural rule type as key-value pairs
+        */
+       public function getPluralRuleTypes() {
+               $pluralRuleTypes = self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRuleTypes' );
+               $fallbacks = Language::getFallbacksFor( $this->mCode );
+               if ( !$pluralRuleTypes ) {
+                       foreach ( $fallbacks as $fallbackCode ) {
+                               $pluralRuleTypes = self::$dataCache->getItem( strtolower( $fallbackCode ), 'pluralRuleTypes' );
+                               if ( $pluralRuleTypes ) {
+                                       break;
+                               }
+                       }
+               }
+               return $pluralRuleTypes;
+       }
+
+       /**
+        * Find the index number of the plural rule appropriate for the given number
+        * @return int The index number of the plural rule
         */
-       private function getPluralForm( $number ) {
+       public function getPluralRuleIndexNumber( $number ) {
                $pluralRules = $this->getCompiledPluralRules();
                $form = CLDRPluralRuleEvaluator::evaluateCompiled( $number, $pluralRules );
                return $form;
        }
+
+       /**
+        * Find the plural rule type appropriate for the given number
+        * For example, if the language is set to Arabic, getPluralType(5) should
+        * return 'few'.
+        * @since 1.21
+        * @return string The name of the plural rule type, e.g. one, two, few, many
+        */
+       public function getPluralRuleType( $number ) {
+               $index = $this->getPluralRuleIndexNumber( $number );
+               $pluralRuleTypes = $this->getPluralRuleTypes();
+               if ( isset( $pluralRuleTypes[$index] ) ) {
+                       return $pluralRuleTypes[$index];
+               } else {
+                       return 'other';
+               }
+       }
 }
index 8b03eee..bce1663 100644 (file)
        'pdc' => 'Deitsch',     # Pennsylvania German
        'pdt' => 'Plautdietsch',        # Plautdietsch/Mennonite Low German
        'pfl' => 'Pälzisch',   # Palatinate German
-       'pi' => 'पाळि', # Pali
+       'pi' => 'पालि', # Pali
        'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
        'pl' => 'polski',               # Polish
        'pms' => 'Piemontèis', # Piedmontese
index 0956dc4..48f70e8 100644 (file)
@@ -32,7 +32,7 @@ class LanguageAz extends Language {
         * @param $string string
         * @return mixed|string
         */
-       function ucfirst ( $string ) {
+       function ucfirst( $string ) {
                if ( $string[0] == 'i' ) {
                        return 'İ' . substr( $string, 1 );
                } else {
index a397bc0..0318fb1 100644 (file)
@@ -54,7 +54,7 @@ class LanguageKaa extends Language {
         *
         * @return string
         */
-       function ucfirst ( $string ) {
+       function ucfirst( $string ) {
                if ( substr( $string, 0, 1 ) === 'i' ) {
                        return 'İ' . substr( $string, 1 );
                } else {
@@ -69,7 +69,7 @@ class LanguageKaa extends Language {
         *
         * @return mixed|string
         */
-       function lcfirst ( $string ) {
+       function lcfirst( $string ) {
                if ( substr( $string, 0, 1 ) === 'I' ) {
                        return 'ı' . substr( $string, 1 );
                } else {
index 6dd6959..f6bbae7 100644 (file)
@@ -435,7 +435,7 @@ class LanguageKk extends LanguageKk_cyrl {
         *
         * @return string
         */
-       function ucfirst ( $string ) {
+       function ucfirst( $string ) {
                $variant = $this->getPreferredVariant();
                if ( ( $variant == 'kk-latn' || $variant == 'kk-tr' ) && $string[0] == 'i' ) {
                        $string = 'İ' . substr( $string, 1 );
@@ -452,7 +452,7 @@ class LanguageKk extends LanguageKk_cyrl {
         *
         * @return string
         */
-       function lcfirst ( $string ) {
+       function lcfirst( $string ) {
                $variant = $this->getPreferredVariant();
                if ( ( $variant == 'kk-latn' || $variant == 'kk-tr' ) && $string[0] == 'I' ) {
                        $string = 'ı' . substr( $string, 1 );
diff --git a/languages/classes/LanguageMk.php b/languages/classes/LanguageMk.php
deleted file mode 100644 (file)
index 968fe26..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Macedonian (Македонски) specific code.
- *
- * 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 Language
- */
-
-/**
- * Macedonian (Македонски)
- *
- * @ingroup Language
- */
-class LanguageMk extends Language {
-       /**
-        * Plural forms per
-        * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mk
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-               // TODO CLDR defines forms[0] for n != 11 and not for n%100 !== 11
-               if ( $count % 10 === 1 && $count % 100 !== 11 ) {
-                       return $forms[0];
-               } else {
-                       return $forms[1];
-               }
-       }
-}
diff --git a/languages/classes/LanguageNso.php b/languages/classes/LanguageNso.php
deleted file mode 100644 (file)
index 0c08675..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Northern Sotho (Sesotho sa Leboa) specific code.
- *
- * 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 Language
- */
-
-/**
- * Northern Sotho (Sesotho sa Leboa)
- *
- * @ingroup Language
- */
-class LanguageNso extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
diff --git a/languages/classes/LanguageSgs.php b/languages/classes/LanguageSgs.php
deleted file mode 100644 (file)
index 0c74e45..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Samogitian (Žemaitėška) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Samogitian (Žemaitėška)
- *
- * @ingroup Language
- */
-class LanguageSgs extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               $count = abs( $count );
-               if ( $count == 0 || ( $count % 100 === 0 || ( $count % 100 >= 10 && $count % 100 < 20 ) ) ) {
-                       return $forms[2];
-               } elseif ( $count % 10 === 1 ) {
-                       return $forms[0];
-               } elseif ( $count % 10 === 2 ) {
-                       return $forms[1];
-               } else {
-                       return $forms[3];
-               }
-       }
-}
index c075e51..77957b2 100644 (file)
@@ -53,27 +53,4 @@ class LanguageSl extends Language {
                return $word; # this will return the original value for 'imenovalnik' (nominativ) and all undefined case values
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 5 );
-
-               if ( $count % 100 == 1 ) {
-                       $index = 0;
-               } elseif ( $count % 100 == 2 ) {
-                       $index = 1;
-               } elseif ( $count % 100 == 3 || $count % 100 == 4 ) {
-                       $index = 2;
-               } elseif ( $count != 0 ) {
-                       $index = 3;
-               } else {
-                       $index = 4;
-               }
-               return $forms[$index];
-       }
 }
index 6a01566..887f05c 100644 (file)
@@ -38,7 +38,7 @@ class LanguageTr extends Language {
         * @param $string string
         * @return string
         */
-       function ucfirst ( $string ) {
+       function ucfirst( $string ) {
                if ( strlen( $string ) && $string[0] == 'i' ) {
                        return 'İ' . substr( $string, 1 );
                } else {
@@ -50,7 +50,7 @@ class LanguageTr extends Language {
         * @param $string string
         * @return mixed|string
         */
-       function lcfirst ( $string ) {
+       function lcfirst( $string ) {
                if ( strlen( $string ) && $string[0] == 'I' ) {
                        return 'ı' . substr( $string, 1 );
                } else {
index 5c4f193..70d45a3 100644 (file)
@@ -2,9 +2,16 @@
 <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
 <supplementalData>
        <plurals>
+               <!--
+               The "one" and "two" rules are copied directly from CLDR.
+               The "many" rule overrides CLDR, because CLDR seems to have a mistake:
+               it's sometimes needed for multiples of 10, but not for 10 itself.
+               When the CLDR is fixed, this should be removed.
+               -->
                <pluralRules locales="he">
                        <pluralRule count="one">n is 1</pluralRule>
                        <pluralRule count="two">n is 2</pluralRule>
+                       <pluralRule count="many">n is not 0 AND n is not 10 AND n mod 10 is 0</pluralRule>
                </pluralRules>
                <pluralRules locales="dsb hsb">
                        <pluralRule count="one">n mod 100 is 1</pluralRule>
                <pluralRules locales="bho">
                        <pluralRule count="one">n in 0..1</pluralRule>
                </pluralRules>
+               <pluralRules locales="sgs">
+                       <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+                       <pluralRule count="two">n mod 10 is 2 and n mod 100 is not 12</pluralRule>
+                       <pluralRule count="few">n is 0 or n mod 100 is 0 or n mod 100 in 10..19</pluralRule>
+               </pluralRules>
        </plurals>
 </supplementalData>
index a4a0b31..dd485ef 100644 (file)
@@ -519,7 +519,7 @@ $2',
 'loginlanguagelabel' => 'اللغة: $1',
 'suspicious-userlogout' => 'رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
 'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
 
@@ -1153,7 +1153,7 @@ $1",
 # Special:ListGroupRights
 'listgrouprights-members' => '(قائمة الأعضاء)',
 
-# E-mail user
+# Email user
 'emailuser' => 'إرسال رسالة لهذا المستخدم',
 
 # Watchlist
index c373c6d..5536ded 100644 (file)
@@ -448,7 +448,7 @@ $1",
 'currentevents-url' => 'Project:Huidige gebeure',
 'disclaimers' => 'Voorbehoud',
 'disclaimerpage' => 'Project:Voorwaardes',
-'edithelp' => 'Wysighulp',
+'edithelp' => 'Wysigingshulp',
 'edithelppage' => 'Help:Wysig',
 'helppage' => 'Help:Inhoud',
 'mainpage' => 'Tuisblad',
@@ -762,7 +762,7 @@ $2
 Meld asseblief aan en verander u wagwoord nou. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.',
 'passwordreset-emailelement' => 'Gebruikersnaam: $1
 Tydelike wagwoord: $2',
-'passwordreset-emailsent' => "'n E-pos ter herhindering is gestuur.",
+'passwordreset-emailsent' => "'n E-pos is gestuur om u wagwoord te herstel.",
 'passwordreset-emailsent-capture' => "'n E-pos ter herinnering is gestuur en word hieronder vertoon.",
 'passwordreset-emailerror-capture' => "'n E-pos ter herinnering is geskep en word hieronder vertoon. Die uitstuur daarvan het egter gefaal: $1",
 
@@ -855,9 +855,9 @@ Dis was moontlik geskuif of verwyder terwyl u die bladsy gelees het.",
 'loginreqlink' => 'teken in',
 'loginreqpagetext' => 'U moet $1 om ander bladsye te bekyk.',
 'accmailtitle' => 'Wagwoord gestuur.',
-'accmailtext' => "'n Lukraakgegenereerde wagwoord vir [[User talk:$1|$1]] is na $2 gestuur.
+'accmailtext' => "'n Lukrake wagwoord vir [[User talk:$1|$1]] is na $2 gestuur.
 
-Die wagwoord vir hierdie nuwe gebruiker kan verander word op die ''[[Special:ChangePassword|verander wagwoord]]'' bladsy nadat ingeteken is.",
+Die wagwoord vir hierdie nuwe gebruiker kan op die ''[[Special:ChangePassword|verander wagwoord]]''-bladsy verander word nadat ingeteken is.",
 'newarticle' => '(Nuut)',
 'newarticletext' => "Hierdie bladsy bestaan nie.
 Tik iets in die invoerboks hier onder om 'n nuwe bladsy te skep. Meer inligting is op die [[{{MediaWiki:Helppage}}|hulpbladsy]] beskikbaar.
@@ -928,7 +928,7 @@ Die MediaWiki-sagteware hou hiermee rekening sodat u bladsye veilig kan wysig: n
 'editingold' => "'''WAARSKUWING: U is besig om 'n ouer weergawe van hierdie bladsy te wysig.
 As u dit stoor, sal enige wysigings sedert hierdie een weer uitgewis word.'''",
 'yourdiff' => 'Wysigings',
-'copyrightwarning' => "Alle bydraes aan {{SITENAME}} word beskou as beskikbaar gestel onder die $2 (lees $1 vir meer inligting).
+'copyrightwarning' => "Alle bydraes aan {{SITENAME}} word onder die $2 beskikbaar gestel (lees $1 vir meer inligting).
 As u nie wil toelaat dat u teks deur ander persone gewysig of versprei word nie, moet dit asseblief nie hier invoer nie.<br />
 Hierdeur beloof u ons dat u die byvoegings self geskryf het, of gekopieer het van publieke domein of soortgelyke vrye bronne.
 '''MOENIE WERK WAT DEUR KOPIEREG BESKERM WORD HIER PLAAS SONDER TOESTEMMING NIE!'''",
@@ -945,7 +945,7 @@ Die administrateur wat dit gesluit het se verduideliking: $1",
 'cascadeprotectedwarning' => "'''Waarskuwing:''' Die bladsy was beveilig sodat dit slegs deur administrateurs gewysig kan word, omrede dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat kaskade-beskerming geniet:",
 'titleprotectedwarning' => "'''WAARSKUWING: Hierdie bladsy is beveilig. Slegs gebruikers met [[Special:ListGroupRights|spesiale regte]] sal dit kan skep.'''
 Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
-'templatesused' => 'Hierdie bladsy {{PLURAL:$1|gebruik sjabloon|gebruik sjablone}}:',
+'templatesused' => '{{PLURAL:$1|Sjabloon|Sjablone}} gebruik op hierdie blad:',
 'templatesusedpreview' => '{{PLURAL:$1|Sjabloon|Sjablone}} gebruik in hierdie voorskou:',
 'templatesusedsection' => 'Die volgende {{PLURAL:$1|sjabloon|sjablone}} word in hierdie afdeling gebruik:',
 'template-protected' => '(beskermd)',
@@ -1350,9 +1350,9 @@ Hier volg 'n lukraak gegenereerde waarde wat u kan gebruik: $1",
 Die aksie kan nie ongedaan gemaak word nie.',
 'prefs-emailconfirm-label' => 'E-posbevestiging:',
 'prefs-textboxsize' => 'Afmetings van die wysigingsvenster',
-'youremail' => 'E-pos',
+'youremail' => 'E-posadres:',
 'username' => '{{GENDER:$1|Gebruikersnaam}}:',
-'uid' => '{{GENDER:$1|Gebruikersnommer}}:',
+'uid' => '{{GENDER:$1|Gebruiker-ID}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepe}}:',
 'prefs-registration' => 'Registrasiedatum:',
 'yourrealname' => 'Regte naam:',
@@ -1957,11 +1957,11 @@ Miskien wil u eerder die beskrywing daar op die [$2 lêerbeskrywing] bywerk.',
 
 # Random page
 'randompage' => 'Lukrake bladsy',
-'randompage-nopages' => 'Daar is geen bladye in die volgende {{PLURAL:$2|naamspasie|naamspasies}}: $1.',
+'randompage-nopages' => 'Daar is geen bladsye in die volgende {{PLURAL:$2|naamruimte|naamruimtes}} nie: $1.',
 
 # Random redirect
 'randomredirect' => 'Lukrake aanstuur',
-'randomredirect-nopages' => 'Daar is geen aansture in naamspasie "$1".',
+'randomredirect-nopages' => 'Daar is geen aansture in naamruimte "$1" nie.',
 
 # Statistics
 'statistics' => 'Statistieke',
@@ -2121,7 +2121,7 @@ U kan die resultate vernou deur 'n boekstaaftipe, gebruikersnaam (kas-sensitief)
 'allpagesprefix' => 'Wys bladsye wat begin met:',
 'allpagesbadtitle' => "Die gespesifiseerde bladsynaam is ongeldig of het 'n intertaal- of interwiki-voorvoegsel.
 Dit is moontlik dat die naam karakters bevat wat nie in titels gebruik mag word nie.",
-'allpages-bad-ns' => '{{SITENAME}} het geen naamspasie "$1" nie.',
+'allpages-bad-ns' => '{{SITENAME}} het nie \'n naamruimte "$1" nie.',
 'allpages-hide-redirects' => 'Versteek aansture',
 
 # SpecialCachedPage
@@ -2325,7 +2325,7 @@ Bevestig asseblief dat u dit wil doen, dat u die gevolge verstaan en dat u dit d
 Kyk na $2 vir \'n rekord van onlangse skrappings.',
 'dellogpage' => 'Skraplogboek',
 'dellogpagetext' => "Hier onder is 'n lys van die mees onlangse skrappings. Alle tye is bedienertyd (UGT).",
-'deletionlog' => 'skrappings-logboek',
+'deletionlog' => 'skraplogboek',
 'reverted' => 'Het terug gegaan na vroeëre weergawe',
 'deletecomment' => 'Rede:',
 'deleteotherreason' => 'Ander/ekstra rede:',
@@ -2697,9 +2697,9 @@ Om die databasis te ontsluit moet u skyfregte aan die lêer op die webbediener t
 # Move page
 'move-page' => 'Skuif "$1"',
 'move-page-legend' => 'Skuif bladsy',
-'movepagetext' => "Die vorm hier onder hernoem 'n bladsy en skuif die hele wysigingsgeskiedenis na die nuwe naam.
+'movepagetext' => "ie vorm hier onder hernoem 'n bladsy en skuif die hele wysigingsgeskiedenis na die nuwe naam.
 Die ou bladsy sal vervang word met 'n aanstuurblad na die nuwe titel.
-'''Skakels na die ou bladsytitel sal nie outomaties verander word nie; maak seker dat dubbele aanstuurverwysings nie voorkom nie deur die \"wat skakel hierheen\"-funksie na die skuif te gebruik.''' Dit is u verantwoordelikheid om seker te maak dat skakels steeds wys na waarheen hulle behoort te gaan.
+'''Skakels na die ou bladsytitel sal nie outomaties verander word nie; maak seker dat [[Special:DoubleRedirects|dubbele aanstuurverwysings]] en [[Special:BrokenRedirects|stukkende aansture]] nie voorkom nie deur die \"wat skakel hierheen\"-funksie na die skuif te gebruik.''' Dit is u verantwoordelikheid om seker te maak dat skakels steeds wys na waarheen hulle behoort te gaan.
 
 Let daarop dat 'n bladsy '''nie''' geskuif sal word indien daar reeds 'n bladsy met dieselfde titel bestaan nie, tensy dit leeg of 'n aanstuurbladsy is en geen wysigingsgeskiedenis het nie. Dit beteken dat u 'n bladsy kan terugskuif na sy ou titel indien u 'n fout gemaak het, maar u kan nie 'n bestaande bladsy oorskryf nie.
 
@@ -2771,7 +2771,7 @@ Die teikenartikel "[[:$1]]" bestaan reeds. Wil u dit skrap om plek te maak vir d
 'immobile-target-page' => 'Dit is nie moontlik om na die titel toe te skuif nie.',
 'bad-target-model' => "Die gewenste bestemming gebruik 'n ander inhoudsmodel. Dit is nie moontlik van $1 na $2 om te skakel nie.",
 'imagenocrossnamespace' => "'n Medialêer kan nie na 'n ander naamruimte geskuif word nie",
-'nonfile-cannot-move-to-file' => 'Net lêers kan na die lêernaamspasie geskuif word',
+'nonfile-cannot-move-to-file' => 'Net lêers kan na die lêernaamruimte geskuif word',
 'imagetypemismatch' => 'Die nuwe lêer se uitbreiding pas nie by die lêertipe nie',
 'imageinvalidfilename' => 'Die nuwe lêernaam is ongeldig',
 'fix-double-redirects' => 'Opdateer alle aansture wat na die oorspronklike titel wys',
@@ -2811,7 +2811,7 @@ In die laatste geval kan u ook \'n verwysing gebruik, byvoorbeeld [[{{#Special:E
 'allmessagesname' => 'Naam',
 'allmessagesdefault' => 'Verstekteks',
 'allmessagescurrent' => 'Huidige teks',
-'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamspasie beskikbaar is.
+'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamruimte teenwoordig is.
 Gaan na [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] as u wil help om MediaWiki te vertaal.",
 'allmessagesnotsupportedDB' => "Daar is geen ondersteuning vir '''{{ns:special}}:Allmessages''' omdat '''\$wgUseDatabaseMessages''' uitgeskakel is.",
 'allmessages-filter-legend' => 'Filter',
@@ -2908,14 +2908,14 @@ Die lêer is slegs gedeeltelik opgelaai.',
 'javascripttest-qunit-heading' => 'QUnit toetssuite vir MediaWiki JavaScript',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'U gebruikerbladsy',
-'tooltip-pt-anonuserpage' => 'Die gebruikerbladsy vir die IP-adres waaronder u redigeer',
-'tooltip-pt-mytalk' => 'U besprekingsbladsy',
+'tooltip-pt-userpage' => 'My gebruikerbladsy',
+'tooltip-pt-anonuserpage' => 'Die gebruikersbladsy vir die IP-adres waaronder u wysigings aanbring',
+'tooltip-pt-mytalk' => 'My besprekingsbladsy',
 'tooltip-pt-anontalk' => 'Bespreking oor bydraes van hierdie IP-adres',
 'tooltip-pt-preferences' => 'My voorkeure',
 'tooltip-pt-watchlist' => 'Die lys bladsye wat u vir veranderinge dophou',
-'tooltip-pt-mycontris' => 'Lys van u bydraes',
-'tooltip-pt-login' => 'U word aangemoedig om in te teken; dit is egter nie verpligtend nie.',
+'tooltip-pt-mycontris' => 'Lys van my bydraes',
+'tooltip-pt-login' => 'U word aangemoedig om in te teken. Dit is egter nie verpligtend nie.',
 'tooltip-pt-anonlogin' => 'U word aangemoedig om in te teken; dit is egter nie verpligtend nie.',
 'tooltip-pt-logout' => 'Teken uit',
 'tooltip-ca-talk' => 'Bespreking oor die inhoudsbladsy',
@@ -3786,7 +3786,7 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'specialpages-group-changes' => 'Onlangse wysigings en boekstawings',
 'specialpages-group-media' => 'Media verslae en oplaai',
 'specialpages-group-users' => 'Gebruikers en regte',
-'specialpages-group-highuse' => 'Baie gebruikte bladsye',
+'specialpages-group-highuse' => 'Mees gebruikte bladsye',
 'specialpages-group-pages' => 'Lyste van bladsye',
 'specialpages-group-pagetools' => 'Bladsyhulpmiddels',
 'specialpages-group-wiki' => 'Data en hulpmiddels',
@@ -3858,8 +3858,8 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'sqlite-no-fts' => 'Weergawe $1 sonder ondersteuning vir vol-teks soektogte ("full-text search")',
 
 # New logging system
-'logentry-delete-delete' => '$1 het die bladsy $3 verwyder',
-'logentry-delete-restore' => '$1 het die bladsy $3 teruggeplaas',
+'logentry-delete-delete' => '$1 het bladsy $3 verwyder',
+'logentry-delete-restore' => '$1 het bladsy $3 teruggeplaas',
 'logentry-delete-event' => "$1 het die sigbaarheid van {{PLURAL:$5|'n logboekreël|$5 logboekreëls}} van $3 gewysig: $4",
 'logentry-delete-revision' => "$1 het die sigbaarheid van {{PLURAL:$5|'n weergawe|$5 weergawes}} van bladsy $3 gewysig: $4",
 'logentry-delete-event-legacy' => '$1 het die sigbaarheid van logboekreëls van $3 gewysig',
@@ -3966,4 +3966,7 @@ Anders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die blad
 'duration-centuries' => '$1 {{PLURAL:$1|eeu|eeue}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
+# Image rotation
+'rotate-comment' => 'Beeld $1 {{PLURAL:$1|graad|grade}} kloksgewys gedraai',
+
 );
index 88632af..7dd39e0 100644 (file)
@@ -1276,7 +1276,7 @@ Faqet në [[Special:Watchlist|listën tuej të mbikëqyrjes]] janë '''të theks
 # Special:ListGroupRights
 'listgrouprights-members' => '(lista e antarëve)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Çoji postel këtij përdoruesi',
 
 # Watchlist
index 9faead8..f40de91 100644 (file)
@@ -483,7 +483,7 @@ $2",
 'login-abort-generic' => 'መግባትዎ አልተከናወነም፤ ተሠርዟል።',
 'loginlanguagelabel' => 'ቋምቋ፦ $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'እሚደርስበት ኢ-ሜል አድራሻ ሳይታወቅ መላክ አይቻልም።',
 
 # Change password dialog
@@ -945,7 +945,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'prefs-displayrc' => 'የማሳያ አማራጮች',
 'prefs-diffs' => 'ልዩነቶች',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ኢ-ሜል አድራሻ ትክክለኛ ይመስላል።',
 'email-address-validity-invalid' => 'ትክክለኛ ኢ-ሜል ማቅረብ ያስፈልጋል።',
 
@@ -1488,7 +1488,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-rights' => 'መብቶች',
 'listgrouprights-members' => '(የአባላት ዝርዝር)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ምንም መነሻ አድራሻ የለም',
 'mailnologintext' => 'ኢ-ሜል ወደ ሌላ አባል ለመላክ [[Special:UserLogin|መግባት]]ና በ[[Special:Preferences|ምርጫዎችዎ]] ትክክለኛ የኢሜል አድራሻዎ መኖር ያስፈልጋል።',
 'emailuser' => 'ለዚህ/ች ሰው ኢሜል መላክ',
@@ -2406,7 +2406,7 @@ $1',
 'monthsall' => 'ሁሉ',
 'limitall' => 'ሁሉ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ኢ-ሜልዎን ለማረጋገጥ',
 'confirmemail_noemail' => 'በ[[Special:Preferences|ምርጫዎችዎ]] ትክክለኛ ኢሜል አድራሻ አልሰጡም።',
 'confirmemail_text' => 'አሁን በ{{SITENAME}} በኩል «ኢ-ሜል» ለመላክም ሆነ ለመቀበል አድራሻዎን ማረጋገጥ ግዴታ ሆኗል። እታች ያለውን በተጫኑ ጊዜ አንድ የማረጋገጫ መልእክት ቀድሞ ወደ ሰጡት ኢሜል አድራሻ በቀጥታ ይላካል። በዚህ መልእክት ልዩ ኮድ ያለበት መያያዣ ይገኝበታል፣ ይህንን መያያዣ ከዚያ ቢጎብኙ ኢ-ሜል አድራሻዎ የዛኔ ይረጋግጣል።',
index d940006..03fc479 100644 (file)
@@ -602,7 +602,7 @@ Si a cuenta s\'ha creyato por error, simplament ignore iste mensache.',
 'loginlanguagelabel' => 'Idioma: $1',
 'suspicious-userlogout' => "S'ha denegau a suya demanda de zarrar a sesión ya que pareix que la ninvió un navegador defectuoso u bell proxy amagau.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Error desconoixito en a función mail() de PHP',
 'user-mail-no-addy' => 'Ha mirau de ninviar un mensache de correu sin una adreza de correu electronico.',
 
@@ -1227,7 +1227,7 @@ Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
 'prefs-displaywatchlist' => 'Opcions de visualización',
 'prefs-diffs' => 'Diferencias',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'adreza de correu electronico pareix valida",
 'email-address-validity-invalid' => 'Escriba una adreza valida de correu electronico',
 
@@ -1975,7 +1975,7 @@ Protocolos suportados: <code>$1</code> (no los adhiba en a suya busca).',
 'listgrouprights-addgroup-self-all' => 'Adhibir-se a todas as collas',
 'listgrouprights-removegroup-self-all' => 'Salir de todas as collas',
 
-# E-mail user
+# Email user
 'mailnologin' => "No ninviar l'adreza",
 'mailnologintext' => "Ha d'haber [[Special:UserLogin|encetato una sesión]] y tener una adreza conforme de correu-e en as suyas [[Special:Preferences|preferencias]] ta ninviar un correu electronico ta atros usuarios.",
 'emailuser' => 'Ninviar un correu electronico ta iste usuario',
@@ -3289,7 +3289,7 @@ Os campos de metadatos d'a imachen que amaneixen en iste mensache s'amostrarán
 'monthsall' => 'totz',
 'limitall' => 'Totz',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar adreza de correu-e',
 'confirmemail_noemail' => "No tiene una adreza de correu-e conforme en as suyas [[Special:Preferences|preferencias d'usuario]].",
 'confirmemail_text' => "{{SITENAME}} requiere que confirme a suya adreza de correu-e antis de poder usar as funcions de correu-e. Punche o botón de baxo ta ninviar un mensache de confirmación t'a suya adreza. O mensache incluirá un vinclo con un codigo. Escriba-lo ta confirmar que a suya adreza ye conforme.",
index 8e68785..92ad4ae 100644 (file)
@@ -627,7 +627,7 @@ $messages = array(
 'vector-action-move' => 'انقل',
 'vector-action-protect' => 'احم',
 'vector-action-undelete' => 'استرجع الحذف',
-'vector-action-unprotect' => 'غيّر الحماية',
+'vector-action-unprotect' => 'غير الحماية',
 'vector-simplesearch-preference' => 'مكّن شريط البحث المبسط (لواجهة فكتور فقط)',
 'vector-view-create' => 'أنشئ',
 'vector-view-edit' => 'تعديل',
@@ -818,7 +818,7 @@ $1',
 'missingarticle-rev' => '(رقم المراجعة: $1)',
 'missingarticle-diff' => '(فرق: $1، $2)',
 'readonly_lag' => 'تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي',
-'internalerror' => 'خطأ داخلي',
+'internalerror' => 'عطÙ\84 داخلي',
 'internalerror_info' => 'خطأ داخلي: $1',
 'fileappenderrorread' => 'تعذرت قراءة "$1" أثناء الإضافة.',
 'fileappenderror' => 'تعذرت إضافة "$1" إلى "$2".',
@@ -4361,7 +4361,7 @@ $5
 'logentry-newusers-newusers' => 'تم إنشاء الحساب $1',
 'logentry-newusers-create' => 'تم إنشاء الحساب $1',
 'logentry-newusers-create2' => 'أنشأ $1 الحساب $3',
-'logentry-newusers-byemail' => 'أنشئ حساب المستخدم $3 من قبل $1 وأرسلت كلمة السر بالبريد الإلكتروني',
+'logentry-newusers-byemail' => 'ُ{{GENDER:$2|أنشأ|أنشأت}} $1 حساب المستخدم $3 وأُرسلت كلمة السر بالبريد الإلكتروني',
 'logentry-newusers-autocreate' => 'أنشئ حساب $1 تلقائياً',
 'logentry-rights-rights' => 'غير $1 صلاحيات $3 من $4 إلى $5',
 'logentry-rights-rights-legacy' => 'غير $1 صلاحيات $3',
index 03416b1..987385e 100644 (file)
@@ -287,7 +287,7 @@ $messages = array(
 'edit' => 'ܫܚܠܦ',
 'create' => 'ܒܪܝ',
 'editthispage' => 'ܫܚܠܦ ܦܐܬܐ ܗܕܐ',
-'create-this-page' => 'Ü\92ܪÜ\9d ܦܐܬܐ ܗܕܐ',
+'create-this-page' => 'Ü£Ü\9dÜ¡ ܦܐܬܐ ܗܕܐ',
 'delete' => 'ܫܘܦ',
 'deletethispage' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'undelete_short' => 'ܠܐ ܫܘܦ {{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ|$1 ܫܘܚܠܦ̈ܐ}}',
@@ -666,7 +666,7 @@ $1',
 'viewprevnext' => 'ܚܘܝ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'ܓܒܝܬ̈ܐ ܕܒܨܝܐ',
 'searchmenu-exists' => "'''ܐܝܬ ܦܐܬܐ ܒܫܡ \"[[:\$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ'''",
-'searchmenu-new' => "'''Ü\92ܪÜ\9d ܦܐܬܐ \"[[:\$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ!'''",
+'searchmenu-new' => "'''Ü£Ü\9dÜ¡ ܦܐܬܐ \"[[:\$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ!'''",
 'searchhelp-url' => 'Help:ܚܒܝܫܬ̈ܐ',
 'searchprofile-articles' => 'ܦܐܬܬ̈ܐ ܕܚܒܝܫܬ̈ܐ',
 'searchprofile-project' => 'ܦܐܬܬ̈ܐ ܕܬܪ̈ܡܝܬܐ ܘܕܥܘܕܪܢܐ',
@@ -951,6 +951,7 @@ $1',
 'upload_source_file' => ' (ܠܦܦܐ ܥܠ ܚܫܘܒܬܐ ܕܝܠܟ)',
 
 # Special:ListFiles
+'listfiles_search_for' => 'ܒܨܝ ܥܠ ܫܡܐ ܕܡܝܕܝܐ:',
 'imgfile' => 'ܠܦܦܐ',
 'listfiles' => 'ܡܟܬܒܘܬܐ ܕܠܦܦ̈ܐ',
 'listfiles_thumb' => 'ܙܘܥܪܐ',
index 2213623..c8eb750 100644 (file)
@@ -517,7 +517,7 @@ ma ṫḍreb ḫsab l-had l-mesaj ila ṫṣĝyb had l-ḫisab ĝen tariq l-ĥat
 'loginlanguagelabel' => 'Loġa: $1',
 'suspicious-userlogout' => 't-talab dialk baċ ṫdĥol mrfoḍ ḫqqaċ tayḍhṛ billa rah ṫsift mn moṫaṣffiḫ mĝtob wlla caching proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "ĥata' ma mĝrof-ċ fl-mail() function taĝ l-PHP.",
 'user-mail-no-addy' => 'ḫawlṫi ṫsift email bla ĝonwan l-email.',
 
@@ -1086,7 +1086,7 @@ Laḫed ana imken ikono l-indexaṫ dial {{SITENAME}} qdam o ma bqaoċ ṣalḫi
 'prefs-displaywatchlist' => 'khiyarat laard',
 'prefs-diffs' => 'foroqat',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'tayban billa l-email rah ṣalḫ',
 'email-address-validity-invalid' => 'kṫb ĝonwan email ṣḫiḫ',
 
@@ -1625,7 +1625,7 @@ daba ka ṫḫwwal l-[[$2]].',
 'listgrouprights-addgroup-self' => 'zid ll-ḫisab ṫaĝi {{PLURAL:$2|mjmoĝṫ|mjmoĝaṫ}}: $1',
 'listgrouprights-removegroup-self' => 'hyyed mn l-ḫisab ṫaĝi {{PLURAL:$2|mjmoĝṫ|mjmoĝaṫ}}: $1',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ma kayenċ l-ĝonwan dyal l-morasil',
 'emailuser' => 'Ṣifet imayl le had l-mosṫeĥdim',
 'emailpage' => 'sift email lhad lmostkhdim',
@@ -2513,7 +2513,7 @@ Ila ṫbeddel l-fiċyé men ḫalṫo l-'aṣliya, kaynin ċi ṫafaṣil ma mna
 'monthsall' => 'kolhom',
 'limitall' => 'kolċi',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "konfirmasyon dyal l'email",
 'confirmemail_send' => 'sift code lkonfirmation',
 'confirmemail_sent' => 'tam irssal rissala dyal lkonfirmation.',
index f532760..35e7368 100644 (file)
@@ -1366,7 +1366,7 @@ $1",
 'prefs-displaywatchlist' => 'اختيارات العرض',
 'prefs-diffs' => 'التغيير',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'عنوان الإيميل صح',
 'email-address-validity-invalid' => 'عنوان الإيميل غلط',
 
@@ -2044,7 +2044,7 @@ PICT # misc.
 'listgrouprights-addgroup-self-all' => 'اضافة كل المجموعات للحساب بتاعى',
 'listgrouprights-removegroup-self-all' => 'مسح كل المجموعات من الحساب بتاعى',
 
-# E-mail user
+# Email user
 'mailnologin' => 'مافيش عنوان نبعت عليه',
 'mailnologintext' => 'لازم تعمل [[Special:UserLogin|تسجيل الدخول]] و تدخل ايميل صحيح فى صفحة [[Special:Preferences|التفضيلات]] علشان تقدر تبعت ايميلات لليوزرز التانيين.',
 'emailuser' => 'ابعت ايميل لليوزر دا',
@@ -3167,7 +3167,7 @@ $1',
 'monthsall' => 'الكل',
 'limitall' => 'الكل',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'اعمل تأكيد للأيميل بتاعك',
 'confirmemail_noemail' => 'إنت ما عندكش ايميل صحيح متسجل فى [[Special:Preferences|تفضيلاتك]].',
 'confirmemail_text' => '{{SITENAME}} بيطلب انك تعمل تأكيد للأيميل قبل ما تستعمل الخصايص المرتبطة بالايميل.
index bcd5f06..f4f242e 100644 (file)
@@ -315,6 +315,7 @@ $messages = array(
 'newwindow' => "(নতুন ৱিণ্ড'ত খোল খায়)",
 'cancel' => 'বাতিল কৰক',
 'moredotdotdot' => 'অধিক...',
+'morenotlisted' => 'আৰু তালিকাভুক্ত কৰা হোৱা নাই...',
 'mypage' => 'মোৰ পৃষ্ঠা',
 'mytalk' => 'কথা-বতৰা',
 'anontalk' => 'এই IP-ত যোগাযোগ কৰক',
@@ -616,7 +617,7 @@ $2',
 'gotaccount' => "আপুনি সদস্য হয়নে? '''$1'''",
 'gotaccountlink' => 'প্ৰৱেশ',
 'userlogin-resetlink' => 'আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?',
-'createaccountmail' => 'à¦\87-মà§\87à¦\87লà§\87ৰà§\87',
+'createaccountmail' => 'যিà¦\95à§\8bনà§\8b à¦\8fà¦\9fা à¦\85সà§\8dথায়à§\80 à¦\97à§\81পà§\8dতশবà§\8dদ à¦¬à§\8dযৱহাৰ à¦\95ৰà¦\95 à¦\86ৰà§\81 à¦\87য়াà¦\95 à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95নাà¦\9fà§\8bলà§\88 à¦ªà¦ à¦¿à¦¯à¦¼à¦¾à¦\87 à¦¦à¦¿à¦¯à¦¼à¦\95',
 'createaccountreason' => 'কাৰণ:',
 'badretype' => 'আপুনি দিয়া গুপ্ত শব্দ দুটা মিলা নাই।',
 'userexists' => 'আপুনি দিয়া সদস্যনাম আগৰে পৰাই ব্যৱহাৰ হৈ আছে।
@@ -662,8 +663,8 @@ $2',
 'blocked-mailpassword' => 'আপোনাৰ আইপি ঠিকনাৰ পৰা সম্পাদনা কৰা বাৰণ কৰা হৈছে, এনে অৱস্থাত দুৰ্ব্যৱহাৰ ৰোধ কৰিবলৈ গুপ্তশব্দ পুনঃউদ্ধাৰ কৰা সুবিধাতো বাতিল কৰা হৈছে।',
 'eauthentsent' => 'সঞ্চিত ই-মেইল ঠিকনাত নিশ্চিতকৰণ ই-মেইল এখন পঠোৱা হৈছে।
 আৰু অন্যান্য ই-মেইল পঠোৱাৰ আগতে, আপোনাৰ সদস্যতাৰ নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।',
-'throttled-mailpassword' => 'যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} গুপ্তশব্দ পুনৰুদ্ধাৰ স্মাৰক পঠিওৱা হৈছে 
-অবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ $1 ঘণ্টাত এবাৰহে গুপ্তশব্দ পুনৰুদ্ধাৰ স্মাৰক পঠিওৱা হয়।',
+'throttled-mailpassword' => "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে
+অবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।",
 'mailerror' => 'ই-মেইল পঠোৱাত সমস্যা হৈছে: $1',
 'acct_creation_throttle_hit' => 'যোৱা ২৪ ঘন্টাত আপোনাৰ আই-পি ঠিকনাৰ পৰা এই ৱিকিৰ পঢ়োঁতাই  {{PLURAL:$1|১-টা একাউন্ট|$1-টা একাউন্ট}} সৃষ্টি কৰিলে, যিটো সৰ্বোচ্চ অনুমোদনকৃত ।
 এতেকে, এই আই-পি ঠিকনাৰ পৰা এই মূহুৰ্তত একাউন্ট সৃষ্টি কৰিব নোৱাৰিব ।',
@@ -689,9 +690,10 @@ $2',
 'loginlanguagelabel' => 'ভাষা: $1',
 'suspicious-userlogout' => 'আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠাইছে ।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'পি.এইছ.পি মেইল () কাৰ্যত অজ্ঞাত ত্ৰুটি ।',
 'user-mail-no-addy' => 'ই-মেইল ঠিকনা নোহোৱাকৈয়ে ই-মেইল পঠোৱাৰ চেষ্টা কৰা হৈছে ।',
+'user-mail-no-body' => 'কোনো সমল নোহোৱাকৈ বা অতি সংক্ষিপ্ত কথাৰে ইমেইল পঠিয়াবলৈ চেষ্টা কৰিছিল।',
 
 # Change password dialog
 'resetpass' => 'গুপ্তশব্দ সলনি কৰক',
@@ -713,7 +715,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'গুপ্তশব্দ ন-কৈ বহাওক',
-'passwordreset-text' => 'আপোনাৰ একাউণ্টৰ সবিশেষ তথ্য ই-পত্ৰৰ জৰিয়তে পাবলৈ তলৰ প্ৰ-পত্ৰ পুৰাওক ।',
+'passwordreset-text' => ' আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ তলৰ প্ৰপত্ৰ সম্পূৰ্ণ কৰক।',
 'passwordreset-legend' => 'গুপ্তশব্দ ন-কৈ বহাওক',
 'passwordreset-disabled' => 'এই ৱিকিত গুপ্তশব্দ নবীকৰণ নিষ্ক্ৰিয় কৰা হৈছে ।',
 'passwordreset-pretext' => '{{PLURAL:$1||তলত উল্লেখ কৰা তথ্যৰ কোনো অংশ ভৰাওক}}',
@@ -723,21 +725,21 @@ $2',
 'passwordreset-capture-help' => "আপুনি এই ঘৰটো চিহ্নিত কৰিলে এই ই-মেইল (আৰু অস্থায়ী গুপ্তশব্দ) আপুনি দেখা পোৱাৰ লগতে সদস্যজনলৈও পঠোৱা হ'ব।",
 'passwordreset-email' => 'ই-মেইল ঠিকনা:',
 'passwordreset-emailtitle' => '{{SITENAME}}ত একাউণ্টৰ সবিশেষ তথ্য আছে ।',
-'passwordreset-emailtext-ip' => 'কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱত: আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ একাউণ্টৰ সবিশেষ তথ্য বিচাৰিছিল । ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।
+'passwordreset-emailtext-ip' => 'কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱতঃ আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ইমেইল ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।
 
 $2
  
 {{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।',
-'passwordreset-emailtext-user' => '$1 ব্যৱহাৰকাৰীয়ে {{SITENAME}} ($4) ৰ বাবে আপোনাৰ একাউণ্টৰ সবিশেষ তথ্য বিচাৰিছিল । ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টসমূহ}} জড়িত হৈ আছে 
+'passwordreset-emailtext-user' => '{{SITENAME}}ত $1 ব্যৱহাৰকাৰীয়ে {{SITENAME}} ($4)ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টসমূহ}} জড়িত হৈ আছে
  
 $2
  
-{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।',
+{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত। যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে।',
 'passwordreset-emailelement' => 'সদস্যনাম: $1
 অস্থায়ী গুপ্তশব্দ: $2',
-'passwordreset-emailsent' => 'à¦\8fà¦\96ন à¦¸à§\8dমাৰà¦\95 à¦\87-মà§\87à¦\87ল à¦ªà¦ à§\8bৱা হৈছে।',
-'passwordreset-emailsent-capture' => 'à¦\8fà¦\96ন à¦¸à§\8dমাৰà¦\95 à¦\87-মà§\87à¦\87ল à¦ªà¦ à§\8bৱা হৈছে, এইখন তলত দেখা পাব।',
-'passwordreset-emailerror-capture' => "à¦\8fà¦\96ন à¦¸à§\8dমাৰà¦\95 à¦\87-মেইল সৃষ্টি কৰা হ'ল কিন্তু সদস্যজনলৈ পঠিয়াব পৰা নগ'ল, এইখন তলত দেখুওৱা হৈছে: $1",
+'passwordreset-emailsent' => 'à¦\8fà¦\96ন à¦\97à§\81পà§\8dতশবà§\8dদ à¦\89দà§\8dধাৰ à¦\87-মà§\87à¦\87ল à¦ªà¦ à¦¿à¦\93ৱা হৈছে।',
+'passwordreset-emailsent-capture' => 'à¦\8fà¦\96ন à¦\97à§\81পà§\8dতশবà§\8dদ à¦\89দà§\8dধাৰ à¦\87মà§\87à¦\87ল à¦ªà¦ à¦¿à¦\93ৱা হৈছে, এইখন তলত দেখা পাব।',
+'passwordreset-emailerror-capture' => "à¦\8fà¦\96ন à¦\97à§\81পà§\8dতশবà§\8dদ à¦\89দà§\8dধাৰ à¦\87মেইল সৃষ্টি কৰা হ'ল কিন্তু সদস্যজনলৈ পঠিয়াব পৰা নগ'ল, এইখন তলত দেখুওৱা হৈছে: $1",
 
 # Special:ChangeEmail
 'changeemail' => 'ই-মেইল ঠিকনা সলনি কৰক',
@@ -920,8 +922,8 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 '''স্বত্বাধিকাৰযুক্ত কোনো সমল অনুমতি অবিহনে দাখিল নকৰে যেন!'''",
 'longpageerror' => "'''ভুল: আপুনি জমা দিয়া পাঠ {{PLURAL:$1|এক কিলো-বাইট|$1 কিলো-বাইট}} আকাৰৰ, যি {{PLURAL:$2|এক কিলো-বাইট|$2 কিলো-বাইট}} সীমাতকৈ বেছি।'''
 ইয়াক সাঁচিব পৰা নাযাব।",
-'readonlywarning' => "'''সতৰ্কবাণী: চোৱা-চিতাৰ হেতু এই তথ্যকোষ বন্ধ কৰি ৰখা হৈছে, গতিকে আপুনি এই মূহুৰ্তত আপোনাৰ সম্পাদনা সাঁচিব নোৱাৰিব ।'''
-à¦\86পà§\81নি à¦²à§\87à¦\96াà¦\9fà§\8b à¦\95াà¦\9fি à¦\9fà§\87à¦\95à§\8dসà¦\9f-ফাà¦\87লত à¦²à§\87পন à¦\95ৰি à¦ªà¦¿à¦\9bলà§\88 à¦¬à§\8dযৱহাৰৰ à¦¬à¦¾à¦¬à§\87 à¦¸à¦¾à¦\81à¦\9aি à§°à¦¾à¦\96িব à¦ªà¦¾à§°à§\87 
+'readonlywarning' => "'''সতৰ্কবাণী: চোৱা-চিতাৰ হেতু এই তথ্যকোষ বন্ধ কৰি ৰখা হৈছে, গতিকে আপুনি এই মূহুৰ্তত আপোনাৰ সম্পাদনা সাঁচিব নোৱাৰিব।'''
+à¦\86পà§\81নি à¦²à§\87à¦\96াà¦\9fà§\8b à¦\9fà§\87à¦\95à§\8dসà¦\9f-ফাà¦\87লত à¦\95পà§\80-পà§\87'ষà§\8dà¦\9f à¦\95ৰি à¦ªà¦¿à¦\9bলà§\88 à¦¬à§\8dযৱহাৰৰ à¦¬à¦¾à¦¬à§\87 à¦¸à¦¾à¦\81à¦\9aি à§°à¦¾à¦\96িব à¦ªà¦¾à§°à§\87
 
 তথ্যকোষ বন্ধ কৰি ৰখা প্ৰশাসকজনে এই ব্যাখ্যা দিছে: $1",
 'protectedpagewarning' => "'''সতৰ্কবাণী: এই পৃষ্ঠা বন্ধ ৰখা হৈছে; কেৱল প্ৰশাসকৰৰ মৰ্যদাৰ সদস্যইহে সম্পাদনা কৰিব পাৰিব ।'''
@@ -1231,7 +1233,7 @@ $1",
 'search-interwiki-default' => '$1 ফলাফলসমূহ:',
 'search-interwiki-more' => '(আৰু)',
 'search-relatedarticle' => 'সম্পৰ্কিত',
-'mwsuggest-disable' => 'AJAX পৰামৰ্শ নিষ্ক্ৰিয় কৰক',
+'mwsuggest-disable' => 'অনুসন্ধান পৰামৰ্শ নিষ্ক্ৰিয় কৰক',
 'searcheverything-enable' => 'সকলো নামস্থানত অনুসন্ধান কৰক',
 'searchrelated' => 'সম্পৰ্কিত',
 'searchall' => 'সকলো',
@@ -1380,7 +1382,7 @@ $1",
 'prefs-displaywatchlist' => 'বিকল্প প্ৰদৰ্শন কৰক',
 'prefs-diffs' => 'পাৰ্থক্য',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ই-মেইল ঠিকনাটো সঠিক',
 'email-address-validity-invalid' => 'সঠিক ই-মেইল ঠিকনা প্ৰদান কৰক',
 
@@ -1974,6 +1976,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 তাৰ সলনি সেইবোৰত উপযুক্ত পৃষ্ঠাৰ লগত সংযোগ থাকিব পাৰে।
 [[MediaWiki:Disambiguationspage]]ৰ পৰা সংযোগ থকা কোনো সাঁচ ব্যৱহাৰ কৰিলে এখন পৃষ্ঠাক দ্ব্যৰ্থতা দূৰীকৰণ পৃষ্ঠা হিছাপে গণ্য কৰা হয়।",
 
+'pageswithprop-submit' => 'যাওক',
+
 'doubleredirects' => 'দ্বি-পুনঃনিৰ্দেশিত',
 'doubleredirectstext' => 'আন পুনৰ্নিদেশনা পৃষ্ঠালৈ পুনৰ্নিৰ্দেশিত পৃষ্ঠাসমূহ এই তালিকাত দিয়া হৈছে ।
 প্ৰত্যেক পথালী শাৰীত প্ৰথম আৰু দ্বিতীয় পুনৰ্নিৰ্দেশনাৰ সংযোগৰ লগতে দ্বিতীয় পুনৰ্নিৰ্দেশনাৰ লক্ষ্য সংযোগ দিয়া আছে । এই লক্ষ্য সংযোগটো সাধাৰণতে "প্ৰকৃত" লক্ষ্য পৃষ্ঠা যাক প্ৰথম পুনৰ্নিৰ্দেশনাই আঙুলিয়াই দিয়ে ।
@@ -2140,7 +2144,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 # Special:ActiveUsers
 'activeusers' => 'সক্ৰিয় ব্যবহাৰকাৰীৰ তালিকা',
 'activeusers-intro' => 'যোৱা  {{PLURAL:$1|দিন|দিন}}ৰ ভিতৰত অৱদান আগবঢ়োৱা ব্যৱহাৰকাৰীৰ তালিকা',
-'activeusers-count' => 'যà§\8bৱা {{PLURAL:$3|দিনত|$3 à¦¦à¦¿à¦¨à¦¤}} à¦¸à§°à§\8dবমà§\81ঠ {{PLURAL:$1|সমà§\8dপাদনাৰ|সমà§\8dপাদনাৰ}} সংখ্যা $1',
+'activeusers-count' => 'যà§\8bৱা {{PLURAL:$3|দিনত|$3 à¦¦à¦¿à¦¨à¦¤}} à¦¸à§°à§\8dবমà§\81ঠ {{PLURAL:$1|à¦\95ামৰ|à¦\95ামৰ}} সংখ্যা $1',
 'activeusers-from' => 'ইয়াৰে আৰম্ভ হোৱা ব্যৱহাৰকাৰী সকল দেখুৱাওক:',
 'activeusers-hidebots' => 'বট নেদেখুৱাব',
 'activeusers-hidesysops' => 'প্ৰশাসক নেদেখুৱাব',
@@ -2165,7 +2169,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'listgrouprights-addgroup-self-all' => 'সকলো গোট নিজৰ একাউণ্টত যোগ কৰক',
 'listgrouprights-removegroup-self-all' => 'নিজৰ একাউণ্টৰপৰা সকলো গোট আঁতৰাওক',
 
-# E-mail user
+# Email user
 'mailnologin' => 'পাওঁতাৰ ঠিকনা নাই',
 'mailnologintext' => 'আন সদস্যক ই-মেইল পঠিয়াবলৈ আপুনি [[Special:UserLogin|লগ্‌ ইন]] কৰিব লাগিব আৰু আপোনাৰ [[Special:Preferences|পছন্দসমূহত]] এটা বৈধ ই-মেইল ঠিকনা থাকিব লাগিব ।',
 'emailuser' => 'এই সদস্যজনলৈ ই-মেইল পঠিয়াওক',
@@ -2203,7 +2207,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'usermessage-editor' => 'ব্যৱস্থাৰ বাতৰি দিওঁতা',
 
 # Watchlist
-'watchlist' => 'মà§\8bৰ à¦²à¦\95à§\8dষà§\8dয-তালিà¦\95া',
+'watchlist' => 'লক্ষ্য-তালিকা',
 'mywatchlist' => 'লক্ষ্য-তালিকা',
 'watchlistfor2' => '$1 ৰ কাৰণে($2)',
 'nowatchlist' => 'আপোনাৰ নিৰীক্ষণ তালিকাত একো নাই ।',
@@ -2256,21 +2260,18 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'enotif_anon_editor' => 'বেনামী সদস্য $1',
 'enotif_body' => 'প্ৰিয় $WATCHINGUSERNAME,
 
-
-{{SITENAME}}ৰ $PAGETITLE শিৰোনামাৰ পৃষ্ঠাখন $PAGEEDITDATE তাৰিখে $PAGEEDITORৰ দ্বাৰা $CHANGEDORCREATED। সাম্প্ৰতিক সংশোধনৰ বাবে $PAGETITLE_URL চাওক।
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 সম্পাদকৰ সাৰাংশ: $PAGESUMMARY $PAGEMINOREDIT
 
-সমà§\8dপাদà¦\95à¦\9cনৰ à¦²à¦\97ত à¦¯à§\8bà¦\97াযà§\8bà¦\97:
+সমà§\8dপাদà¦\95à¦\9cনà¦\95 à¦¯à§\8bà¦\97াযà§\8bà¦\97 à¦\95ৰà¦\95:
 মেইল: $PAGEEDITOR_EMAIL
 ৱিকি: $PAGEEDITOR_WIKI
 
-আপুনি এই পৃষ্ঠাখন নোচোৱালৈকে আন সালসলনিৰ কোনো জাননী দিয়া নহ’ব 
+আপুনি এই পৃষ্ঠাখন নোচোৱালৈকে আন সালসলনিৰ কোনো জাননী দিয়া নহ’ব।
 আপুনি আপোনাৰ লক্ষ্য-তালিকাৰ পৃষ্ঠাবোৰৰ জাননী ফ্লেগ পূৰ্বৰ অৱস্থালৈও ঘূৰাই নিব পাৰে ।
 
-আপোনাৰ {{SITENAME}} জাননী ব্যৱস্থা
+আপোনাৰ {{SITENAME}} জাননী ব্যৱস্থা
 
 --
 আপোনাৰ ই-মেইল জাননী ছেটিং সলনি কৰিবলৈ এইখন চাওক
@@ -2358,6 +2359,8 @@ $UNWATCHURL
 'prot_1movedto2' => '$1 ক $2 লৈ স্থানান্তৰিত কৰা হল',
 'protect-badnamespace-title' => 'অসুৰক্ষিত নামস্থান',
 'protect-badnamespace-text' => 'এই নামস্থানৰ পৃষ্ঠাসমূহ সুৰক্ষিত কৰিব নোৱাৰি।',
+'protect-norestrictiontypes-text' => 'এই পৃষ্ঠাখন সুৰক্ষিত কৰিব নোৱাৰি কাৰণ কোনো বাধা প্ৰকাৰ নাই।',
+'protect-norestrictiontypes-title' => 'সুৰক্ষা প্ৰযোজ্য নোহোৱা পৃষ্ঠা',
 'protect-legend' => 'সুৰক্ষা নিশ্চিত কৰক',
 'protectcomment' => 'কাৰণ:',
 'protectexpiry' => 'সময় শেষ:',
@@ -2374,9 +2377,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'এই পৃষ্ঠাখন বৰ্তমান সুৰক্ষিত কাৰণ ই {{PLURAL:$1|খন পৃষ্ঠাৰ|খন পৃষ্ঠাৰ}} অন্তৰ্গত য’ত প্ৰপাতাকাৰ সুৰক্ষা সক্ৰিয় ।
 আপুনি এই পৃষ্ঠাৰ সুৰক্ষা স্তৰ সলাব পাৰে কিন্তু সি প্ৰপাতাকাৰ সুৰক্ষাত কোনো প্ৰভাৱ নেপেলায ।',
 'protect-default' => 'সকলো ব্যৱহাৰকাৰীৰ বাবে',
-'protect-fallback' => '"$1" অনুমতি লাগিব',
-'protect-level-autoconfirmed' => 'নতà§\81ন à¦¬à¦¾ à¦\85পà¦\9eà§\8dà¦\9cà§\80ভà§\81à¦\95à§\8dত à¦¸à¦¦à¦¸à§\8dযà¦\95 à¦\85ৱৰà§\8bধ',
-'protect-level-sysop' => 'à¦\95à§\87ৱল à¦ªà§\8dৰশাসà¦\95বà§\83নà§\8dদৰ à¦¬à¦¾à¦¬à§\87',
+'protect-fallback' => 'কেৱল "$1" অনুমতি থকা ব্যৱহাৰকাৰীকহে সুযোগ দিয়া হয়',
+'protect-level-autoconfirmed' => 'à¦\95à§\87ৱল à¦¸à§\8dবয়à¦\82নিশà§\8dà¦\9aিত à¦¬à§\8dযৱহাৰà¦\95াৰà§\80à¦\95হà§\87 à¦¸à§\81যà§\8bà¦\97 à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹à¦¯à¦¼',
+'protect-level-sysop' => 'à¦\95à§\87ৱল à¦ªà§\8dৰশাসà¦\95বà§\83নà§\8dদà¦\95 à¦\85নà§\81মতি à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹à¦¯à¦¼',
 'protect-summary-cascade' => 'প্ৰপাতাকাৰ/কেচ্‌কেডিং',
 'protect-expiring' => ' $1 (UTC) ত সময় শেষ হব',
 'protect-expiring-local' => 'ম্যাদ উকলিব $1',
@@ -2677,18 +2680,18 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 # Move page
 'move-page' => '$1 স্থানান্তৰ কৰক',
 'move-page-legend' => 'পৃষ্ঠাখন স্থানান্তৰ কৰক',
-'movepagetext' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনামা সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামালৈ স্থানান্তৰ কৰা হ'ব।
-পà§\81ৰণা à¦¶à¦¿à§°à§\8bনামাà¦\9fà§\8b à¦¨à¦¤à§\81ন à¦¶à¦¿à§°à§\8bনামালà§\88 à¦\8fà¦\9fা à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শনা à¦¹à§\88 à§°'ব।
-পà§\81ৰণা à¦¶à¦¿à§°à§\8bনামালà§\88 à¦ªà§\8bনাৱা à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ à¦\86পà§\81নি à¦¸à§\8dবয়à¦\82à¦\95à§\8dৰিয়ভাৱà§\87 à¦\86পডà§\87ট কৰিব পাৰিব।
-যদি à¦\8fà¦\87à¦\9fà§\8b à¦\95ৰিব à¦¨à¦¿à¦¬à¦¿à¦\9aাৰà§\87 à¦¤à§\87নà§\87হ'লà§\87  [[Special:DoubleRedirects|দà§\8dবি-পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] à¦¬à¦¾ [[Special:BrokenRedirects|ভà¦\99া à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] à¦\9aয়ন কৰে যেন।
+'movepagetext' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনাম সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামলৈ স্থানান্তৰ কৰা হ'ব।
+পুৰণা শিৰোনামটো নতুন শিৰোনামালৈ এটা পুনৰ্নিৰ্দেশনা হৈ ৰ'ব।
+পà§\81ৰণা à¦¶à¦¿à§°à§\8bনামলà§\88 à¦ªà§\8bনাৱা à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ à¦\86পà§\81নি à¦¸à§\8dবয়à¦\82à¦\95à§\8dৰিয়ভাৱà§\87 à¦\86পডà§\87'ট কৰিব পাৰিব।
+যদি à¦\8fà¦\87à¦\9fà§\8b à¦\95ৰিব à¦¨à¦¿à¦¬à¦¿à¦\9aাৰà§\87 à¦¤à§\87নà§\87হ'লà§\87  [[Special:DoubleRedirects|দà§\8dবি-পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] à¦¬à¦¾ [[Special:BrokenRedirects|ভà¦\99া à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] à¦¬à¦¾à¦\9bনি কৰে যেন।
 সকলো সংযোগ সঠিক দিশলৈ পোনাৱাৰ দায়িত্ব আপোনাৰ।
 
-মন à¦\95ৰিব à¦¯à§\87 à¦¨à¦¤à§\81ন à¦¶à¦¿à§°à§\8bনামাà¦\9fà§\8b à¦¯à¦¦à¦¿ à¦ªà§\8dৰà¦\9aলিত, à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠা à¦¨à¦¤à§\81ন à¦¶à¦¿à§°à§\8bনামালà§\88 à¦¸à¦²à¦¨à¦¿ à¦\95ৰা '''নহ'ব''' à¦¯à¦¦à¦¿à¦¹à§\87 à¦¸à§\87à¦\87 à¦ªà§\83ষà§\8dঠা à¦\96ালà§\80 à¦¬à¦¾ à¦\95à§\8bনà§\8b à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শনাৰ à¦ªà§\82ৰà§\8dব ইতিহাস নাই।
+মন à¦\95ৰিব à¦¯à§\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¸à§\8dথানানà§\8dতৰ à¦\95ৰা '''নহ'ব''' à¦¯à¦¦à¦¿à¦¹à§\87 à¦¨à¦¤à§\81ন à¦¶à¦¿à§°à§\8bনামà¦\9fà§\8bত à¦ªà§\82ৰà§\8dবৰপৰা à¦\8fà¦\96ন à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87à¦\87, à¦\86ৰà§\81 à¦¯à¦¦à¦¿à¦¹à§\87 à¦ªà§\82ৰà§\8dবৰ à¦ªà§\83ষà§\8dঠাà¦\96ন à¦\95à§\8bনà§\8b à¦ªà§\81নৰà§\8dনিৰà§\8dদà§\87শ à¦¨à¦¹à¦¯à¦¼ à¦\86ৰà§\81 à¦¤à¦¾à§° à¦\95à§\8bনà§\8b à¦¸à¦®à§\8dপাদনাৰ à¦ªà§\82ৰà§\8dবইতিহাস নাই।
 ইয়াৰ অৰ্থ এয়ে যে ভুল হলে পৃষ্ঠাখন আগৰ ঠাইতে থাকিব, আৰু আপুনি প্ৰচলিত পৃষ্ঠা এখনক আন পৃষ্ঠা এখনেৰে সলনি কৰিব নোৱাৰে।
 
 '''সতৰ্কবাণী !'''
 জনপ্ৰিয় পৃষ্ঠা এখনৰ বাবে এয়া এক ডাঙৰ আৰু অনাকাংক্ষিত সাল-সলনি হ’ব পাৰে;
-à¦\8fà¦\87 à¦\95াৰà§\8dয পৰিণাম ভালদৰে বিবেচনা কৰি লয় যেন।",
+à¦\86à¦\97বঢ়াৰ à¦ªà§\82ৰà§\8dবà§\87 à¦\8fà¦\87 à¦\95াৰà§\8dযৰ পৰিণাম ভালদৰে বিবেচনা কৰি লয় যেন।",
 'movepagetext-noredirectfixer' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনামা সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামালৈ স্থানান্তৰ কৰা হ'ব।
 পুৰণা শিৰোনামাটো নতুন শিৰোনামালৈ এটা পুনৰ্নিৰ্দেশনা হৈ ৰ'ব।
 [[Special:DoubleRedirects|দ্বি পুনৰ্নিৰ্দেশনাসমূহ]] বা [[Special:BrokenRedirects|ভঙা পুনৰ্নিৰ্দেশনসমূহ]] পৰীক্ষা কৰিবলৈ নাপাহৰিব।
@@ -3533,7 +3536,7 @@ Any subsequent links on the same line are considered to be exceptions, i.e. page
 'monthsall' => 'সকলো',
 'limitall' => 'সকলোবোৰ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ই-মেইল ঠিকনা নিশ্চিত কৰক',
 'confirmemail_noemail' => 'আপোনাৰ [[Special:Preferences|সদস্য পছন্দসমূহ]]ত কোনো বৈধ ই-মেইল ঠিকনা নাই ।',
 'confirmemail_text' => '{{SITENAME}}ত ই-মেইল ভিত্তিক সেৱা ব্যৱহাৰ কৰাৰ পূৰ্বে আপুনি আপোনাৰ ই-মেইল ঠিকনা নিশ্চিত কৰিব লাগিব । তলৰ বুটামটো টিপি আপোনাৰ ই-মেইল ঠিকনালৈ এখন নিশ্চিতকৰণ মেইল পঠিয়াওক ।
@@ -3765,7 +3768,7 @@ $5
 'specialpages-group-highuse' => 'অধিক ব্যবহৃত পৃষ্ঠাসমূহ',
 'specialpages-group-pages' => 'পৃষ্ঠাৰ তালিকাসমূহ',
 'specialpages-group-pagetools' => 'পৃষ্ঠা সা-সঁজুলি',
-'specialpages-group-wiki' => 'ৱিà¦\95ি à¦¤à¦¥à§\8dয à¦\86ৰà§\81 à¦¸à¦¾-সà¦\81à¦\9cà§\81লি',
+'specialpages-group-wiki' => 'তথ্য আৰু সা-সঁজুলি',
 'specialpages-group-redirects' => 'পুনৰ্নিৰ্দেশ কৰা বিশেষ পৃষ্ঠাসমূহ',
 'specialpages-group-spam' => 'স্পাম সা-সঁজুলি',
 
index 2cb5726..f66fa66 100644 (file)
@@ -547,8 +547,8 @@ Por favor vuelvi identificate depués de recibila.',
 'blocked-mailpassword' => 'Ta bloquiada la edición dende la to direición IP, polo que pa evitar abusos nun se pue usar la función de recuperación de clave.',
 'eauthentsent' => "Unvióse un corréu electrónicu de confirmación a la direición indicada.
 Enantes de que s'unvie nengún otru corréu a la cuenta, has siguir les instrucciones del corréu electrónicu pa confirmar que la cuenta ye de to.",
-'throttled-mailpassword' => "Yá s'unvió un recordatoriu de la clave {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.
-Pa evitar abusos, namái s'unviará un recordatoriu cada {{PLURAL:$1|hora|$1 hores}}.",
+'throttled-mailpassword' => "Yá s'unvió un corréu de reaniciu la clave {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.
+Pa evitar abusos, namái s'unviará un corréu de reaniciu cada {{PLURAL:$1|hora|$1 hores}}.",
 'mailerror' => 'Fallu al unviar el corréu: $1',
 'acct_creation_throttle_hit' => "Los visitantes d'esta wiki qu'usen la to direición IP yá crearon güei {{PLURAL:$1|1 cuenta|$1 cuentes}}, que ye'l máximu almitíu nesti periodu de tiempu.
 Poro, los visitantes qu'usen esta direición IP nun puen crear más cuentes de momentu.",
@@ -602,7 +602,7 @@ Seique yá camudaras correutamente la clave o que pidieras una nueva clave provi
 
 # Special:PasswordReset
 'passwordreset' => 'Reaniciar clave',
-'passwordreset-text' => 'Completa esti formulariu pa recibir un corréu electrónicu que te recuerde los detalles de la to cuenta.',
+'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-pretext' => "{{PLURAL:$1||Escribi ún de los elementos de los datos d'abaxo}}",
@@ -612,32 +612,27 @@ Seique yá camudaras correutamente la clave o que pidieras una nueva clave provi
 'passwordreset-capture-help' => "Si marques esta caxella, podrás ver el corréu (cola clave provisional) amás d'unvialu al usuariu.",
 'passwordreset-email' => 'Direición de corréu electrónicu:',
 'passwordreset-emailtitle' => 'Detalles de la cuenta en {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Daquién (seique tu, dende la direición IP $1)solicitó un recordatoriu de los
-detalles de la to cuenta de {{SITENAME}} ($4).
+'passwordreset-emailtext-ip' => "Dalguién (seique vusté, dende la direición IP $1)solicitó'l reaniciu de la so contraseña de {{SITENAME}} ($4).
 {{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}}
 a esta direición de corréu electrónicu:
 
 $2
 
-{{PLURAL:$3|Esta clave provisional caduca|Estes claves provisionales caduquen}} {{PLURAL:$5|nún día|en $5 díes}}.
-Habríes identificate y escoyer una clave nueva agora. Si esta solicitú la fizo otra persona,
-o si recordasti la clave orixinal y yá nun quies camudala, pues escaecer esti mensaxe y siguir
-usando la to clave antigua.",
-'passwordreset-emailtext-user' => "L'usuariu $1 de {{SITENAME}} solicitó un recordatoriu de los detalles de la to cuenta de {{SITENAME}} ($4).
-{{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}}
-a esta direición de corréu electrónicu:
+{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.
+Tendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona,
+o si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir
+usando la contraseña antigua.",
+'passwordreset-emailtext-user' => "L'usuariu $1 de {{SITENAME}} solicitó un reaniciu de la so contraseña de {{SITENAME}} ($4). {{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}} con esta direición de corréu electrónicu:
 
 $2
 
-{{PLURAL:$3|Esta clave provisional caduca|Estes claves provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.
-Habríes identificate y escoyer una clave nueva agora. Si esta solicitú la fizo otra persona, o si
-recordasti la clave orixinal y yá nun quies camudala, pues escaecer esti mensaxe y siguir usando
-la to clave antigua.",
+{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.
+Tendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona, o si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir usando la contraseña antigua.",
 'passwordreset-emailelement' => "Nome d'usuariu: $1
 Clave provisional: $2",
-'passwordreset-emailsent' => 'Unvióse un corréu electrónicu de recordatoriu.',
-'passwordreset-emailsent-capture' => "Unvióse un corréu electrónicu de recordatoriu, que s'amuesa abaxo.",
-'passwordreset-emailerror-capture' => "Xeneróse un corréu electrónicu de recordatoriu, que s'amuesa abaxo, pero falló'l so unviu al usuariu: $1",
+'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",
 
 # Special:ChangeEmail
 'changeemail' => 'Camudar la direición de corréu electrónicu',
@@ -734,7 +729,7 @@ Seique se treslladara o desaniciara mientres víes la páxina.',
 'loginreqtitle' => 'Necesítase identificación',
 'loginreqlink' => 'identificate',
 'loginreqpagetext' => 'Has $1 pa ver otres páxines.',
-'accmailtitle' => 'Clave unviada.',
+'accmailtitle' => 'Clave unviada',
 'accmailtext' => "Unvióse a $2 una clave xenerada al debalu pal usuariu [[User talk:$1|$1]].
 
 La clave d'esta cuenta nueva pue camudase na páxina ''[[Special:ChangePassword|camudar clave]]'' depués d'identificate.",
@@ -742,10 +737,11 @@ La clave d'esta cuenta nueva pue camudase na páxina ''[[Special:ChangePassword|
 'newarticletext' => "Siguisti un enllaz a un artículu qu'inda nun esiste.
 Pa crear la páxina, empecipia a escribir nel cuadru d'embaxo (mira la [[{{MediaWiki:Helppage}}|páxina d'ayuda]] pa más información).
 Si llegasti equí por enquivocu, calca nel botón '''atrás''' del to restolador.",
-'anontalkpagetext' => "----''Esta ye la páxina de'alderique pa un usuariu anónimu qu'inda nun creó una cuenta o que nun la usa.
+'anontalkpagetext' => "----
+''Esta ye la páxina de'alderique pa un usuariu anónimu qu'inda nun creó una cuenta o que nun la usa.''
 Pola mor d'ello ha usase la direición numbérica IP pa identificalu/la.
 Tala IP pue ser compartida por varios usuarios.
-Si yes un usuariu anónimu y notes qu'hai comentarios irrelevantes empobinaos pa ti, por favor [[Special:UserLogin/signup|crea una cuenta]] o [[Special:UserLogin/signup|identifícate]] pa torgar futures confusiones con otros usuarios anónimos.''",
+Si yes un usuariu anónimu y notes qu'hai comentarios irrelevantes empobinaos pa ti, por favor [[Special:UserLogin/signup|crea una cuenta]] o [[Special:UserLogin/signup|identifícate]] pa torgar futures confusiones con otros usuarios anónimos.",
 'noarticletext' => 'Nestos momentos nun hai testu nesta páxina.
 Pues [[Special:Search/{{PAGENAME}}|guetar esti títulu de páxina]] n\'otres páxines,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} guetar los rexistros rellacionaos],
@@ -1543,9 +1539,9 @@ Por favor, camienta si daveres quies xubir esti archivu.",
 'windows-nonascii-filename' => 'Esta wiki nun permite nomes de ficheru con caráuteres especiales.',
 'fileexists' => 'Yá esiste un ficheru con esti nome, por favor comprueba <strong>[[:$1]]</strong> si nun tas seguru de querer camudalu.
 [[$1|thumb]]',
-'filepageexists' => "La páxina de descripción d'esti ficheru yá se creó en <strong>[[:$1]]</strong>, pero anguaño nun esiste nengún ficheru con esti nome.
+'filepageexists' => "La páxina de descripción d'esti ficheru creóse yá en <strong>[[:$1]]</strong>, pero anguaño nun esiste nengún ficheru con esti nome.
 El resume que pongas nun va apaecer na páxina de descripción.
-Pa facer que'l to resume apaeza, vas tener que lu editar manualmente.
+Pa facer que'l to resume apaeza, vas tener qu'editalu manualmente.
 [[$1|thumb]]",
 'fileexists-extension' => 'Yá esiste un ficheru con un nome asemeyáu: [[$2|thumb]]
 * Nome del ficheru que se quier xubir: <strong>[[:$1]]</strong>
@@ -1657,7 +1653,7 @@ Si'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]
 'backend-fail-internal' => 'Hebo un fallu desconocíu nel motor d\'almacenamientu "$1".',
 'backend-fail-contenttype' => 'Non se pudo determinar la triba de conteníu de ficheru a guardar en "$1".',
 'backend-fail-batchsize' => "El motor d'almacenamientu dio un llote de $1 {{PLURAL:$1|operación|operaciones}} en ficheros; el llímite ye de $2 {{PLURAL:$2|operación|operaciones}}.",
-'backend-fail-usable' => 'Nun se pudo llee o escribir el ficheru «$1» porque nun hai permisos bastantes o falten los direutorios/contenedores.',
+'backend-fail-usable' => 'Nun pudo lleese o escribise nel ficheru «$1» porque nun hai permisos bastantes o falten los direutorios/contenedores.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nun se pudo coneutar cola base de datos del diariu pal sofitu d\'almacenamientu "$1".',
@@ -1777,7 +1773,7 @@ Hai disponible una [[Special:WhatLinksHere/$2|llista completa]].",
 'duplicatesoffile' => "{{PLURAL:$1|El siguiente archivu ye un duplicáu|Los siguientes $1 archivos son duplicaos}} d'esti archivu ([[Special:FileDuplicateSearch/$2|más detalles]]):",
 'sharedupload' => "Esti ficheru ye de $1 y se pue usar n'otros proyeutos.",
 'sharedupload-desc-there' => 'Esti ficheru ye de $1 y puen usalu otros proyeutos.
-Llee la [páxina de descripción del ficheru $2] pa más información.',
+Llea la [páxina de descripción del ficheru $2] pa más información.',
 'sharedupload-desc-here' => "Esti ficheru ye de $1 y puen usalu otros proyeutos.
 La descripción de la [$2 páxina de descripción del ficheru] s'amuesa darréu.",
 'sharedupload-desc-edit' => "Esti ficheru ye de $1 y se pue usar n'otros proyeutos.
@@ -2072,9 +2068,7 @@ Pue haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] toca
 
 # Email user
 'mailnologin' => "Ensin direición d'unviu",
-'mailnologintext' => 'Has tar [[Special:UserLogin|identificáu]]
-y tener una direición de corréu válida nes tos [[Special:Preferences|preferencies]]
-pa poder unviar correos a otros usuarios.',
+'mailnologintext' => 'Has tener [[Special:UserLogin|sesión aniciada]] y una direición de corréu válida nes tos [[Special:Preferences|preferencies]] pa poder unviar correos a otros usuarios.',
 'emailuser' => 'Manda-y un corréu a esti usuariu',
 'emailuser-title-target' => 'Unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}',
 'emailuser-title-notarget' => 'Unviar un corréu electrónicu a un usuariu',
@@ -2102,7 +2096,7 @@ La direición de corréu electrónicu qu\'especificasti nes [[Special:Preference
 'emailccme' => 'Unviame per corréu una copia del mio mensaxe.',
 'emailccsubject' => 'Copia del to mensaxe a $1: $2',
 'emailsent' => 'Corréu unviáu',
-'emailsenttext' => 'El to corréu foi unviáu.',
+'emailsenttext' => "Unviose'l to mensaxe de corréu.",
 'emailuserfooter' => 'Esti corréu electrónicu unviolu $1 a $2 per aciu de la función "Manda-y un corréu a un usuariu" de {{SITENAME}}.',
 
 # User Messenger
@@ -2472,9 +2466,9 @@ Mira na [[Special:BlockList|llista de bloqueos]] pa revisar los bloqueos.',
 'unblockip' => 'Desbloquiar usuariu',
 'unblockiptext' => "Usa'l formulariu d'abaxo pa restablecer l'accesu d'escritura a una direicion IP o a un nome d'usuariu previamente bloquiáu.",
 'ipusubmit' => 'Desaniciar esti bloquéu',
-'unblocked' => '[[User:$1|$1]] foi desbloquiáu',
+'unblocked' => '[[User:$1|$1]] desbloquióse.',
 'unblocked-range' => '$1 se desbloquió',
-'unblocked-id' => 'El bloquéu $1 foi elimináu',
+'unblocked-id' => "Desaniciose'l bloquéu $1.",
 'blocklist' => 'Usuarios bloquiaos',
 'ipblocklist' => 'Usuarios bloquiaos',
 'ipblocklist-legend' => 'Atopar un usuariu bloquiáu',
@@ -2496,7 +2490,7 @@ Mira na [[Special:BlockList|llista de bloqueos]] pa revisar los bloqueos.',
 'anononlyblock' => 'namái anón.',
 'noautoblockblock' => 'bloquéu automáticu desactiváu',
 'createaccountblock' => 'bloquiada la creación de cuentes',
-'emailblock' => 'corréu electrónicu bloquiáu',
+'emailblock' => 'corréu electrónicu desactiváu',
 'blocklist-nousertalk' => "nun pue editar la so páxina d'alderique",
 'ipblocklist-empty' => 'La llista de bloqueos ta vacia.',
 'ipblocklist-no-results' => "La direición IP o nome d'usuariu solicitáu nun ta bloquiáu.",
@@ -2520,7 +2514,7 @@ Pa ver los bloqueos qu'hai agora mesmo, mira na [[Special:BlockList|llista de bl
 'block-log-flags-anononly' => 'namái usuarios anónimos',
 'block-log-flags-nocreate' => 'creación de cuentes desactivada',
 'block-log-flags-noautoblock' => 'bloquéu automáticu deshabilitáu',
-'block-log-flags-noemail' => 'corréu electrónicu bloquiáu',
+'block-log-flags-noemail' => 'corréu electrónicu desactiváu',
 'block-log-flags-nousertalk' => "nun pue editar la páxina d'alderique propia",
 'block-log-flags-angry-autoblock' => 'autobloquéu ameyoráu activáu',
 'block-log-flags-hiddenname' => "nome d'usuariu anubríu",
@@ -3481,16 +3475,14 @@ Los demás tarán anubríos de mou predetermináu.
 # Email address confirmation
 'confirmemail' => 'Confirmar direición de corréu',
 'confirmemail_noemail' => "Nun tienes una direición de corréu válida nes tos [[Special:Preferences|preferencies d'usuariu]].",
-'confirmemail_text' => "{{SITENAME}} requier que valides la to direición de corréu enantes d'usar les
-funcionalidaes de mensaxes. Da-y al botón que tienes equí embaxo pa unviar un avisu de
-confirmación a la to direición. Esti avisu va incluyir un enllaz con un códigu; carga
-l'enllaz nel to navegador pa confirmar la to direición de corréu electrónicu.",
+'confirmemail_text' => "{{SITENAME}} requier que valides la to direición de corréu enantes d'usar les carauterístiques de corréu.
+Da-y al botón que tienes equí embaxo pa unviar un corréu de confirmación a la to direición.
+El corréu va incluyir un enllaz con un códigu; carga l'enllaz nel to navegador pa confirmar que la to direición de corréu electrónicu ye válida.",
 'confirmemail_pending' => "Yá s'unvió un códigu de confirmación a la to direición de corréu; si creasti hai poco la to cuenta, pues esperar dellos minutos a que-y de tiempu a llegar enantes de pidir otru códigu nuevu.",
 'confirmemail_send' => 'Unviar códigu de confirmación',
 'confirmemail_sent' => 'Corréu de confirmación unviáu.',
 'confirmemail_oncreate' => "Unvióse un códigu de confirmación a la to direición de corréu.
-Esti códigu nun se necesita pa identificase, pero tendrás que lu conseñar enantes
-d'activar cualesquier funcionalidá de la wiki que tea rellacionada col corréu.",
+Esti códigu nun se necesita p'aniciar sesión, pero tendrás que conseñalu enantes d'activar cualesquier carauterística de la wiki que tea rellacionada col corréu.",
 'confirmemail_sendfailed' => '{{SITENAME}} nun pudo unviar el to corréu de confirmación.
 Por favor comprueba que nun punxeras carauteres non válidos na to direición de corréu.
 
@@ -3502,15 +3494,15 @@ Agora yá pues [[Special:UserLogin|coneutate]] y esfrutar de la wiki.',
 'confirmemail_loggedin' => 'Quedó confirmada la to direición de corréu.',
 'confirmemail_error' => 'Hebo un problema al guardar la to confirmación.',
 'confirmemail_subject' => 'Confirmación de la direición de corréu de {{SITENAME}}',
-'confirmemail_body' => 'Daquién, seique tu dende la IP $1, rexistró la cuenta "$2" con
+'confirmemail_body' => 'Daquién, seique tu, dende la IP $1, rexistró la cuenta "$2" con
 esta direición de corréu en {{SITENAME}}.
 
-Pa confirmar qu\'esta cuenta ye tuya daveres y asina activar les funcionalidaes
+Pa confirmar qu\'esta cuenta ye tuya daveres y asina activar les carauterístiques
 de corréu en {{SITENAME}}, abri esti enllaz nel to navegador:
 
 $3
 
-Si *nun* rexistrasti tu la cuenta, da-y a esti enllaz pa cancelar
+Si *nun* rexistrasti tu la cuenta, sigui esti enllaz pa encaboxar
 la confirmación de la direición de corréu electrónicu:
 
 $5
@@ -3544,8 +3536,8 @@ la confirmación de les señes de corréu electrónicu:
 $5
 
 Esti códigu de confirmación caduca\'l $4.',
-'confirmemail_invalidated' => 'Confirmación de direición de corréu electrónicu cancelada',
-'invalidateemail' => 'Cancelar confirmación de corréu electrónicu',
+'confirmemail_invalidated' => 'Confirmación de direición de corréu electrónicu encaboxada',
+'invalidateemail' => 'Encaboxar confirmación de corréu electrónicu',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[La tresclusión interwiki ta desactivada]',
@@ -3554,7 +3546,7 @@ Esti códigu de confirmación caduca\'l $4.',
 'scarytranscludetoolong' => '[La URL ye demasiao llarga]',
 
 # Delete conflict
-'deletedwhileediting' => "'''Avisu''': ¡Esta páxina foi esborrada depués de qu'entamaras a editala!",
+'deletedwhileediting' => "'''Avisu''': ¡Esta páxina desanicióse depués de qu'entamaras a editala!",
 'confirmrecreate' => "L'usuariu [[User:$1|$1]] ([[User talk:$1|alderique]]) esborró esta páxina depués de qu'empecipiaras a editala pol siguiente motivu:
 : ''$2''
 Por favor confirma que daveres quies volver a crear esta páxina.",
@@ -3663,11 +3655,11 @@ Tamién pues [[Special:EditWatchlist|usar l'editor estándar]].",
 'version-poweredby-credits' => "Esta wiki funciona con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'otros',
 'version-credits-summary' => 'Nos prestaría dar reconocimientu a les siguientes persones pola so contribución a [[Special:Version|MediaWiki]].',
-'version-license-info' => "MediaWiki ye software llibre; pues redistribuilu y/o camudalu baxo los términos de la Llicencia Pública Xeneral GNU tal como ta asoleyada pola Free Software Foundation; o la versión 2 de la Llicencia, o (como prefieras) cualesquier versión posterior.
+'version-license-info' => "MediaWiki ye software llibre; pue redistribuilu y/o camudalu baxo los términos de la Llicencia Pública Xeneral GNU tal como ta asoleyada pola Free Software Foundation; o la versión 2 de la Llicencia, o (como prefieras) cualesquier versión posterior.
 
-MediaWiki se distribúi col envís de que seya afayadiza, pero ENSIN GARANTÍA DALA; ensin siquiera garantía implícita de COMERCIALIDÁ o ADAUTACIÓN A UN DETERMINÁU PROPÓSITU. Llee la Llicencia Pública Xeneral GNU pa más detalles.
+MediaWiki distribúise col envís de que seya afayadiza, pero ENSIN GARANTÍA DALA; ensin siquiera garantía implícita de COMERCIALIDÁ o ADAUTACIÓN A UN DETERMINÁU PROPÓSITU. Llea la Llicencia Pública Xeneral GNU pa más detalles.
 
-Tendríes d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llicencia Pública Xeneral GNU] xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lleela en llinia].",
+Tendría d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llicencia Pública Xeneral GNU] xunto con esti programa; sinón, escriba a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lleala en llinia].",
 'version-software' => 'Software instaláu',
 'version-software-product' => 'Productu',
 'version-software-version' => 'Versión',
@@ -3777,17 +3769,17 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'sqlite-no-fts' => '$1 ensin sofitu pa gueta en testu completu',
 
 # New logging system
-'logentry-delete-delete' => '$1 desanició la páxina $3',
-'logentry-delete-restore' => '$1 restauró la páxina $3',
-'logentry-delete-event' => "$1 camudó la visibilidá {{PLURAL:$5|d'un socesu del rexistru|de $5 socesos del rexistru}} en $3: $4",
-'logentry-delete-revision' => "$1 camudó la visibilidá {{PLURAL:$5|d'una revisión|de $5 revisiones}} na páxina $3: $4",
-'logentry-delete-event-legacy' => '$1 camudó la visibilidá de los socesos del rexistru en $3',
-'logentry-delete-revision-legacy' => '$1 camudó la visibilidá de les revisiones na páxina $3',
-'logentry-suppress-delete' => '$1 suprimió la páxina $3',
-'logentry-suppress-event' => "$1 camudó en secretu la visibilidá {{PLURAL:$5|d'un socesu del rexistru|de $5 socesos del rexistru}} en $3: $4",
-'logentry-suppress-revision' => "$1 camudó en secretu la visibilidá {{PLURAL:$5|d'una revisión|de $5 revisiones}} na páxina $3: $4",
-'logentry-suppress-event-legacy' => '$1 camudó en secretu la visibilidá de los socesos del rexistru en $3',
-'logentry-suppress-revision-legacy' => '$1 camudó en secretu la visibilidá de les revisiones na páxina $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|desanició}} la páxina $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|restauró}} la páxina $3',
+'logentry-delete-event' => "$1 {{GENDER:$2|camudó}} la visibilidá {{PLURAL:$5|d'un socesu del rexistru|de $5 socesos del rexistru}} en $3: $4",
+'logentry-delete-revision' => "$1 {{GENDER:$2|camudó}} la visibilidá {{PLURAL:$5|d'una revisión|de $5 revisiones}} na páxina $3: $4",
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|camudó}} la visibilidá de los socesos del rexistru en $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|camudó}} la visibilidá de les revisiones na páxina $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|suprimió}} la páxina $3',
+'logentry-suppress-event' => "$1 {{GENDER:$2|camudó}} en secretu la visibilidá {{PLURAL:$5|d'un socesu del rexistru|de $5 socesos del rexistru}} en $3: $4",
+'logentry-suppress-revision' => "$1 {{GENDER:$2|camudó}} en secretu la visibilidá {{PLURAL:$5|d'una revisión|de $5 revisiones}} na páxina $3: $4",
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|camudó}} en secretu la visibilidá de los socesos del rexistru en $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|camudó}} en secretu la visibilidá de les revisiones na páxina $3',
 'revdelete-content-hid' => 'conteníu tapecíu',
 'revdelete-summary-hid' => "resume d'edición tapecíu",
 'revdelete-uname-hid' => "nome d'usuariu anubríu",
@@ -3796,20 +3788,20 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'revdelete-uname-unhid' => "nome d'usuariu non anubríu",
 'revdelete-restricted' => 'aplicaes les restricciones a los alministradores',
 'revdelete-unrestricted' => 'eliminaes les restricciones a los alministradores',
-'logentry-move-move' => '$1 treslladó la páxina "$3" a "$4"',
-'logentry-move-move-noredirect' => '$1 treslladó la páxina "$3" a "$4" ensin dexar una redireición',
-'logentry-move-move_redir' => '$1 treslladó la páxina "$3" a "$4" sobre una redireición',
-'logentry-move-move_redir-noredirect' => '$1 treslladó la páxina "$3" a "$4" sobre una redireición ensin dexar una redireición',
-'logentry-patrol-patrol' => '$1 marcó la revisión $4 de la páxina "$3" como patrullada',
-'logentry-patrol-patrol-auto' => '$1 marcó automaticamente la revisión $4 de la páxina "$3" como patrullada',
-'logentry-newusers-newusers' => "Se creó la cuenta d'usuariu $1",
-'logentry-newusers-create' => "Se creó la cuenta d'usuariu $1",
-'logentry-newusers-create2' => "$1 creó la cuenta d'usuariu $3",
-'logentry-newusers-byemail' => "$1 creó la cuenta d'usuariu $3 y la contraseña uviose per corréu electrónicu",
-'logentry-newusers-autocreate' => 'La cuenta $1 se creó automáticamente',
-'logentry-rights-rights' => '$1 camudó la pertenencia a grupos de $3 dende $4 a $5',
-'logentry-rights-rights-legacy' => '$1 camudó la pertenencia a grupos de $3',
-'logentry-rights-autopromote' => '$1 promocionó automáticamente de $4 a $5',
+'logentry-move-move' => '$1 {{GENDER:$2|treslladó}} la páxina "$3" a "$4"',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|treslladó}} la páxina "$3" a "$4" ensin dexar una redireición',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|treslladó}} la páxina "$3" a "$4" sobre una redireición',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|treslladó}} la páxina "$3" a "$4" sobre una redireición ensin dexar una redireición',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|marcó}} la revisión $4 de la páxina "$3" como patrullada',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|marcó}} automáticamente la revisión $4 de la páxina "$3" como patrullada',
+'logentry-newusers-newusers' => "{{GENDER:$2|Creóse}} la cuenta d'usuariu $1",
+'logentry-newusers-create' => "{{GENDER:$2|Creóse}} la cuenta d'usuariu $1",
+'logentry-newusers-create2' => "$1 {{GENDER:$2|creó}} la cuenta d'usuariu $3",
+'logentry-newusers-byemail' => "$1 {{GENDER:$2|creó}} la cuenta d'usuariu $3 y la contraseña unvióse per corréu electrónicu",
+'logentry-newusers-autocreate' => 'La cuenta $1 {{GENDER:$2|creóse}} automáticamente',
+'logentry-rights-rights' => '$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3 dende $4 a $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|promocionó}} automáticamente de $4 a $5',
 'rightsnone' => '(nengún)',
 
 # Feedback
index bfdc182..7fc3558 100644 (file)
@@ -561,7 +561,7 @@ Yeni cəhd etməzdən əvvəl bir qədər gözləyin.',
 'loginlanguagelabel' => 'Dil: $1',
 'suspicious-userlogout' => 'Sizin çıxış üçün cəhdiniz uğursuz alındı. Bu, brouzerin yaxud proksi-keşləmənin düzgün işləməməsindən qaynaqlanır.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP-nin mail() funksiyasında naməlum xəta',
 
 # Change password dialog
@@ -1074,7 +1074,7 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə
 'prefs-displaywatchlist' => 'Görüntü variantları',
 'prefs-diffs' => 'Fərqlər',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-poçt ünvanı düzgündür',
 'email-address-validity-invalid' => 'Düzgün e-poçt ünvanı daxil edin',
 
@@ -1679,7 +1679,7 @@ Fərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-help
 'listgrouprights-addgroup-self-all' => 'Bütün qrupları öz hesabına əlavə edə bilər',
 'listgrouprights-removegroup-self-all' => 'Bütün qrupları öz hesabından çıxara bilər',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ünvan yoxdur',
 'emailuser' => 'İstifadəçiyə e-məktub yolla',
 'emailpage' => 'İstifadəçiyə e-məktub yolla',
@@ -2806,7 +2806,7 @@ Variants for Chinese language
 'monthsall' => 'hamısı',
 'limitall' => 'bütün',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-məktubunu təsdiq et',
 'confirmemail_send' => 'Təsdiq kodu göndər',
 'confirmemail_sent' => 'Təsdiq e-məktubu göndərildi.',
index 53fd602..4a5a91d 100644 (file)
@@ -594,7 +594,7 @@ $2',
 'loginlanguagelabel' => 'دیل: $1',
 'suspicious-userlogout' => 'سیزین چیخیش ایستگینیز رد اولوندو. بو، براوزرین یا پروکسی-کَشلمه‌سینین دوزگون ایشله‌مه‌مه‌سین‌دن قایناق‌لانیر.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'پی‌اچ‌پی‌نین mail() فونکسیاسیندا تانینمامیش خطا.',
 'user-mail-no-addy' => 'ایمیل آدرسی اولماماق‌لا، ایمیل گؤندرمگه چالیشدی',
 'user-mail-no-body' => 'بیر بوش یا چوخ قیسا یازیسی اولان ایمیل گؤندرمگه چالیشیلدی.',
@@ -1116,7 +1116,7 @@ $1",
 'search-interwiki-default' => '$1 سونوج:',
 'search-interwiki-more' => '(داها)',
 'search-relatedarticle' => 'ایلگیلی',
-'mwsuggest-disable' => 'AJAX اؤنرلرینی باغلا',
+'mwsuggest-disable' => 'آختاریش اؤنرلرینی ایشدن سال',
 'searcheverything-enable' => 'بوتون آدفضالاریندا آختار',
 'searchrelated' => 'ایلگیلی',
 'searchall' => 'بوتون',
@@ -1267,7 +1267,7 @@ $1",
 'prefs-displaywatchlist' => 'گؤرونتو سئچَنکلری',
 'prefs-diffs' => 'فرقلر',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ایمیل آدرسی، گئچرلی نظره گلیر',
 'email-address-validity-invalid' => 'گئچرلی بیر ایمیل آدرسی وئرین',
 
@@ -1861,6 +1861,12 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 اولا بیلر اونلاری داها اویغون صحیفه‌یه باغلاماق لازیم اولا.<br />
 بیر صحیفه، بلیرلندیرمه صحیفه‌سی کیمی اولار، اگر [[MediaWiki:Disambiguationspage]] صحیفه‌سینه باغلانمیش بیر شابلون‌دان ایستیفاده ائتسه.",
 
+'pageswithprop' => 'صحیفه اؤزل‌لیگی اولان صحیفه‌لر',
+'pageswithprop-legend' => 'صحیفه اؤزل‌لیگی اولان صحیفه‌لر',
+'pageswithprop-text' => 'بو صحیفه‌ده، بیر خاص صحیفه اؤزل‌لیگی ایشلدن صحیفه‌لرین لیستی واردیر.',
+'pageswithprop-prop' => 'اؤزل‌لیک آدی:',
+'pageswithprop-submit' => 'گئت',
+
 'doubleredirects' => 'ایکی‌قات یول‌لاندیرمالار',
 'doubleredirectstext' => 'بو صحیفه دیگر ایستیقامتلندیرمه صحیفه‌لرینه ایستیقامتلندیرمه ائدن صحیفه‌لری سیاهی‌لار.
 هر سطرین ائهتیوا ائتدیگی کئچیدلر؛ بیرینجی و ایکینجی ایستیقامتلندیرمه، هم‌چی‌نین ایکینجی ایستیقامتلن‌دیرمک هدفی، کی بو عمومیتله بیرینجی ایستیقامتلن‌دیرمک گؤسترمه‌سی لازیم اولان "گئرچک" هدف صحیفه‌سی‌دیر.
@@ -2052,7 +2058,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'listgrouprights-addgroup-self-all' => 'بوتون گروپلاری اؤز حسابینا آرتیر',
 'listgrouprights-removegroup-self-all' => 'بوتون گروپلاری اؤز حسابیندان سیل',
 
-# E-mail user
+# Email user
 'mailnologin' => 'گؤندرمه آدرسی یوخدور',
 'mailnologintext' => 'باشقا ایستیفاده‌چیلره ایمیل گؤندرک اوچون، [[Special:UserLogin|گیریش]] ائدیب و [[Special:Preferences|ترجیحلر]]ینیزده گئچرلی ایمیل آدرسی وئرمه‌لیسینیز.',
 'emailuser' => 'بو ایستیفاده‌چی‌یه ایمیل گؤندر',
@@ -2090,7 +2096,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'usermessage-editor' => 'سیستِم مئساژ گؤندَرَنی',
 
 # Watchlist
-'watchlist' => 'اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ¯Û\8cÙ\85 ØµØ­Û\8cÙ\81Ù\87â\80\8câ\80\8cلر',
+'watchlist' => 'اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ©لر',
 'mywatchlist' => 'ایزله‌دیکلر',
 'watchlistfor2' => '$1 اوچون $2',
 'nowatchlist' => 'ایزلمه سیاهینیز بؤش‌دور.',
@@ -2555,7 +2561,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 بو سئچیمی ائتمه‌دیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق یول‌لاندیرمالاری]] یوخلاماغی یاددان چیخارمایین.
 باغلانتیلاری اویغون یئره یول‌لاندیرماسیندان آرخایین اولماق، سیزین مسئولیتینیزده‌دیر.
 
-نظره آلین کی، هدف باشلیق آلتیندا بیر صحیفه مؤوجود اولسا، یئردییشمه '''باش توتمایاجاق'''، مگر بوکی او صحیفه یول‌لاندیرما اولا و اؤنجه دَییشمه گئچمیشی ده اولمایا. بو او دئمک‌دیر کی، سهواً آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلمک اولار، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
\86ظرÙ\87 Ø¢Ù\84Û\8cÙ\86 Ú©Û\8cØ\8c Ù\87دÙ\81 Ø¨Ø§Ø´Ù\84Û\8cÙ\82 Ø¢Ù\84تÛ\8cÙ\86دا Ø¨Û\8cر ØµØ­Û\8cÙ\81Ù\87 Ù\85ؤÙ\88جÙ\88د Ø§Ù\88Ù\84ساØ\8c Û\8cئردÛ\8cÛ\8cØ´Ù\85Ù\87 '''باش ØªÙ\88تÙ\85اÛ\8cاجاÙ\82'''Ø\8c Ù\85گر Ø¨Ù\88Ú©Û\8c Ø§Ù\88 Ø³Ù\88Ù\86راکÛ\8c ØµØ­Û\8cÙ\81Ù\87 Û\8cÙ\88Ù\84â\80\8cÙ\84اÙ\86دÛ\8cرÙ\85ا Ø§Ù\88Ù\84ا Ù\88 Ø§Ø¤Ù\86جÙ\87 Ø¯Ù\8eÛ\8cÛ\8cØ´Ù\85Ù\87 Ú¯Ø¦Ú\86Ù\85Û\8cØ´Û\8c Ø¯Ù\87 Ø§Ù\88Ù\84Ù\85اÛ\8cا. Ø¨Ù\88 Ø§Ù\88 Ø¯Ø¦Ù\85Ú©â\80\8cدÛ\8cر Ú©Û\8cØ\8c Ø³Ù\87Ù\88اÙ\8b Ø¢Ø¯Û\8cÙ\86Û\8c Ø¯Û\8cÛ\8cشدÛ\8cÚ¯Û\8cÙ\86Û\8cز ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84رÛ\8c Ú¯Ø¦Ø±Û\8c Ù\82اÛ\8cتارا Ø¨Û\8cÙ\84Ù\85Ú© Ø§Ù\88Ù\84ارØ\8c Ø¨Ù\88Ù\86Ù\88Ù\86Ù\84ا Û\8cاÙ\86اشÛ\8c Ø¢Ø±ØªÛ\8cÙ\82 Ù\85ؤÙ\88جÙ\88د Ø§Ù\88Ù\84اÙ\86 ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\86Û\8cÙ\86 Ø§Ù\88زرÛ\8cÙ\86Ù\87 Ø¨Ø§Ø´Ù\82ا ØµØ­Û\8cÙ\81Ù\87 Û\8cازا Ø¨Û\8cÙ\84Ù\85زسÛ\8cÙ\86Û\8cز.
 
 '''خبردارلیق!'''
 بو یئردییشمه مشهور صحیفه اوچون اساس‌لی و گؤزلنیلمز اولا بیلر؛ اونا گؤره ده بو دییشیک‌لیگی یئرینه یئتیرمزدن اول، بونون مومکون نتیجه‌لرینی باشا دوشدوگونوزدن آرخایین اولون.",
@@ -2869,6 +2875,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-robot-noindex' => 'ایندِکسله‌نه بیلمز',
 'pageinfo-views' => 'گؤسترمه صحیفه‌سی',
 'pageinfo-watchers' => 'صحیفه‌نین تاماشا‌چی سایی',
+'pageinfo-few-watchers' => '$1-دن آز {{PLURAL:$1|ایزله‌ین|ایزله‌ین}}',
 'pageinfo-redirects-name' => 'بو صحیفه‌یه یول‌لاندیرمالار',
 'pageinfo-subpages-name' => 'بو صحیفه‌نین آلت‌صحیفه‌لری',
 'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|بیر|$2}} یول‌لاندیرما؛ {{PLURAL:$3|بیر|$3}} قِیری-یول‌لاندیرما)',
@@ -3406,7 +3413,7 @@ $1',
 'monthsall' => 'بوتون',
 'limitall' => 'بوتون',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ایمیل-پوست اونوانینی تصدیق ائت',
 'confirmemail_noemail' => '[[Special:Preferences|ایستیفاده‌چی ترجیه لرینی]] تعیین اولونموش اویغون بیر ایمیل عنوانینیز یوخ.',
 'confirmemail_text' => 'ویکینین ایمیل اعتباری کوللانمابیلمئک اوچون، اول ایمیل عنوانینیزین تصدیقلنمه‌سی لازیم‌دیر.
@@ -3807,4 +3814,7 @@ $5
 'duration-centuries' => '{{PLURAL:$1|بیر|$1}} یوز-ایل',
 'duration-millennia' => '{{PLURAL:$1|بیر|$1}} مین‌ایل',
 
+# Image rotation
+'rotate-comment' => 'عکس $1 {{PLURAL:$1|درجه}} ساعات عقربه‌لری ایستیقامتینده فیرلاندیریلب‌دیر',
+
 );
index 1e54f43..85246aa 100644 (file)
@@ -378,7 +378,7 @@ $1',
 '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' => '{{grammar:genitive|{{SITENAME}}}} тураһында',
+'aboutsite' => '{{SITENAME}} тураһында',
 'aboutpage' => 'Project:Тасуирлама',
 'copyright' => '$1 ярашлы эстәлеге менән һәр кем файҙалана ала.',
 'copyrightpage' => '{{ns:project}}:Авторлыҡ хоҡуҡтары',
@@ -645,7 +645,7 @@ $2',
 'loginlanguagelabel' => 'Тел: $1',
 'suspicious-userlogout' => 'Һеҙҙең сеансты тамамлау тураһында һорауығыҙ кире ҡағылды, сөнки ул төҙөк булмаған браузер йәки кэшлаусы прокси тарафынан ебәрелгән һорауға оҡшаған.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP-ның mail() функцияһында билдәһеҙ хата',
 'user-mail-no-addy' => 'Электрон почта адресы булмайынса электрон хәбәр ебәреп ҡараны',
 
@@ -1323,7 +1323,7 @@ $1",
 'prefs-displaywatchlist' => 'Күренеш көйләүҙәре',
 'prefs-diffs' => 'Айырмалар',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail адрес дөрөҫ булғанға оҡшаған',
 'email-address-validity-invalid' => 'Дөрөҫ e-mail адресын керетегеҙ',
 
@@ -2103,7 +2103,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Үҙенең иҫәп яҙмаһына бөтә төркөмдәрҙе өҫтәү',
 'listgrouprights-removegroup-self-all' => 'Үҙенең иҫәп яҙмаһынан бөтә төркөмдәрҙе юйыу',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Хат ебәреү өсөн адрес юҡ',
 'mailnologintext' => 'Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.',
 'emailuser' => 'Ҡатнашыусыға хат',
@@ -3472,7 +3472,7 @@ $1',
 'monthsall' => 'бөтә',
 'limitall' => 'бөтә',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Электрон почта адресын раҫлау',
 'confirmemail_noemail' => 'Һеҙҙең [[Special:Preferences|көйләүҙәрегеҙҙә]] дөрөҫ электрон почта адресы юҡ.',
 'confirmemail_text' => '{{SITENAME}} проекты электрон почта мөмкинлектәрен ҡулланыр алдынан электрон почта адресының раҫланыуын талап итә.
index 274b1da..2a6074c 100644 (file)
@@ -1724,7 +1724,7 @@ PICT # misc.
 'listgrouprights-addgroup-self-all' => 'نونیت کل گروهان په وتی حساب هور کنت',
 'listgrouprights-removegroup-self-all' => 'تونیت کل گروه ان چه وتی حساب بزوریت',
 
-# E-mail user
+# Email user
 'mailnologin' => 'هچ آدرس دیم دهگ',
 'mailnologintext' => 'شما بایدن [[Special:UserLogin|وارد بیت]] و یک معتبرین آدرس ایمیلی داشته بیت ته وتی [[Special:Preferences|ترجیحات]] په دیم داتن ایمیل په دگه کاربران',
 'emailuser' => 'په ای کابر ایمیل دیم دی',
@@ -2838,7 +2838,7 @@ Variants for Chinese language
 'namespacesall' => 'کل',
 'monthsall' => 'کل',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'آدرس ایمیل تایید کن',
 'confirmemail_noemail' => 'شما یک معتبرین آدرس ایمیل تنظیم نه کتت نه وتی [[Special:Preferences|ترجیحات کاربر]].',
 'confirmemail_text' => '{{SITENAME}} لوٹیت که شما وتی آدرس ایمیلء تایید کنید پیش چه شی که سرویسان ایمیلی استفاده کنیت.
index ad1147b..35d80f0 100644 (file)
@@ -605,7 +605,7 @@ Pakilaog sana tabi nin sarong tugmadong koreo o pabayae na mayong laman an surat
 'loginlanguagelabel' => 'Lengguwahe: $1',
 'suspicious-userlogout' => 'An hinahagad mong magluwas pinagpundo nin huli ta ini gayod pinagpadara sa paagi nin sarong pasang kilyaw o proksing hilom.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Bakong bantog na kasalaan sa PHP mail() function.',
 'user-mail-no-addy' => 'Nagprubar na magpadara nin e-koreo na mayo nin e-koreong address.',
 'user-mail-no-body' => 'Nagprubar na magpadara nin e-surat na mayong laman o daeng kanultulan na halipot an hawak.',
@@ -1292,7 +1292,7 @@ An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit mak
 'prefs-displaywatchlist' => 'Ipahiling ang mga pagpipilian',
 'prefs-diffs' => 'Diffs',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'An e-koreo nagpapahiling na balido',
 'email-address-validity-invalid' => 'Magkaag nin sarong balidong e-koreong address',
 
@@ -2065,7 +2065,7 @@ Puwedeng magkakaigwa nin [[{{MediaWiki:Listgrouprights-helppage}}|kadagdagang im
 'listgrouprights-addgroup-self-all' => 'Idagdag an gabos na mga grupo tanganing magkaigwa nin sadireng panindog',
 'listgrouprights-removegroup-self-all' => 'Halion an gabos na mga grupo gikan sa sadireng panindog',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Mayong direksyón nin destino',
 'mailnologintext' => "Kaipuhan ika si [[Special:UserLogin|nakalaog]]
 asin may marhay na ''e''-surat sa saimong [[Special:Preferences|Mga kabôtan]]
@@ -3439,7 +3439,7 @@ Sublokas kan siyudad na ipinahiling',
 'monthsall' => 'gabos',
 'limitall' => 'gabos',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Kompirmaron an ''e''-surat",
 'confirmemail_noemail' => "Mayô kang pigkaag na marhay na ''e''-surat sa saimong [[Special:Preferences|mga kabôtan nin parágamit]].",
 'confirmemail_text' => '{{SITENAME}} minakaipo na balidaron an saimong e-surat na adres bago mo gagamiton an mga estima kan e-surat.
index cdfa9b9..b80f1b7 100644 (file)
@@ -464,7 +464,7 @@ $messages = array(
 'postcomment' => 'Новая сэкцыя',
 'articlepage' => 'Паказаць старонку зьместу',
 'talk' => 'Абмеркаваньне',
-'views' => 'Ð\9fÑ\80аглÑ\8fды',
+'views' => 'РÑ\8dжÑ\8bмы',
 'toolbox' => 'Інструмэнты',
 'userpage' => 'Паказаць старонку ўдзельніка',
 'projectpage' => 'Паказаць старонку праекту',
@@ -547,7 +547,7 @@ $1',
 'restorelink' => '$1 {{PLURAL:$1|выдаленую зьмену|выдаленыя зьмены|выдаленых зьменаў}}',
 'feedlinks' => 'Стужка:',
 'feed-invalid' => 'Памылковы тып стужкі.',
-'feed-unavailable' => 'Стужкі не працуюць',
+'feed-unavailable' => 'Стужкі сындыкацыі недаступныя',
 'site-rss-feed' => '$1 — RSS-стужка',
 'site-atom-feed' => '$1 — Atom-стужка',
 'page-rss-feed' => '«$1» — RSS-стужка',
@@ -592,9 +592,9 @@ $1',
 «$1»
 адбыўся з функцыі «$2».
 База зьвестак вярнула памылку «$3: $4»',
-'laggedslavemode' => 'Увага: старонка можа ня ўтрымліваць апошніх зьменаў.',
+'laggedslavemode' => "'''Увага:''' старонка можа ня ўтрымліваць апошніх зьменаў.",
 'readonly' => 'База зьвестак заблякаваная',
-'enterlockreason' => 'Ð\9fазнаÑ\87Ñ\86е Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\83 Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8f Ñ\96 Ð²Ñ\8bзнаÑ\87аны час разблякаваньня',
+'enterlockreason' => 'Ð\9fазнаÑ\87Ñ\86е Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\83 Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8f Ñ\96 Ð·Ð°Ð¿Ð»Ñ\8fнаваны час разблякаваньня',
 'readonlytext' => 'База зьвестак заблякаваная для дадаваньня новых старонак і іншых зьменаў, верагодна з прычыны тэхнічнага абслугоўваньня, пасьля якога будзе адноўлена звычайная праца.
 
 Адміністратар, які заблякаваў базу зьвестак, пакінуў наступнае тлумачэньне: $1',
@@ -689,12 +689,12 @@ $2',
 'logout' => 'Выйсьці',
 'userlogout' => 'Выйсьці',
 'notloggedin' => 'Вы не ўвайшлі ў сыстэму',
-'nologin' => "Ня маеце рахунку? '''$1'''.",
-'nologinlink' => 'Стварыць рахунак',
-'createaccount' => 'СÑ\82ваÑ\80Ñ\8bÑ\86Ñ\8c Ñ\80аÑ\85Ñ\83нак',
-'gotaccount' => "Ужо маеце рахунак? '''$1'''.",
+'nologin' => 'Ня маеце рахунку? $1.',
+'nologinlink' => 'Стварыце рахунак',
+'createaccount' => 'СÑ\82ваÑ\80Ñ\8dнÑ\8cне Ñ\80аÑ\85Ñ\83нкÑ\83',
+'gotaccount' => 'Ужо маеце рахунак? $1.',
 'gotaccountlink' => 'Увайдзіце',
-'userlogin-resetlink' => 'Ð\97абÑ\8bлÑ\96Ñ\81Ñ\8f Ð¿Ñ\80а зьвесткі для ўваходу?',
+'userlogin-resetlink' => 'Ð\97абÑ\8bлÑ\96Ñ\81Ñ\8f Ð½а зьвесткі для ўваходу?',
 'createaccountmail' => 'Стварыць часовы адвольны пароль і даслаць яго на e-mail адрас, пазначаны ніжэй',
 'createaccountreason' => 'Прычына:',
 'badretype' => 'Уведзеныя Вамі паролі не супадаюць.',
@@ -737,8 +737,8 @@ $2',
 'blocked-mailpassword' => 'З Вашага IP-адрасу забароненыя рэдагаваньні, а таму таксама для прадухіленьня шкоды недаступная функцыя аднаўленьня паролю.',
 'eauthentsent' => 'Пацьверджаньне было дасланае на пазначаны адрас электроннай пошты.
 У лісьце ўтрымліваюцца інструкцыі, па выкананьні якіх, Вы зможаце пацьвердзіць, што адрас сапраўды належыць Вам, і на гэты адрас будзе дасылацца пошта адсюль.',
-'throttled-mailpassword' => 'Ð\9dапамÑ\96н Ð¿Ð°Ñ\80олÑ\8e Ñ\9eжо Ð±Ñ\8bÑ\9e Ð´Ð°Ñ\81ланÑ\8b Ð½Ð° Ð¿Ñ\80аÑ\86Ñ\8fгÑ\83 {{PLURAL:$1|апоÑ\88нÑ\8fй $1 Ð³Ð°Ð´Ð·Ñ\96нÑ\8b|апоÑ\88нÑ\96Ñ\85 $1 Ð³Ð°Ð´Ð·Ñ\96наÑ\9e|апоÑ\88нÑ\96Ñ\85 $1 гадзінаў}}.
-Для прадухіленьня злоўжываньняў, напамін будзе дасылацца не часьцей аднаго разу за $1 {{PLURAL:$1|гадзіну|гадзіны|гадзінаў}}.',
+'throttled-mailpassword' => 'Ð\9bÑ\96Ñ\81Ñ\82 Ð¿Ñ\80а Ñ\81кÑ\96данÑ\8cне Ð¿Ð°Ñ\80олÑ\8e Ñ\9eжо Ð±Ñ\8bло Ð´Ð°Ñ\81лана Ð·Ð° {{PLURAL:$1|$1 Ð°Ð¿Ð¾Ñ\88нÑ\8eÑ\8e Ð³Ð°Ð´Ð·Ñ\96нÑ\83|$1 Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\8f Ð³Ð°Ð´Ð·Ñ\96нÑ\8b|$1 Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\85 гадзінаў}}.
+Для прадухіленьня злоўжываньняў напамін будзе дасылацца не часьцей як аднойчы ў $1 {{PLURAL:$1|гадзіну|гадзіны|гадзінаў}}.',
 'mailerror' => 'Памылка пры адпраўцы электроннай пошты: $1',
 'acct_creation_throttle_hit' => 'Наведвальнікі гэтай вікі, якія карысталіся Вашым ІР-адрасам, ужо стварылі $1 {{PLURAL:$1|рахунак у|рахункі ў|рахункаў у}} апошнія дні, што перавышае максымальную дазволеную колькасьць за гэты пэрыяд.
 У выніку, наведвальнікі, якія карыстаюцца гэтым ІР-адрасам, ня могуць стварыць зараз болей рахункаў.',
@@ -789,7 +789,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Ачыстка паролю',
-'passwordreset-text' => 'Запоўніце гэтую форму, каб атрымаць напамін праз электронную пошту пра Вашыя зьвесткі для ўваходу.',
+'passwordreset-text' => 'Запоўніце гэтую форму, каб скінуць пароль.',
 'passwordreset-legend' => 'Ачысьціць пароль',
 'passwordreset-disabled' => 'Магчымасьць ачысткі паролю была забароненая ў {{GRAMMAR:месны|{{SITENAME}}}}.',
 'passwordreset-pretext' => '{{PLURAL:$1||Увядзіце ніжэй частку зьвестак}}',
@@ -799,7 +799,7 @@ $2',
 'passwordreset-capture-help' => 'Калі Вы пазначыце гэтае поле, электронны ліст (з часовым паролем), будзе паказаны Вам як толькі ён будзе дасланы ўдзельніку.',
 'passwordreset-email' => 'Адрас электроннай пошты:',
 'passwordreset-emailtitle' => 'Падрабязнасьці рахунку ў {{GRAMMAR:месны|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Ð\9dеÑ\85Ñ\82а (магÑ\87Ñ\8bма Ð\92Ñ\8b, Ð· IP-адÑ\80аÑ\81Ñ\83 $1) Ð·Ñ\80абÑ\96Ñ\9e Ð·Ð°Ð¿Ñ\8bÑ\82 Ð½Ð° Ð°Ñ\82Ñ\80Ñ\8bманÑ\8cне Ð¿Ð°Ð´Ñ\80абÑ\8fзнаÑ\81Ñ\8cÑ\86Ñ\8fÑ\9e Ð\92аÑ\88ага Ñ\80аÑ\85Ñ\83нкÑ\83 Ñ\9e {{GRAMMAR:меÑ\81нÑ\8b|{{SITENAME}}}} ($4). {{PLURAL:$3|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8b Ñ\80аÑ\85Ñ\83нак Ñ\83дзелÑ\8cнÑ\96ка Ð·Ñ\8cвÑ\8fзанÑ\8b\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\80аÑ\85Ñ\83нкÑ\96 Ñ\83дзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:
+'passwordreset-emailtext-ip' => 'Ð\9dеÑ\85Ñ\82а (магÑ\87Ñ\8bма Ð\92Ñ\8b, Ð· IP-адÑ\80аÑ\81Ñ\83 $1) Ð·Ñ\80абÑ\96Ñ\9e Ð·Ð°Ð¿Ñ\8bÑ\82 Ð½Ð° Ð²Ð°Ñ\88ага Ð¿Ð°Ñ\80олÑ\8e Ñ\9e {{GRAMMAR:меÑ\81нÑ\8b|{{SITENAME}}}} ($4). {{PLURAL:$3|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8b Ñ\80аÑ\85Ñ\83нак Ñ\83дзелÑ\8cнÑ\96ка Ð·Ñ\8cвÑ\8fзанÑ\8b\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\80аÑ\85Ñ\83нкÑ\96 Ñ\9eдзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:
 
 $2
 
@@ -807,7 +807,7 @@ $2
 Цяпер Вам неабходна ўвайсьці і выбраць новы пароль. Калі нехта іншы зрабіў гэты запыт,
 ці Вы ўспомнілі Ваш пачатковы пароль, які ня хочаце мяняць,
 Вы можаце праігнараваць гэтае паведамленьне, і працягваць выкарыстоўваць стары пароль.',
-'passwordreset-emailtext-user' => 'Удзельнік $1 зрабіў запыт на атрыманьне падрабязнасьцяў Вашага рахунку ў {{GRAMMAR:месны|{{SITENAME}}}} ($4). {{PLURAL:$3|Наступны рахунак удзельніка зьвязаны|Наступныя рахункі удзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:
+'passwordreset-emailtext-user' => 'Удзельнік $1 зрабіў запыт на скіданьне вашага паролю ў {{GRAMMAR:месны|{{SITENAME}}}} ($4). {{PLURAL:$3|Наступны рахунак удзельніка зьвязаны|Наступныя рахункі ўдзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:
 
 $2
 
@@ -817,9 +817,9 @@ $2
 Вы можаце праігнараваць гэтае паведамленьне, і працягваць выкарыстоўваць стары пароль.',
 'passwordreset-emailelement' => 'Імя ўдзельніка: $1
 Часовы пароль: $2',
-'passwordreset-emailsent' => 'Ð\9dапамÑ\96н Ð±Ñ\8bÑ\9e Ð´Ð°Ñ\81ланÑ\8b Ð¿Ð° Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\86е.',
-'passwordreset-emailsent-capture' => 'ЭлекÑ\82Ñ\80оннÑ\8b Ð»Ñ\96Ñ\81Ñ\82 Ð· Ð½Ð°Ð¿Ð°Ð¼Ñ\96нам быў дасланы, што паказана ніжэй.',
-'passwordreset-emailerror-capture' => 'ЭлекÑ\82Ñ\80оннÑ\8b Ð»Ñ\96Ñ\81Ñ\82 Ð· Ð½Ð°Ð¿Ð°Ð¼Ñ\96нам Ð±Ñ\8bÑ\9e Ñ\81Ñ\82воÑ\80анÑ\8b, Ñ\88Ñ\82о Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ð° Ð½Ñ\96жÑ\8dй, Ð°Ð»Ðµ Ð°Ð´Ð±Ñ\8bлаÑ\81Ñ\8f Ð¿Ð°Ð¼Ñ\8bлка Ð°Ð´Ð¿Ñ\80аÑ\9eкÑ\96 Ñ\9eдзельніку: $1',
+'passwordreset-emailsent' => 'Ð\9bÑ\96Ñ\81Ñ\82 Ð¿Ñ\80а Ñ\81кÑ\96данÑ\8cне Ð¿Ð°Ñ\80олÑ\8e Ð±Ñ\8bÑ\9e Ð´Ð°Ñ\81ланÑ\8b.',
+'passwordreset-emailsent-capture' => 'Ð\9bÑ\96Ñ\81Ñ\82 Ð¿Ñ\80а Ñ\81кÑ\96данÑ\8cне Ð¿Ð°Ñ\80олÑ\8e быў дасланы, што паказана ніжэй.',
+'passwordreset-emailerror-capture' => 'Ð\9bÑ\96Ñ\81Ñ\82 Ð¿Ñ\80а Ñ\81кÑ\96данÑ\8cне Ð¿Ð°Ñ\80олÑ\8e Ð±Ñ\8bÑ\9e Ñ\81Ñ\82воÑ\80анÑ\8b Ñ\96 Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ\8b Ð½Ñ\96жÑ\8dй, Ð°Ð»Ðµ Ð½Ðµ Ñ\9eдалоÑ\81Ñ\8f Ð°Ð´Ð¿Ñ\80авÑ\96Ñ\86Ñ\8c Ñ\8fго ÐºÐ°Ñ\80Ñ\8bÑ\81Ñ\82альніку: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Зьмяніць адрас электроннай пошты',
@@ -3909,16 +3909,16 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 
 # New logging system
 'logentry-delete-delete' => '$1 {{GENDER:$2|выдаліў|выдаліла}} старонку $3',
-'logentry-delete-restore' => '$1 аднавіў старонку $3',
-'logentry-delete-event' => '$1 зьмяніў бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале|падзеяў у журнале}} на $3: $4',
-'logentry-delete-revision' => '$1 зьмяніў бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў|вэрсіяў}} старонкі $3: $4',
-'logentry-delete-event-legacy' => '$1 зьмяніў бачнасьць падзеяў у журнале на $3',
-'logentry-delete-revision-legacy' => '$1 зьмяніў бачнасьць вэрсіяў старонкі $3',
-'logentry-suppress-delete' => '$1 схаваў старонку $3',
-'logentry-suppress-event' => '$1 прыхавана зьмяніў бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале|падзеяў у журнале}} на $3: $4',
-'logentry-suppress-revision' => '$1 прыхавана зьмяніў бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў|вэрсіяў}} старонкі $3: $4',
-'logentry-suppress-event-legacy' => '$1 прыхавана зьмяніў бачнасьць падзеяў у журнале на $3',
-'logentry-suppress-revision-legacy' => '$1 прыхавана зьмяніў бачнасьць вэрсіяў старонкі $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале}} на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць вэрсіяў старонкі $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|схаваў|схавала}} старонку $3',
+'logentry-suppress-event' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале}} на $3: $4',
+'logentry-suppress-revision' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4',
+'logentry-suppress-event-legacy' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3',
+'logentry-suppress-revision-legacy' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніоа}} бачнасьць вэрсіяў старонкі $3',
 'revdelete-content-hid' => 'зьмест схаваны',
 'revdelete-summary-hid' => 'апісаньне рэдагаваньня схаванае',
 'revdelete-uname-hid' => 'імя ўдзельніка схаванае',
@@ -3928,16 +3928,16 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'revdelete-restricted' => 'ужыць абмежаваньні для адміністратараў',
 'revdelete-unrestricted' => 'зьнятыя абмежаваньні для адміністратараў',
 'logentry-move-move' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4',
-'logentry-move-move-noredirect' => '$1 перанёс старонку $3 у $4 без пакінутага перанакіраваньня',
-'logentry-move-move_redir' => '$1 перанёс старонку $3 у $4 паўзьверх перанакіраваньня',
-'logentry-move-move_redir-noredirect' => '$1 перанёс старонку $3 у $4 паўзьверх перанакіраваньня без пакінутага перанакіраваньня',
-'logentry-patrol-patrol' => '$1 пазначыў вэрсію $4 старонкі $3 як правераную',
-'logentry-patrol-patrol-auto' => '$1 аўтаматычна пазначыў вэрсію $4 старонкі $3 як правераную',
-'logentry-newusers-newusers' => 'Быў створаны рахунак $1',
-'logentry-newusers-create' => 'Быў створаны рахунак $1',
-'logentry-newusers-create2' => '$1 стварыў рахунак $3',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 без пакінутага перанакіраваньня',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 паўзьверх перанакіраваньня',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 паўзьверх перанакіраваньня без пакінутага перанакіраваньня',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|пазначыў|пазначыла}} вэрсію $4 старонкі $3 як правераную',
+'logentry-patrol-patrol-auto' => '$1 аўтаматычна {{GENDER:$2|пазначыў|пазначыла}} вэрсію $4 старонкі $3 як правераную',
+'logentry-newusers-newusers' => 'Быў {{GENDER:$2|створаны}} рахунак $1',
+'logentry-newusers-create' => 'Быў {{GENDER:$2|створаны}} рахунак $1',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|стварыў|стварыла}} рахунак $3',
 'logentry-newusers-byemail' => '$1 {{GENDER:$2|стварыў|стварыла}} рахунак $3, пароль быў дасланы электроннай поштай',
-'logentry-newusers-autocreate' => 'Рахунак $1 быў створаны аўтаматычна',
+'logentry-newusers-autocreate' => 'Рахунак $1 быў {{GENDER:$2|створаны}} аўтаматычна',
 'logentry-rights-rights' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групы з $4 на $5',
 'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў',
 'logentry-rights-autopromote' => '$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
index 35c9b4f..7eb9d06 100644 (file)
@@ -755,7 +755,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Възстановяване на парола',
-'passwordreset-text' => 'След Ð¿Ð¾Ð¿Ñ\8aлванеÑ\82о Ð½Ð° Ñ\84оÑ\80мÑ\83лÑ\8fÑ\80а Ñ\89е Ð¿Ð¾Ð»Ñ\83Ñ\87иÑ\82е Ð¿Ð¸Ñ\81мо Ñ\81 Ð½Ð°Ð¿Ð¾Ð¼Ð½Ñ\8fÑ\89а Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f Ð·Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81каÑ\82а Ñ\81меÑ\82ка.',
+'passwordreset-text' => 'Ð\9fопÑ\8aлванеÑ\82о Ð½Ð° Ñ\84оÑ\80мÑ\83лÑ\8fÑ\80а Ñ\89е Ð´Ð¾Ð²ÐµÐ´Ðµ Ð´Ð¾ Ð²Ñ\8aзÑ\81Ñ\82ановÑ\8fване Ð½Ð° Ð¿Ð°Ñ\80олаÑ\82а.',
 'passwordreset-legend' => 'Възстановяване на парола',
 'passwordreset-disabled' => 'Възстановяването на паролата е изключено в това уики.',
 'passwordreset-pretext' => '{{PLURAL:$1||Въведете някоя от информациите по-долу}}',
@@ -765,30 +765,27 @@ $2',
 'passwordreset-capture-help' => 'Поставянето на отметка в това поле ще покаже електронното писмо (с временната парола), което ще бъде изпратено и до потребителя.',
 'passwordreset-email' => 'Електронна поща:',
 'passwordreset-emailtitle' => 'Подробности за сметката в {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Някой (вероятно вие, от IP адрес $1) поиска напомняне за
-данните от сметката в {{SITENAME}} ($4). За {{PLURAL:$3|следната сметка|следните сметки}}
+'passwordreset-emailtext-ip' => 'Някой (вероятно вие, от IP адрес $1) поиска възстановяване на паролата за сметката в {{SITENAME}} ($4). За {{PLURAL:$3|следната сметка|следните сметки}}
 е посочен този адрес за електронна поща:
 
 $2
 
 {{PLURAL:$3|Тази временна парола ще бъде активна|Тези временни пароли ще бъдат активни}} {{PLURAL:$5|един ден|$5 дни}}.
-Сега би трябвало да влезете в системата и да си изберете нова парола. Ако заявката е направена от друг или пък сте си 
-спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате
-старата си парола.',
-'passwordreset-emailtext-user' => 'Потребител $1 от {{SITENAME}} поиска напомняне за данните от сметката в {{SITENAME}}
+Сега би трябвало да влезете в системата и да си изберете нова парола. Ако заявката е направена от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате старата си парола.',
+'passwordreset-emailtext-user' => 'Потребител $1 от {{SITENAME}} поиска възстановяване на паролата за сметката в {{SITENAME}}
 ($4). За {{PLURAL:$3|следната сметка|следните сметки}} е посочен този адрес за електронна поща:
 
 $2
 
 {{PLURAL:$3|Тази временна парола ще бъде активна|Тези временни пароли ще бъдат активни}} {{PLURAL:$5|един ден|$5 дни}}.
-Сега би трябвало да влезете в системата и да си изберете нова парола. Ако заявката е направена 
+Сега би трябвало да влезете в системата и да изберете нова парола. Ако заявката е направена 
 от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете 
 това съобщение и да продължите да използвате старата си парола.',
 'passwordreset-emailelement' => 'Потребителско име: $1
 Временна парола: $2',
-'passwordreset-emailsent' => 'Ð\91еÑ\88е Ð¸Ð·Ð¿Ñ\80аÑ\82ено Ð½Ð°Ð¿Ð¾Ð¼Ð½Ñ\8fÑ\89о Ð¿Ð¸Ñ\81мо Ð½Ð° ÐµÐ»ÐµÐºÑ\82Ñ\80оннаÑ\82а Ð¿Ð¾Ñ\89а.',
-'passwordreset-emailsent-capture' => 'Ð\9fо-долÑ\83 Ðµ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\82о Ð¿Ð¸Ñ\81мо Ð·Ð° Ð½Ð°Ð¿Ð¾Ð¼Ð½Ñ\8fне, което беше изпратено.',
-'passwordreset-emailerror-capture' => 'Ð\9fо-долÑ\83 Ðµ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ\81Ñ\8aздадено ÐµÐ»ÐµÐºÑ\82Ñ\80онно Ð¿Ð¸Ñ\81мо Ð·Ð° Ð½Ð°Ð¿Ð¾Ð¼Ð½Ñ\8fне, което не беше изпратено на потребителя: $1',
+'passwordreset-emailsent' => 'Ð\9dа ÐµÐ»ÐµÐºÑ\82Ñ\80оннаÑ\82а Ð¿Ð¾Ñ\89а Ð±ÐµÑ\88е Ð¸Ñ\81пÑ\80аÑ\82ено Ð¿Ð¸Ñ\81мо Ð·Ð° Ð²Ñ\8aзÑ\81Ñ\82ановÑ\8fване Ð½Ð° Ð¿Ð°Ñ\80олаÑ\82а.',
+'passwordreset-emailsent-capture' => 'Ð\9fо-долÑ\83 Ðµ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\82о Ð¿Ð¸Ñ\81мо Ð·Ð° Ð²Ñ\8aзÑ\81Ñ\82ановÑ\8fване Ð½Ð° Ð¿Ð°Ñ\80олаÑ\82а, което беше изпратено.',
+'passwordreset-emailerror-capture' => 'Ð\9fо-долÑ\83 Ðµ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ\81Ñ\8aздадено ÐµÐ»ÐµÐºÑ\82Ñ\80онно Ð¿Ð¸Ñ\81мо Ð·Ð° Ð²Ñ\8aзÑ\81Ñ\82ановÑ\8fване Ð½Ð° Ð¿Ð°Ñ\80олаÑ\82а, което не беше изпратено на потребителя: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Промяна на адреса за е-поща',
@@ -2186,14 +2183,14 @@ $1',
 'enotif_mailer' => 'Известяване по пощата на {{SITENAME}}',
 'enotif_reset' => 'Отбелязване на всички страници като посетени',
 'enotif_impersonal_salutation' => 'Потребител на {{SITENAME}}',
+'enotif_body_intro_deleted' => 'Страницата „$1“ в {{SITENAME}} беше {{GENDER:$2|изтрита}} на $PAGEEDITDATE от $2. Вижте $3.',
+'enotif_body_intro_created' => 'Страницата „$1“ в {{SITENAME}} беше {{GENDER:$2|създадена}} на $PAGEEDITDATE от $2. За текущата версия, вижте $3',
 'enotif_lastvisited' => 'Преглед на всички промени след последното ви посещение: $1.',
 'enotif_lastdiff' => 'Преглед на тази промяна: $1.',
 'enotif_anon_editor' => 'анонимен потребител $1',
 'enotif_body' => 'Уважаеми(а) $WATCHINGUSERNAME,
 
-Страницата $PAGETITLE в {{SITENAME}} е била $CHANGEDORCREATED на $PAGEEDITDATE от $PAGEEDITOR. За текущата версия на страницата, вижте $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Резюме на редакцията: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2204,16 +2201,16 @@ $NEWPAGE
 Няма да получавате други известия за последващи промени, докато не посетите страницата.
 Можете да актуализиране настройките си за този вид известия за всички страници от вашия списък за наблюдение.
 
-             Системата за известяване на {{SITENAME}}
+Системата за известяване на {{SITENAME}}
 
 --
\97а Ð´Ð° Ð¿Ñ\80омениÑ\82е Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ñ\81и Ð·Ð° Ð¸Ð·Ð²ÐµÑ\81Ñ\82Ñ\8fваниÑ\8f Ñ\87Ñ\80ез ÐµÐ»ÐµÐºÑ\82Ñ\80онна Ð¿Ð¾Ñ\89а, Ð¿Ð¾Ñ\81еÑ\82еÑ\82е
\9fÑ\80омÑ\8fна Ð½Ð° Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð·Ð° Ð¸Ð·Ð²ÐµÑ\81Ñ\82Ñ\8fваниÑ\8f Ñ\87Ñ\80ез ÐµÐ»ÐµÐºÑ\82Ñ\80онна Ð¿Ð¾Ñ\89а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88и Ð½Ð°
 {{canonicalurl:{{#special:Preferences}}}}
 
\97а Ð´Ð° Ð¿Ñ\80омениÑ\82е Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð½Ð° Ñ\81пиÑ\81Ñ\8aка Ñ\81и Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение, Ð¿Ð¾Ñ\81еÑ\82еÑ\82е
\9fÑ\80омÑ\8fна Ð½Ð° Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð½Ð° Ñ\81пиÑ\81Ñ\8aка Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение Ñ\81е Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88ва Ð½Ð°
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
\97а Ð´Ð° Ð¸Ð·Ñ\82Ñ\80иеÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð¾Ñ\82 Ñ\81пиÑ\81Ñ\8aка Ñ\81и Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение, Ð¿Ð¾Ñ\81еÑ\82еÑ\82е
\98зÑ\82Ñ\80иванеÑ\82о Ð½Ð° Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð¾Ñ\82 Ñ\81пиÑ\81Ñ\8aка Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение Ñ\81Ñ\82ава Ñ\87Ñ\80ез 
 $UNWATCHURL
 
 За обратна връзка и помощ:
@@ -2890,6 +2887,7 @@ $1',
 'pageinfo-header-basic' => 'Основна информация',
 'pageinfo-header-edits' => 'История на редакциите',
 'pageinfo-header-restrictions' => 'Защита на страницата',
+'pageinfo-default-sort' => 'Ключ за сортиране по подразбиране',
 'pageinfo-article-id' => 'Номер на страницата',
 'pageinfo-views' => 'Брой прегледи',
 'pageinfo-watchers' => 'Брой наблюдаващи страницата',
index ea21777..23ea245 100644 (file)
@@ -632,7 +632,7 @@ Muhun hadangi dahulu sapandang hanyar cubai pulang.',
 'loginlanguagelabel' => 'Bahasa: $1',
 'suspicious-userlogout' => 'Parmintaan Pian hagan kaluar log kada ditarima karana nangkaya dikirim matan panjalajah web rakai atawa tatangkap proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Kasalahan kada dipinandui dalam pungsi surat () PHP',
 'user-mail-no-addy' => 'Mancuba mangirim suril kada baalamat suril.',
 
@@ -1290,7 +1290,7 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'prefs-displaywatchlist' => 'Pilihan tampilan',
 'prefs-diffs' => 'Bida',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamat suril tacungul sah',
 'email-address-validity-invalid' => 'Buati sabuah alamat suril nang sah',
 
@@ -2051,7 +2051,7 @@ Ada di [[{{MediaWiki:Listgrouprights-helppage}}|tambahan panjalasan]] pasal hak
 'listgrouprights-addgroup-self-all' => 'Tambahi samunyaan gagalambang ka akun surang',
 'listgrouprights-removegroup-self-all' => 'Hapus samunyaan gagalambang matan akun surang',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Kadada alamat kirim',
 'mailnologintext' => 'Pian musti [[Special:UserLogin|babuat log]] wan baisi sabuah alamat suril sah di [[Special:Preferences|kakatujuan]] Pian hagan mangirim suril ka papamuruk lain.',
 'emailuser' => 'Suril pamakai',
@@ -3333,7 +3333,7 @@ Tautan-tautan abis tu pada baris sama dipartimbangkan sabagai pangacualian, nang
 'monthsall' => 'samunyaan',
 'limitall' => 'samunyaan',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Yakinakan alamat suril',
 'confirmemail_noemail' => 'Pian kada baisi sabuah alamat suril nang sah dalam [[Special:Preferences|kakatujuan pamuruk]] Pian.',
 'confirmemail_text' => '{{SITENAME}} mawajibakan Pian mayakinakan alamat suril Pian sabalum pitur-pitur suril dipurukakan.
index c425d6a..001d6bf 100644 (file)
@@ -12,6 +12,7 @@
  * @author Ehsanulhb
  * @author Jayantanth
  * @author Kaganer
+ * @author Leemon2010
  * @author Mayeenul Islam
  * @author Nasir8891
  * @author Prometheus.pyrphoros
@@ -279,7 +280,7 @@ $messages = array(
 'projectpage' => 'মেটা-পাতা দেখুন',
 'imagepage' => 'ফাইল পাতা দেখুন',
 'mediawikipage' => 'বার্তার পাতা দেখুন',
-'templatepage' => 'à¦\9fà§\87মà§\8dপলেট পাতা দেখুন',
+'templatepage' => 'à¦\9fà§\87মপà§\8dলেট পাতা দেখুন',
 'viewhelppage' => 'সহায়িকা পাতা দেখুন',
 'categorypage' => 'বিষয়শ্রেণীর পাতাটি দেখুন',
 'viewtalkpage' => 'আলোচনা দেখুন',
@@ -312,7 +313,7 @@ $1',
 'disclaimerpage' => 'Project:সাধারণ দাবিত্যাগ',
 'edithelp' => 'সম্পাদনা সহায়িকা',
 'edithelppage' => 'Help:কিভাবে একটি পাতা সম্পাদনা করবেন',
-'helppage' => 'Help:সà§\82à¦\9aি',
+'helppage' => 'Help:সà§\82à¦\9aà§\80',
 'mainpage' => 'প্রধান পাতা',
 'mainpage-description' => 'প্রধান পাতা',
 'policy-url' => 'Project:নীতিমালা',
@@ -372,7 +373,7 @@ $1',
 'nstab-project' => 'প্রকল্প পাতা',
 'nstab-image' => 'ফাইল',
 'nstab-mediawiki' => 'বার্তা',
-'nstab-template' => 'à¦\9fà§\87মà§\8dপলেট',
+'nstab-template' => 'à¦\9fà§\87মপà§\8dলেট',
 'nstab-help' => 'সহায়িকা',
 'nstab-category' => 'বিষয়শ্রেণী',
 
@@ -400,7 +401,7 @@ $1',
 "$1"
 "$2" ফাংশনের ভিতর থেকে।
 ডাটাবেজ যে ত্রুটি পাঠিয়েছে: "$3: $4"',
-'laggedslavemode' => 'সতরà§\8dà¦\95à§\80à¦\95রণ: à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à¦®à§\8dভবত à¦¸à¦¾à¦®à§\8dপà§\8dরতি à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদà¦\95à§\83ত à¦¨à¦¯à¦¼à¥¤',
+'laggedslavemode' => 'সতর্কীকরণ: পাতাটি সম্ভবত সম্প্রতি হালনাগাদকৃত নয়।',
 'readonly' => 'ডেটাবেজের ব্যবহার সীমাবদ্ধ',
 'enterlockreason' => 'তালাবদ্ধ করার কারণ কি তা বলুন, সাথে কখন তালা খুলবেন তার আনুমানিক সময় উল্লখ্য করুন',
 'readonlytext' => 'নতুন ভুক্তি এবং অন্যান্য সম্পাদনার জন্য ডাটাবেজ বর্তমানে বন্ধ করা আছে। সম্ভবত ডাটাবেজ রক্ষণাবেক্ষণের নিয়মিত কাজ চলছে। কিছুক্ষণ পরে এটি স্বাভাবিক অবস্থায় ফিরে আসবে।
@@ -504,9 +505,9 @@ $2',
 'gotaccount' => "আপনার কি ইতিমধ্যে একটি অ্যাকাউন্ট তৈরি করা আছে? '''$1''' করুন।",
 'gotaccountlink' => 'প্রবেশ',
 'userlogin-resetlink' => 'আপনার লগইনের বিস্তারিত তথ্যাদি ভুলে গেছেন?',
-'createaccountmail' => 'à¦\87-মà§\87à¦\87লà§\87র à¦®à¦¾à¦§à§\8dযমà§\87',
+'createaccountmail' => 'à¦\8fà¦\95à¦\9fি à¦°â\80\8cà§\8dযানà§\8dডম à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রà§\81ন à¦\8fবà¦\82 à¦¨à¦¿à¦\9aà§\87র à¦¨à¦¿à¦°à§\8dধারিত à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানায় à¦ªà¦¾à¦ à¦¿à¦¯à¦¼à§\87 à¦¦à¦¿à¦¨',
 'createaccountreason' => 'কারণ:',
-'badretype' => 'শব্দচাবি (password) দুটি মিলছেনা।',
+'badretype' => "আপনার প্রবেশ করানো শব্দচাবি'টি মিলছেনা।",
 'userexists' => 'এই ব্যবহারকারী নামটি ইতমধ্যে ব্যবহার করা হয়েছে।
 অনুগ্রহ করে অন্য নাম বেছে নিন।',
 'loginerror' => 'লগ-ইন করতে সমস্যা হয়েছে',
@@ -559,16 +560,17 @@ $2',
 'createaccount-text' => 'কেউ $2-এর জন্য {{SITENAME}}-এ একটি অ্যাকাউন্ট সৃষ্টি করেছেন ($4)। "$2"-এর জন্য শব্দচাবি হল "$3"। আপনার এখন অ্যাকাউন্টে প্রবেশ করে শব্দচাবি পরিবর্তন করা উচিত।
 
 যদি ভুল করে অ্যাকাউন্টটি সৃষ্টি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।',
-'usernamehasherror' => 'বà§\8dযবà¦\95ারà¦\95ারà§\80 à¦¨à¦¾à¦®à§\87 à¦¹à§\8dযাস বর্ণ থাকতে পারবে না',
+'usernamehasherror' => 'বà§\8dযবà¦\95ারà¦\95ারà§\80 à¦¨à¦¾à¦®à§\87 à¦¹à§\8dযাঠবর্ণ থাকতে পারবে না',
 'login-throttled' => 'আপনি সাম্প্রতিক পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।
 পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে কিছুক্ষণ অপেক্ষা করুন।',
 'login-abort-generic' => 'আপনার লগইন সফল ছিলো না - বাতিল করা হয়েছে',
 'loginlanguagelabel' => 'ভাষা: $1',
 'suspicious-userlogout' => 'আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'পিএইচপি এর মেইল () কার্যে অজ্ঞাত ভুল',
 'user-mail-no-addy' => 'কোনো ইমেইল ঠিকানা ছাড়াই ইমেইল করার চেষ্টা করা হয়েছে।',
+'user-mail-no-body' => 'অত্যান্ত সংক্ষিপ্ত অথবা কোনো তথ্য ছাড়াই ইমেইল পাঠানোর চেষ্টা করা হয়েছিল।',
 
 # Change password dialog
 'resetpass' => 'শব্দচাবি পরিবর্তন',
@@ -577,7 +579,7 @@ $2',
 'resetpass_header' => 'শব্দচাবি পরিবর্তন করো',
 'oldpassword' => 'পুরনো শব্দচাবি',
 'newpassword' => 'নতুন শব্দচাবি:',
-'retypenew' => 'নতà§\81ন à¦¶à¦¬à§\8dদà¦\9aাবি à¦\86বার à¦\9fাà¦\87প à¦\95রুন:',
+'retypenew' => 'নতà§\81ন à¦¶à¦¬à§\8dদà¦\9aাবি à¦\86বার à¦²à¦¿à¦\96ুন:',
 'resetpass_submit' => 'শব্দচাবি দাও এবং লগ-ইন করো',
 'resetpass_success' => 'আপনার শব্দচাবি সাফল্যের সাথে পরিবর্তীত হয়েছে! এখন আপনি তে লগ-ইন হচ্ছেন...',
 'resetpass_forbidden' => 'শব্দচাবি পরিবর্তন করা সম্ভব নয়',
@@ -590,7 +592,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'শব্দচাবি রিসেট',
-'passwordreset-text' => 'à¦\86পনার à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦¬à¦¿à¦¸à§\8dতারিত à¦¤à¦¥à§\8dয à¦\87-মà§\87à¦\87লà§\87র à¦®à¦¾à¦§à§\8dযমà§\87 à¦ªà§\87তà§\87 নিচের ফর্মটি পূরণ করুন।',
+'passwordreset-text' => 'à¦\86পনার à¦¶à¦¬à§\8dদà¦\9aাবি à¦¬à¦¦à¦²à§\87র à¦\9cনà§\8dয নিচের ফর্মটি পূরণ করুন।',
 'passwordreset-legend' => 'শব্দচাবি রিসেট',
 'passwordreset-disabled' => 'এই উইকিতে শব্দচাবি রিসেটের সুবিধা নিষ্ক্রিয় রয়েছে।',
 'passwordreset-pretext' => '{{PLURAL:$1||নিচে উল্লেখিত ডেটাগুলোর কোনো একটি প্রবেশ করান}}',
@@ -601,7 +603,7 @@ $2',
 'passwordreset-email' => 'ইমেইল ঠিকানা:',
 'passwordreset-emailtitle' => '{{SITENAME}} সাইটে ব্যবহারকারীর বিস্তারিত তথ্যাদি',
 'passwordreset-emailtext-ip' => 'কেউ একজন (সম্ভবত আপনি, $1 আইপি ঠিকানা থেকে) {{SITENAME}} ($4) সাইটের জন্য আপনার
-à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦¬à¦¿à¦¸à§\8dতারিত à¦¤à¦¥à§\8dয à¦\9cানতà§\87 à¦\9aà§\87য়েছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}
+শবà§\8dদà¦\9aাবি à¦¬à¦¦à¦²à§\87র à¦\9cনà§\8dয à¦\85নà§\81রà§\8bধ à¦\95রেছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}
 এই ই-মেইল ঠিকানার সাথে সংযুক্ত:
 
 $2
@@ -610,8 +612,7 @@ $2
 আপনার অবশ্যই লগ-ইন করে একটি নতুন পাসওয়ার্ড পছন্দ করা উচিত। যদি অন্য কেউ এই অনুরোধ করে থাকে,
 অথবা আপনি যদি পুরোনো পাসওয়ার্ড মনে করতে পারেন, এবং আপনার সেটি পরিবর্তন করার কোনো ইচ্ছা না থাকে, তবে
 আপনি এই বার্তাটি উপেক্ষা করতে পারে, এবং আপনার পুরোনো পাসওয়ার্ড ব্যবহার করা চালিয়ে যেতে পারেন।',
-'passwordreset-emailtext-user' => 'কেউ একজন (সম্ভবত আপনি, $1 আইপি ঠিকানা থেকে) {{SITENAME}} ($4) সাইটের জন্য আপনার
-অ্যাকাউন্টের একটি পাসওয়ার্ড রিমাইন্ডার চেয়ে পাঠিয়েছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}
+'passwordreset-emailtext-user' => 'ব্যবহারকারী $1 {{SITENAME}} ($4) সাইটের জন্য আপনার শব্দচাবি বদলের জন্য অনুরোধ করেছে। নিচের ব্যবহারকারী {{PLURAL:$3|অ্যাকাউন্টটি|অ্যাকাউন্টগুলো}}
 এই ই-মেইল ঠিকানার সাথে সংযুক্ত:
 
 $2
@@ -622,9 +623,9 @@ $2
 আপনি এই বার্তাটি উপেক্ষা করতে পারে, এবং আপনার পুরোনো পাসওয়ার্ড ব্যবহার করা চালিয়ে যেতে পারেন।',
 'passwordreset-emailelement' => 'ব্যবহারকারী নাম: $1
 অস্থায়ী শব্দচাবি: $2',
-'passwordreset-emailsent' => 'à¦\8fà¦\95à¦\9fি à¦°à¦¿à¦®à¦¾à¦\87নà§\8dডার ই-মেইল পাঠানো হয়েছে।',
+'passwordreset-emailsent' => 'শবà§\8dদà¦\9aাবি à¦¬à¦¦à¦²à§\87র à¦\8fà¦\95à¦\9fি ই-মেইল পাঠানো হয়েছে।',
 'passwordreset-emailsent-capture' => 'স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল করা হয়েছে, যা নিচে দেখানো হচ্ছে।',
-'passwordreset-emailerror-capture' => 'স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল তৈরী করা হয়েছিল, যা নিচে দেখানো হচ্ছে, তবে $1 ব্যবহারকারীকে এটি পাঠানো যায়নি',
+'passwordreset-emailerror-capture' => 'স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল তৈরী করা হয়েছিল, যা নিচে দেখানো হচ্ছে, তবে $1 ব্যবহারকারীকে এটি পাঠানো যায়নি!',
 
 # Special:ChangeEmail
 'changeemail' => 'ই-মেইল ঠিকানা পরিবর্তন',
@@ -659,7 +660,7 @@ $2
 # Edit pages
 'summary' => 'সারাংশ:',
 'subject' => 'বিষয়/শিরোনাম:',
-'minoredit' => 'à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয',
+'minoredit' => 'à¦\8fà¦\9fি à¦\8fà¦\95à¦\9fি à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনা',
 'watchthis' => 'এই পাতাটি নজরে রাখুন',
 'savearticle' => 'সংরক্ষণ',
 'preview' => 'প্রাকদর্শন',
@@ -787,8 +788,8 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'copyrightwarning2' => "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''",
 'longpageerror' => "'''ত্রুটি:  আপনার জমা দেয়া টেক্সটের পরিমাণ {{PLURAL:$1|এক কিলোবাইট|$1 কিলোবাইট}}, যা সর্বোচ্চ সীমা {{PLURAL:$2|এক কিলোবাইটের|$2 কিলোবাইটের}} চেয়ে বেশি।'''
 এটি সংরক্ষণ করা সম্ভব নয়।",
-'readonlywarning' => "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।
-আপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।'''
+'readonlywarning' => "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।'''
+আপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।
 
 যে প্রশাসক এই ডাটাবেজটি অবরুদ্ধ করেছেন তিনি যা ব্যাখ্যা দিয়েছেন: $1",
 'protectedpagewarning' => "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''
@@ -804,6 +805,7 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'template-protected' => '(সুরক্ষিত)',
 'template-semiprotected' => '(অর্ধ-সুরক্ষিত)',
 'hiddencategories' => 'এ পাতাটি যে {{PLURAL:$1|1 লুকায়িত বিষয়শ্রেণীর|$1 লুকায়িত বিষয়শ্রেণীসমূহের}} সদস্য:',
+'edittools-upload' => '-',
 'nocreatetext' => '{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।
 আপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।',
 'nocreate-loggedin' => 'নতুন পাতা তৈরিতে আপনাকে অনুমোতি দেওয়া হয়নি।',
@@ -1094,7 +1096,7 @@ $1",
 'search-interwiki-default' => '$1 ফলাফলসমূহ:',
 'search-interwiki-more' => '(আরও)',
 'search-relatedarticle' => 'সম্পর্কিত',
-'mwsuggest-disable' => 'AJAX পরামর্শ নিষ্ক্রিয় করা হোক',
+'mwsuggest-disable' => 'অনুসন্ধান পরামর্শ বন্ধ করুন',
 'searcheverything-enable' => 'সকল নামস্থানে অনুসন্ধান করো',
 'searchrelated' => 'সম্পর্কিত',
 'searchall' => 'সমস্ত',
@@ -1238,7 +1240,7 @@ $1",
 'prefs-displaywatchlist' => 'প্রদর্শনী অপশন',
 'prefs-diffs' => 'পার্থক্য',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ইমেইল ঠিকানাটি সঠিক',
 'email-address-validity-invalid' => 'সঠিক ইমেই ঠিকানা প্রদান করুন',
 
@@ -1817,6 +1819,8 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।<br />
 যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।",
 
+'pageswithprop-submit' => 'চলো',
+
 'doubleredirects' => 'দুইবার করা পুনর্নির্দেশনাগুলি',
 'doubleredirectstext' => 'এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত "আসল" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।
 <del>কেটে দেওয়া</del> ভুক্তিগুলো ঠিক করা হয়েছে।',
@@ -1910,6 +1914,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 # Book sources
 'booksources' => 'বইয়ের উৎস',
 'booksources-search-legend' => 'বইয়ের উৎসের জন্য অনুসন্ধান করা হোক',
+'booksources-isbn' => 'আইএসবিএন:',
 'booksources-go' => 'চলো',
 'booksources-text' => 'নতুন ও পুরাতন ব্যবহৃত বই বিক্রি করে, এমন কতগুলি সাইটের সংযোগের তালিকা নিচে দেওয়া হল, যে সাইটগুলিতে আপনার অনুসন্ধানকৃত বইগুলির উপর আরও তথ্য থাকতে পারে:',
 'booksources-invalid-isbn' => 'উল্লেখিত ISBN সঠিক নয়; অনুগ্রহ করে মূল উৎস থেকে আবার পরীক্ষা করুন।',
@@ -1982,7 +1987,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 # Special:ActiveUsers
 'activeusers' => 'সক্রিয় ব্যবহারকারী তালিকা',
 'activeusers-intro' => 'এটি ব্যবহারকারী তালিকা যাদের $1 {{PLURAL:$1|দিনে|দিনে}} যেকোন কর্মকান্ড রয়েছে।',
-'activeusers-count' => 'à¦\97ত {{PLURAL:$3|দিনà§\87|$3 à¦¦à¦¿à¦¨à§\87}} à¦¸à¦°à§\8dবমà§\8bà¦\9f {{PLURAL:$1|সমà§\8dপাদনার|সমà§\8dপাদনার}} সংখ্যা $1',
+'activeusers-count' => 'à¦\97ত {{PLURAL:$3|দিনà§\87|$3 à¦¦à¦¿à¦¨à§\87}} à¦¸à¦°à§\8dবমà§\8bà¦\9f {{PLURAL:$1|à¦\95রà§\8dমà¦\95াণà§\8dডà§\87র|à¦\95রà§\8dমà¦\95াণà§\8dডà§\87র}} সংখ্যা $1',
 'activeusers-from' => 'ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:',
 'activeusers-hidebots' => 'বট লুকাও',
 'activeusers-hidesysops' => 'প্রশাসক লুকাও',
@@ -2007,7 +2012,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'listgrouprights-addgroup-self-all' => 'নিজের অ্যাকাউন্টে সকল দল সংযোজন',
 'listgrouprights-removegroup-self-all' => 'নিজের অ্যাকাউন্ট থেকে সকল দল অপসারণ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'প্রাপকের ঠিকানা নেই',
 'mailnologintext' => "অন্য ব্যবহারকারীদেরকে ই-মেইল পাঠাতে হলে আপনাকে অবশ্যই আগে [[Special:UserLogin|লগ-ইন]] করতে হবে এবং ''[[Special:Preferences|আপনার পছন্দ তালিকায়]] আপনার ই-মেইল ঠিকানাটি ঠিকমত দিতে হবে।",
 'emailuser' => 'ইমেইল করো',
@@ -2210,9 +2215,9 @@ $UNWATCHURL
 এখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
 'protect-cascadeon' => 'এই পাতাটি বর্তমানে সুরক্ষিত আছে, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতায়|টি পাতায়}} অন্তর্ভুক্ত, যাতে (যেগুলিতে) প্রপাতাকারে সুরক্ষা চালু আছে। আপনি এই পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারেন, তবে এটি প্রপাতাকার সুরক্ষাটিতে কোন পরিবর্তন সাধন করবে না।',
 'protect-default' => 'সমস্ত ব্যবহারকারীর জন্য',
-'protect-fallback' => '"$1" à¦\85নà§\81মতি à¦¦à¦°à¦\95ার',
-'protect-level-autoconfirmed' => 'নতà§\81ন à¦\8fবà¦\82 à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦¬à¦¾à¦§à¦¾ à¦¦à¦¾à¦\93',
-'protect-level-sysop' => 'কেবল প্রশাসকদের জন্য',
+'protect-fallback' => '"$1" à¦\85ধিà¦\95ার à¦°à¦¯à¦¼à§\87à¦\9bà§\87 à¦\8fমন à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦\9cনà§\8dয à¦\85নà§\81মতি',
+'protect-level-autoconfirmed' => 'à¦\95à§\87বলমাতà§\8dর à¦¸à¦¯à¦¼à¦\82à¦\95à§\8dরিয় à¦ªà¦°à§\80à¦\95à§\8dষিত à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦\9cনà§\8dয',
+'protect-level-sysop' => 'কেবল প্রশাসকদের জন্য অনুমতি',
 'protect-summary-cascade' => 'প্রপাতাকার',
 'protect-expiring' => '$1 (UTC) সময়ে মেয়াদোত্তীর্ণ',
 'protect-expiring-local' => 'মেয়াদ উত্তীর্ণের সময় $1',
@@ -2827,6 +2832,9 @@ $1',
 'pageinfo-category-subcats' => 'উপবিষয়শ্রেণীর সংখ্যা',
 'pageinfo-category-files' => 'ফাইলের সংখ্যা',
 
+# Skin names
+'skinname-standard' => 'ক্লাসিক',
+
 # Patrolling
 'markaspatrolleddiff' => 'পরীক্ষিত বলে চিহ্নিত করুন',
 'markaspatrolledtext' => 'এই নিবন্ধটিকে পরীক্ষিত বলে চিহ্নিত করুন',
@@ -2895,6 +2903,7 @@ $1',
 'sp-newimages-showfrom' => '$2, $1 এর পরের নতুন ছবিগুলো দেখাও',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'minutes-abbrev' => '$1 মিনিট',
 'seconds' => '{{PLURAL:$1|$1 সেকেন্ড|$1 সেকেন্ড}}',
 'minutes' => '{{PLURAL:$1|$1 মিনিট|$1 মিনিট}}',
 'hours' => '{{PLURAL:$1|$1 ঘণ্টা|$1 ঘণ্টা}}',
@@ -3324,7 +3333,7 @@ $1',
 'monthsall' => 'সমস্ত',
 'limitall' => 'সমস্ত',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ই-মেইলের ঠিকানা নিশ্চিত করুন',
 'confirmemail_noemail' => 'আপনার [[Special:Preferences|ব্যবহারকারী পছন্দগুলিতে]] কোন বৈধ ই-মেইল ঠিকানা দেয়া হয়নি।',
 'confirmemail_text' => '{{SITENAME}}-এ ই-মেইল ফিচারগুলি ব্যবহার করার আগে আপনাকে আপনার ই-মেইল ঠিকানা নিশ্চিত করতে হবে। নিচের বোতামটি চেপে আপনার ই-মেইল ঠিকানায় একটি নিশ্চিতকরণ চিঠি পাঠান। এই চিঠিতে একটি কোড ধারণকারী সংযোগ থাকবে; আপনার ই-মেইল ঠিকানা যা বৈধ, তা নিশ্চিত করতে আপনার ব্রাউজারে এই সংযোগটি লোড করুন।',
@@ -3359,7 +3368,8 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 
 # Scary transclusion
 'scarytranscludedisabled' => '[আন্তঃউইকি আন্তঃভুক্তি নিষ্ক্রিয়]',
-'scarytranscludefailed' => '[$1 এর জন্য টেম্পলেট আনা অসফল হয়েছে]',
+'scarytranscludefailed' => '[$1 এর জন্য টেমপ্লেট আনা অসফল হয়েছে]',
+'scarytranscludefailed-httpstatus' => '[$1: HTTP $2 এর জন্য টেমপ্লেট আনা বিফল হয়েছে]',
 'scarytranscludetoolong' => '[URL অতিরিক্ত দীর্ঘ]',
 
 # Delete conflict
@@ -3514,7 +3524,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'specialpages-group-highuse' => 'অধিক ব্যবহৃত পাতাগুলি',
 'specialpages-group-pages' => 'পাতার তালিকাসমূহ',
 'specialpages-group-pagetools' => 'পাতা সংক্রান্ত সরঞ্জাম',
-'specialpages-group-wiki' => 'à¦\89à¦\87à¦\95ি à¦\89পাতà§\8dত à¦\8fবà¦\82 à¦¸à¦°à¦\9eà§\8dà¦\9cামসমà§\82হ',
+'specialpages-group-wiki' => 'উপাত্ত এবং সরঞ্জামসমূহ',
 'specialpages-group-redirects' => 'বিশেষ পাতাগুলি পুনর্নির্দেশ করা হচ্ছে',
 'specialpages-group-spam' => 'স্প্যামরোধী হাতিয়ার',
 
@@ -3583,7 +3593,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 
 # New logging system
 'logentry-delete-delete' => '$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে',
-'logentry-delete-restore' => '$1 কর্তৃক $3 পাতাটি ফিরিয়ে আনা হয়েছে',
+'logentry-delete-restore' => '$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে',
 'logentry-delete-event' => '$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
 'logentry-delete-revision' => '$1 {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
 'logentry-delete-event-legacy' => '$1 $3টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
@@ -3604,14 +3614,14 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'logentry-move-move-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
 'logentry-move-move_redir' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার ওপর দিয়ে স্থানান্তর করেছেন',
 'logentry-move-move_redir-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনার ওপর দিয়ে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
-'logentry-patrol-patrol' => '$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে চিহ্নিত করেছেন',
-'logentry-patrol-patrol-auto' => '$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে চিহ্নিত করেছেন',
-'logentry-newusers-newusers' => '$1 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¤à§\88রি à¦\95রা হয়েছে',
+'logentry-patrol-patrol' => '$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন',
+'logentry-patrol-patrol-auto' => '$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {GENDER:$2|চিহ্নিত}} করেছেন',
+'logentry-newusers-newusers' => '$1 à¦¬à§\8dযবহারà¦\95ারà§\80 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি {GENDER:$2|তà§\88রি à¦\95রা}} হয়েছে',
 'logentry-newusers-create' => '$1 অ্যাকাউন্টটি তৈরী করা হয়েছে',
 'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি তৈরী করেছেন',
 'logentry-newusers-autocreate' => '$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে',
 'logentry-rights-rights' => '$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ পরিবর্তন করেছেন',
-'logentry-rights-autopromote' => '$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ উন্নীত হয়েছে',
+'logentry-rights-autopromote' => '$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ {{GENDER:$2|উন্নীত}} হয়েছে',
 'rightsnone' => '(কিছু নাই)',
 
 # Feedback
index d345834..6b088db 100644 (file)
@@ -1240,7 +1240,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-rights' => 'অধিকারহানি',
 'listgrouprights-members' => '(সদস্যর পারেঙহানি)',
 
-# E-mail user
+# Email user
 'emailuser' => 'আতাকুরাগরে ইমেইল কর',
 'emailpage' => 'আতাকরেকুরাগরে ই-মেইল কর',
 'defemailsubject' => '{{SITENAME}} ই-মেইল',
@@ -1621,7 +1621,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'monthsall' => 'হাব্বি',
 'limitall' => 'হাব্বি',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ই-মেইল ঠিকানাহান লেপকর',
 'confirmemail_send' => 'লেপকরেকুরা কোডগ দিয়াপেঠাদে',
 'confirmemail_sent' => 'লেপকরেকুরা ই-মেইলহান দিয়াপেঠা দিলাং।',
index 832d514..60264ba 100644 (file)
@@ -1582,7 +1582,7 @@ Evit enklozañ ur skeudenn en ur pennad, lakait er pennad-se ul liamm skrivet ev
 'uploadlogpagetext' => "Setu a-is marilh ar restroù diwezhañ bet karget war ar servijer.
 S.o [[Special:NewFiles|rann ar skeudennoù nevez]] evit kaout ur sell gwiroc'h",
 'filename' => 'Anv ar restr',
-'filedesc' => 'Deskrivadur',
+'filedesc' => 'Diverradur',
 'fileuploadsummary' => 'Diverrañ :',
 'filereuploadsummary' => 'Kemmoù er restr :',
 'filestatus' => 'Statud a-fet gwirioù aozer :',
index 97d3ce6..1b91967 100644 (file)
@@ -1544,6 +1544,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'right-writeapi' => "Korištenje opcije ''write API''",
 'right-delete' => 'Brisanje stranica',
 'right-bigdelete' => 'Brisanje stranica sa velikom historijom',
+'right-deletelogentry' => 'Brisanje i vraćanje određenih zapisa u evidenciji',
 'right-deleterevision' => 'Brisanje i vraćanje određenih revizija stranice',
 'right-deletedhistory' => 'Pregled stavki obrisane historije, bez povezanog teksta',
 'right-deletedtext' => 'Pregled obrisanog teksta i izmjena između obrisanih revizija',
@@ -1958,6 +1959,10 @@ Ovdje je dostupan [[Special:WhatLinksHere/$2|potpuni spisak]].',
 Molimo pogledajte [$2 stranicu opisa datoteke] za ostale informacije.',
 'sharedupload-desc-here' => 'Ova datoteka je sa $1 i može se koristiti i na drugim projektima.
 Opis sa njene [$2 stranice opisa datoteke] je prikazan ispod.',
+'sharedupload-desc-edit' => 'Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.
+Njen opis možete urediti na [$2 stranici opisa datoteke].',
+'sharedupload-desc-create' => 'Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.
+Možda želite urediti njen opis na [$2 stranici opisa datoteke].',
 'filepage-nofile' => 'Ne postoji datoteka s ovim nazivom.',
 'filepage-nofile-link' => 'Ne postoji datoteka s ovim imenom, ali je možete [$1 postaviti].',
 'uploadnewversion-linktext' => 'Postavite noviju verziju ove datoteke',
@@ -2049,6 +2054,8 @@ Prije brisanja provjerite da li druge stranice vode na te šablone.',
 Umjesto toga, one se trebaju povezati sa konkretnim konkretnim stranicom.<br />
 Stranica se smatra čvorom, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop-submit' => 'Idi',
+
 'doubleredirects' => 'Dvostruka preusmjerenja',
 'doubleredirectstext' => 'Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.
 Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje "pravi" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.
@@ -2072,6 +2079,7 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajtova}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije}}',
+'ninterwikis' => '$1 {{PLURAL:$1|međujezična veza|međujezične veze}}',
 'nlinks' => '$1 {{PLURAL:$1|veza|veze}}',
 'nmembers' => '$1 {{PLURAL:$1|član|članova}}',
 'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}',
@@ -2175,6 +2183,8 @@ Možda sadrži jedan ili više znakova koji se ne mogu koristiti u naslovima.',
 'allpages-hide-redirects' => 'Sakrij preusmjerenja',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate keširanu verziju ove stranice, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate keširanu verziju ove stranice, koja možda nije potpuno aktualna.',
 'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
 
 # Special:Categories
@@ -2896,6 +2906,7 @@ Sve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisu u
 'import-interwiki-templates' => 'Uključi sve šablone',
 'import-interwiki-submit' => 'Uvoz',
 'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna osnovna stranica (opcionalno):',
 'import-upload-filename' => 'Naziv datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].
@@ -2932,6 +2943,8 @@ Nedostaje privremeni folder.',
 'import-error-special' => 'Stranica "$1" nije uvezena jer pripada posebnom imenskom prostoru koje ne prihvata stranice.',
 'import-error-invalid' => 'Stranica "$1" nije uvezena jer je njen naziv neispravan.',
 'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Navedena osnovna stranica ima neispravan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor "$1" osnovne stranice ne dozvoljava podstranice.',
 
 # Import log
 'importlogpage' => 'Zapisnik uvoza',
@@ -3077,6 +3090,7 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
 'pageinfo-header-properties' => 'Svojstva stranice',
 'pageinfo-display-title' => 'Naslov stranice',
+'pageinfo-default-sort' => 'Podrazumijevani ključ sortiranja',
 'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
 'pageinfo-language' => 'Jezik sadržaja stranice',
@@ -3084,6 +3098,7 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'pageinfo-watchers' => 'Broj pratitelja stranice',
 'pageinfo-redirects-name' => 'Preusmjeravanja na ovu stranicu',
 'pageinfo-subpages-name' => 'Podstranice ove stranice',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmjerenje|preusmjerenja}}; $3 {{PLURAL:$3|nepreusmjerenje|nepreusmjerenja}})',
 'pageinfo-firstuser' => 'Korisnik koji je napravio stranicu',
 'pageinfo-firsttime' => 'Datum stvaranja stranice',
 'pageinfo-lastuser' => 'Posljednji urednik stranice',
@@ -3155,6 +3170,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 piksela, veličina datoteke: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 'file-nohires' => 'Veća rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG fajl, dozvoljeno $1 × $2 piksela, veličina fajla: $3',
+'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina datoteke: $3',
 'show-big-image' => 'Vidi sliku u punoj veličini (rezoluciji)',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Ostale rezolucije}}: $1.',
@@ -3164,6 +3180,8 @@ $1',
 'file-info-png-looped' => 'stalno iznova',
 'file-info-png-repeat' => 'pregledano $1 {{PLURAL:$1|put|puta}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}',
+'file-no-thumb-animation' => "'''Napomena: Zbog tehničkih ograničenja minijature ove datoteke neće biti animirane.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: Zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće biti animirane.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih slika',
@@ -3861,6 +3879,7 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 'version-software' => 'Instalirani softver',
 'version-software-product' => 'Proizvod',
 'version-software-version' => 'Verzija',
+'version-entrypoints-header-entrypoint' => 'Ulazna tačka',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
index 159486b..020c424 100644 (file)
@@ -20,6 +20,7 @@
  * @author Jordi Roqué
  * @author Juanpabl
  * @author Kaganer
+ * @author Marcmpujol
  * @author Martorell
  * @author McDutchie
  * @author Pasqual (ca)
@@ -330,6 +331,7 @@ $messages = array(
 'newwindow' => '(obre en una nova finestra)',
 'cancel' => 'Anuŀla',
 'moredotdotdot' => 'Més...',
+'morenotlisted' => 'Més no en la llista...',
 'mypage' => 'Pàgina',
 'mytalk' => 'Discussió',
 'anontalk' => "Discussió d'aquesta IP",
@@ -695,6 +697,7 @@ Si us plau, esperi abans de tornar-ho a intentar.",
 # Email sending
 'php-mail-error-unknown' => 'Error desconegut en la funció mail() de PHP',
 'user-mail-no-addy' => "S'ha intentat enviar un missatge de correu electrònic sense adreça.",
+'user-mail-no-body' => 'Vas intentar enviar un correu electrònic amb un cos buit o excessivament curt.',
 
 # Change password dialog
 'resetpass' => 'Canvia la contrasenya',
@@ -2313,6 +2316,8 @@ Vegeu la [[Special:ProtectedPages|llista de pàgines protegides]] per a la llist
 'prot_1movedto2' => '[[$1]] mogut a [[$2]]',
 'protect-badnamespace-title' => 'Espai de nom no-protectable',
 'protect-badnamespace-text' => 'Les pàgines en aquest espai de nom no pot ser protegit.',
+'protect-norestrictiontypes-text' => 'Aquesta pàgina no es pot protegir ja que no hi ha cap tipus de restricció disponible.',
+'protect-norestrictiontypes-title' => 'Pàgina no protegible',
 'protect-legend' => 'Confirmeu la protecció',
 'protectcomment' => 'Motiu:',
 'protectexpiry' => "Data d'expiració",
index 877a495..c2980ab 100644 (file)
@@ -469,7 +469,7 @@ $1',
 
 # General errors
 'error' => 'هه‌ڵه‌',
-'databaseerror' => 'Ú¾Û\95ÚµÛ\95Û\8c Ø¯Ø§ØªØ§Ø¨Û\95Û\8cس',
+'databaseerror' => 'Ú¾Û\95ÚµÛ\95Û\8c Ø¨Ù\86Ú©Û\95دراÙ\88Ù\87',
 'dberrortext' => 'ھەڵەیەکی ڕستەنووسی لە داواکاریی بنکەیدراو ڕووی داوە.
 لەوانەیە ئەوە نیشاندەری کەلێنێک لە نەرمامێرەکەدا بێت.
 دوایین تێکۆشان بۆ داواکاری بنکەیدراو:  
@@ -975,7 +975,7 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 بۆ لاپەڕەی وەک ئەوە هەوڵی [[Special:Search|گەڕان لەسەر ویکی]] بدە.',
 
 # Revision deletion
-'rev-deleted-comment' => '(پوختەی دەستکاری سڕایەوە)',
+'rev-deleted-comment' => '(کورتەی دەستکاری سڕایەوە)',
 'rev-deleted-user' => '(ناوی بەکارهێنەر سڕایەوە)',
 'rev-deleted-event' => '(لۆگی کردەوە سڕایەوە)',
 'rev-deleted-text-permission' => "ئەم پێداچوونەوەیە لەم پەڕەیە '''سڕدراوەتەوە'''.
@@ -1220,7 +1220,7 @@ $1",
 'prefs-rendering' => 'ڕواڵەت',
 'saveprefs' => 'پاشەکەوت',
 'resetprefs' => 'گۆڕانکارییە پاشەکەوت نەکراوەکان پاک بکەرەوە',
-'restoreprefs' => 'ھەموو تەنزیمەکان ببەرەوە بۆ حاڵەتی بنچینەیی',
+'restoreprefs' => 'ھەموو ڕێکخستنەکان ببەرەوە بۆ باری بنچینەیی',
 'prefs-editing' => 'دەستکاریکردن',
 'prefs-edit-boxsize' => 'قەبارەی پەنجەرەی دەستکاریکردن.',
 'rows' => 'ڕیزەکان:',
@@ -1278,8 +1278,8 @@ $1",
 'yournick' => 'واژووی نوێ:',
 'prefs-help-signature' => 'بۆچوونەکان لە لاپەڕەکانی وتووێژدا دەبێ بە "<nowiki>~~~~</nowiki>" دیاری بکرێن، کە دواتر خۆکار دەگۆڕێ بە واژۆکەت و مۆری کاتی.',
 'badsig' => 'ئیمزاكه‌ هه‌ڵه‌یه‌، ته‌ماشای كۆدی HTML بكه‌‌',
-'badsiglength' => 'واژۆکەت زۆر درێژە.
-واژۆ نابێ لە $1 {{PLURAL:$1|نووسە|نووسە}} درێژتر بێت.',
+'badsiglength' => 'واژووەکەت زۆر درێژە.
+واژوو نابێ لە $1 {{PLURAL:$1|نووسە}} درێژتر بێت.',
 'yourgender' => 'زایەند:',
 'gender-unknown' => 'ئاشکرا نەکراو',
 'gender-male' => 'پیاو',
@@ -1294,7 +1294,7 @@ $1",
 'prefs-help-email-required' => 'ناونیشانی ئیمەیل پێویستە.',
 'prefs-info' => 'زانیاریی سەرەتایی',
 'prefs-i18n' => 'نێونەتەویی کردن',
-'prefs-signature' => 'واژۆ',
+'prefs-signature' => 'واژوو',
 'prefs-dateformat' => 'ڕازاندنەوەی ڕێکەوت',
 'prefs-timeoffset' => 'قەرەبووکەری کات',
 'prefs-advancedediting' => 'ھەڵبژاردەکانی پێشکەوتوو',
@@ -3303,7 +3303,7 @@ $5
 'hijri-calendar-m2' => 'سەفەر',
 'hijri-calendar-m3' => 'ڕەبیعەلئەووەڵ',
 'hijri-calendar-m4' => 'ڕەبیعەلئاخیر',
-'hijri-calendar-m5' => 'جومادەلئەووەل',
+'hijri-calendar-m5' => 'جومادەلئوولا',
 'hijri-calendar-m6' => 'جومادەسسانی',
 'hijri-calendar-m7' => 'ڕەجەب',
 'hijri-calendar-m8' => 'شەعبان',
index f824e6f..fce5ba8 100644 (file)
@@ -108,11 +108,11 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Багълантыларнынъ тюбюни сызув:',
 'tog-justify' => 'Метинни эки янгъа тегизле',
-'tog-hideminor' => '"Сонъки денъимелер" саифесинде кичик денъишмелерни гизле',
-'tog-hidepatrolled' => 'Сонъки денъишмелер косьтергенде тешкерильген денъишмелерни гизле',
+'tog-hideminor' => '"Сонъки денъиштирмелер" саифесинде кичик денъиштирмелерни гизле',
+'tog-hidepatrolled' => 'Сонъки денъиштирмелер косьтергенде тешкерильген денъиштирмелерни гизле',
 'tog-newpageshidepatrolled' => 'Янъы саифелер косьтергенде тешкерильген саифелерни гизле',
-'tog-extendwatchlist' => 'Козетюв джедвелини, тек сонъки дегиль, бутюн денъишмелерни корьмек ичюн кенишлет',
-'tog-usenewrc' => 'ТаÑ\84Ñ\81илÑ\8fÑ\82лÑ\8b Ñ\81онÑ\8aки Ð´ÐµÐ½Ñ\8aиÑ\88мелеÑ\80 Ð´Ð¶ÐµÐ´Ð²ÐµÐ»Ð¸Ð½Ð¸ ÐºÑ\8aÑ\83ллан (JavaScript керек)',
+'tog-extendwatchlist' => 'Козетюв джедвелини, тек сонъки дегиль, бутюн денъиштирмелерни корьмек ичюн кенишлет',
+'tog-usenewrc' => 'СонÑ\8aки Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80мелеÑ\80 Ñ\81аиÑ\84еÑ\81индеки Ð²Ðµ ÐºÐ¾Ð·ÐµÑ\82Ñ\8eв Ð´Ð¶ÐµÐ´Ð²ÐµÐ»Ð¸Ð½Ð´ÐµÐºÐ¸ Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80мелеÑ\80ни Ð³Ñ\80Ñ\83ппаландÑ\8bÑ\80Ñ\83в (JavaScript керек)',
 'tog-numberheadings' => 'Серлеваларны автоматик номераландыр',
 'tog-showtoolbar' => 'Саифени денъиштирген вакъытта ярдымджы дёгмелерни косьтер. (JavaScript)',
 'tog-editondblclick' => 'Саифени чифт басып денъиштирмеге башла (JavaScript)',
@@ -120,17 +120,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Болюк серлевасына онъ баскъанда денъиштирюв пенджересини ач. (JavaScript)',
 'tog-showtoc' => 'Мундеридже джедвели косьтер (3 данеден зияде серлевасы олгъан саифелер ичюн)',
 'tog-rememberpassword' => 'Киришимни бу браузерде хатырла (энъ чокъ $1 {{PLURAL:$1|кунь|кунь}} ичюн)',
-'tog-watchcreations' => 'Ð\9cен Ñ\8fÑ\80аÑ\82кÑ\8aан Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-watchdefault' => 'Ð\9cен Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80ген Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-watchmoves' => 'Ð\9cеним Ñ\82аÑ\80аÑ\84Ñ\8bмдан Ð°Ð´Ñ\8b Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80илÑ\8cген Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-watchdeletion' => 'Ð\9cен Ñ\91кÑ\8a Ñ\8dÑ\82кен Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-minordefault' => 'Япкъан денъишмелеримни кичик денъишмедир деп ишаретле',
+'tog-watchcreations' => 'ЯÑ\80аÑ\82кÑ\8aан Ñ\81аиÑ\84елеÑ\80имни Ð²Ðµ Ñ\8eклеген Ñ\84айллаÑ\80Ñ\8bмнÑ\8b козетюв джедвелиме кирсет',
+'tog-watchdefault' => 'Ð\94енÑ\8aиÑ\88Ñ\82иÑ\80ген Ñ\81аиÑ\84е Ð²Ðµ Ñ\84айллаÑ\80Ñ\8bмнÑ\8b козетюв джедвелиме кирсет',
+'tog-watchmoves' => 'Ð\90дÑ\8bнÑ\8b Ð¼ÐµÐ½ Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80ген Ñ\81аиÑ\84е Ð²Ðµ Ñ\84айллаÑ\80нÑ\8b козетюв джедвелиме кирсет',
+'tog-watchdeletion' => 'Ð\81кÑ\8a Ñ\8dÑ\82кен Ñ\81аиÑ\84е Ð²Ðµ Ñ\84айллаÑ\80Ñ\8bмнÑ\8b козетюв джедвелиме кирсет',
+'tog-minordefault' => 'Япкъан денъиштирмелеримни кичик денъиштирмедир деп ишаретле',
 'tog-previewontop' => 'Бакъып чыкъувны язув пенджеренинъ устюнде косьтер',
 'tog-previewonfirst' => 'Денъиштирме саифесине кечкенде бакъып чыкъувны косьтер',
 'tog-nocache' => 'Браузер саифелерни афызасында тутмасын',
-'tog-enotifwatchlistpages' => 'Козетюв джедвелимдеки бир саифе денъиштирильгенде манъа e-mail ёлла',
+'tog-enotifwatchlistpages' => 'Козетюв джедвелимдеки бир саифе я да файл денъиштирильгенде манъа e-mail ёлла',
 'tog-enotifusertalkpages' => 'Къулланыджы саифем денъиштирильгенде манъа e-mail ёлла',
-'tog-enotifminoredits' => 'Ð\9aиÑ\87ик Ð´ÐµÐ½Ñ\8aиÑ\88ме олгъанда да манъа e-mail ёлла',
+'tog-enotifminoredits' => 'СаиÑ\84е Ñ\8f Ð´Ð° Ñ\84айлда ÐºÐ¸Ñ\87ик Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80илÑ\8cме олгъанда да манъа e-mail ёлла',
 'tog-enotifrevealaddr' => 'Бильдирюв мектюплеринде e-mail адресимни косьтер',
 'tog-shownumberswatching' => 'Козеткен къулланыджы сайысыны косьтер',
 'tog-oldsig' => 'Шимдики имза:',
@@ -139,21 +139,21 @@ $messages = array(
 'tog-externaldiff' => 'Тенъештирмек ичюн тыш бир программа къуллан (теджрибели къулланыджылар ичюн; компьютеринъизни махсус сазламакъ керек. [ //www.mediawiki.org/wiki/Manual:External_editors тафсилятлы малюмат мында])',
 'tog-showjumplinks' => '«Бар» багълантысыны фааллештир',
 'tog-uselivepreview' => 'Джанлы бакъып чыкъув хусусиетини къуллан (JavaScript) (даа денъеме алында)',
-'tog-forceeditsummary' => 'Денъишменинъ къыскъа тарифини бош ташласам мени тенбиле',
-'tog-watchlisthideown' => 'Козетюв джедвелимден меним денъишмелеримни гизле',
-'tog-watchlisthidebots' => 'Козетюв джедвелимден бот денъишмелерини гизле',
-'tog-watchlisthideminor' => 'Козетюв джедвелимден кичик денъишмелерни гизле',
-'tog-watchlisthideliu' => 'Козетюв джедвелимде къайдлы къулланыджылар тарафындан япылгъан денъишмелерни косьтерме',
-'tog-watchlisthideanons' => 'Козетюв джедвелимде къайдсыз (аноним) къулланыджылар тарафындан япылгъан денъишмелерни косьтерме',
-'tog-watchlisthidepatrolled' => 'Козетюв джедвелинде тешкерильген денъишмелерни гизле',
+'tog-forceeditsummary' => 'Денъиштирменинъ къыскъа тарифини бош ташласам мени тенбиле',
+'tog-watchlisthideown' => 'Козетюв джедвелимден меним денъиштирмелеримни гизле',
+'tog-watchlisthidebots' => 'Козетюв джедвелимден бот денъиштирмелерини гизле',
+'tog-watchlisthideminor' => 'Козетюв джедвелимден кичик денъиштирмелерни гизле',
+'tog-watchlisthideliu' => 'Козетюв джедвелимде къайдлы къулланыджылар тарафындан япылгъан денъиштирмелерни косьтерме',
+'tog-watchlisthideanons' => 'Козетюв джедвелимде къайдсыз (аноним) къулланыджылар тарафындан япылгъан денъиштирмелерни косьтерме',
+'tog-watchlisthidepatrolled' => 'Козетюв джедвелинде тешкерильген денъиштирмелерни гизле',
 'tog-ccmeonemails' => 'Дигер къулланыджыларгъа ёллагъан мектюплеримнинъ копияларыны манъа да ёлла',
 'tog-diffonly' => 'Тенъештирме саифелеринде саифенинъ эсас мундериджесини косьтерме',
 'tog-showhiddencats' => 'Гизли категорияларны косьтер',
-'tog-norollbackdiff' => 'Ð\9bÑ\8fгÑ\8aÑ\83 Ñ\8dÑ\82илÑ\8cген Ð´ÐµÐ½Ñ\8aиÑ\88мелеÑ\80ни косьтерме',
+'tog-norollbackdiff' => 'Ð\9aеÑ\80и ÐºÑ\8aайÑ\82аÑ\80Ñ\83в Ñ\8fпÑ\8bлгÑ\8aан Ñ\81онÑ\8a Ð²ÐµÑ\80Ñ\81иÑ\8fлаÑ\80 Ð°Ñ\80аÑ\81Ñ\8bндаки Ñ\84аÑ\80кÑ\8aнÑ\8b косьтерме',
 
 'underline-always' => 'Даима',
 'underline-never' => 'Асла',
-'underline-default' => 'Браузер къарар берсин',
+'underline-default' => 'Браузер сазламалары къулланылсын',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Язув пенджересинде уруфат (шрифт) тюрю:',
@@ -240,6 +240,7 @@ $messages = array(
 'newwindow' => '(янъы бир пенджереде ачылыр)',
 'cancel' => 'Лягъу',
 'moredotdotdot' => 'Даа...',
+'morenotlisted' => 'Башкъа бир шей ёкъ...',
 'mypage' => 'Саифе',
 'mytalk' => 'Музакере',
 'anontalk' => 'Бу IP-нинъ музакереси',
@@ -263,7 +264,7 @@ $messages = array(
 'vector-action-protect' => 'Къорчала',
 'vector-action-undelete' => 'Янъыдан ярат',
 'vector-action-unprotect' => 'Къорчалавны денъиштир',
-'vector-simplesearch-preference' => 'ТаÑ\84Ñ\81илÑ\8fÑ\82лÑ\8b ÐºÑ\8aÑ\8bдÑ\8bÑ\80Ñ\83в Ñ\82еклиÑ\84леÑ\80ини Ð¸Ñ\88леÑ\82 (Ñ\82ек Ð\92екÑ\82оÑ\80 Ñ\80еÑ\81имлемеÑ\81и ичюн)',
+'vector-simplesearch-preference' => 'СаделеÑ\88Ñ\82иÑ\80илÑ\8cген ÐºÑ\8aÑ\8bдÑ\8bÑ\80Ñ\83в Ñ\81аÑ\82Ñ\8bÑ\80Ñ\8bнÑ\8b Ð¸Ñ\88леÑ\82 (Ñ\82ек Ð\92екÑ\82оÑ\80 ÐºÐ¾Ñ\80Ñ\8eниÑ\88и ичюн)',
 'vector-view-create' => 'Ярат',
 'vector-view-edit' => 'Денъиштир',
 'vector-view-history' => 'Кечмишини косьтер',
@@ -273,6 +274,7 @@ $messages = array(
 'namespaces' => 'Исим фезалары',
 'variants' => 'Вариантлар',
 
+'navigation-heading' => 'Долашув менюси',
 'errorpagetitle' => 'Хата',
 'returnto' => '$1.',
 'tagline' => '{{GRAMMAR:ablative|{{SITENAME}}}}',
@@ -293,8 +295,8 @@ $messages = array(
 'create-this-page' => 'Бу саифени ярат',
 'delete' => 'Ёкъ эт',
 'deletethispage' => 'Саифени ёкъ эт',
-'undelete_short' => '{{PLURAL:$1|1|$1}} денъишмени кери кетир',
-'viewdeleted_short' => '{{PLURAL:$1|бир ёкъ этильген денъишмени|$1 ёкъ этильген денъишмени}} косьтер.',
+'undelete_short' => '{{PLURAL:$1|1|$1}} денъиштирмени кери кетир',
+'viewdeleted_short' => '{{PLURAL:$1|бир ёкъ этильген денъиштирмени|$1 ёкъ этильген денъиштирмени}} косьтер.',
 'protect' => 'Къорчала',
 'protect_change' => 'денъиштир',
 'protectthispage' => 'Саифени къорчалав алтына ал',
@@ -365,7 +367,11 @@ $1',
 'retrievedfrom' => 'Менба – "$1"',
 'youhavenewmessages' => 'Янъы $1 бар ($2).',
 'newmessageslink' => 'беянатынъыз',
-'newmessagesdifflink' => 'музакере саифенъизнинъ сонъки денъишкени',
+'newmessagesdifflink' => 'музакере саифенъизнинъ сонъки денъиштирильмеси',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башкъа бир къулланыджыдан|$3 къулланыджыдан}} $1 бар. ($2)',
+'youhavenewmessagesmanyusers' => 'Бир къач къулланыджыдан $1 бар. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|янъы беянатынъыз|янъы беянатларынъыз}}',
+'newmessagesdifflinkplural' => 'музакере саифенъизнинъ сонъки {{PLURAL:$1|денъиштирильмеси|денъиштирильмелери}}',
 'youhavenewmessagesmulti' => '$1 саифесинде янъы беянатынъыз бар.',
 'editsection' => 'денъиштир',
 'editold' => 'денъиштир',
@@ -380,7 +386,7 @@ $1',
 'collapsible-expand' => 'Кенишлет',
 'thisisdeleted' => '$1 корьмеге я да кери кетирмеге истейсинъизми?',
 'viewdeleted' => '$1 корь?',
-'restorelink' => 'ёкъ этильген {{PLURAL:$1|1|$1}} денъишмеси',
+'restorelink' => 'ёкъ этильген {{PLURAL:$1|1|$1}} денъиштирмеси',
 'feedlinks' => 'Бу шекильде:',
 'feed-invalid' => 'Абуне каналынынъ чешити янълыштыр.',
 'feed-unavailable' => 'Синдикация ленталары къулланылып оламай.',
@@ -418,7 +424,7 @@ $1',
 'error' => 'Хата',
 'databaseerror' => 'Малюмат базасынынъ хатасы',
 'dberrortext' => 'Малюмат базасындан сораткъанда синтаксис хатасы олды.
-Бу язылымдаки бир хата ола биле.
+Бу программадаки бир хата ола биле.
 "<tt>$2</tt>" функциясындан олгъан малюмат базасындан сонъки соратма:
 <blockquote><tt>$1</tt></blockquote>.
 Малюмат базасынынъ бильдирген хатасы "<tt>$3: $4</tt>".',
@@ -457,10 +463,12 @@ $1',
 'badarticleerror' => 'Сиз япмагъа истеген ишлев бу саифеде япылып оламай.',
 'cannotdelete' => '«$1» саифе я да файлы ёкъ этилип оламады. Башкъа бир къулланыджы тарафындан ёкъ этильген ола биле.',
 'cannotdelete-title' => '«$1» саифесини ёкъ этмеге олмаз',
+'delete-hook-aborted' => 'Ёкъ этюв ченгель процедурасынен токътатылды.
+Ич бир изаат берильмеди.',
 'badtitle' => 'Рухсетсиз серлева',
 'badtitletext' => 'Истенильген саифе ады догъру дегиль, о боштыр, яхут тиллерара багъланты я да викилерара багъланты догъру язылмагъан. Бельки саифе адында ясакълангъан ишаретлер бар.',
-'perfcached' => 'Ð\9cалÑ\8eмаÑ\82лаÑ\80 Ð´Ð°Ð° Ñ\8dвелÑ\8cджеден Ð°Ð·Ñ\8bÑ\80лангÑ\8aан Ð¾Ð»Ð° Ð±Ð¸Ð»Ð¸Ñ\80. Ð\91Ñ\83 Ñ\81ебепÑ\82ен Ñ\8dÑ\81киÑ\80ген Ð¾Ð»Ð° Ð±Ð¸Ð»Ð¸Ñ\80! A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Ашагъыда кэште сакълангъан малюмат булуна, сонъки янъарув заманы: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Ð\90Ñ\88агÑ\8aÑ\8bдаки Ð¼Ð°Ð»Ñ\8eмаÑ\82 ÐºÑ\8dÑ\88Ñ\82ен Ð°Ð»Ñ\8bндÑ\8b Ð²Ðµ Ñ\8dÑ\81киÑ\80ген Ð¾Ð»Ð° Ð±Ð¸Ð»Ð¸Ñ\80! Ð\9aÑ\8dÑ\88Ñ\82е Ñ\8dнÑ\8a Ñ\87окÑ\8a {{PLURAL:$1|биÑ\80 Ð½ÐµÑ\82идже|$1 Ð½ÐµÑ\82идже}} Ñ\81акÑ\8aланÑ\8bп Ñ\82Ñ\83Ñ\80а.',
+'perfcachedts' => 'Ашагъыдаки малюмат кэштен алынды, кэшнинъ сонъки янъартылгъан вакъты: $1. Кэште энъ чокъ {{PLURAL:$1|бир нетидже|$1 нетидже}} сакъланып тура.',
 'querypage-no-updates' => 'Бу саифени денъиштирмеге шимди изин ёкъ. Бу малюмат аман янъартылмайджакъ.',
 'wrong_wfQuery_params' => 'wfQuery() функциясы ичюн изинсиз параметрлер<br />
 Функция: $1<br />
@@ -469,10 +477,10 @@ $1',
 'viewsource-title' => '$1 саифесининъ менба коду',
 'actionthrottled' => 'Арекет токъталды',
 'actionthrottledtext' => 'Спамгъа къаршы куреш себебинден бу арекетни аз вакъыт ичинде чокъ кере текрарлап оламайсынъыз. Мумкюн олгъан къарардан зияде арекет яптынъыз. Бир къач дакъкъадан сонъ текрарлап бакъынъыз.',
-'protectedpagetext' => 'Ð\91Ñ\83 Ñ\81аиÑ\84ени ÐºÐ¸Ð¼Ñ\81е Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80меÑ\81ин деп о блок этильди.',
+'protectedpagetext' => 'Ð\91Ñ\83 Ñ\81аиÑ\84еде Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80ме Ñ\8f Ð´Ð° Ð±Ð°Ñ\88кÑ\8aа Ð±Ð¸Ñ\80 Ð°Ñ\80екеÑ\82 Ñ\8fпÑ\8bлмаÑ\81Ñ\8bн деп о блок этильди.',
 'viewsourcetext' => 'Саифенинъ кодуны козьден кечирип копиялай билесинъиз:',
 'protectedinterface' => 'Бу саифеде система интерфейсининъ метни бар. Онынъ ичюн мында бир хата чыкъмасын деп оны денъиштирмек ясакъ.',
-'editinginterface' => "'''Тенби''': Ичинде MediaWiki система беянаты олгъан бир саифени денъиштиреятасыз. Бу саифедеки денъишмелер къулланыджы интерфейсининъ корюнишини дигер къулланыджылар ичюн де денъиштиреджек. Лютфен, терджимелер ичюн [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] сайтыны (MediaWiki ресмий локализация лейхасы) къулланынъыз.",
+'editinginterface' => "'''Тенби''': MediaWiki системасынынъ интерфейс саифесини денъиштиреятасыз. Бу саифедеки денъиштирмелер интерфейснинъ корюнишини бу викининъ башкъа къулланыджылары ичюн де денъиштиреджек. Лютфен, вики интерфейсини терджиме этмек ичюн [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] сайтыны (MediaWiki ресмий локализация лейхасы) къулланынъыз.",
 'sqlhidden' => '(SQL истинтагъы сакълы)',
 'cascadeprotected' => 'Бу саифени денъиштирип оламазсынъыз, чюнки каскад къорчалав алтында булунгъан {{PLURAL:$1|саифеге|саифелерге}} менсюптир:
 $2',
@@ -607,17 +615,17 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 'hr_tip' => 'Горизонталь сызыкъ (пек сыкъ къулланманъыз)',
 
 # Edit pages
-'summary' => 'Денъишменинъ къыскъа тарифи:',
+'summary' => 'Денъиштирменинъ къыскъа тарифи:',
 'subject' => 'Мевзу/серлева:',
-'minoredit' => 'Бу, кичик денъишмедир',
+'minoredit' => 'Бу, кичик денъиштирмедир',
 'watchthis' => 'Саифени козет',
 'savearticle' => 'Саифени сакъла',
 'preview' => 'Бакъып чыкъув',
 'showpreview' => 'Бакъып чыкъ',
 'showlivepreview' => 'Тез бакъып чыкъув',
-'showdiff' => 'Денъишмелерни косьтер',
-'anoneditwarning' => "'''Дикъкъат''': Сайткъа кирмегенинъизден себеп денъишмелер тарихына сизинъ IP адресинъиз язылыр.",
-'anonpreviewwarning' => 'Сайткъа кирмединъиз. Саифени сакъласанъыз, денъишмелер тарихына сизинъ IP адресинъиз язылыр.',
+'showdiff' => 'Денъиштирмелерни косьтер',
+'anoneditwarning' => "'''Дикъкъат''': Сайткъа кирмегенинъизден себеп денъиштирмелер тарихына сизинъ IP адресинъиз язылыр.",
+'anonpreviewwarning' => 'Сайткъа кирмединъиз. Саифени сакъласанъыз, денъиштирмелер тарихына сизинъ IP адресинъиз язылыр.',
 'missingsummary' => "'''Хатырлатма.''' Денъиштирмелеринъизни къыскъадан тариф этмединъиз. «Саифени сакъла» дёгмесине текрар басув иле денъиштирмелеринъиз тефсирсиз сакъланаджакълар.",
 'missingcommenttext' => 'Лютфен, ашагъыда тефсир язынъыз.',
 'missingcommentheader' => "'''Хатырлатма:''' Тефсир мевзусыны/серлевасыны язмадынъыз. «{{int:savearticle}}» дёгмесине текрар баскъан сонъ тефсиринъиз серлевасыз сакъланыр.",
@@ -671,11 +679,11 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 'userpage-userdoesnotexist-view' => '«$1» адлы къулланыджы эсабы ёкъ.',
 'blocked-notice-logextract' => 'Бу къулланыджы шимди блок этильген.
 Блок этюв журналынынъ сонъки язысы ашагъыда косьтерильген:',
-'clearyourcache' => "'''Ихтар:''' Бельки сазламаларынъызны сакълагъандан сонъ денъишмелерни корьмек ичюн браузеринъизнинъ кэшини темизлемек керек олурсынъыз.
-'''Mozilla / Firefox / Safari:''' ''Shift'' басып саифени янъыдан юклемек я да ''Ctrl-Shift-R'' басмакъ (Mac ичюн ''Command-R'');
-'''Konqueror:''' саифени янъыдан юкле дёгмесине я да F5 басмакъ;
-'''Opera:''' ''Tools → Preferences'' менюсинде кэшни темизлемек;
-'''Internet Explorer:''' ''Ctrl'' басып саифени янъыдан юклеиек я да ''Ctrl-F5'' басмакъ.",
+'clearyourcache' => "'''Ихтар:''' Бельки сазламаларынъызны сакълагъандан сонъ денъишмелерни корьмек ичюн браузеринъизнинъ кешини темизлемек керек олурсынъыз. Кеш темизлемек ичюн шуны япмакъ керек:
+* '''Firefox / Safari:''' ''Shift'' басып саифени янъыдан юклемек я да ''Ctrl-F5'' я да ''Ctrl-R'' басмакъ (Mac ичюн ''⌘-R'')
+* '''Google Chrome:''' ''Ctrl-Shift-R'' басмакъ (Mac ичюн ''⌘-Shift-R'')
+* '''Internet Explorer:''' ''Ctrl'' басып саифени янъыдан юклемек я да ''Ctrl-F5'' басмакъ
+* '''Opera:''' ''Tools → Preferences'' менюсинде кешни темизлемек",
 'usercssyoucanpreview' => "'''Тевсие:''' Янъы CSS файлыны тешкермек ичюн саифени сакъламаздан эвель «{{int:showpreview}}» дёгмесине басынъыз.",
 'userjsyoucanpreview' => "'''Тевсие:''' Янъы JavaScript-инъизни тешкермек ичюн саифени сакъламаздан эвель «{{int:showpreview}}» дёгмесине басынъыз.",
 'usercsspreview' => "'''Унутманъыз, бу тек бакъып чыкъув - къулланыджы CSS файлынъыз аля даа сакъланмады!'''",
@@ -689,22 +697,22 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 Бу вакътынджа проблемадыр. Лютфен, текрар сакълап бакъынъыз.
 Бундан да сонъ олып чыкъмаса, малюмат локаль файлгъа сакъланъыз да браузеринъизни бир къапатып ачынъыз.'''",
 'session_fail_preview_html' => "'''Афу этинъиз! HTML сессиянынъ малюматлары гъайып олгъаны себебинден сизинъ денъиштирмелеринъизни къабул этмеге имкян ёкътыр.'''",
-'token_suffix_mismatch' => "'''Сизинъ программанъыз тюрлендирюв пенджересинде пунктуация ишаретлерини догъру ишлемегени ичюн япкъан денъишмелеринъиз къабул олунмады. Денъишмелер саифенинъ метни корюнишининъ бозулмамасы ичюн лягъу этильди.
+'token_suffix_mismatch' => "'''Сизинъ программанъызнынъ озь тюрлендирюв пенджересинде пунктуация ишаретлерини догъру ишлемегени ичюн япкъан денъиштирмелеринъиз къабул олунмады. Денъиштирмелер саифе метнининъ корюниши бозулмасын деп лягъу этильди.
 Бунынъ киби проблемалар хаталы аноним web-проксилер къулланувдан чыкъып ола.'''",
 'editing' => '"$1" саифесини денъиштиреятасыз',
 'editingsection' => '"$1" саифесинде болюк денъиштиреятасыз',
 'editingcomment' => '$1 саифесини денъиштиреятасыз (янъы болюк)',
-'editconflict' => 'Денъишмелер конфликти: $1',
-'explainconflict' => "Сиз саифени денъиштирген вакъытта башкъа бири де денъишме япты.
+'editconflict' => 'Денъиштирмелер чатышмасы: $1',
+'explainconflict' => "Сиз саифени денъиштиргенде башкъа бири де денъиштирме япты.
 Юкъарыдаки язы саифенинъ шимдики алыны косьтере.
-Сизинъ денъишмелеринъиз астында косьтерильди.
-Шимди япкъан денъишмелеринъизни ашагъы пенджереден юкъары пенджереге авуштырмакъ керексинъиз.
+Сизинъ денъиштирмелеринъиз астында косьтерильди.
+Шимди япкъан денъиштирмелеринъизни ашагъы пенджереден юкъары пенджереге авуштырмакъ керексинъиз.
 \"{{int:savearticle}}\"гъа баскъанда '''тек''' юкъарыдаки язы сакъланаджакъ.",
 'yourtext' => 'Сизинъ метнинъиз',
 'storedversion' => 'Сакълангъан метин',
 'nonunicodebrowser' => "'''ТЕНБИ: Браузеринъизде Unicode кодламасы танылмаз. Саифелер денъиштиргенде бутюн ASCII олмагъан ишаретлернинъ ерине оларнынъ оналтылыкъ коду язылыр.'''",
 'editingold' => "'''ДИКЪКЪАТ: Саифенинъ эски бир версиясыны денъиштиреятасыз.
-Саифени сакълагъанынъыздан сонъ бу тарихлы версиядан кунюмизге къадар олгъан денъишмелер ёкъ оладжакъ.'''",
+Саифени сакълагъанынъыздан сонъ бу тарихлы версиядан кунюмизге къадар олгъан денъиштирмелер ёкъ оладжакъ.'''",
 'yourdiff' => 'Фаркълар',
 'copyrightwarning' => "'''Лютфен, дикъкъат:''' {{SITENAME}} сайтына къошулгъан бутюн исселер <i>$2</i> мукъавелеси даиресиндедир (тафсилят ичюн $1 саифесине бакъынъыз).
 Къошкъан иссенъизнинъ башкъа инсанлар тарафындан аджымасызджа денъиштирильмесини я да азат тарзда ве сынъырсызджа башкъа ерлерге дагъытылмасыны истемесенъиз, иссе къошманъыз.<br />
@@ -714,9 +722,9 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 Айрыджа, мында иссе къошып, бу иссенинъ озюнъиз тарафындан язылгъанына, я да джемааткъа ачыкъ бир менбадан я да башкъа бир азат менбадан копиялангъанына гарантия берген оласынъыз ($1 бакъынъыз).<br />
 '''МУЭЛЛИФЛИК АКЪКЪЫНЕН КЪОРЧАЛАНГЪАН ИЧ БИР МЕТИННИ МЫНДА РУХСЕТСИЗ КЪОШМАНЪЫЗ!'''",
 'longpageerror' => "'''ТЕНБИ: Бу саифе $1 килобайт буюклигиндедир. Азамий (максималь) изинли буюклик исе $2 килобайт. Бу саифе сакъланып оламаз.'''",
-'readonlywarning' => "'''ТЕНБИ: Бакъым себеби иле малюмат базасы шимди килитлидир. Бу себептен япкъан денъишмелеринъиз шимди сакълап оламасынъыз. Язгъанларынъызны башкъа бир тюрлендирюв программасына алып сакълап ве даа сонъ бир даа мында кетирип сакълап олурсынъыз'''
+'readonlywarning' => "'''ТЕНБИ: Бакъым себеби иле малюмат базасы шимди килитлидир. Бу себептен япкъан денъиштирмелеринъизни шимди сакълап оламасынъыз. Язгъанларынъызны вакътынджа бир текст файлында сакълап ве даа сонъра бир даа мында кетирип сакълап олурсынъыз'''
 
-Малюмат базасыны килитлеген идареджи озь арекетини бойле анълатты: $1",
+Малюмат базасыны килитлеген идареджи озь арекетини шойле анълатты: $1",
 'protectedpagewarning' => "'''Тенби: Бу саифе къорчалангъан ве тек идареджилер тарафындан денъиштирилип олур.'''
 Журналнынъ сонъки язысы ашагъыда берильген:",
 'semiprotectedpagewarning' => "'''Тенби''': Бу саифе тек къайдлы къулланыджылар тарафындан денъиштирилип олур.
@@ -745,20 +753,20 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 'moveddeleted-notice' => 'Бу саифе ёкъ этильген.
 Саифенинъ ёкъ этилюв ве авуштырылув къайдлары ашагъыда берильген.',
 'log-fulllog' => 'Журналны толусынджа косьтер',
-'edit-hook-aborted' => 'Денъишме ченгель процедурасынен токътатылды.
+'edit-hook-aborted' => 'Денъиштирме ченгель процедурасынен токътатылды.
 Ич бир изаат берильмеди.',
 'edit-gone-missing' => 'Саифе янъартылып оламай.
 Бельки о ёкъ этильгендир.',
-'edit-conflict' => 'Денъишмелер чатышмасы.',
-'edit-no-change' => 'Япкъан денъишменъиз сакъланмагъан, чюнки метинде бир тюрлю денъишме япылмады.',
+'edit-conflict' => 'Денъиштирмелер чатышмасы.',
+'edit-no-change' => 'Япкъан денъиштирменъиз сакъланмагъан, чюнки метинде бир тюрлю денъиштирильме япылмады.',
 'edit-already-exists' => 'Янъы саифени яратмакъ мумкюн дегиль.
 О энди бар.',
 
 # "Undo" feature
-'undo-success' => 'Денъишме лягъу этилип ола. Лютфен, мына бу денъишикликлерни япмагъа истегенинъизден эмин олмакъ ичюн версиялар тенъештирилювини козьден кечирип денъишмелерни сакъламакъ ичюн «Саифени сакъла» дёгмесине басынъыз.',
-'undo-failure' => 'Арадаки денъишмелер бир-бирине келишикли олмагъаны ичюн денъишме лягъу этилип оламай.',
-'undo-norev' => 'Денъишме лягъу этилип оламаз, чюнки о я да ёкъ, я да бар эди, амма ёкъ этильген.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) къулланыджысынынъ $1 номералы денъишмесини лягъу этюв.',
+'undo-success' => 'Денъиштирме лягъу этилип ола. Лютфен, мына бу денъиштирмелерни япмагъа истегенинъизден эмин олмакъ ичюн версиялар тенъештирилювини козьден кечирип денъиштирмелерни сакъламакъ ичюн «Саифени сакъла» дёгмесине басынъыз.',
+'undo-failure' => 'Арадаки денъиштирмелер бир-бирине келишикли олмагъаны ичюн денъиштирме лягъу этилип оламай.',
+'undo-norev' => 'Денъиштирме лягъу этилип оламаз, чюнки о я да ёкъ, я да бар эди, амма ёкъ этильген.',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) къулланыджысынынъ $1 номералы денъиштирмесини лягъу этюв.',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Эсап яратмакънынъ ич чареси ёкъ.',
@@ -781,8 +789,8 @@ $3 мына бу себепни бильдирди: ''$2''",
 'last' => 'сонъки',
 'page_first' => 'ильк',
 'page_last' => 'сонъки',
-'histlegend' => "(фаркъ) = шимдики алнен арадаки фаркъ,
-(сонъки) = эвельки алнен арадаки фаркъ, '''к''' = кичик денъишме",
+'histlegend' => "Фаркъ сайланувы: Тенъештирмеге истеген эки версиянъызны сайлап '''{{int:compare-submit}}''' дёгмесине басынъыз.<br />
+Анълатмалар: '''({{int:cur}})''' = шимдики версиянен арасындаки фаркъ, '''({{int:last}})''' = эвельки версиянен арасындаки фаркъ, '''{{int:minoreditletter}}''' = кичик денъиштирме.",
 'history-fieldset-title' => 'Кечмишке бакъув',
 'history-show-deleted' => 'Тек ёкъ этильгенлер',
 'histfirst' => 'Энъ эски',
@@ -791,22 +799,22 @@ $3 мына бу себепни бильдирди: ''$2''",
 'historyempty' => '(бош)',
 
 # Revision feed
-'history-feed-title' => 'Денъишмелер тарихы',
-'history-feed-description' => 'Викиде бу саифенинъ денъишмелер тарихы',
+'history-feed-title' => 'Денъиштирмелер тарихы',
+'history-feed-description' => 'Викиде бу саифенинъ денъиштирмелер тарихы',
 'history-feed-item-nocomment' => '$2 устюнде $1',
 'history-feed-empty' => 'Истенильген саифе ёкъ.
 О ёкъ эильген я да ады денъиштирильген ола биле.
 Викиде бу саифеге ошагъан саифелерни [[Special:Search|тапып бакъынъыз]].',
 
 # Revision deletion
-'rev-deleted-comment' => '(денъишменинъ тарифи ёкъ этильди)',
+'rev-deleted-comment' => '(денъиштирменинъ тарифи ёкъ этильди)',
 'rev-deleted-user' => '(къулланыджы ады ёкъ этильди)',
 'rev-deleted-event' => '(къайд ёкъ этильди)',
 'rev-delundel' => 'косьтер/гизле',
 'rev-showdeleted' => 'косьтер',
 'revisiondelete' => 'Версияларны ёкъ эт/кери кетир',
 'revdelete-hide-comment' => 'Къыскъа тарифни косьтерме',
-'revdelete-hide-user' => 'Денъишмени япкъаннынъ къулланыджы адыны/IP-ни гизле',
+'revdelete-hide-user' => 'Денъиштирмени япкъаннынъ къулланыджы адыны/IP-ни гизле',
 'revdelete-hide-restricted' => 'Малюматны адий къулланыджылардан киби идареджилерден де гизле',
 'revdelete-submit' => 'Сайлангъан {{PLURAL:$1|версиягъа|версияларгъа}} ишлет',
 'revdel-restore' => 'корюнювни денъиштир',
@@ -816,7 +824,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 'mergelogpagetext' => 'Саифелернинъ кечмиш версияларынынъ бир-бирлеринен энъ сонъки бирлештирильмелери ашагъыдаки джедвельде косьтерильген.',
 
 # Diffs
-'history-title' => '$1 саифесининъ денъишмелер тарихы',
+'history-title' => '"$1" саифесининъ денъиштирмелер тарихы',
 'difference-multipage' => '(Саифелер арасындаки фаркъ)',
 'lineno' => '$1 сатыр:',
 'compareselectedversions' => 'Сайлангъан версияларны тенъештир',
@@ -890,8 +898,8 @@ $3 мына бу себепни бильдирди: ''$2''",
 
 # Preferences page
 'preferences' => 'Сазламалар',
-'mypreferences' => 'Сазламаларым',
-'prefs-edits' => 'Денъишмелер сайысы:',
+'mypreferences' => 'Сазламалар',
+'prefs-edits' => 'Денъиштирмелер сайысы:',
 'prefsnologin' => 'Отурым ачмадынъыз',
 'prefsnologintext' => 'Шахсий сазламаларынъызны денъиштирмек ичюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} отурым ачмакъ]</span> керексинъиз.',
 'changepassword' => 'Пароль денъиштир',
@@ -900,18 +908,18 @@ $3 мына бу себепни бильдирди: ''$2''",
 'datedefault' => 'Стандарт',
 'prefs-datetime' => 'Тарих ве саат',
 'prefs-personal' => 'Къулланыджы малюматы',
-'prefs-rc' => 'Сонъки денъишмелер',
+'prefs-rc' => 'Сонъки денъиштирмелер',
 'prefs-watchlist' => 'Козетюв джедвели',
 'prefs-watchlist-days' => 'Козетюв джедвелинде косьтериледжек кунь сайысы:',
 'prefs-watchlist-days-max' => 'Энъ чокъ $1 {{PLURAL:$1|кунь|кунь}}',
-'prefs-watchlist-edits' => 'Кенишлетилген козетюв джедвелинде косьтериледжек денъишмелер сайысы:',
+'prefs-watchlist-edits' => 'Кенишлетилген козетюв джедвелинде косьтериледжек денъиштирмелер сайысы:',
 'prefs-watchlist-edits-max' => '(энъ чокъ 1000)',
 'prefs-watchlist-token' => 'Козетюв джедвели ишарети:',
 'prefs-misc' => 'Дигер сазламалар',
 'prefs-resetpass' => 'Парольни денъиштир',
 'prefs-email' => 'E-mail сазламалары',
 'prefs-rendering' => 'Корюниш',
-'saveprefs' => 'Ð\94енÑ\8aиÑ\88мелеÑ\80ни Ñ\81акъла',
+'saveprefs' => 'Сакъла',
 'resetprefs' => 'Сакъланмагъан сазламаларны ильк алына кетир',
 'restoreprefs' => 'Бутюн ог бельгиленген сазламаларны къайтар',
 'prefs-editing' => 'Саифелерни денъиштирюв',
@@ -920,10 +928,10 @@ $3 мына бу себепни бильдирди: ''$2''",
 'columns' => 'Сутун',
 'searchresultshead' => 'Къыдырув',
 'resultsperpage' => 'Саифеде косьтериледжек тапылгъан саифе сайысы',
-'recentchangesdays' => 'Сонъки денъишмелер саифесинде косьтериледжек кунь сайысы:',
+'recentchangesdays' => 'Сонъки денъиштирмелер саифесинде косьтериледжек кунь сайысы:',
 'recentchangesdays-max' => '(энъ чокъ $1 {{PLURAL:$1|кунь|кунь}})',
-'recentchangescount' => 'Ог бельгиленген косьтериледжек денъишмелер сайысы:',
-'prefs-help-recentchangescount' => 'Бу, сонъки денъишмелер, саифе кечмиши ве журнал саифелеринде къулланыла.',
+'recentchangescount' => 'Ог бельгиленген косьтериледжек денъиштирмелер сайысы:',
+'prefs-help-recentchangescount' => 'Бу, сонъки денъиштирмелер, саифе кечмиши ве журнал саифелеринде къулланыла.',
 'savedprefs' => 'Сазламаларынъыз сакъланды.',
 'timezonelegend' => 'Саат къушагъы:',
 'localtime' => 'Ерли вакъыт:',
@@ -970,7 +978,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 'prefs-help-gender' => 'Меджбурий дегиль: wiki тарафындан догъру джыныс адреслеви ичюн къулланыла. Бу малюмат умумий оладжакъ.',
 'email' => 'E-mail',
 'prefs-help-realname' => 'Керчек адынъыз (меджбурий дегильдир).
-Эгер бильдирсенъиз, саифелердеки денъишмелерни кимнинъ япкъаныны косьтермек ичюн къулланыладжакъ.',
+Эгер бильдирсенъиз, саифелердеки денъиштирмелерни кимнинъ япкъаныны косьтермек ичюн къулланыладжакъ.',
 'prefs-help-email' => 'E-mail (меджбурий дегильдир). E-mail адреси бильдирильген олса, паролинъизни унутсанъыз, сизге янъы бир пароль ёлламакъ ичюн къулланыладжакъ.',
 'prefs-help-email-required' => 'E-mail адреси лязим.',
 'prefs-info' => 'Эсас малюмат',
@@ -1033,25 +1041,25 @@ $3 мына бу себепни бильдирди: ''$2''",
 'action-edit' => 'бу саифени денъиштирмеге',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|денъишме|денъишме}}',
-'recentchanges' => 'Сонъки денъишмелер',
-'recentchanges-legend' => 'Сонъки денъишмелер сазламалары',
-'recentchanges-summary' => 'Япылгъан энъ сонъки денъишикликлерни бу саифеде корип оласынъыз.',
-'recentchanges-feed-description' => 'Бу лента вастасынен викиде сонъки денъишмелерни козет.',
-'recentchanges-label-newpage' => 'Бу денъишме янъы бир саифе яратты',
-'recentchanges-label-minor' => 'Бу, кичик бир денъишме',
-'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъишмеси',
-'recentchanges-label-unpatrolled' => 'Бу денъишме аля даа тешкерильмеген',
-'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъишме:",
-'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъишмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
-'rclistfrom' => '$1 тарихындан берли япылгъан денъишмелерни косьтер',
-'rcshowhideminor' => 'кичик денъишмелерни $1',
+'nchanges' => '$1 {{PLURAL:$1|денъиштирме}}',
+'recentchanges' => 'Сонъки денъиштирмелер',
+'recentchanges-legend' => 'Сонъки денъиштирмелер сазламалары',
+'recentchanges-summary' => 'Япылгъан энъ сонъки денъиштирмелерни бу саифеде корип оласынъыз.',
+'recentchanges-feed-description' => 'Бу лента вастасынен викиде сонъки денъиштирмелерни козет.',
+'recentchanges-label-newpage' => 'Бу денъиштирме янъы бир саифе яратты',
+'recentchanges-label-minor' => 'Бу, кичик бир денъиштирме',
+'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъиштирмеси',
+'recentchanges-label-unpatrolled' => 'Бу денъиштирме аля даа тешкерильмеген',
+'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъиштирме:",
+'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъиштирмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
+'rclistfrom' => '$1 тарихындан берли япылгъан денъиштирмелерни косьтер',
+'rcshowhideminor' => 'кичик денъиштирмелерни $1',
 'rcshowhidebots' => 'ботларны $1',
 'rcshowhideliu' => 'къайдлы къулланыджыларны $1',
 'rcshowhideanons' => 'аноним къулланыджыларны $1',
-'rcshowhidepatr' => 'козетильген денъишмелерни $1',
-'rcshowhidemine' => 'меним япкъан денъишмелеримни $1',
-'rclinks' => 'Сонъки $2 куньде япылгъан сонъки $1 денъишмени косьтер;<br /> $3',
+'rcshowhidepatr' => 'козетильген денъиштирмелерни $1',
+'rcshowhidemine' => 'меним япкъан денъиштирмелеримни $1',
+'rclinks' => 'Сонъки $2 куньде япылгъан сонъки $1 денъиштирмени косьтер;<br /> $3',
 'diff' => 'фаркъ',
 'hist' => 'кечмиш',
 'hide' => 'гизле',
@@ -1067,12 +1075,12 @@ $3 мына бу себепни бильдирди: ''$2''",
 'rc-enhanced-hide' => 'Тафсилятыны гизле',
 
 # Recent changes linked
-'recentchangeslinked' => 'Багълы денъишмелер',
-'recentchangeslinked-feed' => 'Багълы денъишмелер',
-'recentchangeslinked-toolbox' => 'Багълы денъишмелер',
-'recentchangeslinked-title' => '"$1" иле багълы денъишмелер',
-'recentchangeslinked-noresult' => 'Сайлангъан вакъытта багълы саифелерде ич бир денъишме олмады.',
-'recentchangeslinked-summary' => "Бу махсус саифеде багълы саифелерде сонъки япылгъан денъишмелер джедвели бар. [[Special:Watchlist|Козетюв джедвелинъиз]]деки саифелер '''къалын''' оларакъ косьтериле.",
+'recentchangeslinked' => 'Багълы денъиштирмелер',
+'recentchangeslinked-feed' => 'Багълы денъиштирмелер',
+'recentchangeslinked-toolbox' => 'Багълы денъиштирмелер',
+'recentchangeslinked-title' => '"$1" иле багълы денъиштирмелер',
+'recentchangeslinked-noresult' => 'Сайлангъан вакъытта багълы саифелерде ич бир денъиштирме олмады.',
+'recentchangeslinked-summary' => "Бу махсус саифеде багълы саифелерде сонъки япылгъан денъиштирмелер джедвели бар. [[Special:Watchlist|Козетюв джедвелинъиз]]деки саифелер '''къалын''' оларакъ косьтериле.",
 'recentchangeslinked-page' => 'Саифе ады:',
 'recentchangeslinked-to' => 'Берильген саифе ерине берильген саифеге багъланты берген олгъан саифелерини косьтер',
 
@@ -1103,7 +1111,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 'filename' => 'Файл',
 'filedesc' => 'Файлгъа аит къыскъа тариф',
 'fileuploadsummary' => 'Къыскъа тариф:',
-'filereuploadsummary' => 'Файл денъишмелери:',
+'filereuploadsummary' => 'Файлнынъ денъиштирильмелери:',
 'filestatus' => 'Таркъатув шартлары:',
 'filesource' => 'Менба:',
 'uploadedfiles' => 'Юкленген файллар',
@@ -1321,7 +1329,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 'protectedpagestext' => 'Бу саифелернинъ денъиштирювге къаршы къорчалавы бар',
 'protectedtitles' => 'Ясакълангъан серлевалар',
 'listusers' => 'Къулланыджылар джедвели',
-'listusers-editsonly' => 'Тек денъишме япкъан къулланыджыларны косьтер',
+'listusers-editsonly' => 'Тек энъ азындан бир денъиштирме япкъан къулланыджыларны косьтер',
 'newpages' => 'Янъы саифелер',
 'newpages-username' => 'Къулланыджы ады:',
 'ancientpages' => 'Энъ эски саифелер',
@@ -1381,7 +1389,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 # Special:ListGroupRights
 'listgrouprights-members' => '(азалар джедвели)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Мектюп ёлланаджакъ адреси ёкътыр',
 'mailnologintext' => 'Дигер къулланыджыларгъа электрон мектюплер ёллап олмакъ ичюн [[Special:UserLogin|отурым ачмалысынъыз]] ве [[Special:Preferences|сазламаларынъызда]] мевджут олгъан e-mail адресининъ саиби олмалысынъыз.',
 'emailuser' => 'Къулланыджыгъа мектюп',
@@ -1411,7 +1419,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 'watchnologin' => 'Отурым ачмакъ керек',
 'watchnologintext' => 'Озь козетюв джедвелинъизни денъиштирмек ичюн [[Special:UserLogin|отурым ачынъыз]]',
 'addedwatchtext' => '"[[:$1]]" саифеси [[Special:Watchlist|козетюв джевделинъизге]] кирсетильди.
-Бу саифедеки ве онынънен багълы саифелердеки оладжакъ денъишмелер бу джедвельде косьтериледжек, эм де олар козьге чарпмасы ичюн [[Special:RecentChanges|янъы денъишмелер джедвелинде]] къалын арифлернен косьтерилир.',
+Бундан сонъ, бу саифеде ве онынъ музакере саифесинде япыладжакъ денъиштирмелер анда косьтериледжек.',
 'removedwatchtext' => '"[[:$1]]" саифеси [[Special:Watchlist|козетюв джедвелинъизден]] ёкъ этильди.',
 'watch' => 'Козет',
 'watchthispage' => 'Бу саифени козет',
@@ -1422,11 +1430,11 @@ $3 мына бу себепни бильдирди: ''$2''",
 'watchlist-details' => 'Музакере саифелерини эсапкъа алмайып, козетюв джедвелинъизде {{PLURAL:$1|1|$1}} саифе бар.',
 'wlheader-enotif' => '* E-mail иле хабер берюв ачылды.',
 'wlheader-showupdated' => "* Сонъки зияретинъизден сонъ денъиштирильген саифелер '''къалын арифлернен''' косьтерильди.",
-'watchmethod-recent' => 'сонъки денъишмелер арасында козеткен саифелеринъиз къыдырыла',
+'watchmethod-recent' => 'сонъки денъиштирмелер арасында козеткен саифелеринъиз къыдырыла',
 'watchmethod-list' => 'козетюв джедвелиндеки саифелер тешкериле',
 'watchlistcontains' => 'Сизинъ козетюв джедвелинъизде {{PLURAL:$1|1|$1}} саифе бар.',
 'iteminvalidname' => '"$1" саифеси мунасебетинен проблема олып чыкъты, эльверишли олмагъан исимдир…',
-'wlnote' => "Ашагъыда саат $3, $4 ичюн сонъки {{PLURAL:$2|саат|'''$2''' саат}} ичинде япылгъан сонъки {{PLURAL:$1|денъишме|'''$1''' денъишме}} косьтериле.",
+'wlnote' => "Ашагъыда саат $3, $4 ичюн сонъки {{PLURAL:$2|саат|'''$2''' саат}} ичинде япылгъан сонъки {{PLURAL:$1|денъиштирме|'''$1''' денъиштирме}} косьтериле.",
 'wlshowlast' => 'Сонъки $1 саат ичюн, $2 кунь ичюн я да $3 косьтер',
 'watchlist-options' => 'Козетюв джедвели сазламалары',
 
@@ -1437,34 +1445,31 @@ $3 мына бу себепни бильдирди: ''$2''",
 'enotif_mailer' => '{{SITENAME}} почта вастасынен хабер берген хызмет',
 'enotif_reset' => 'Джумле саифелерни бакъылгъан оларакъ ишаретле',
 'enotif_impersonal_salutation' => '{{SITENAME}} къулланыджысы',
-'enotif_lastvisited' => 'Сонъки зияретинъизден берли япылгъан денъишмелерни корьмек ичюн $1 бакъынъыз.',
+'enotif_lastvisited' => 'Сонъки зияретинъизден берли япылгъан денъиштирмелерни корьмек ичюн $1 бакъынъыз.',
 'enotif_anon_editor' => 'адсыз (аноним) къулланыджы $1',
 'enotif_body' => 'Сайгъылы $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
-{{SITENAME}} сайтындаки $PAGETITLE серлевалы саифе $PAGEEDITDATE тарихында $PAGEEDITOR тарафындан $CHANGEDORCREATED. Саифенинъ шимдики алыны $PAGETITLE_URL адресинде корип оласынъыз.
-
-$NEWPAGE
-
-Денъишменинъ къыскъа тарифи: $PAGESUMMARY $PAGEMINOREDIT
+Денъиштирменинъ къыскъа тарифи: $PAGESUMMARY $PAGEMINOREDIT
 
 Саифени денъиштирген къулланыджынен багъланмакъ ичюн:
-e-mail адреси: $PAGEEDITOR_EMAIL
+э-маиль адреси: $PAGEEDITOR_EMAIL
 вики саифеси: $PAGEEDITOR_WIKI
 
-Бу саифени зиярет этмесенъиз, бирев оны бир даа денъиштирсе, ич бир тенби беянаты ёлланмайджакъ. Козетюв джедвелинъиздеки бутюн саифелер ичюн тенби сазламаларыны денъиштире билесинъиз.
+Бу саифени зиярет этмесенъиз, бирев оны бир даа денъиштирсе де, ич бир тенби беянаты ёлланмайджакъ. Козетюв джедвелинъиздеки бутюн саифелер ичюн тенби сазламаларыны денъиштире билесинъиз.
 
-{{SITENAME}} тенби системасы.
+{{SITENAME}} бильдирюв системасы
 
 --
 
 Бильдирюв сазламаларыны денъиштирмек ичюн:
 {{canonicalurl:{{#special:Preferences}}}}
 
¡Ð°Ð·Ð»Ð°Ð¼Ð°Ð»Ð°Ñ\80ны денъиштирмек ичюн:
\9aозеÑ\82Ñ\8eв Ð´Ð¶ÐµÐ´Ð²ÐµÐ»Ð¸ Ñ\81азламалаÑ\80Ñ\8bны денъиштирмек ичюн:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-СаиÑ\84ени ÐºÐ¾Ð·ÐµÑ\82Ñ\8eв Ð´Ð¶ÐµÐ´Ð²ÐµÐ»Ð¸Ð½Ð´ÐµÐ½ Ñ\91кÑ\8a Ñ\8dÑ\82мек ичюн:
+СаиÑ\84ени ÐºÐ¾Ð·ÐµÑ\82Ñ\8eв Ð´Ð¶ÐµÐ´Ð²ÐµÐ»Ð¸Ð½Ð´ÐµÐ½ Ñ\87Ñ\8bкÑ\8aаÑ\80макÑ\8a ичюн:
 $UNWATCHURL
 
 Ярдым ве теклифлер ичюн:
@@ -1497,21 +1502,21 @@ $UNWATCHURL
 'deletereasonotherlist' => 'Дигер себеп',
 
 # Rollback
-'rollback' => 'Денъишмелерни кери ал',
+'rollback' => 'Денъиштирмелерни кери ал',
 'rollback_short' => 'кери ал',
 'rollbacklink' => 'эски алына кетир',
 'rollbackfailed' => 'кери алув мувафакъиетсиз',
-'cantrollback' => 'Денъишмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир',
+'cantrollback' => 'Денъиштирмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир',
 'editcomment' => "Денъиштирме изааты: \"''\$1''\" эди.",
-'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) тарафындан япылгъан денъишмелер кери алынып, [[User:$1|$1]] тарафындан денъиштирильген эвельки версия кери кетирильди.',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) тарафындан япылгъан денъиштирмелер кери алынып, [[User:$1|$1]] тарафындан денъиштирильген эвельки версия кери кетирильди.',
 
 # Protect
 'protectlogpage' => 'Къорчалав журналы',
-'protectlogtext' => 'Ашагъыдаки, къорчалавгъа алув/чыкъарув иле багълы денъишмелер журналыдыр.
+'protectlogtext' => 'Ашагъыдаки, къорчалавгъа алув/къорчалавдан чыкъарув иле багълы денъишмелер журналыдыр.
 Къорчалангъан саифелер [[Special:ProtectedPages|там джедвелини]] де коре билесинъиз.',
 'protectedarticle' => '"[[$1]]" къорчалав алтына алынды',
 'modifiedarticleprotection' => '«[[$1]]» ичюн къорчалав севиеси денъиштирильди',
-'unprotectedarticle' => 'къорчалав чыкъарлыды: "[[$1]]"',
+'unprotectedarticle' => '"[[$1]]" саифесинден къорчалав чыкъарлыды',
 'prot_1movedto2' => '"[[$1]]" саифесининъ ады "[[$2]]" оларакъ денъиштирильди',
 'protect-legend' => 'Къорчалавны тасдыкъла',
 'protectcomment' => 'Себеп:',
@@ -1523,9 +1528,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'Бу саифе шимди къорчалав алтындадыр, чюнки ашагъыда джедвелленген ве каскадлы къорчалав алтындаки {{PLURAL:$1|1|$1}} саифеде къулланыла.
 Бу саифенинъ къорчалав севиесини денъиштирип оласынъыз, амма каскадлы къорчалав тесир этильмейджек.',
 'protect-default' => 'Бутюн къулланыджыларгъа рухсет бер',
-'protect-fallback' => '«$1» изни керектир',
-'protect-level-autoconfirmed' => 'Ð\9aÑ\8aайдÑ\81Ñ\8bз Ð²Ðµ Ñ\8fнÑ\8aÑ\8b ÐºÑ\8aÑ\83лланÑ\8bджÑ\8bлаÑ\80нÑ\8b Ð±Ð»Ð¾Ðº Ñ\8dÑ\82',
-'protect-level-sysop' => 'тек идареджилер',
+'protect-fallback' => 'Тек «$1» рухсети олгъан къулланыджылар ичюн',
+'protect-level-autoconfirmed' => 'Тек Ð°Ð²Ñ\82омаÑ\82ик Ñ\82аÑ\81дÑ\8bкÑ\8aлангÑ\8aан ÐºÑ\8aÑ\83лланÑ\8bджÑ\8bлаÑ\80гÑ\8aа Ñ\80Ñ\83Ñ\85Ñ\81еÑ\82 Ð±ÐµÑ\80иле',
+'protect-level-sysop' => 'Тек идареджилерге рухсет бериле',
 'protect-summary-cascade' => 'каскадлы',
 'protect-expiring' => 'бите: $1 (UTC)',
 'protect-cascade' => 'Бу саифеде къулланылгъан бутюн саифелерни къорчалавгъа ал (каскадлы къорчалав)',
@@ -1562,11 +1567,11 @@ $UNWATCHURL
 'blanknamespace' => '(Эсас)',
 
 # Contributions
-'contributions' => 'Къулланыджынынъ исселери',
+'contributions' => '{{GENDER:$1|Къулланыджынынъ}} исселери',
 'contributions-title' => '$1 къулланыджысынынъ исселери',
-'mycontris' => 'Исселерим',
+'mycontris' => 'Исселер',
 'contribsub2' => '$1 ($2)',
-'nocontribs' => 'Бу критерийлерге уйгъан денъишме тапыламады',
+'nocontribs' => 'Бу критерийлерге уйгъан денъиштирме тапыламады',
 'uctop' => '(сонъки)',
 'month' => 'Бу ай (ве ондан эрте):',
 'year' => 'Бу сене (ве ондан эрте):',
@@ -1641,13 +1646,13 @@ $UNWATCHURL
 # Move page
 'move-page' => '$1 саифесининъ адыны денъиштиреятасыз',
 'move-page-legend' => 'Саифенинъ адыны денъиштирюв',
-'movepagetext' => "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъишмелер журналы да янъы адгъа авуштырылыр.
-Эски ад янъы адгъа ёллама олур. Эски серлевагъа ёллама саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёллама саифелерини озюнъиз тюзетмеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.
+'movepagetext' => "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъиштирмелер журналы да янъы адгъа авуштырылыр.
+Эски ады янъы адына ёллама олур. Эски серлевагъа ёллама саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёллама саифелерини озюнъиз тюзетмеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.
 
-Янъы адда бир саифе энди бар олса, ад денъишмеси '''япылмайджакъ''', анджакъ бар олгъан саифе ёллама я да бош олса ад денъишмеси мумкюн оладжакъ. Бу демек ки, саифе адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.
+Янъы адда бир саифе энди бар олса, ад денъиштирилюви '''япылмайджакъ''', анджакъ бар олгъан саифе ёллама я да бош олса ад денъиштирилюви мумкюн оладжакъ. Бу демек ки, саифенинъ адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.
 
 '''ТЕНБИ!'''
\90д Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80илÑ\8eви Ð¿Ð¾Ð¿Ñ\83лÑ\8fÑ\80 Ñ\81аиÑ\84елеÑ\80 Ð¸Ñ\87Ñ\8eн Ð±Ñ\83Ñ\8eк Ð´ÐµÐ½Ñ\8aиÑ\88мелеÑ\80ге Ñ\81ебеп Ð¾Ð»Ð° Ð±Ð¸Ð»Ð¸Ñ\80. Ð\9bÑ\8eÑ\82Ñ\84ен, Ð´ÐµÐ½Ñ\8aиÑ\88ме япмаздан эвель ола биледжеклерни козь огюне алынъыз.",
\90д Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80илÑ\8eви Ð¿Ð¾Ð¿Ñ\83лÑ\8fÑ\80 Ñ\81аиÑ\84елеÑ\80 Ð¸Ñ\87Ñ\8eн Ð±Ñ\83Ñ\8eк Ð²Ðµ Ð±ÐµÐºÐ»ÐµÐ½Ð¼ÐµÐ³ÐµÐ½ Ð´ÐµÐ½Ñ\8aиÑ\88мелеÑ\80ге Ñ\81ебеп Ð¾Ð»Ð° Ð±Ð¸Ð»Ð¸Ñ\80. Ð\9bÑ\8eÑ\82Ñ\84ен, Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80ме япмаздан эвель ола биледжеклерни козь огюне алынъыз.",
 'movepagetalktext' => "Къошулгъан музакере саифесининъ де (бар олса)
 ады автоматик тарзда денъиштириледжек. '''Мустесналар:'''
 
@@ -1677,7 +1682,7 @@ $UNWATCHURL
 'movepage-page-exists' => '$1 саифеси энди бар, ве автоматик оларакъ янъыдан язылып оламаз.',
 'movepage-page-moved' => '$1 саифесининъ ады $2 оларакъ денъиштирильди.',
 'movepage-page-unmoved' => '$1 саифесининъ ады $2 оларакъ денъиштирилип оламай.',
-'movelogpage' => 'Ад денъишмелери журналы',
+'movelogpage' => 'Ад денъиштирильмелери журналы',
 'movelogpagetext' => 'Ашагъыда булунгъан джедвель ады денъиштирильген саифелерни косьтере',
 'movesubpage' => '{{PLURAL:$1|Алт саифе|Алт саифелер}}',
 'movesubpagetext' => 'Бу саифенинъ ашагъыда косьтерильген $1 {{PLURAL:$1|алт саифеси|алт саифеси}} бар.',
@@ -1752,11 +1757,11 @@ MediaWiki интерфейсининъ чешит тиллерге терджи
 'tooltip-n-mainpage-description' => 'Баш саифеге бар',
 'tooltip-n-portal' => 'Лейха узерине, не къайдадыр, нени япып оласынъыз',
 'tooltip-n-currentevents' => 'Агъымдаки вакъиаларнен багълы сонъки малюмат',
-'tooltip-n-recentchanges' => 'Викиде япылгъан сонъки денъишмелернинъ джедвели.',
+'tooltip-n-recentchanges' => 'Викиде япылгъан сонъки денъиштирмелернинъ джедвели.',
 'tooltip-n-randompage' => 'Тесадюфий бир саифени косьтерюв',
 'tooltip-n-help' => 'Ярдым болюги',
 'tooltip-t-whatlinkshere' => 'Бу саифеге багъланты берген дигер вики саифелерининъ джедвели',
-'tooltip-t-recentchangeslinked' => 'Бу саифеге багъланты берген саифелердеки сонъки денъишмелер',
+'tooltip-t-recentchangeslinked' => 'Бу саифеге багъланты берген саифелердеки сонъки денъиштирмелер',
 'tooltip-feed-rss' => 'Бу саифе ичюн RSS трансляциясы',
 'tooltip-feed-atom' => 'Бу саифе ичюн atom трансляциясы',
 'tooltip-t-contributions' => 'Къулланыджынынъ иссе джедвелине бакъув',
@@ -1768,16 +1773,16 @@ MediaWiki интерфейсининъ чешит тиллерге терджи
 'tooltip-ca-nstab-main' => 'Саифени косьтер',
 'tooltip-ca-nstab-user' => 'Къулланыджы саифесини косьтер',
 'tooltip-ca-nstab-media' => 'Медиа саифесини косьтер',
-'tooltip-ca-nstab-special' => 'Бу, махсус саифе олгъаны ичюн денъишме япамазсынъыз.',
+'tooltip-ca-nstab-special' => 'Бу, махсус саифе олгъаны ичюн денъиштирме япамазсынъыз.',
 'tooltip-ca-nstab-project' => 'Лейха саифесини косьтер',
 'tooltip-ca-nstab-image' => 'Ресим саифесини косьтер',
 'tooltip-ca-nstab-mediawiki' => 'Система беянатыны косьтер',
 'tooltip-ca-nstab-template' => 'Шаблонны косьтер',
 'tooltip-ca-nstab-help' => 'Ярдым саифесини косьтер',
 'tooltip-ca-nstab-category' => 'Категория саифесини косьтер',
-'tooltip-minoredit' => 'Бу, кичик бир денъишмедир деп бельгиле',
-'tooltip-save' => 'Япкъан денъишмелеринъизни сакъла',
-'tooltip-preview' => 'Ð\91акÑ\8aÑ\8bп Ñ\87Ñ\8bкÑ\8aÑ\83в. Ð¡Ð°ÐºÑ\8aламаздан Ñ\8dвелÑ\8c Ð±Ñ\83 Ñ\85Ñ\83Ñ\81Ñ\83Ñ\81иеÑ\82ни ÐºÑ\8aÑ\83лланÑ\8bп Ñ\8fпкÑ\8aан Ð´ÐµÐ½Ñ\8aиÑ\88мелеринъизни бакъып чыкъынъыз!',
+'tooltip-minoredit' => 'Бу, кичик бир денъиштирмедир деп бельгиле',
+'tooltip-save' => 'Япкъан денъиштирмелеринъизни сакълай',
+'tooltip-preview' => 'Ð\91акÑ\8aÑ\8bп Ñ\87Ñ\8bкÑ\8aÑ\83в. Ð¡Ð°ÐºÑ\8aламаздан Ñ\8dвелÑ\8c Ð±Ñ\83 Ñ\84Ñ\83нкÑ\86иÑ\8fнÑ\8b ÐºÑ\8aÑ\83лланÑ\8bп Ñ\8fпкÑ\8aан Ð´ÐµÐ½Ñ\8aиÑ\88Ñ\82иÑ\80мелеринъизни бакъып чыкъынъыз!',
 'tooltip-diff' => 'Метинге сиз япкъан денъишикликлерни косьтерир.',
 'tooltip-compareselectedversions' => 'Сайлангъан эки версия арасындаки фаркъларны косьтер.',
 'tooltip-watch' => 'Саифени козетюв джедвелине кирсет',
@@ -1956,7 +1961,7 @@ MediaWiki интерфейсининъ чешит тиллерге терджи
 'monthsall' => 'Эписи',
 'limitall' => 'бутюни',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-mail адресини тасдыкъла',
 'confirmemail_noemail' => '[[Special:Preferences|Къулланыджы сазламаларынъызда]] догъру бир e-mail адресинъиз ёкъ.',
 'confirmemail_text' => '{{SITENAME}} сайтынынъ e-mail функцияларыны къулланмаздан эвель e-mail адресинъизнинъ тасдыкъланмасы керек. Адресинъизге тасдыкъ e-mail мектюбини ёлламакъ ичюн ашагъыдаки дёгмени басынъыз. Ёлланаджакъ беянатта адресинъизни тасдыкъламакъ ичюн браузеринъизнен иришип оладжакъ, тасдыкъ коду олгъан бир багъланты оладжакъ.',
@@ -2066,6 +2071,9 @@ $5
 'watchlisttools-edit' => 'Козетюв джедвелини корь ве денъиштир',
 'watchlisttools-raw' => 'Козетюв джедвелини адий метин оларакъ денъиштир',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|музакере]])',
+
 # Special:Version
 'version' => 'Версия',
 
index 4bc2ac1..ad088f0 100644 (file)
@@ -102,11 +102,11 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Bağlantılarnıñ tübüni sızuv:',
 'tog-justify' => 'Metinni eki yanğa tegizle',
-'tog-hideminor' => '"Soñki deñişmeler" saifesinde kiçik deñişmelerni gizle',
-'tog-hidepatrolled' => 'Soñki deñişmeler köstergende teşkerilgen deñişmelerni gizle',
+'tog-hideminor' => '"Soñki deñiştirmeler" saifesinde kiçik deñiştirmelerni gizle',
+'tog-hidepatrolled' => 'Soñki deñiştirmeler köstergende teşkerilgen deñiştirmelerni gizle',
 'tog-newpageshidepatrolled' => 'Yañı saifeler köstergende teşkerilgen saifelerni gizle',
-'tog-extendwatchlist' => 'Közetüv cedvelini, tek soñki degil, bütün deñişmelerni körmek içün kenişlet',
-'tog-usenewrc' => 'Tafsilâtlı soñki deñişmeler cedvelini qullan (JavaScript kerek)',
+'tog-extendwatchlist' => 'Közetüv cedvelini, tek soñki degil, bütün deñiştirmelerni körmek içün kenişlet',
+'tog-usenewrc' => 'Soñki deñiştirmeler saifesindeki ve közetüv cedvelindeki deñiştirmelerni gruppalandıruv (JavaScript kerek)',
 'tog-numberheadings' => 'Serlevalarnı avtomatik nomeralandır',
 'tog-showtoolbar' => 'Saifeni deñiştirgen vaqıtta yardımcı dögmelerni köster. (JavaScript)',
 'tog-editondblclick' => 'Saifeni çift basıp deñiştirmege başla (JavaScript)',
@@ -114,17 +114,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bölük serlevasına oñ basqanda deñiştirüv penceresini aç. (JavaScript)',
 'tog-showtoc' => 'Münderice cedveli köster (3 daneden ziyade serlevası olğan saifeler içün)',
 'tog-rememberpassword' => 'Kirişimni bu brauzerde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)',
-'tog-watchcreations' => 'Men yaratqan saifelerni közetüv cedvelime kirset',
-'tog-watchdefault' => 'Men deñiştirgen saifelerni közetüv cedvelime kirset',
-'tog-watchmoves' => 'Menim tarafımdan adı deñiştirilgen saifelerni közetüv cedvelime kirset',
-'tog-watchdeletion' => 'Men yoq etken saifelerni közetüv cedvelime kirset',
-'tog-minordefault' => 'Yapqan deñişmelerimni kiçik deñişmedir dep işaretle',
+'tog-watchcreations' => 'Yaratqan saifelerimni ve yüklegen fayllarımnı közetüv cedvelime kirset',
+'tog-watchdefault' => 'Deñiştirgen saife ve fayllarımnı közetüv cedvelime kirset',
+'tog-watchmoves' => 'Adını men deñiştirgen saife ve fayllarnı közetüv cedvelime kirset',
+'tog-watchdeletion' => 'Yoq etken saife ve fayllarımnı közetüv cedvelime kirset',
+'tog-minordefault' => 'Yapqan deñiştirmelerimni kiçik deñiştirmedir dep işaretle',
 'tog-previewontop' => 'Baqıp çıquvnı yazuv pencereniñ üstünde köster',
 'tog-previewonfirst' => 'Deñiştirme saifesine keçkende baqıp çıquvnı köster',
 'tog-nocache' => 'Brauzer saifelerni afızasında tutmasın',
-'tog-enotifwatchlistpages' => 'Közetüv cedvelimdeki bir saife deñiştirilgende maña e-mail yolla',
+'tog-enotifwatchlistpages' => 'Közetüv cedvelimdeki bir saife ya da fayl deñiştirilgende maña e-mail yolla',
 'tog-enotifusertalkpages' => 'Qullanıcı saifem deñiştirilgende maña e-mail yolla',
-'tog-enotifminoredits' => 'Kiçik deñişme olğanda da de maña e-mail yolla',
+'tog-enotifminoredits' => 'Saife ya da faylda kiçik deñiştirilme olğanda da de maña e-mail yolla',
 'tog-enotifrevealaddr' => 'Bildirüv mektüplerinde e-mail adresimni köster',
 'tog-shownumberswatching' => 'Közetken qullanıcı sayısını köster',
 'tog-oldsig' => 'Şimdiki imza:',
@@ -133,21 +133,21 @@ $messages = array(
 '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şmeniñ qısqa tarifini boş taşlasam meni tenbile',
-'tog-watchlisthideown' => 'Közetüv cedvelimden menim deñişmelerimni gizle',
-'tog-watchlisthidebots' => 'Közetüv cedvelimden bot deñişmelerini gizle',
-'tog-watchlisthideminor' => 'Közetüv cedvelimden kiçik deñişmelerni gizle',
-'tog-watchlisthideliu' => 'Közetüv cedvelimde qaydlı qullanıcılar tarafından yapılğan deñişmelerni kösterme',
-'tog-watchlisthideanons' => 'Közetüv cedvelimde qaydsız (anonim) qullanıcılar tarafından yapılğan deñişmelerni kösterme',
-'tog-watchlisthidepatrolled' => 'Közetüv cedvelinde teşkerilgen deñişmelerni gizle',
+'tog-forceeditsummary' => 'Deñiştirmeniñ qısqa tarifini boş taşlasam meni tenbile',
+'tog-watchlisthideown' => 'Közetüv cedvelimden menim deñiştirmelerimni gizle',
+'tog-watchlisthidebots' => 'Közetüv cedvelimden bot deñiştirmelerini gizle',
+'tog-watchlisthideminor' => 'Közetüv cedvelimden kiçik deñiştirmelerni gizle',
+'tog-watchlisthideliu' => 'Közetüv cedvelimde qaydlı qullanıcılar tarafından yapılğan deñiştirmelerni kösterme',
+'tog-watchlisthideanons' => 'Közetüv cedvelimde qaydsız (anonim) qullanıcılar tarafından yapılğan deñiştirmelerni kösterme',
+'tog-watchlisthidepatrolled' => 'Közetüv cedvelinde teşkerilgen deñiştirmelerni gizle',
 'tog-ccmeonemails' => 'Diger qullanıcılarğa yollağan mektüplerimniñ kopiyalarını maña da yolla',
 'tog-diffonly' => 'Teñeştirme saifelerinde saifeniñ esas mündericesini kösterme',
 'tog-showhiddencats' => 'Gizli kategoriyalarnı köster',
-'tog-norollbackdiff' => 'Lâğu etilgen deñişmelerni kösterme',
+'tog-norollbackdiff' => 'Keri qaytaruv yapılğan soñ versiyalar arasındaki farqnı kösterme',
 
 'underline-always' => 'Daima',
 'underline-never' => 'Asla',
-'underline-default' => 'Brauzer qarar bersin',
+'underline-default' => 'Brauzer sazlamaları qullanılsın',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Yazuv penceresinde urufat (şrift) türü:',
@@ -234,6 +234,7 @@ $messages = array(
 'newwindow' => '(yañı bir pencerede açılır)',
 'cancel' => 'Lâğu',
 'moredotdotdot' => 'Daa...',
+'morenotlisted' => 'Başqa bir şey yoq...',
 'mypage' => 'Saife',
 'mytalk' => 'Muzakere',
 'anontalk' => 'Bu IP-niñ muzakeresi',
@@ -257,7 +258,7 @@ $messages = array(
 'vector-action-protect' => 'Qorçala',
 'vector-action-undelete' => 'Yañıdan yarat',
 'vector-action-unprotect' => 'Qorçalavnı deñiştir',
-'vector-simplesearch-preference' => 'Tafsilâtlı qıdıruv tekliflerini işlet (tek Vektor resimlemesi içün)',
+'vector-simplesearch-preference' => 'Sadeleştirilgen qıdıruv satırını işlet (tek Vektor körünişi içün)',
 'vector-view-create' => 'Yarat',
 'vector-view-edit' => 'Deñiştir',
 'vector-view-history' => 'Keçmişini köster',
@@ -267,6 +268,7 @@ $messages = array(
 'namespaces' => 'İsim fezaları',
 'variants' => 'Variantlar',
 
+'navigation-heading' => 'Dolaşuv menüsi',
 'errorpagetitle' => 'Hata',
 'returnto' => '$1.',
 'tagline' => '{{GRAMMAR:ablative|{{SITENAME}}}}',
@@ -288,8 +290,8 @@ $messages = array(
 'create-this-page' => 'Bu saifeni yarat',
 'delete' => 'Yoq et',
 'deletethispage' => 'Saifeni yoq et',
-'undelete_short' => '{{PLURAL:$1|1|$1}} deñişmeni keri ketir',
-'viewdeleted_short' => '{{PLURAL:$1|bir yoq etilgen deñişmeni|$1 yoq etilgen deñişmeni}} köster.',
+'undelete_short' => '{{PLURAL:$1|1|$1}} deñiştirmeni keri ketir',
+'viewdeleted_short' => '{{PLURAL:$1|bir yoq etilgen deñiştirmeni|$1 yoq etilgen deñiştirmeni}} köster.',
 'protect' => 'Qorçala',
 'protect_change' => 'deñiştir',
 'protectthispage' => 'Saifeni qorçalav altına al',
@@ -360,7 +362,11 @@ $1',
 'retrievedfrom' => 'Menba – "$1"',
 'youhavenewmessages' => 'Yañı $1 bar ($2).',
 'newmessageslink' => 'beyanatıñız',
-'newmessagesdifflink' => 'muzakere saifeñizniñ soñki deñişkeni',
+'newmessagesdifflink' => 'muzakere saifeñizniñ soñki deñiştirilmesi',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir qullanıcıdan|$3 qullanıcıdan}} $1 bar. ($2)',
+'youhavenewmessagesmanyusers' => 'Bir qaç qullanıcıdan $1 bar. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|yañı beyanatıñız|yañı beyanatlarıñız}}',
+'newmessagesdifflinkplural' => 'muzakere saifeñizniñ soñki {{PLURAL:$1|deñiştirilmesi|deñiştirilmeleri}}',
 'youhavenewmessagesmulti' => '$1 saifesinde yañı beyanatıñız bar.',
 'editsection' => 'deñiştir',
 'editold' => 'deñiştir',
@@ -375,7 +381,7 @@ $1',
 'collapsible-expand' => 'Kenişlet',
 'thisisdeleted' => '$1 körmege ya da keri ketirmege isteysiñizmi?',
 'viewdeleted' => '$1 kör?',
-'restorelink' => 'yoq etilgen {{PLURAL:$1|1|$1}} deñişmesi',
+'restorelink' => 'yoq etilgen {{PLURAL:$1|1|$1}} deñiştirmesi',
 'feedlinks' => 'Bu şekilde:',
 'feed-invalid' => 'Abune kanalınıñ çeşiti yañlıştır.',
 'feed-unavailable' => 'Sindikatsiya lentaları qullanılıp оlamay.',
@@ -413,7 +419,7 @@ Bar olğan bütün mahsus saifelerni [[Special:SpecialPages|{{int:specialpages}}
 'error' => 'Hata',
 'databaseerror' => 'Malümat bazasınıñ hatası',
 'dberrortext' => 'Malümat bazasından soratqanda sintaksis hatası oldı.
-Bu yazılımdaki bir hata ola bile.
+Bu programmadaki bir hata ola bile.
 "<tt>$2</tt>" funktsiyasından olğan malümat bazasından soñki soratma:
 <blockquote><tt>$1</tt></blockquote>.
 Malümat bazasınıñ bildirgen hatası "<tt>$3: $4</tt>".',
@@ -452,10 +458,12 @@ Lütfen, URL yazıp bundan [[Special:ListUsers/sysop|idarecige]] haber beriñiz.
 'badarticleerror' => 'Siz yapmağa istegen işlev bu saifede yapılıp оlamay.',
 'cannotdelete' => '"$1" saife ya da faylı yoq etilip olamadı. Başqa bir qullanıcı tarafından yoq etilgen ola bile.',
 'cannotdelete-title' => '"$1" saifesini yoq etmege olmaz',
+'delete-hook-aborted' => 'Yoq etüv çengel protsedurasınen toqtatıldı.
+İç bir izaat berilmedi.',
 'badtitle' => 'Ruhsetsiz serleva',
 'badtitletext' => 'İstenilgen saife adı doğru degil, o boştır, yahut tillerara bağlantı ya da vikilerara bağlantı doğru yazılmağan. Belki saife adında yasaqlanğan işaretler bar.',
-'perfcached' => 'Malümatlar daa evelceden azırlanğan ola bilir. Bu sebepten eskirgen ola bilir! A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Aşağıda keşte saqlanğan malümat buluna, soñki yañaruv zamanı: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Aşağıdaki malümat keşten alındı ve eskirgen ola bilir! Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.',
+'perfcachedts' => 'Aşağıdaki malümat keşten alındı, keşniñ soñki yañartılğan vaqtı: $1. Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.',
 'querypage-no-updates' => 'Bu saifeni deñiştirmege şimdi izin yoq. Bu malümat aman yañartılmaycaq.',
 'wrong_wfQuery_params' => 'wrong_wfQuery_params - wfQuery() funktsiyası içün izinsiz parametrler<br />
 Funktsiya: $1<br />
@@ -464,10 +472,10 @@ Soratma: $2',
 'viewsource-title' => '$1 saifesiniñ menba kodu',
 'actionthrottled' => 'Areket toqtaldı',
 'actionthrottledtext' => 'Spamğa qarşı küreş sebebinden bu areketni az vaqıt içinde çoq kere tekrarlap olamaysıñız. Mümkün olğan qarardan ziyade areket yaptıñız. Bir qaç daqqadan soñ tekrarlap baqıñız.',
-'protectedpagetext' => 'Bu saifeni kimse deñiştirmesin dep o blok etildi.',
+'protectedpagetext' => 'Bu saifede deñiştirme ya da başqa bir areket yapılmasın dep o blok etildi.',
 'viewsourcetext' => 'Saifeniñ kodunı közden keçirip kopiyalay bilesiñiz:',
-'protectedinterface' => 'Bu saifede sistema interfeysiniñ metni bar. Onıñ içün mında bir hata çıqmasın dep onı deñiştirmek yasaq.',
-'editinginterface' => "'''Tenbi''': İçinde MediaWiki sistemasınıñ beyanatı olğan bir saifeni deñiştireyatasız. Bu saifedeki deñişmeler qullanıcı interfeysiniñ körünişini diger qullanıcılar içün de deñiştirecek. Lütfen, tercimeler içün [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] saytını (MediaWiki resmiy lokalizatsiya leyhası) qullanıñız.",
+'protectedinterface' => 'Bu saifede viki interfeysiniñ metni bar. Onıñ içün mında bir hata çıqmasın dep onı deñiştirmek yasaq.',
+'editinginterface' => "'''Tenbi''': MediaWiki sistemasınıñ interfeys saifesini deñiştireyatasız. Bu saifedeki deñiştirmeler interfeysniñ körünişini bu vikiniñ başqa qullanıcıları içün de deñiştirecek. Lütfen, viki interfeysini tercime etmek içün [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] saytını (MediaWiki resmiy lokalizatsiya leyhası) qullanıñız.",
 'sqlhidden' => '(SQL istintağı saqlı)',
 'cascadeprotected' => 'Bu saifeni deñiştirip olamazsıñız, çünki kaskad qorçalav altında bulunğan {{PLURAL:$1|saifege|saifelerge}} mensüptir:
 $2',
@@ -603,17 +611,17 @@ Parоliñizni endi muvafaqiyetnen deñiştirdiñiz ya da yañı bir muvaqqat par
 'hr_tip' => 'Gorizontal sızıq (pek sıq qullanmañız)',
 
 # Edit pages
-'summary' => 'Deñişmeniñ qısqa tarifi:',
+'summary' => 'Deñiştirmeniñ qısqa tarifi:',
 'subject' => 'Mevzu/serleva:',
-'minoredit' => 'Bu, kiçik deñişmedir',
+'minoredit' => 'Bu, kiçik deñiştirmedir',
 'watchthis' => 'Saifeni közet',
 'savearticle' => 'Saifeni saqla',
 'preview' => 'Baqıp çıquv',
 'showpreview' => 'Baqıp çıq',
 'showlivepreview' => 'Tez baqıp çıquv',
-'showdiff' => 'Deñişmelerni köster',
-'anoneditwarning' => "'''Diqqat''': Saytqa kirmegeniñizden sebep deñişmeler tarihına siziñ IP adresiñiz yazılır.",
-'anonpreviewwarning' => 'Saytqa kirmediñiz. Saifeni saqlasañız deñişmeler tarihına siziñ IP adresiñiz yazılır.',
+'showdiff' => 'Deñiştirmelerni köster',
+'anoneditwarning' => "'''Diqqat''': Saytqa kirmegeniñizden sebep deñiştirmeler tarihına siziñ IP adresiñiz yazılır.",
+'anonpreviewwarning' => 'Saytqa kirmediñiz. Saifeni saqlasañız deñiştirmeler tarihına siziñ IP adresiñiz yazılır.',
 'missingsummary' => "'''Hatırlatma.''' Deñiştirmeleriñizni qısqadan tarif etmediñiz. \"Saifeni saqla\" dögmesine tekrar basuv ile deñiştirmeleriñiz tefsirsiz saqlanacaqlar.",
 'missingcommenttext' => 'Lütfen, aşağıda tefsir yazıñız.',
 'missingcommentheader' => "'''Hatırlatma:''' Tefsir mevzusını/serlevasını yazmadıñız. \"{{int:savearticle}}\" dögmesine tekrar basqan soñ tefsiriñiz serlevasız saqlanır.",
@@ -667,11 +675,11 @@ Eger siz anonim qullanıcı olsañız ve sizge kelgen beyanatlarnı yañlıştan
 'userpage-userdoesnotexist-view' => '"$1" adlı qullanıcı esabı yoq.',
 'blocked-notice-logextract' => 'Bu qullanıcı şimdi blok etilgen.
 Blok etüv jurnalınıñ soñki yazısı aşağıda kösterilgen:',
-'clearyourcache' => "'''İhtar:''' Belki sazlamalarıñıznı saqlağandan soñ deñişmelerni körmek içün brauzeriñizniñ keşini temizlemek kerek olursıñız.
-'''Mozilla / Firefox / Safari:''' ''Shift'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-Shift-R'' basmaq (Mac içün ''Command-R'');
-'''Konqueror:''' saifeni yañıdan yükle dögmesine ya da F5 basımaq;
-'''Opera:''' ''Tools → Preferences'' menüsinde keşni temizlemek;
-'''Internet Explorer:''' ''Ctrl'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-F5'' basmaq.",
+'clearyourcache' => "'''İhtar:''' Belki sazlamalarıñıznı saqlağandan soñ deñişmelerni körmek içün brauzeriñizniñ keşini temizlemek kerek olursıñız. Keş temizlemek içün şunı yapmaq kerek:
+* '''Firefox / Safari:''' ''Shift'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-F5'' ya da ''Ctrl-R'' basmaq (Mac içün ''⌘-R'')
+* '''Google Chrome:''' ''Ctrl-Shift-R'' basmaq (Mac içün ''⌘-Shift-R'')
+* '''Internet Explorer:''' ''Ctrl'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-F5'' basmaq
+* '''Opera:''' ''Tools → Preferences'' menüsinde keşni temizlemek",
 'usercssyoucanpreview' => "'''Tevsiye:''' Yañı CSS faylını teşkermek içün saifeni saqlamazdan evel \"{{int:showpreview}}\" dögmesine basıñız.",
 'userjsyoucanpreview' => "'''Tevsiye:''' Yañı JavaScript-iñizni teşkermek içün saifeni saqlamazdan evel \"{{int:showpreview}}\" dögmesine basıñız.",
 'usercsspreview' => "'''Unutmañız, bu tek baqıp çıquv - qullanıcı CSS faylıñız alâ daa saqlanmadı!'''",
@@ -686,21 +694,21 @@ coyulğanı sebebinden saqlap olamadı. Bu vaqtınca problemadır. Lütfen, tekr
 Bundan da soñ olıp çıqmasa, malümat lokal faylğa saqlañız da brauzeriñizni bir qapatıp
 açıñız.'''",
 'session_fail_preview_html' => "'''Afu etiñiz! HTML sessiyanıñ malümatları ğayıp olğanı sebebinden siziñ deñiştirmeleriñizni qabul etmege imkân yoqtır.'''",
-'token_suffix_mismatch' => "'''Siziñ programmañız türlendirüv penceresinde punktuatsiya işaretlerini doğru işlemegeni içün yapqan deñişmeleriñiz qabul olunmadı. Deñişmeler saifeniñ metni körünişiniñ bozulmaması içün lâğu etildi.
+'token_suffix_mismatch' => "'''Siziñ programmañıznıñ öz türlendirüv penceresinde punktuatsiya işaretlerini doğru işlemegeni içün yapqan deñiştirmeleriñiz qabul olunmadı. Deñiştirmeler saife metniniñ körünişi bozulmasın dep lâğu etildi.
 Bunıñ kibi problemalar hatalı anonim web-proksiler qullanuvdan çıqıp ola.'''",
 'editing' => '"$1" saifesini deñiştireyatasız',
 'editingsection' => '"$1" saifesinde bölük deñiştireyatasız',
 'editingcomment' => '$1 saifesini deñiştireyatasız (yañı bölük)',
-'editconflict' => 'Deñişmeler konflikti: $1',
-'explainconflict' => "Siz saifeni deñiştirgen vaqıtta başqa biri de deñişme yaptı.
+'editconflict' => 'Deñiştirmeler çatışması: $1',
+'explainconflict' => "Siz saifeni deñiştirgende başqa biri de deñiştirme yaptı.
 Yuqarıdaki yazı saifeniñ şimdiki alını köstere.
-Siziñ deñişmeleriñiz astında kösterildi. Şimdi yapqan deñişmeleriñizni aşağı pencereden yuqarı pencerege avuştırmaq kereksiñiz.
+Siziñ deñiştirmeleriñiz astında kösterildi. Şimdi yapqan deñiştirmeleriñizni aşağı pencereden yuqarı pencerege avuştırmaq kereksiñiz.
 \"{{int:savearticle}}\"ğa basqanda '''tek''' yuqarıdaki yazı saqlanacaq.",
 'yourtext' => 'Siziñ metniñiz',
 'storedversion' => 'Saqlanğan metin',
 'nonunicodebrowser' => "'''TENBİ: Brauzeriñizde Unicode kodlaması tanılmaz. Saifeler deñiştirgende bütün ASCII olmağan işaretlerniñ yerine olarnıñ onaltılıq kodu yazılır.'''",
 'editingold' => "'''DİQQAT: Saifeniñ eski bir versiyasını deñiştireyatasız.
-Saifeni saqlağanıñızdan soñ bu tarihlı versiyadan künümizge qadar olğan deñişmeler yoq olacaq.'''",
+Saifeni saqlağanıñızdan soñ bu tarihlı versiyadan künümizge qadar olğan deñiştirmeler yoq olacaq.'''",
 'yourdiff' => 'Farqlar',
 'copyrightwarning' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına qoşulğan bütün isseler $2 muqavelesi dairesindedir (tafsilât içün $1 saifesine baqıñız).
 Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.<br />
@@ -710,9 +718,9 @@ Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına,
 Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız ($1 baqıñız).<br />
 '''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''",
 'longpageerror' => "'''TENBİ: Bu saife $1 kilobayt büyükligindedir. Azamiy (maksimal) izinli büyüklik ise $2 kilobayt. Bu saife saqlanıp olamaz.'''",
-'readonlywarning' => "'''TENBİ: Baqım sebebi ile malümat bazası şimdi kilitlidir. Bu sebepten yapqan deñişmeleriñizni şimdi saqlap olamasıñız. Yazğanlarıñıznı başqa bir türlendirüv programmasına alıp saqlap ve daa soñ bir daa mında ketirip saqlap olursıñız'''
+'readonlywarning' => "'''TENBİ: Baqım sebebi ile malümat bazası şimdi kilitlidir. Bu sebepten yapqan deñiştirmeleriñizni şimdi saqlap olamasıñız. Yazğanlarıñıznı vaqtınca bir tekst faylında saqlap ve daa soñra bir daa mında ketirip saqlap olursıñız'''
 
-Malümat bazasını kilitlegen idareci öz areketini böyle añlattı: $1",
+Malümat bazasını kilitlegen idareci öz areketini şöyle añlattı: $1",
 'protectedpagewarning' => "'''Tenbi: Bu saife qorçalanğan ve tek idareciler tarafından deñiştirilip olur.'''
 Jurnalnıñ soñki yazısı aşağıda berilgen:",
 'semiprotectedpagewarning' => "'''Tenbi''': Bu saife tek qaydlı qullanıcılar tarafından deñiştirilip olur.
@@ -741,20 +749,20 @@ Saifeniñ yoq etilüv ve avuştırıluv qaydları mında berilgen:",
 'moveddeleted-notice' => 'Bu saife yoq etilgen.
 Saifeniñ yoq etilüv ve avuştırıluv qaydları aşağıda berilgen.',
 'log-fulllog' => 'Jurnalnı tolusınca köster',
-'edit-hook-aborted' => 'Deñişme çengel protsedurasınen toqtatıldı.
+'edit-hook-aborted' => 'Deñiştirme çengel protsedurasınen toqtatıldı.
 İç bir izaat berilmedi.',
 'edit-gone-missing' => 'Saife yañartılıp olamay.
 Belki o yoq etilgendir.',
-'edit-conflict' => 'Deñişmeler çatışması.',
-'edit-no-change' => 'Yapqan deñişmeñiz saqlanmağan, çünki metinde bir türlü deñişme yapılmadı.',
+'edit-conflict' => 'Deñiştirmeler çatışması.',
+'edit-no-change' => 'Yapqan deñiştirmeñiz saqlanmağan, çünki metinde bir türlü deñiştirilme yapılmadı.',
 'edit-already-exists' => 'Yañı saifeni yaratmaq mümkün degil.
 O endi bar.',
 
 # "Undo" feature
-'undo-success' => 'Deñişme lâğu etile bile. Lütfen, mına bu deñişmelerni yapmağa istegeniñizden emin olmaq içün versiyalar teñeştirilüvini közden keçirip deñişmelerni saqlamaq içün "Saifeni saqla" dögmesine basıñız.',
-'undo-failure' => 'Aradaki deñişmeler bir-birine kelişikli olmağanı içün deñişme lâğu etilip olamay.',
-'undo-norev' => 'Deñişme lâğu etilip olamaz, çünki o ya da yoq, ya da bar edi, amma yoq etilgen.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) qullanıcısınıñ $1 nomeralı deñişmesini lâğu etüv.',
+'undo-success' => 'Deñiştirme lâğu etile bile. Lütfen, mına bu deñiştirmelerni yapmağa istegeniñizden emin olmaq içün versiyalar teñeştirilüvini közden keçirip deñiştirmelerni saqlamaq içün "Saifeni saqla" dögmesine basıñız.',
+'undo-failure' => 'Aradaki deñiştirmeler bir-birine kelişikli olmağanı içün deñiştirme lâğu etilip olamay.',
+'undo-norev' => 'Deñiştirme lâğu etilip olamaz, çünki o ya da yoq, ya da bar edi, amma yoq etilgen.',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) qullanıcısınıñ $1 nomeralı deñiştirmesini lâğu etüv.',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Esap yaratmaqnıñ iç çaresi yoq.',
@@ -777,8 +785,8 @@ $3 mına bu sebepni bildirdi: ''$2''",
 'last' => 'soñki',
 'page_first' => 'ilk',
 'page_last' => 'soñki',
-'histlegend' => "(farq) = şimdiki alnen aradaki farq,
-(soñki) = evelki alnen aradaki farq, '''k''' = kiçik deñişme",
+'histlegend' => "Farq saylanuvı: Teñeştirmege istegen eki versiyañıznı saylap '''{{int:compare-submit}}''' dögmesine basıñız.<br />
+Añlatmalar: '''({{int:cur}})''' = şimdiki versiyanen arasındaki farq, '''({{int:last}})''' = evelki versiyanen arasındaki farq, '''{{int:minoreditletter}}''' = kiçik deñiştirme.",
 'history-fieldset-title' => 'Keçmişke baquv',
 'history-show-deleted' => 'Tek yoq etilgenler',
 'histfirst' => 'Eñ eski',
@@ -787,22 +795,22 @@ $3 mına bu sebepni bildirdi: ''$2''",
 'historyempty' => '(boş)',
 
 # Revision feed
-'history-feed-title' => 'Deñişmeler tarihı',
-'history-feed-description' => 'Vikide bu saifeniñ deñişmeler tarihı',
+'history-feed-title' => 'Deñiştirmeler tarihı',
+'history-feed-description' => 'Vikide bu saifeniñ deñiştirmeler tarihı',
 'history-feed-item-nocomment' => '$2 üstünde $1',
 'history-feed-empty' => 'İstenilgen saife yoq.
 O yoq eilgen ya da adı deñiştirilgen ola bile.
 Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 
 # Revision deletion
-'rev-deleted-comment' => '(deñişmeniñ tarifi yoq etildi)',
+'rev-deleted-comment' => '(deñiştirmeniñ tarifi yoq etildi)',
 'rev-deleted-user' => '(qullanıcı adı yoq etildi)',
 'rev-deleted-event' => '(qayd yoq etildi)',
 'rev-delundel' => 'köster/gizle',
 'rev-showdeleted' => 'köster',
 'revisiondelete' => 'Versiyalarnı yoq et/keri ketir',
 'revdelete-hide-comment' => 'Qısqa tarifni kösterme',
-'revdelete-hide-user' => 'Deñişmeni yapqannıñ qullanıcı adını/IP-ni gizle',
+'revdelete-hide-user' => 'Deñiştirmeni yapqannıñ qullanıcı adını/IP-ni gizle',
 'revdelete-hide-restricted' => 'Malümatnı adiy qullanıcılardan kibi idarecilerden de gizle',
 'revdelete-submit' => 'Saylanğan {{PLURAL:$1|versiyağa|versiyalarğa}} işlet',
 'revdel-restore' => 'körünüvni deñiştir',
@@ -812,7 +820,7 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'mergelogpagetext' => 'Saifelerniñ keçmiş versiyalarınıñ bir-birlerinen eñ soñki birleştirilmeleri aşağıdaki cedvelde kösterilgen.',
 
 # Diffs
-'history-title' => '"$1" saifesiniñ deñişmeler tarihı',
+'history-title' => '"$1" saifesiniñ deñiştirmeler tarihı',
 'difference-multipage' => '(Saifeler arasındaki farq)',
 'lineno' => '$1 satır:',
 'compareselectedversions' => 'Saylanğan versiyalarnı teñeştir',
@@ -886,8 +894,8 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 
 # Preferences page
 'preferences' => 'Sazlamalar',
-'mypreferences' => 'Sazlamalarım',
-'prefs-edits' => 'Deñişmeler sayısı:',
+'mypreferences' => 'Sazlamalar',
+'prefs-edits' => 'Deñiştirmeler sayısı:',
 'prefsnologin' => 'Oturım açmadıñız',
 'prefsnologintext' => 'Şahsiy sazlamalarıñıznı deñiştirmek içün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} oturım açmaq]</span> kereksiñiz.',
 'changepassword' => 'Parol deñiştir',
@@ -896,18 +904,18 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'datedefault' => 'Standart',
 'prefs-datetime' => 'Tarih ve saat',
 'prefs-personal' => 'Qullanıcı malümatı',
-'prefs-rc' => 'Soñki deñişmeler',
+'prefs-rc' => 'Soñki deñiştirmeler',
 'prefs-watchlist' => 'Közetüv cedveli',
 'prefs-watchlist-days' => 'Közetüv cedvelinde kösterilecek kün sayısı:',
 'prefs-watchlist-days-max' => 'Eñ çoq $1 {{PLURAL:$1|kün|kün}}',
-'prefs-watchlist-edits' => 'Kenişletilgen közetüv cedvelinde kösterilecek deñişmeler sayısı:',
+'prefs-watchlist-edits' => 'Kenişletilgen közetüv cedvelinde kösterilecek deñiştirmeler sayısı:',
 'prefs-watchlist-edits-max' => 'Eñ çoq 1000',
 'prefs-watchlist-token' => 'Közetüv cedveli işareti:',
 'prefs-misc' => 'Diger sazlamalar',
 'prefs-resetpass' => 'Parolni deñiştir',
 'prefs-email' => 'E-mail sazlamaları',
 'prefs-rendering' => 'Körüniş',
-'saveprefs' => 'Deñişmelerni saqla',
+'saveprefs' => 'Saqla',
 'resetprefs' => 'Saqlanmağan sazlamalarnı ilk alına ketir',
 'restoreprefs' => 'Bütün ög belgilengen sazlamalarnı qaytar',
 'prefs-editing' => 'Saifelerni deñiştirüv',
@@ -916,10 +924,10 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'columns' => 'Sutun',
 'searchresultshead' => 'Qıdıruv',
 'resultsperpage' => 'Saifede kösterilecek tapılğan saife sayısı',
-'recentchangesdays' => 'Soñki deñişmeler saifesinde kösterilecek kün sayısı:',
+'recentchangesdays' => 'Soñki deñiştirmeler saifesinde kösterilecek kün sayısı:',
 'recentchangesdays-max' => '(eñ çoq $1 {{PLURAL:$1|kün|kün}})',
-'recentchangescount' => 'Ög belgilengen kösterilecek deñişmeler sayısı:',
-'prefs-help-recentchangescount' => 'Bu, soñki deñişmeler, saife keçmişi ve jurnal saifelerinde qullanıla.',
+'recentchangescount' => 'Ög belgilengen kösterilecek deñiştirmeler sayısı:',
+'prefs-help-recentchangescount' => 'Bu, soñki deñiştirmeler, saife keçmişi ve jurnal saifelerinde qullanıla.',
 'savedprefs' => 'Sazlamalarıñız saqlandı.',
 'timezonelegend' => 'Saat quşağı:',
 'localtime' => 'Yerli vaqıt:',
@@ -966,7 +974,7 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'prefs-help-gender' => 'Mecburiy degil: wiki tarafından doğru cınıs adreslevi içün qullanıla. Bu malümat umumiy olacaq.',
 'email' => 'E-mail',
 'prefs-help-realname' => 'Kerçek adıñız (mecburiy degildir).
-Eger bildirseñiz, saifelerdeki deñişmelerni kimniñ yapqanını köstermek içün qullanılacaq.',
+Eger bildirseñiz, saifelerdeki deñiştirmelerni kimniñ yapqanını köstermek içün qullanılacaq.',
 'prefs-help-email' => 'E-mail (mecburiy degildir). E-mail adresi bildirilgen olsa, paroliñizni unutsañız, sizge yañı bir parol yollamaq içün qullanılır.',
 'prefs-help-email-required' => 'E-mail adresi lâzim.',
 'prefs-info' => 'Esas malümat',
@@ -1029,25 +1037,25 @@ Eger bildirseñiz, saifelerdeki deñişmelerni kimniñ yapqanını köstermek i
 'action-edit' => 'bu saifeni deñiştirmege',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|deñişme|deñişme}}',
-'recentchanges' => 'Soñki deñişmeler',
-'recentchanges-legend' => 'Soñki deñişmeler sazlamaları',
-'recentchanges-summary' => 'Yapılğan eñ soñki deñişikliklerni bu saifede körip olasıñız.',
-'recentchanges-feed-description' => 'Bu lenta vastasınen vikide soñki deñişmelerni közet.',
-'recentchanges-label-newpage' => 'Bu deñişme yañı bir saife yarattı',
-'recentchanges-label-minor' => 'Bu, kiçik bir deñişme',
-'recentchanges-label-bot' => 'Bu bir botnıñ yapqan deñişmesi',
-'recentchanges-label-unpatrolled' => 'Bu deñişme alâ daa teşkerilmegen',
-'rcnote' => "$4 $5 tarihında soñki {{PLURAL:$2|künde|'''$2''' künde}} yapılğan '''{{PLURAL:$1|1|$1}}''' deñişme:",
-'rcnotefrom' => "'''$2''' tarihından itibaren yapılğan deñişmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
-'rclistfrom' => '$1 tarihından berli yapılğan deñişmelerni köster',
-'rcshowhideminor' => 'kiçik deñişmelerni $1',
+'nchanges' => '$1 {{PLURAL:$1|deñiştirme}}',
+'recentchanges' => 'Soñki deñiştirmeler',
+'recentchanges-legend' => 'Soñki deñiştirmeler sazlamaları',
+'recentchanges-summary' => 'Yapılğan eñ soñki deñişitirmelerni bu saifede körip olasıñız.',
+'recentchanges-feed-description' => 'Bu lenta vastasınen vikide soñki deñiştirmelerni közet.',
+'recentchanges-label-newpage' => 'Bu deñiştirme yañı bir saife yarattı',
+'recentchanges-label-minor' => 'Bu, kiçik bir deñiştirme',
+'recentchanges-label-bot' => 'Bu bir botnıñ yapqan deñiştirmesi',
+'recentchanges-label-unpatrolled' => 'Bu deñiştirme alâ daa teşkerilmegen',
+'rcnote' => "$4 $5 tarihında soñki {{PLURAL:$2|künde|'''$2''' künde}} yapılğan '''{{PLURAL:$1|1|$1}}''' deñiştirme:",
+'rcnotefrom' => "'''$2''' tarihından itibaren yapılğan deñiştirmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
+'rclistfrom' => '$1 tarihından berli yapılğan deñiştirmelerni köster',
+'rcshowhideminor' => 'kiçik deñiştirmelerni $1',
 'rcshowhidebots' => 'botlarnı $1',
 'rcshowhideliu' => 'qaydlı qullanıcılarnı $1',
 'rcshowhideanons' => 'anonim qullanıcılarnı $1',
-'rcshowhidepatr' => 'közetilgen deñişmelerni $1',
-'rcshowhidemine' => 'menim yapqan deñişmelerimni $1',
-'rclinks' => 'Soñki $2 künde yapılğan soñki $1 deñişmeni köster;<br /> $3',
+'rcshowhidepatr' => 'közetilgen deñiştirmelerni $1',
+'rcshowhidemine' => 'menim yapqan deñiştirmelerimni $1',
+'rclinks' => 'Soñki $2 künde yapılğan soñki $1 deñiştirmeni köster;<br /> $3',
 'diff' => 'farq',
 'hist' => 'keçmiş',
 'hide' => 'gizle',
@@ -1063,12 +1071,12 @@ Eger bildirseñiz, saifelerdeki deñişmelerni kimniñ yapqanını köstermek i
 'rc-enhanced-hide' => 'Tafsilâtını gizle',
 
 # Recent changes linked
-'recentchangeslinked' => 'Bağlı deñişmeler',
-'recentchangeslinked-feed' => 'Bağlı deñişmeler',
-'recentchangeslinked-toolbox' => 'Bağlı deñişmeler',
-'recentchangeslinked-title' => '"$1" ile bağlı deñişmeler',
-'recentchangeslinked-noresult' => 'Saylanğan vaqıtta bağlı saifelerde iç bir deñişme olmadı.',
-'recentchangeslinked-summary' => "Bu mahsus saifede bağlı saifelerde soñki yapılğan deñişmeler cedveli bar. [[Special:Watchlist|Közetüv cedveliñiz]]deki saifeler '''qalın''' olaraq kösterile.",
+'recentchangeslinked' => 'Bağlı deñiştirmeler',
+'recentchangeslinked-feed' => 'Bağlı deñiştirmeler',
+'recentchangeslinked-toolbox' => 'Bağlı deñiştirmeler',
+'recentchangeslinked-title' => '"$1" ile bağlı deñiştirmeler',
+'recentchangeslinked-noresult' => 'Saylanğan vaqıtta bağlı saifelerde iç bir deñiştirme olmadı.',
+'recentchangeslinked-summary' => "Bu mahsus saifede bağlı saifelerde soñki yapılğan deñiştirmeler cedveli bar. [[Special:Watchlist|Közetüv cedveliñiz]]deki saifeler '''qalın''' olaraq kösterile.",
 'recentchangeslinked-page' => 'Saife adı:',
 'recentchangeslinked-to' => 'Berilgen saife yerine berilgen saifege bağlantı bergen olğan saifelerni köster',
 
@@ -1099,7 +1107,7 @@ Daa körgezmeli körüniş içün [[Special:NewFiles|yañı fayllar galereyasın
 'filename' => 'Fayl',
 'filedesc' => 'Faylğa ait qısqa tarif',
 'fileuploadsummary' => 'Qısqa tarif:',
-'filereuploadsummary' => 'Fayl deñişmeleri:',
+'filereuploadsummary' => 'Faylnıñ deñiştirilmeleri:',
 'filestatus' => 'Tarqatuv şartları:',
 'filesource' => 'Menba:',
 'uploadedfiles' => 'Yüklengen fayllar',
@@ -1316,7 +1324,7 @@ Er satırda birinci ve ekinci yollamağa bağlantılar da, ekinci yollamanıñ m
 'protectedpagestext' => 'Bu saifelerniñ deñiştirüvge qarşı qorçalavı bar',
 'protectedtitles' => 'Yasaqlanğan serlevalar',
 'listusers' => 'Qullanıcılar cedveli',
-'listusers-editsonly' => 'Tek deñişme yapqan qullanıcılarnı köster',
+'listusers-editsonly' => 'Tek eñ azından bir deñiştirme yapqan qullanıcılarnı köster',
 'newpages' => 'Yañı saifeler',
 'newpages-username' => 'Qullanıcı adı:',
 'ancientpages' => 'Eñ eski saifeler',
@@ -1376,7 +1384,7 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 # Special:ListGroupRights
 'listgrouprights-members' => '(azalar cedveli)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Mektüp yollanacaq adresi yoqtır',
 'mailnologintext' => 'Diger qullanıcılarğa elektron mektüpler yollap olmaq içün [[Special:UserLogin|oturım açmalısıñız]] ve [[Special:Preferences|sazlamalarıñızda]] mevcut olğan e-mail adresiniñ saibi olmalısıñız.',
 'emailuser' => 'Qullanıcığa mektüp',
@@ -1405,7 +1413,8 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 'watchlistanontext' => 'Közetüv cedvelini baqmaq ya da deñiştirmek içün $1 borclusıñız.',
 'watchnologin' => 'Oturım açmaq kerek',
 'watchnologintext' => 'Öz közetüv cedveliñizni deñiştirmek içün [[Special:UserLogin|oturım açıñız]]',
-'addedwatchtext' => '"[[:$1]]" saifesi [[Special:Watchlist|kozetüv cevdeliñizge]] kirsetildi. Bu saifedeki ve onıñnen bağlı saifelerdeki olacaq deñişmeler bu cedvelde kösterilecek, em de olar közge çarpması içün [[Special:RecentChanges|yañı deñişmeler cedveli]]nde qalın ariflernen kösterilir.',
+'addedwatchtext' => '"[[:$1]]" saifesi [[Special:Watchlist|közetüv cevdeliñizge]] kirsetildi.
+Bundan soñ, bu saifede ve onıñ muzakere saifesinde yapılacaq deñiştirmeler anda kösterilecek.',
 'removedwatchtext' => '"[[:$1]]" saifesi [[Special:Watchlist|közetüv cedveliñizden]] yoq etildi.',
 'watch' => 'Közet',
 'watchthispage' => 'Bu saifeni közet',
@@ -1416,11 +1425,11 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 'watchlist-details' => 'Muzakere saifelerini esapqa almayıp, közetüv cedveliñizde {{PLURAL:$1|1|$1}} saife bar.',
 'wlheader-enotif' => '* E-mail ile haber berüv açıldı.',
 'wlheader-showupdated' => "* Soñki ziyaretiñizden soñ deñiştirilgen saifeler '''qalın ariflernen''' kösterildi.",
-'watchmethod-recent' => 'soñki deñişmeler arasında közetken saifeleriñiz qıdırıla',
+'watchmethod-recent' => 'soñki deñiştirmeler arasında közetken saifeleriñiz qıdırıla',
 'watchmethod-list' => 'közetüv cedvelindeki saifeler teşkerile',
 'watchlistcontains' => 'Siziñ közetüv cedveliñizde {{PLURAL:$1|1|$1}} saife bar.',
 'iteminvalidname' => '"$1" saifesi munasebetinen problema olıp çıqtı, elverişli olmağan isimdir…',
-'wlnote' => "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñişme|'''$1''' deñişme}} kösterile.",
+'wlnote' => "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñiştirme|'''$1''' deñiştirme}} kösterile.",
 'wlshowlast' => 'Soñki $1 saat içün, $2 kün içün ya da $3 köster',
 'watchlist-options' => 'Közetüv cedveli sazlamaları',
 
@@ -1431,16 +1440,13 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 'enotif_mailer' => '{{SITENAME}} poçta vastasınen haber bergen hızmet',
 'enotif_reset' => 'Cümle saifelerni baqılğan olaraq işaretle',
 'enotif_impersonal_salutation' => '{{SITENAME}} qullanıcısı',
-'enotif_lastvisited' => 'Soñki ziyaretiñizden berli yapılğan deñişmelerni körmek içün $1 baqıñız.',
+'enotif_lastvisited' => 'Soñki ziyaretiñizden berli yapılğan deñiştirmelerni körmek içün $1 baqıñız.',
 'enotif_anon_editor' => 'adsız (anonim) qullanıcı $1',
 'enotif_body' => 'Sayğılı $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
-{{SITENAME}} saytındaki $PAGETITLE saifesi $PAGEEDITDATE künü $PAGEEDITOR tarafından $CHANGEDORCREATED. Saifeniñ şimdiki alını $PAGETITLE_URL adresinde körip olasıñız.
-
-$NEWPAGE
-
-Deñişmeniñ qısqa tarifi: $PAGESUMMARY $PAGEMINOREDIT
+Deñiştirmeniñ qısqa tarifi: $PAGESUMMARY $PAGEMINOREDIT
 
 Saifeni deñiştirgen qullanıcınen bağlanmaq içün:
 e-mail adresi: $PAGEEDITOR_EMAIL
@@ -1448,9 +1454,10 @@ viki saifesi: $PAGEEDITOR_WIKI
 
 Bu saifeni ziyaret etmeseñiz, birev onı bir daa deñiştirse de, iç bir tenbi beyanatı yollanmaycaq. Közetüv cedveliñizdeki bütün saifeler içün tenbi sazlamalarını deñiştire bilesiñiz.
 
-{{SITENAME}} tenbi sisteması.
+{{SITENAME}} bildirüv sisteması
 
 --
+
 Bildirüv sazlamalarını deñiştirmek içün:
 {{canonicalurl:{{#special:Preferences}}}}
 
@@ -1490,21 +1497,21 @@ yaqın zamanda yoq etilgenlerni körmek içün: $2.',
 'deletereasonotherlist' => 'Diger sebep',
 
 # Rollback
-'rollback' => 'Deñişmelerni keri al',
+'rollback' => 'Deñiştirmelerni keri al',
 'rollback_short' => 'keri al',
 'rollbacklink' => 'eski alına ketir',
 'rollbackfailed' => 'keri aluv muvafaqiyetsiz',
-'cantrollback' => 'Deñişmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir',
+'cantrollback' => 'Deñiştirmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir',
 'editcomment' => "Deñiştirme izaatı: \"''\$1''\" edi.",
-'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan deñişmeler keri alınıp, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri ketirildi.',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan deñiştirmeler keri alınıp, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri ketirildi.',
 
 # Protect
 'protectlogpage' => 'Qorçalav jurnalı',
-'protectlogtext' => 'Aşağıdaki, saifeni qorçalavğa aluv/çıqaruv ile bağlı deñişmeler jurnalıdır.
+'protectlogtext' => 'Aşağıdaki, saifeni qorçalavğa aluv/qorçalavdan çıqaruv ile bağlı deñişmeler jurnalıdır.
 Qorçalanğan saifeler [[Special:ProtectedPages|tam cedvelini]] de köre bilesiñiz.',
 'protectedarticle' => '"[[$1]]" qorçalav altına alındı',
 'modifiedarticleprotection' => '"[[$1]]" içün qorçalav seviyesi deñiştirildi',
-'unprotectedarticle' => 'qorçalav çıqarlıdı: "[[$1]]"',
+'unprotectedarticle' => '"[[$1]]" saifesinden qorçalav çıqarlıdı',
 'prot_1movedto2' => '"[[$1]]" saifesiniñ adı "[[$2]]" olaraq deñiştirildi',
 'protect-legend' => 'Qorçalavnı tasdıqla',
 'protectcomment' => 'Sebep:',
@@ -1516,9 +1523,9 @@ Qorçalanğan saifeler [[Special:ProtectedPages|tam cedvelini]] de köre bilesi
 'protect-cascadeon' => 'Bu saife şimdi qorçalav altındadır, çünki aşağıda cedvellengen ve kaskadlı qorçalav altındaki {{PLURAL:$1|1|$1}} saifede qullanıla.
 Bu saifeniñ qorçalav seviyesini deñiştirip olasıñız, amma kaskadlı qorçalav tesir etilmeycek.',
 'protect-default' => 'Bütün qullanıcılarğa ruhset ber',
-'protect-fallback' => '"$1" izni kerektir',
-'protect-level-autoconfirmed' => 'Qaydsız ve yañı qullanıcılarnı blоk et',
-'protect-level-sysop' => 'tek idareciler',
+'protect-fallback' => 'Tek "$1" ruhseti olğan qullanıcılar içün',
+'protect-level-autoconfirmed' => 'Tek avtomatik tasdıqlanğan qullanıcılarğa ruhset berile',
+'protect-level-sysop' => 'Tek idarecilerge ruhset berile',
 'protect-summary-cascade' => 'kaskadlı',
 'protect-expiring' => 'bite: $1 (UTC)',
 'protect-cascade' => 'Bu saifede qullanılğan bütün saifelerni qorçalavğa al (kaskadlı qorçalav)',
@@ -1555,11 +1562,11 @@ Bu saifeniñ qorçalav seviyesini deñiştirip olasıñız, amma kaskadlı qorç
 'blanknamespace' => '(Esas)',
 
 # Contributions
-'contributions' => 'Qullanıcınıñ isseleri',
+'contributions' => '{{GENDER:$1|Qullanıcınıñ}} isseleri',
 'contributions-title' => '$1 qullanıcısınıñ isseleri',
-'mycontris' => 'İsselerim',
+'mycontris' => 'İsseler',
 'contribsub2' => '$1 ($2)',
-'nocontribs' => 'Bu kriteriylerge uyğan deñişme tapılamadı',
+'nocontribs' => 'Bu kriteriylerge uyğan deñiştirme tapılamadı',
 'uctop' => '(soñki)',
 'month' => 'Bu ay (ve ondan erte):',
 'year' => 'Bu sene (ve ondan erte):',
@@ -1634,13 +1641,13 @@ Blok etmelerni közden keçirmek içün [[Special:BlockList|IP adresi blok etilg
 # Move page
 'move-page' => '$1 saifesiniñ adını deñiştireyatasız',
 'move-page-legend' => 'Saifeniñ adını deñiştirüv',
-'movepagetext' => "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñişmeler jurnalı da yañı adğa avuştırılır.
-Eski ad yañı adğa yollama olur. Eski serlevağa yollama saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yollama saifelerini özüñiz tüzetmege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.
+'movepagetext' => "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñiştirmeler jurnalı da yañı adğa avuştırılır.
+Eski adı yañı adına yollama olur. Eski serlevağa yollama saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yollama saifelerini özüñiz tüzetmege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.
 
-Yañı adda bir saife endi bar olsa, ad deñişmesi '''yapılmaycaq''', ancaq bar olğan saife yollama ya da boş olsa ad deñişmesi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.
+Yañı adda bir saife endi bar olsa, ad deñiştirilüvi '''yapılmaycaq''', ancaq bar olğan saife yollama ya da boş olsa ad deñiştirilüvi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.
 
 '''TENBİ!'''
-Ad deñiştirilüvi populâr saifeler içün büyük deñişmelerge sebep ola bilir. Lütfen, deñişme yapmazdan evel ola bileceklerni köz ögüne alıñız.",
+Ad deñiştirilüvi populâr saifeler içün büyük ve beklenmegen deñişmelerge sebep ola bilir. Lütfen, deñiştirme yapmazdan evel ola bileceklerni köz ögüne alıñız.",
 'movepagetalktext' => "Qoşulğan muzakere saifesiniñ de (bar olsa) adı avtomatik tarzda deñiştirilecek. '''Müstesnalar:'''
 
 *Aynı bu isimde boş olmağan bir muzakere saifesi endi bar;
@@ -1669,7 +1676,7 @@ Lütfen, başqa bir ad saylap yazıñız.',
 'movepage-page-exists' => '$1 saifesi endi bar, ve avtomatik olaraq yañıdan yazılıp olamaz.',
 'movepage-page-moved' => '$1 saifesiniñ adı $2 olaraq deñiştirildi.',
 'movepage-page-unmoved' => '$1 saifesiniñ adı $2 olaraq deñiştirilip olamay.',
-'movelogpage' => 'Ad deñişmeleri jurnalı',
+'movelogpage' => 'Ad deñiştirilmeleri jurnalı',
 'movelogpagetext' => 'Aşağıda bulunğan cedvel adı deñiştirilgen saifelerni köstere',
 'movesubpage' => '{{PLURAL:$1|Alt saife|Alt saifeler}}',
 'movesubpagetext' => 'Bu saifeniñ aşağıda kösterilgen $1 {{PLURAL:$1|alt saifesi|alt saifesi}} bar.',
@@ -1744,11 +1751,11 @@ MediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege istese
 'tooltip-n-mainpage-description' => 'Baş saifege bar',
 'tooltip-n-portal' => 'Leyha üzerine, ne qaydadır, neni yapıp olasıñız',
 'tooltip-n-currentevents' => 'Ağımdaki vaqialarnen bağlı soñki malümat',
-'tooltip-n-recentchanges' => 'Vikide yapılğan soñki deñişmelerniñ cedveli.',
+'tooltip-n-recentchanges' => 'Vikide yapılğan soñki deñiştirmelerniñ cedveli.',
 'tooltip-n-randompage' => 'Tesadüfiy bir saifeni kösterüv',
 'tooltip-n-help' => 'Yardım bölügi',
 'tooltip-t-whatlinkshere' => 'Bu saifege bağlantı bergen diger viki saifeleriniñ cedveli',
-'tooltip-t-recentchangeslinked' => 'Bu saifege bağlantı bergen saifelerdeki soñki deñişmeler',
+'tooltip-t-recentchangeslinked' => 'Bu saifege bağlantı bergen saifelerdeki soñki deñiştirmeler',
 'tooltip-feed-rss' => 'Bu saife içün RSS translâtsiyası',
 'tooltip-feed-atom' => 'Bu saife içün atom translâtsiyası',
 'tooltip-t-contributions' => 'Qullanıcınıñ isse cedveline baquv',
@@ -1760,16 +1767,16 @@ MediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege istese
 'tooltip-ca-nstab-main' => 'Saifeni köster',
 'tooltip-ca-nstab-user' => 'Qullanıcı saifesini köster',
 'tooltip-ca-nstab-media' => 'Media saifesini köster',
-'tooltip-ca-nstab-special' => 'Bu, mahsus saife olğanı içün deñişme yapamazsıñız.',
+'tooltip-ca-nstab-special' => 'Bu, mahsus saife olğanı içün deñiştirme yapamazsıñız.',
 'tooltip-ca-nstab-project' => 'Leyha saifesini köster',
 'tooltip-ca-nstab-image' => 'Resim saifesini köster',
 'tooltip-ca-nstab-mediawiki' => 'Sistema beyanatını köster',
 'tooltip-ca-nstab-template' => 'Şablonnı köster',
 'tooltip-ca-nstab-help' => 'Yardım saifesini köster',
 'tooltip-ca-nstab-category' => 'Kategoriya saifesini köster',
-'tooltip-minoredit' => 'Bu, kiçik bir deñişmedir dep belgile',
-'tooltip-save' => 'Yapqan deñişmeleriñizni saqla',
-'tooltip-preview' => 'Baqıp çıquv. Saqlamazdan evel bu hususiyetni qullanıp yapqan deñişmeleriñizni baqıp çıqıñız!',
+'tooltip-minoredit' => 'Bu, kiçik bir deñiştirmedir dep belgile',
+'tooltip-save' => 'Yapqan deñiştirmeleriñizni saqlay',
+'tooltip-preview' => 'Baqıp çıquv. Saqlamazdan evel bu funktsiyanı qullanıp yapqan deñiştirmeleriñizni baqıp çıqıñız!',
 'tooltip-diff' => 'Metinge siz yapqan deñişikliklerni kösterir.',
 'tooltip-compareselectedversions' => 'Saylanğan eki versiya arasındaki farqlarnı köster.',
 'tooltip-watch' => 'Saifeni közetüv cedveline kirset',
@@ -1948,7 +1955,7 @@ Er satır * işaretinen başlamalı. Satırnıñ birinci bağlantısı qоşmağ
 'monthsall' => 'Episi',
 'limitall' => 'bütüni',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-mail adresini tasdıqla',
 'confirmemail_noemail' => '[[Special:Preferences|Qullanıcı sazlamalarıñızda]] dоğru bir e-mail adresiñiz yoq.',
 'confirmemail_text' => '{{SITENAME}} saytınıñ e-mail funktsiyalarını qullanmazdan evel e-mail adresiñizniñ tasdıqlanması kerek. Adresiñizge tasdıq e-mail mektübini yollamaq içün aşağıdaki dögmeni basıñız. Yollanacaq beyanatta adresiñizni tasdıqlamaq içün brauzeriñiznen irişip olacaq, tasdıq kodu olğan bir bağlantı olacaq.',
@@ -2060,6 +2067,9 @@ Bitirgen soñ "{{int:Watchlistedit-raw-submit}}" yazısına basıñız.
 'watchlisttools-edit' => 'Közetüv cedvelini kör ve deñiştir',
 'watchlisttools-raw' => 'Közetüv cedvelini adiy metin olaraq deñiştir',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|muzakere]])',
+
 # Special:Version
 'version' => 'Versiya',
 
index 706ba27..d9f70ce 100644 (file)
@@ -834,8 +834,8 @@ a používat staré heslo.',
 'blocked-mailpassword' => 'Vaší IP adrese byla zablokována možnost editace, a současně s tím je zablokována funkce pro zaslání nového hesla.',
 'eauthentsent' => 'Potvrzovací e-mail byl zaslán na zadanou adresu.
 Před tím, než vám na tuto adresu budou moci být zasílány další zprávy, následujte instrukce v e-mailu, abyste potvrdili, že tato adresa skutečně patří vám.',
-'throttled-mailpassword' => 'Heslo již bylo jednou zasláno během uplynulých $1 hodin.
-Heslo může být zasláno jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.',
+'throttled-mailpassword' => 'Během {{PLURAL:$1|poslední hodiny|posledních $1 hodin}} již bylo heslo jednou zasláno.
+Kvůli prevenci zneužívání lze heslo zaslat jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.',
 'mailerror' => 'Chyba při zasílání e-mailu: $1',
 'acct_creation_throttle_hit' => 'Uživatelé přicházející z vaší IP adresy už dnes vytvořili $1 {{PLURAL:$1|účet|účty|účtů}}, což je dovolené maximum. Proto v tuto chvíli není dovoleno z této IP adresy další účty zakládat.',
 'emailauthenticated' => 'Vaše e-mailová adresa byla ověřena dne $2 v $3.',
@@ -886,7 +886,7 @@ Možná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové d
 
 # Special:PasswordReset
 'passwordreset' => 'Reset hesla',
-'passwordreset-text' => 'Pro obdržení e-mailu s připomenutím detailů vašeho účtu vyplňte tento formulář.',
+'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-pretext' => '{{PLURAL:$1||Zadejte jeden z údajů níže}}',
@@ -896,8 +896,7 @@ Možná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové d
 'passwordreset-capture-help' => 'Pokud zaškrtnete toto políčko, bude e-mail (s dočasným heslem) kromě zaslání uživateli zobrazen i vám.',
 'passwordreset-email' => 'E-mailová adresa:',
 'passwordreset-emailtitle' => 'Informace k účtu na {{grammar:6sg|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Někdo (patrně vy, z IP adresy $1) zažádal o připomenutí informací k vašemu
-účtu na {{grammar:6sg|{{SITENAME}}}} ($4). K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:
+'passwordreset-emailtext-ip' => 'Někdo (patrně vy, z IP adresy $1) zažádal o nastavení nového hesla k vašemu účtu na {{grammar:6sg|{{SITENAME}}}} ($4). K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:
 
 $2
 
@@ -905,7 +904,7 @@ $2
 Nyní byste se měl(a) přihlásit a zvolit si nové heslo. Pokud tento požadavek
 poslal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete ho
 tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.',
-'passwordreset-emailtext-user' => '{{gender:$1|Uživatel|Uživatelka|Uživatel}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|zažádal|zažádala|zažádal}} o připomenutí informací k vašemu
+'passwordreset-emailtext-user' => '{{gender:$1|Uživatel|Uživatelka}} $1 na {{grammar:6sg|{{SITENAME}}}} {{gender:$1|zažádal|zažádala}} o nastavení nového hesla k vašemu
 účtu na {{grammar:6sg|{{SITENAME}}}} ($4). K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:
 
 $2
@@ -916,9 +915,9 @@ poslal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete h
 tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.',
 'passwordreset-emailelement' => 'Uživatelské jméno: $1
 Dočasné heslo: $2',
-'passwordreset-emailsent' => 'E-mail s heslem byl odeslán.',
-'passwordreset-emailsent-capture' => 'Byl vygenerován připomínací e-mail, který je zobrazen níže.',
-'passwordreset-emailerror-capture' => 'Byl vygenerován připomínací e-mail, který je zobrazen níže, ale nepodařilo se ho odeslat uživateli: $1',
+'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',
 
 # Special:ChangeEmail
 'changeemail' => 'Změna e-mailové adresy',
@@ -2122,8 +2121,10 @@ Asi by místo toho měly odkazovat na konkrétnější stránku.<br />
 Stránka je považována za rozcestník, pokud používá některou ze šablon odkazovaných na [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Stránky s vlastností',
+'pageswithprop-legend' => 'Stránky s vlastností',
 'pageswithprop-text' => 'Tato stránka obsahuje seznam stránek, které používají zadanou vlastnost stránky.',
 'pageswithprop-prop' => 'Název vlastnosti:',
+'pageswithprop-submit' => 'Provést',
 
 'doubleredirects' => 'Dvojitá přesměrování',
 'doubleredirectstext' => 'Na této stránce je seznam přesměrování vedoucích na další přesměrování.
@@ -4050,17 +4051,17 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'sqlite-no-fts' => '$1 bez podpory plnotextového vyhledávání',
 
 # New logging system
-'logentry-delete-delete' => '$1 smazal stránku $3',
-'logentry-delete-restore' => '$1 obnovil stránku $3',
-'logentry-delete-event' => '$1 změnil viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4',
-'logentry-delete-revision' => '$1 změnil viditelnost {{PLURAL:$5|revize|$5 revizí}} na stránce $3: $4',
-'logentry-delete-event-legacy' => '$1 změnil viditelnost protokolovacích záznamů ke stránce $3',
-'logentry-delete-revision-legacy' => '$1 změnil viditelnost revizí na stránce $3',
-'logentry-suppress-delete' => '$1 utajil stránku $3',
-'logentry-suppress-event' => '$1 utajeně změnil viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4',
-'logentry-suppress-revision' => '$1 utajeně změnil viditelnost {{PLURAL:$5|revize|$5 revizí}} na stránce $3: $4',
-'logentry-suppress-event-legacy' => '$1 utajeně změnil viditelnost protokolovacích záznamů ke stránce $3',
-'logentry-suppress-revision-legacy' => '$1 utajeně změnil viditelnost revizí na stránce $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|smazal|smazala}} stránku $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|obnovil|obnovila}} stránku $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} na stránce $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|změnil|změnila}} viditelnost protokolovacích záznamů ke stránce $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|změnil|změnila}} viditelnost revizí na stránce $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|utajil|utajila}} stránku $3',
+'logentry-suppress-event' => '$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4',
+'logentry-suppress-revision' => '$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} na stránce $3: $4',
+'logentry-suppress-event-legacy' => '$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost protokolovacích záznamů ke stránce $3',
+'logentry-suppress-revision-legacy' => '$1 utajeně {{GENDER:$2|změnil|změnila}} viditelnost revizí na stránce $3',
 'revdelete-content-hid' => 'skryt obsah',
 'revdelete-summary-hid' => 'skryto shrnutí editace',
 'revdelete-uname-hid' => 'skryto uživatelské jméno',
@@ -4069,20 +4070,20 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'revdelete-uname-unhid' => 'odkryto uživatelské jméno',
 'revdelete-restricted' => 'omezení správců použito',
 'revdelete-unrestricted' => 'omezení správců odstraněno',
-'logentry-move-move' => '$1 přesunul stránku $3 na $4',
-'logentry-move-move-noredirect' => '$1 přesunul stránku $3 na $4 bez založení přesměrování',
-'logentry-move-move_redir' => '$1 přesunul stránku $3 na $4 s výměnou přesměrování',
-'logentry-move-move_redir-noredirect' => '$1 přesunul stránku $3 na $4 místo přesměrování bez založení přesměrování',
-'logentry-patrol-patrol' => '$1 označil revizi $4 stránky $3 jako prověřenou',
-'logentry-patrol-patrol-auto' => '$1 automaticky označil revizi $4 stránky $3 jako prověřenou',
-'logentry-newusers-newusers' => 'Byl založen uživatelský účet $1',
-'logentry-newusers-create' => 'Byl založen uživatelský účet $1',
-'logentry-newusers-create2' => '$1 založil uživatelský účet $3',
+'logentry-move-move' => '$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 bez založení přesměrování',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 s výměnou přesměrování',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 místo přesměrování bez založení přesměrování',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|označil|označila}} revizi $4 stránky $3 jako prověřenou',
+'logentry-patrol-patrol-auto' => '$1 automaticky {{GENDER:$2|označil|označila}} revizi $4 stránky $3 jako prověřenou',
+'logentry-newusers-newusers' => 'Byl {{GENDER:$2|založen}} uživatelský účet $1',
+'logentry-newusers-create' => 'Byl {{GENDER:$2|založen}} uživatelský účet $1',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|založil|založila}} uživatelský účet $3',
 'logentry-newusers-byemail' => '$1 {{GENDER:$2|založil|založila}} uživatelský účet $3, heslo bylo posláno e-mailem',
-'logentry-newusers-autocreate' => 'Automaticky byl založen účet $1',
+'logentry-newusers-autocreate' => 'Automaticky byl {{GENDER:$2|založen}} účet $1',
 'logentry-rights-rights' => '$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 změnil členství $3 ve skupinách',
-'logentry-rights-autopromote' => '$1 byl automaticky povýšen z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5',
 'rightsnone' => '(žádné)',
 
 # Feedback
@@ -4158,7 +4159,7 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'duration-centuries' => '$1 {{PLURAL:$1|století}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Stránky s vlastností',
-'pageswithprop-submit' => 'Provést',
+# Image rotation
+'rotate-comment' => 'Obrázek otočen o $1 {{PLURAL:$1|stupeň|stupně|stupňů}} po směru hodinových ručiček',
+
 );
index 3de2da1..89e0d8f 100644 (file)
@@ -610,7 +610,7 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'виждь',
 
-# E-mail user
+# Email user
 'emailuser' => 'посъли єпїстолѫ',
 
 # Watchlist
index 6d0156c..ab81729 100644 (file)
@@ -122,7 +122,7 @@ $messages = array(
 'tog-justify' => 'Unioni paragraffau',
 'tog-hideminor' => 'Cuddio golygiadau bychain yn rhestr y newidiadau diweddar',
 'tog-hidepatrolled' => 'Cuddio golygiadau sydd wedi derbyn ymweliad patrôl rhag y rhestr newidiadau diweddar',
-'tog-newpageshidepatrolled' => 'Cuddio tudalennau sydd wedi derbyn ymweliad patrôl rhag y rhestr dudalennau newydd',
+'tog-newpageshidepatrolled' => 'Cuddio tudalennau sydd wedi derbyn ymweliad patrôl rhag rhestr y tudalennau newydd',
 'tog-extendwatchlist' => "Ehangu'r rhestr wylio i ddangos pob golygiad yn hytrach na'r diweddaraf yn unig",
 'tog-usenewrc' => "Yn dangos newidiadau i un dudalen gyda'i gilydd - ar 'newidiadau diweddar' a'r 'rhestr wylio' (angen JavaScript)",
 'tog-numberheadings' => "Rhifo penawdau'n awtomatig",
@@ -586,8 +586,8 @@ Os mai rhywun arall a holodd am y cyfrinair, ynteu eich bod wedi cofio\'r hen gy
 'blocked-mailpassword' => 'Gan fod eich cyfeiriad IP wedi ei atal rhag golygu, ni ellir adfer y cyfrinair.',
 'eauthentsent' => 'Anfonwyd e-bost o gadarnhâd at y cyfeiriad a benwyd.
 Cyn y gellir anfon unrhywbeth arall at y cyfeiriad hwnnw rhaid i chi ddilyn y cyfarwyddiadau yn yr e-bost hwnnw er mwyn cadarnhau bod y cyfeiriad yn un dilys.',
-'throttled-mailpassword' => "Anfonwyd e-bost atoch i'ch atgoffa o'ch cyfrinair eisoes, yn ystod y $1 {{PLURAL:$1|awr|awr|awr|awr|awr|awr}} diwethaf.
-Er mwyn rhwystro camddefnydd, dim ond un e-bost i'ch atgoffa o'ch cyfrinair gaiff ei anfon bob yn $1 {{PLURAL:$1|awr|awr|awr|awr|awr|awr}}.",
+'throttled-mailpassword' => "Anfonwyd e-bost atoch eisoes i'ch atgoffa o'ch cyfrinair, a hynny yn ystod y $1 {{PLURAL:$1|awr}} diwethaf.
+Er mwyn rhwystro camddefnydd, dim ond un e-bost i'ch atgoffa o'ch cyfrinair gaiff ei anfon bob yn $1 {{PLURAL:$1|awr}}.",
 'mailerror' => 'Gwall wrth ddanfon yr e-bost: $1',
 'acct_creation_throttle_hit' => "Mae ymwelwyr sy'n defnyddio'ch cyfeiriad IP wedi creu $1 {{PLURAL:$1|cyfrif|cyfrif|gyfrif|chyfrif|chyfrif|cyfrif}} yn ystod y diwrnod diwethaf, sef y mwyafswm a ganiateir mewn diwrnod.
 Felly ni chaiff defnyddwyr sy'n defnyddio'r cyfeiriad IP hwn greu rhagor o gyfrifon ar hyn o bryd.",
@@ -636,7 +636,7 @@ Gall fod eich bod wedi llwyddo newid eich cyfrinair eisoes neu eich bod wedi gof
 
 # Special:PasswordReset
 'passwordreset' => 'Ailosod cyfrinair',
-'passwordreset-text' => "Cwblhewch y ffurflen hon er mwyn derbyn e-bost i'ch atgoffa o fanylion eich cyfrif.",
+'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-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}}",
@@ -646,23 +646,23 @@ Gall fod eich bod wedi llwyddo newid eich cyfrinair eisoes neu eich bod wedi gof
 'passwordreset-capture-help' => "Os y ticiwch y blwch hwn, bydd yr e-bost (gyda'r cyfrinair dros dro) yn cael ei ddangos i chi yn ogystal a chael ei anfon at y defnyddiwr.",
 'passwordreset-email' => 'Eich cyfeiriad e-bost:',
 'passwordreset-emailtitle' => 'Manylion eich cyfrif ar {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Mae rhywun (chi yn ôl pob tebyg, o'r cyfeiriad IP $1) wedi gofyn am nodyn atgoffa o fanylion eich cyfrif ar {{SITENAME}} ($4). Mae'r {{PLURAL:$3|cyfrif|cyfrif|cyfrifon|cyfrifon|cyfrifon|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:
+'passwordreset-emailtext-ip' => "Mae rhywun (chi yn ôl pob tebyg, o'r cyfeiriad IP $1) wedi gofyn am ailosod eich cyfrinair ar {{SITENAME}} ($4). Mae'r {{PLURAL:$3|cyfrif|cyfrif|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:
 
 $2
 
-Bydd y {{PLURAL:$3||cyfrinair dros dro hwn|cyfrineiriau dros dro hyn|cyfrineiriau dros dro hyn|cyfrineiriau dros dro hyn|cyfrineiriau dros dro hyn}} yn dod i ben ymhen {{PLURAL:$5||diwrnod |deuddydd|tridiau|$5 diwrnod|$5 diwrnod}}. Dylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd am ailosod y cyfrinair, neu os ydych wedi cofio eich cyfrinair gwreiddiol, neu os nad ydych am ei newid bellach, gallwch anwybyddu'r neges hon a pharhau i ddefnyddio eich hen gyfrinair.",
-'passwordreset-emailtext-user' => "Gofynodd y defnyddiwr $1 ar {{SITENAME}} am gael ei atgoffa o fanylion eich cyfrif ar {{SITENAME}}
-($4). Mae'r {{PLURAL:$3||cyfrif|cyfrifon|cyfrifon|cyfrifon|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:
+Bydd y {{PLURAL:$3||cyfrinair dros dro hwn|cyfrineiriau dros dro hyn}} yn dod i ben ymhen {{PLURAL:$5||diwrnod |deuddydd|tridiau|$5 diwrnod}}. Dylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd am ailosod y cyfrinair, neu os ydych wedi cofio eich cyfrinair gwreiddiol, neu os nad ydych am ei newid bellach, gallwch anwybyddu'r neges hon a pharhau i ddefnyddio eich hen gyfrinair.",
+'passwordreset-emailtext-user' => "Gofynodd y defnyddiwr $1 ar {{SITENAME}} am gael ailosod ei gyfrinair ar {{SITENAME}}
+($4). Mae'r {{PLURAL:$3||cyfrif|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:
 
 $2
 
-Bydd y {{PLURAL:$3||cyfrinair|cyfrineiriau|cyfrineiriau|cyfrineiriau|cyfrineiriau}} dros dro hyn yn dod i ben ymhen {{PLURAL:$5||diwrnod|deuddydd|tridiau|$5 diwrnod|$5 diwrnod}}.
+Bydd y {{PLURAL:$3||cyfrinair|cyfrineiriau}} dros dro hyn yn dod i ben ymhen {{PLURAL:$5||diwrnod|deuddydd|tridiau|$5 diwrnod}}.
 Dylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd am ailosod y cyfrinair, neu os ydych wedi cofio eich cyfrinair gwreiddiol, neu os nad ydych am ei newid bellach, gallwch anwybyddu'r neges hon a pharhau i ddefnyddio eich hen gyfrinair.",
 'passwordreset-emailelement' => "Enw'r defnyddiwr: $1
 Y cyfrinair dros dro: $2",
-'passwordreset-emailsent' => 'Anfonwyd nodyn atgoffa drwy e-bost.',
-'passwordreset-emailsent-capture' => 'Anfonwyd e-bost atgoffa, a ddangosir isod.',
-'passwordreset-emailerror-capture' => "Lluniwyd e-bost atgoffa fel ag a welir isod, ond ni lwyddwyd i'w anfon at y defnyddiwr: $1",
+'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",
 
 # Special:ChangeEmail
 'changeemail' => 'Newid y cyfeiriad e-bost',
@@ -3718,12 +3718,12 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'logentry-delete-delete' => 'Dileodd $1 y dudalen $3',
 'logentry-delete-restore' => 'Adferodd $1 y dudalen $3',
 'logentry-delete-event' => 'Newidiodd $1 ymddangosiad {{PLURAL:$5||cofnod lòg|$5 gofnod lòg|$5 chofnod lòg|$5 chofnod lòg|$5 cofnod lòg}} ar $3: $4',
-'logentry-delete-revision' => "Newidiodd $1 ymddangosiad {{PLURAL:$5||diwygiad|$5 ddiwygiad|$5 diwygiad|$5 diwygiad|$5 diwygiad}} o'r dudalen $3: $4",
+'logentry-delete-revision' => "Newidiodd $1 ymddangosiad {{PLURAL:$5||diwygiad|$5 ddiwygiad|$5 diwygiad}} o'r dudalen $3: $4",
 'logentry-delete-event-legacy' => 'Newidiodd $1 welededd cofnodion lòg ar $3',
 'logentry-delete-revision-legacy' => "Newidiodd $1 welededd diwygiadau o'r dudalen $3",
 'logentry-suppress-delete' => 'Cuddiodd $1 y dudalen $3',
 'logentry-suppress-event' => 'Yn y dirgel, newidiodd $1 ymddangosiad {{PLURAL:$5||cofnod lòg|$5 gofnod lòg|$5 chofnod lòg|$5 chofnod lòg|$5 cofnod lòg}} ar $3: $4',
-'logentry-suppress-revision' => "Yn y dirgel, newidiodd $1 ymddangosiad {{PLURAL:$5||diwygiad|$5 ddiwygiad|$5 diwygiad|$5 diwygiad|$5 diwygiad}} o'r dudalen $3: $4",
+'logentry-suppress-revision' => "Yn y dirgel, newidiodd $1 ymddangosiad {{PLURAL:$5||diwygiad|$5 ddiwygiad|$5 diwygiad}} o'r dudalen $3: $4",
 'logentry-suppress-event-legacy' => 'Newidiodd $1 welededd cofnodion lòg ar $3, yn y dirgel',
 'logentry-suppress-revision-legacy' => "Newidiodd $1 welededd diwygiadau o'r dudalen $3, yn y dirgel",
 'revdelete-content-hid' => 'cuddiwyd y cynnwys',
@@ -3734,8 +3734,8 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'revdelete-uname-unhid' => 'datguddiwyd yr enw defnyddiwr',
 'revdelete-restricted' => 'cyfyngwyd ar allu gweinyddwyr i weld',
 'revdelete-unrestricted' => 'tynnwyd y cyfyngiadau ar allu gweinyddwyr i weld',
-'logentry-move-move' => 'Symudwyd y dudalen $3 i $4 gan $1',
-'logentry-move-move-noredirect' => 'Symudwyd y dudalen $3 i $4 gan $1 heb adael dolen ailgyfeirio',
+'logentry-move-move' => 'Symudodd $1 y dudalen $3 i $4',
+'logentry-move-move-noredirect' => 'Symudodd $1 y dudalen $3 i $4 heb adael dolen ailgyfeirio',
 'logentry-move-move_redir' => 'Symudwyd y dudalen $3 i $4 gan $1 dros y ddolen ailgyfeirio',
 'logentry-move-move_redir-noredirect' => 'Symudwyd y dudalen $3 i $4 gan $1 dros ddolen ailgyfeirio heb adael dolen ailgyfeirio newydd',
 'logentry-patrol-patrol' => "Rhoddodd $1 nod ar ddiwygiad $4 o'r dudalen $3 yn dynodi ei fod wedi derbyn ymweliad patrôl",
index 406cafb..88ffe6f 100644 (file)
@@ -41,6 +41,7 @@
  * @author Sarrus
  * @author Sir48
  * @author Slomox
+ * @author Steenth
  * @author Svip
  * @author Søren Løvborg
  * @author Tjernobyl
@@ -1953,6 +1954,12 @@ Husk at kontrollere for andre henvisninger til skabelonerne før de slettes.',
 De bør henvise direkte til et mere passende emne i stedet.<br />
 En side behandles som en side med en flertydig titel hvis den bruger en skabelon som der er henvist til fra [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Sider med en sideegenskab',
+'pageswithprop-legend' => 'Sider med en sideegenskab',
+'pageswithprop-text' => 'Denne side viser en liste over sider, der bruger en bestemt sideegenskaben.',
+'pageswithprop-prop' => 'Egenskabsnavn:',
+'pageswithprop-submit' => 'Gå',
+
 'doubleredirects' => 'Dobbelte omdirigeringer',
 'doubleredirectstext' => 'Dette er en liste over sider som omdirigerer til andre omdirigeringssider.
 Hver linje indeholder henvisninger til den første og den anden omdirigering, såvel som til målet for den anden omdirigering som sædvanligvis er den "rigtige" målside som den første omdirigering burde henvise til.
@@ -3904,4 +3911,7 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'duration-centuries' => '$1 {{PLURAL:$1|århundrede|århundreder}}',
 'duration-millennia' => '$1 {{PLURAL:$1|årtusind|årtusinder}}',
 
+# Image rotation
+'rotate-comment' => 'Billedet roteres med $1 {{PLURAL:$1| grad|grader}} med uret',
+
 );
index bf99454..9c58c96 100644 (file)
@@ -53,6 +53,7 @@
  * @author Rillke
  * @author SVG
  * @author Saibo
+ * @author Sebastian Wallroth
  * @author Spacebirdy
  * @author Srhat
  * @author TMg
@@ -415,7 +416,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden',
 'tog-newpageshidepatrolled' => 'Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden',
 'tog-extendwatchlist' => 'Erweiterte Beobachtungsliste zur Anzeige aller Änderungen',
-'tog-usenewrc' => 'Seitenbezogene Gruppierung in den „Letzten Änderungen“ und auf der Beobachtungsliste (benötigt JavaScript)',
+'tog-usenewrc' => 'Änderungen auf „Letzte Änderungen“ und Beobachtungsliste nach Seite gruppieren (benötigt JavaScript)',
 'tog-numberheadings' => 'Überschriften automatisch nummerieren',
 'tog-showtoolbar' => 'Bearbeiten-Werkzeugleiste anzeigen (benötigt JavaScript)',
 'tog-editondblclick' => 'Seiten mit Doppelklick bearbeiten (benötigt JavaScript)',
@@ -887,7 +888,7 @@ Bitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt
 'eauthentsent' => 'Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.
 
 Bevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise in der Bestätigungs-E-Mail.',
-'throttled-mailpassword' => 'Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits ein neues Passwort angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} ein neues Passwort angefordert werden.',
+'throttled-mailpassword' => 'Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits eine Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} eine Passwortzurücksetzungs-E-Mail angefordert werden.',
 'mailerror' => 'Fehler beim Senden der E-Mail: $1',
 'acct_creation_throttle_hit' => 'Besucher dieses Wikis, die deine IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.
 
@@ -937,7 +938,7 @@ Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neu
 
 # Special:PasswordReset
 'passwordreset' => 'Passwort zurücksetzen',
-'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um per E-Mail eine Erinnerung zu den Anmeldeinformationen deines Benutzerkontos zu erhalten.',
+'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-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein.}}',
@@ -947,22 +948,27 @@ Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neu
 '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-email' => 'E-Mail-Adresse:',
 'passwordreset-emailtitle' => 'Benutzerkontoinformationen auf {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Erinnerung an deine Benutzerkonteninformationen für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
+'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}}
+mit dieser E-Mail-Adresse verknüpft:
 
 $2
 
 {{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.
-Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese 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 Erinnerung an deine Benutzerkonteninformationen für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
+Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese
+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:
 
 $2
 
 {{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.',
 'passwordreset-emailelement' => 'Benutzername: $1
 Temporäres Passwort: $2',
-'passwordreset-emailsent' => 'Eine Erinnerung wurde per E-Mail versandt.',
-'passwordreset-emailsent-capture' => 'Die unten angezeigte Erinnerungs-E-Mail wurde abgeschickt.',
-'passwordreset-emailerror-capture' => 'Die unten angezeigte Erinnerungs-E-Mail wurde generiert, allerdings ist der Versand an den Benutzer gescheitert: $1',
+'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',
 
 # Special:ChangeEmail
 'changeemail' => 'E-Mail-Adresse ändern',
@@ -4072,17 +4078,17 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'sqlite-no-fts' => 'Version $1 ohne Unterstützung für die Volltextsuche',
 
 # New logging system
-'logentry-delete-delete' => '$1 löschte Seite $3',
-'logentry-delete-restore' => '$1 stellte Seite $3 wieder her',
-'logentry-delete-event' => '$1 änderte die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
-'logentry-delete-revision' => '$1 änderte die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
-'logentry-delete-event-legacy' => '$1 änderte die Sichtbarkeit von Logbucheinträgen auf $3',
-'logentry-delete-revision-legacy' => '$1 änderte die Sichtbarkeit von Versionen der Seite $3',
-'logentry-suppress-delete' => '$1 unterdrückte Seite $3',
-'logentry-suppress-event' => '$1 änderte diskret die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
-'logentry-suppress-revision' => '$1 änderte diskret die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
-'logentry-suppress-event-legacy' => '$1 änderte diskret die Sichtbarkeit von Logbucheinträgen auf $3',
-'logentry-suppress-revision-legacy' => '$1 änderte diskret die Sichtbarkeit von Versionen der Seite $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|löschte}} Seite $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|stellte}} Seite $3 wieder her',
+'logentry-delete-event' => '$1 {{GENDER:$2|änderte}}  die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit von Logbucheinträgen auf $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit von Versionen der Seite $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|unterdrückte}} Seite $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit von Logbucheinträgen auf $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit von Versionen der Seite $3',
 'revdelete-content-hid' => 'Inhalt versteckt',
 'revdelete-summary-hid' => 'Zusammenfassung versteckt',
 'revdelete-uname-hid' => 'Benutzername versteckt',
@@ -4091,20 +4097,20 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'revdelete-uname-unhid' => 'Benutzername freigegeben',
 'revdelete-restricted' => 'Einschränkungen gelten auch für Administratoren',
 'revdelete-unrestricted' => 'Einschränkungen für Administratoren aufgehoben',
-'logentry-move-move' => '$1 verschob Seite $3 nach $4',
-'logentry-move-move-noredirect' => '$1 verschob Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen',
-'logentry-move-move_redir' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung',
-'logentry-move-move_redir-noredirect' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung ohne selbst eine Weiterleitung anzulegen',
-'logentry-patrol-patrol' => '$1 markierte Version $4 von Seite $3 als kontrolliert',
-'logentry-patrol-patrol-auto' => '$1 markierte automatisch Version $4 von Seite $3 als kontrolliert',
-'logentry-newusers-newusers' => 'Benutzerkonto $1 wurde erstellt',
-'logentry-newusers-create' => 'Benutzerkonto $1 wurde erstellt',
-'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 erstellt',
-'logentry-newusers-byemail' => 'Das Benutzerkonto $3 wurde von $1 erstellt und das Passwort wurde per E-Mail zugesandt',
-'logentry-newusers-autocreate' => 'Benutzerkonto $1 wurde automatisch erstellt',
-'logentry-rights-rights' => '$1 änderte die Gruppenzugehörigkeit für $3 von $4 zu $5',
-'logentry-rights-rights-legacy' => '$1 änderte die Gruppenzugehörigkeit für $3',
-'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 zugeordnet',
+'logentry-move-move' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4 und überschrieb dabei eine Weiterleitung',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4 und überschrieb dabei eine Weiterleitung ohne selbst eine Weiterleitung anzulegen',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|markierte}} Version $4 von Seite $3 als kontrolliert',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|markierte}} automatisch Version $4 von Seite $3 als kontrolliert',
+'logentry-newusers-newusers' => 'Benutzerkonto $1 wurde {{GENDER:$2|erstellt}}',
+'logentry-newusers-create' => 'Benutzerkonto $1 wurde {{GENDER:$2|erstellt}}',
+'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 {{GENDER:$2|erstellt}}',
+'logentry-newusers-byemail' => 'Das Benutzerkonto $3 wurde von $1 {{GENDER:$2|erstellt}} und das Passwort wurde per E-Mail zugesandt',
+'logentry-newusers-autocreate' => 'Benutzerkonto $1 wurde automatisch {{GENDER:$2|erstellt}}',
+'logentry-rights-rights' => '$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3 von $4 zu $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3',
+'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}',
 'rightsnone' => '(–)',
 
 # Feedback
index 905afc8..0019ad1 100644 (file)
@@ -462,7 +462,7 @@ $messages = array(
 'faqpage' => 'Project: PZP',
 
 # Vector skin
-'vector-action-addsection' => 'Mesel Vırazê',
+'vector-action-addsection' => 'Mewzu vıraze',
 'vector-action-delete' => 'Bestere',
 'vector-action-move' => 'Berê',
 'vector-action-protect' => 'Bıpawe',
@@ -1279,7 +1279,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'mergelog' => 'Logê yew kerdişî',
 'pagemerge-logentry' => '[[$1]] u [[$2]] yew kerd (revizyonî heta $3)',
 'revertmerge' => 'Abırnê',
-'mergelogpagetext' => 'Cêr de  liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.',
+'mergelogpagetext' => 'Cêr de yew liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.',
 
 # Diffs
 'history-title' => 'Rewizyonê $1:',
@@ -1687,9 +1687,9 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'rc-old-title' => '"$1"i orcinalê cı vıraşt',
 
 # Recent changes linked
-'recentchangeslinked' => 'Vurnayışê eleqeyıni',
-'recentchangeslinked-feed' => 'Vurnayışê eleqeyıni',
-'recentchangeslinked-toolbox' => 'Vurnayışê eleqeyıni',
+'recentchangeslinked' => 'Vurnayışê elaqeyıni',
+'recentchangeslinked-feed' => 'Vurnayışê elaqeyıni',
+'recentchangeslinked-toolbox' => 'Vurnayışê elaqeyıni',
 'recentchangeslinked-title' => 'vurnayışan ser "$1"',
 'recentchangeslinked-noresult' => 'Pelanê ke link biye ey vurnayîşî çino.',
 'recentchangeslinked-summary' => "Lista cêrêne, pela bêlikerdiye rê (ya zi karberanê kategoriya bêlikerdiye rê) pelanê gırêdaoğan de lista de vurnayışê peyênana.
@@ -2574,7 +2574,7 @@ $1',
 'namespace' => 'Cayê namey:',
 'invert' => 'Weçinıtışo peyserki',
 'tooltip-invert' => 'nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan  zerrekan nımtışi re ena dore tesdiqi nışan kerê',
-'namespace_association' => 'Cayê nameyanê eleqedaran',
+'namespace_association' => 'Cayê nameyanê elaqedaran',
 'tooltip-namespace_association' => 'Herunda canemiya elekeyın nışan kerdışi sero qıse kerdışi yana zerre dekerdışi rê ena dora tesdiqi nışan kerê',
 'blanknamespace' => '(Ser)',
 
@@ -4164,7 +4164,7 @@ Ena sita dı newke xırabiya teknik esta.',
 'revdelete-unrestricted' => 'verger (ver gırewtış) ê ke qey xızmkaran diyê wera (wedariyê)',
 'logentry-move-move' => "Karber $1' pelay $3' berd $4",
 'logentry-move-move-noredirect' => "$1'i pelay $3 raçarnayış neker dı u berd $4",
-'logentry-move-move_redir' => '$1 pela $3 pela da $4 sera hetenayış ra ahulnê',
+'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",
index 50478ae..00c9dcb 100644 (file)
@@ -626,7 +626,7 @@ Pšosym pśizjaw se zasej, gaž jo dostanjoš.',
 'eauthentsent' => 'Wobkšuśenje jo se na e-mailowu adresu wótposłało.
 
 Nježli až wótpósćelo se dalšna e-mail na to wužywarske konto, dejš slědowaś instrukcije w powěsći a tak wobkšuśiś, až konto jo wót wěrnosći twójo.',
-'throttled-mailpassword' => 'W běgu {{PLURAL:$1|slědneje $1 góźiny|slědnjeju $1 góźinowu|slědnych $1 góźinow}} jo se južo raz wó nowe šćitne gronidło pšosyło. Aby se znjewužywanje wobinuło, wótpósćelo se jano jadno šćitne gronidło w běgu {{PLURAL:$1|$1 góźiny|$1 góźinowu|$1 góźinow}}.',
+'throttled-mailpassword' => 'E-mail za anulěrowanje gronidła jo se za {{PLURAL:$1|slědnu góźinu|slědnej $1 góźinje|slědne $1 góźiny|slědnych $1 góźin}} pósłała. Aby znjewužywanjeju zasajźało, se jano jadna e-mail za anulěrowanje gronidła na {{PLURAL:$1|góźinu|$1 góźinje|$1 góźiny|$1 góźin}} pósćelo.',
 'mailerror' => 'Zmólka pśi wótpósłanju e-maila: $1',
 'acct_creation_throttle_hit' => 'Woglědowarje toś togo wikija, kótarež wužywaju twóju IP-adresu su napórali {{PLURAL:$1|1 konto|$1 konśe|$1 konta|$1 kontow}} slědny źeń. To jo maksimalna dowólona licba za toś tu periodu.
 Woglědowarje, kótarež wužywaju toś tu IP-adresu njamógu tuchylu dalšne konta napóraś.',
@@ -674,7 +674,7 @@ Sy snaź swójo gronidło južo wuspěšnje změnił abo nowe nachylne gronidło
 
 # Special:PasswordReset
 'passwordreset' => 'Gronidło slědk stajiś',
-'passwordreset-text' => 'Wupołni toś ten formular, aby dostał e-mailowe dopomnjeśe k swójim kontowym drobnostkam.',
+'passwordreset-text' => 'Wupołni toś ten formular, aby swójo gronidło anulěrował.',
 'passwordreset-legend' => 'Gronidło slědk stajiś',
 'passwordreset-disabled' => 'Slědkstajenja gronidłow su se znjemóžnili na toś tom wikiju.',
 'passwordreset-pretext' => '{{PLURAL:$1||Zapódaj dołojce jadne ze slědujucych datowych podaśow}}',
@@ -684,23 +684,23 @@ Sy snaź swójo gronidło južo wuspěšnje změnił abo nowe nachylne gronidło
 'passwordreset-capture-help' => 'Jolic nakśickujoš toś ten kašćik, e-mail (z nachylnym gronidłom) buźo se pokazaś a wužywarjeju słaś.',
 'passwordreset-email' => 'E-mailowa adresa:',
 'passwordreset-emailtitle' => 'Kontowe drobnostki na {{GRAMMAR:lokatiw|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Něchten (nejskerjej ty, z IP-adresu $1) jo dopomnjeśe na twóje kontowe drobnostki za {{SITENAME}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane|zwězane}}:
+'passwordreset-emailtext-ip' => 'Něchten (nejskerjej ty, z IP-adresu $1) jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:
 
 $2
 
-{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
 Ty by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.',
-'passwordreset-emailtext-user' => 'Wužywaŕ $1 jo dopomnjeśe na twóje kontowe drobnostki za {{SITENAME}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su|Slědlujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane|zwězane}}:
+'passwordreset-emailtext-user' => 'Wužywaŕ $1 jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:
 
 $2
 
-{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
 Ty by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.',
 'passwordreset-emailelement' => 'Wužywarske mě: $1
 Nachylne gronidło: $2',
-'passwordreset-emailsent' => 'Dopominańska e-mail jo se pósłała.',
-'passwordreset-emailsent-capture' => 'Dopominańska e-mail jo se pósłała, kótaraž se dołojce pokazujo.',
-'passwordreset-emailerror-capture' => 'Dołojce pokazowana e-mail jo se napóriła, ale jo se njeraźiło ju wužiwarjeju pósłaś: $1',
+'passwordreset-emailsent' => 'E-mail za anulěrowanje gronidła jo se pósłała.',
+'passwordreset-emailsent-capture' => 'E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.',
+'passwordreset-emailerror-capture' => 'E-mail za anulěrowanje gronidła jo se generěrowała, kótaraž pokazujo se dołojce, ale jeje słanje wužywarjeju jo se njeraźiło: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-mailowu adresu změniś',
@@ -3728,17 +3728,17 @@ Wobraze se w połnym wótgranicowanju pokazuju, druge datajowe typy se ze zwěza
 'sqlite-no-fts' => 'Wersija $1 bźez pódpěry za połnotekstowe pytanje',
 
 # New logging system
-'logentry-delete-delete' => '$1 jo bok $3 wulašował',
-'logentry-delete-restore' => '$1 jo bok $3 wótnowił',
-'logentry-delete-event' => '$1 jo změnił widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-delete-revision' => '$1 jo změnił widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow|$5 wersijow}} na boku $3: $4',
-'logentry-delete-event-legacy' => '$1 jo změnił widobnosć protokolowych zapiskow na $3',
-'logentry-delete-revision-legacy' => '$1 jo změnił widobnosć wersijow na boku $3',
-'logentry-suppress-delete' => '$1 jo pódtłocył bok $3',
-'logentry-suppress-event' => '$1 jo kšajźu změnił widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-suppress-revision' => '$1 jo kšajźu změnił widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow|$5 wersijow}} na boku $3: $4',
-'logentry-suppress-event-legacy' => '$1 jo kšajźu změnił widobnosć protokolowych zapiskow na $3',
-'logentry-suppress-revision-legacy' => '$1 jo kšajźu změnił widobnosć wersijow na boku $3',
+'logentry-delete-delete' => '$1 jo bok $3 {{GENDER:$2|wulašował|wulašowała}}',
+'logentry-delete-restore' => '$1 jo bok $3 {{GENDER:$2|wótnowił|wótnowiła}}',
+'logentry-delete-event' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow}} na $3: $4',
+'logentry-delete-revision' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow}} na boku $3: $4',
+'logentry-delete-event-legacy' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć protokolowych zapiskow na $3',
+'logentry-delete-revision-legacy' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć wersijow na boku $3',
+'logentry-suppress-delete' => '$1 jo {{GENDER:$2|pódtłocył|pódtłocyła}} bok $3',
+'logentry-suppress-event' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow}} na $3: $4',
+'logentry-suppress-revision' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow}} na boku $3: $4',
+'logentry-suppress-event-legacy' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć protokolowych zapiskow na $3',
+'logentry-suppress-revision-legacy' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć wersijow na boku $3',
 'revdelete-content-hid' => 'wopśimjeśe schowane',
 'revdelete-summary-hid' => 'Zespominanje schowane',
 'revdelete-uname-hid' => 'wužywarske mě schowane',
@@ -3747,20 +3747,20 @@ Wobraze se w połnym wótgranicowanju pokazuju, druge datajowe typy se ze zwěza
 'revdelete-uname-unhid' => 'wužywarske mě widobne',
 'revdelete-restricted' => 'Wobgranicowanja se teke na administratorow nałožuju',
 'revdelete-unrestricted' => 'Wobgranicowanja za administratorow wótpórane',
-'logentry-move-move' => '$1 jo pśesunuł bok $3 do $4',
-'logentry-move-move-noredirect' => '$1 jo pśesunuł bok $3 do $4, mimo až jo napórał dalejpósrědnjenje',
-'logentry-move-move_redir' => '$1 jo pśesunuł bok $3 do $4 a jo pśepisał dalejpósrědnjenje',
-'logentry-move-move_redir-noredirect' => '$1 jo pśesunuł bok $3 do $4 a jo pśepisał dalejpósrědnjenje, mimo až jo napórał dalejpósrědnjenje',
-'logentry-patrol-patrol' => '$1 jo markěrował wersiju $4 boka $3 ako doglědowanu',
-'logentry-patrol-patrol-auto' => '$1 jo awtomatiski markěrował wersiju $4 boka $3 ako doglědowanu',
-'logentry-newusers-newusers' => 'Wužywarske konto $1 jo se załožyło',
-'logentry-newusers-create' => 'Wužywarske konto $1 jo se załožyło',
-'logentry-newusers-create2' => '$1 jo załožył wužywarske konto $3',
-'logentry-newusers-byemail' => 'Wužywarske konto $3 jo se wót $1 załožyło a gronidło jo se pśez e-mail pósłało.',
-'logentry-newusers-autocreate' => 'Konto $1 jo se awtomatiski załožyło',
-'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 změnił',
-'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 změnił',
-'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 pówušył',
+'logentry-move-move' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4',
+'logentry-move-move-noredirect' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4, mimo až jo {{GENDER:$2|napórał|napórała}} dalejpósrědnjenje',
+'logentry-move-move_redir' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4 a jo {{GENDER:$2|pśepisał|pśepisała}} dalejpósrědnjenje',
+'logentry-move-move_redir-noredirect' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4 a jo {{GENDER:$2|pśepisał|pśepisał}} dalejpósrědnjenje, mimo až jo {{GENDER:$2|napórał|napórała}} dalejpósrědnjenje',
+'logentry-patrol-patrol' => '$1 jo {{GENDER:$2|markěrował|markěrował}} wersiju $4 boka $3 ako doglědowanu',
+'logentry-patrol-patrol-auto' => '$1 jo awtomatiski {{GENDER:$2|markěrował|měrkěrowała}} wersiju $4 boka $3 ako doglědowanu',
+'logentry-newusers-newusers' => 'Wužywarske konto $1 jo se {{GENDER:$2|załožyło}}',
+'logentry-newusers-create' => 'Wužywarske konto $1 jo se {{GENDER:$2|załožyło}}',
+'logentry-newusers-create2' => '$1 jo {{GENDER:$2|załožył|załožyła}} wužywarske konto $3',
+'logentry-newusers-byemail' => '$1 jo wužywarske konto $3 {{GENDER:$2|załožył|załožyła}} a gronidło jo se pśez e-mail pósłało',
+'logentry-newusers-autocreate' => 'Wužywarske konto $1 jo se awtomatiski {{GENDER:$2|załožyło}}',
+'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 {{GENDER:$2|pśirědował|pśirědowała}}',
 'rightsnone' => '(nic)',
 
 # Feedback
index a0153f0..436c90a 100644 (file)
@@ -62,7 +62,7 @@ $messages = array(
 
 'underline-always' => 'Toririmo',
 'underline-never' => 'Kada',
-'underline-default' => 'Pogigihum pongoiso',
+'underline-default' => 'Kourasai pogigihum sandad',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Poyanan mongidit gaya pimato:',
@@ -147,8 +147,9 @@ $messages = array(
 'newwindow' => '(ukabai id liligaon wagu)',
 'cancel' => 'Kinsilo',
 'moredotdotdot' => 'Gumu...',
-'mypage' => 'Bolikonku',
-'mytalk' => 'Pibabarasanku',
+'morenotlisted' => 'Susuai poh ii awu nokosurat...',
+'mypage' => 'Bolikon',
+'mytalk' => 'Pogibabarasan',
 'anontalk' => 'Piboros montok diti nantadon IP',
 'navigation' => 'Popotunud',
 'and' => '&#32;om',
@@ -170,7 +171,7 @@ $messages = array(
 'vector-action-protect' => 'Tingoligai',
 'vector-action-undelete' => 'Kada pugaso',
 'vector-action-unprotect' => 'Alanai tingolig',
-'vector-simplesearch-preference' => 'Pasagao pogigihum ponontonudon pinoingkawas (Pongulit tuntuduk nopo)',
+'vector-simplesearch-preference' => 'Pasagao pogigihum bar noinsanangan (Pongulit tuntuduk nopo)',
 'vector-view-create' => 'Pomonsoi',
 'vector-view-edit' => 'Idito',
 'vector-view-history' => 'Intaai susuyan',
@@ -180,6 +181,7 @@ $messages = array(
 'namespaces' => 'Ponuratan ngaran',
 'variants' => 'Kopogisuaian',
 
+'navigation-heading' => 'Pipilion usuyon',
 'errorpagetitle' => 'Nosilopan',
 'returnto' => 'Gumuli hilo $1.',
 'tagline' => 'Mantad {{SITENAME}}',
@@ -391,7 +393,7 @@ Pongimuhatan: $2',
 'actionthrottled' => 'Momilos',
 'actionthrottledtext' => 'Pinapanau lumawan-singkarap, Nantaban ko do mingguli momonsoi miagal dilo id timpu do osikap, om nagampot nu noh gisom diti.
 Umbalan kawagu do katalib poh pipiro minit.',
-'protectedpagetext' => 'Bolikon diti notingoligan tu mangantob do pingiditan.',
+'protectedpagetext' => 'Bolikon diti notingoligan tu mangantob do pinsimbanan toi pingkukuroyon nopo.',
 'viewsourcetext' => 'Pasagaon ko do mongintong om mangadalin wowonod diti bolikon:',
 'viewyourtext' => "Milo nu do intangan om solinon ot wowonod '''niditannu''' id bolikon diti:",
 'protectedinterface' => 'Bolikon diti kiharo sinuratan pongurasan montok posusuang-suangon, om notingoligan do momiara mantad pomirumbakan.
@@ -426,6 +428,9 @@ Mongungulud di minongunsi pinopointalang do kointalangan diti: "$3".',
 
 Milo ko do monilombus mongoguno {{SITENAME}} poinlisok, toi <span class='plainlinks'>[$1 sumuang log koh kawagu]</span> miagal ngaran di tiinu toi mongoguno ngaran suai.
 Birio do kipipiro bolikon popokito do maso poinsuang log koh poh gisom no do opugas nu dangkob do pogigihumnu.",
+'welcomeuser' => 'Kotobian dongkorikatan, $1!',
+'welcomecreation-msg' => 'Nowonsoi noh akaunnu.
+Soroho noh do mongolon do [[Special:Preferences|{{SITENAME}} komoisaannu]].',
 'yourname' => 'Ngarandait:',
 'yourpassword' => 'Kaatalib:',
 'yourpasswordagain' => 'Mintaipo kaatalib:',
@@ -448,7 +453,7 @@ Birio do kipipiro bolikon popokito do maso poinsuang log koh poh gisom no do opu
 'gotaccount' => 'Kitakaun? $1',
 'gotaccountlink' => 'Sumuang log',
 'userlogin-resetlink' => 'Nolihuan ahal loginnu?',
-'createaccountmail' => 'Maya surat-i',
+'createaccountmail' => 'Gunoo nunu nopo kaatalib om pootodo id surat-i ii poinsurat id siriba diti',
 'createaccountreason' => 'Sabab:',
 'badretype' => 'Kaatalib pinosuang awu kopisangai.',
 'userexists' => 'Ngaranmoguno pinosuang noguno no.
@@ -523,9 +528,10 @@ Andado poh do toruhai pogulu do minsingumbal kawagu.',
 'loginlanguagelabel' => 'Woyoboros: $1',
 'suspicious-userlogout' => 'Awu naramit lumabus lognu tu pinaatod mantad pogigihum norumbak toi caching olon.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Awu nointutunan kinosilapan id don surat PHP () function',
 'user-mail-no-addy' => 'Mogumbal do papaatod surat-i tingaa o paatadan.',
+'user-mail-no-body' => 'Minogumbal koh do papaatod surat-i do ingaa suang toi nadalaan koniba.',
 
 # Change password dialog
 'resetpass' => 'Alanai kaatalib',
@@ -551,7 +557,12 @@ Naalanannu noh kaatalib toi nokopokianu koh no do kaatalib daamot.',
 'passwordreset-text' => 'Gonopo poom diti do mangaramit tongosurat-i ponorou do nokomoi id akaun.',
 'passwordreset-legend' => 'Pudoliai kawagu kaatalib',
 'passwordreset-disabled' => 'Pomudolian kawagu do kaatalib kitaantob id wiki diti.',
+'passwordreset-pretext' => '{{PLURAL:$1||Posuango iso data id siriba}}',
 'passwordreset-username' => 'Ngarandait:',
+'passwordreset-domain' => 'Sumanganu:',
+'passwordreset-capture' => 'Intaai surat-i dii nowonsoi?',
+'passwordreset-capture-help' => 'Nung goritannu id kutak diti, surat-i (ii ki-kaa-talib daamot) mangan pokitanai montok dia om nogi porikoton montok momomoguno diti.',
+'passwordreset-email' => 'Porikatan surat-i:',
 'passwordreset-emailtitle' => 'Kointalangan takaun id {{SITENAME}}',
 'passwordreset-emailelement' => 'Ngaranmoguno: $1
 Kaatalib daamot: $2',
@@ -693,7 +704,7 @@ Bobolikon pinudali .css om .js momoguno do pimato tokoro, miagal pomitanan {{ns:
 'note' => "'''Pasoniba:'''",
 'previewnote' => "'''Soroho no do iti nopo nga kopongintangan toomod.'''
 Awu po moti nokogompi iri nopingalanannu!",
-'continue-editing' => 'Potilombuso do mongidit.',
+'continue-editing' => 'Ongoi doid pongiditan.',
 'previewconflict' => 'Miagal no diti pongitanan do tik id boogian kawas kutak pongiditan tik nung pilionnu do popogompi.',
 'session_fail_preview' => "'''Siou! Awu di dahai opongoh niditannu gisom no do natagakan data.'''
 Mangai umbalai kawagu.
@@ -939,6 +950,7 @@ Intaai [[Special:BlockList|lis nantaban]] montok lis kawawagu karaja mogoduh om
 'nextn-title' => 'Sumusuhut $1 {{PLURAL:$1|kootuson|tongokootuson}}',
 'shown-title' => 'Pokitono $1 {{PLURAL:$1|kootuson|tongokootuson}} monikid bolikon',
 'viewprevnext' => 'Intaai ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'Pilion ihum-ihumon',
 'searchmenu-exists' => "'''Haro no bolikon pinungaranan do \"[[:\$1]]\" hiti id wiki.'''",
 'searchmenu-new' => "'''Pomonsoi do bolikon \"[[:\$1]]\"hiti id wiki!'''",
 'searchhelp-url' => 'Help:Susuang',
@@ -991,7 +1003,7 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 
 # Preferences page
 'preferences' => 'Pipilion',
-'mypreferences' => 'Komoisoonku',
+'mypreferences' => 'Pipilion',
 'prefs-edits' => 'Ginumu niditan:',
 'prefsnologin' => 'Amu nokolog sumuang',
 'changepassword' => 'Alanai kaatalib',
@@ -1006,6 +1018,15 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 'saveprefs' => 'Pogompio',
 'resetprefs' => 'Pugaso nalanan awu nogompi',
 'searchresultshead' => 'Ihumo',
+'servertime' => 'Timpu mamamalayan:',
+'guesstimezone' => 'Gunoo pinatantu do lalayagku',
+'timezoneregion-africa' => 'Aprika',
+'timezoneregion-america' => 'Amirika',
+'timezoneregion-antarctica' => 'Antartika',
+'timezoneregion-arctic' => 'Artik',
+'timezoneregion-asia' => 'Asia',
+'timezoneregion-atlantic' => 'Karahatan Atlantik',
+'timezoneregion-australia' => 'Astaralia',
 'prefs-searchoptions' => 'Ihumo',
 'prefs-namespaces' => 'Ponuratan ngaran',
 'youremail' => 'Surat-i:',
@@ -1022,7 +1043,7 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 'prefs-displaywatchlist' => 'Pomilian pongitanan',
 'prefs-diffs' => 'Pisuaian',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Porikatan surat-i asaah',
 'email-address-validity-invalid' => 'Posuango porikatan surat-i di asaah',
 
@@ -1207,7 +1228,7 @@ Kointalangan dilo [$2 kointalangan pail] okito id siriba.',
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis do kinoruhangan)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Surat-i momomoguno diti',
 
 # Watchlist
index 62a5b27..a425530 100644 (file)
@@ -825,8 +825,8 @@ $2',
 'blocked-mailpassword' => 'Η διεύθυνση IP σας είναι αποκλεισμένη από επεξεργασία, και έτσι
 δεν επιτρέπεται να χρησιμοποιήσει την λειτουργία ανάκτησης κωδικού πρόσβασης, για την αποφυγή κατάχρησης.',
 'eauthentsent' => 'Ένα μήνυμα επαλήθευσης έχει σταλεί στην ηλεκτρονική διεύθυνση που έχετε δηλώσει στο σύστημα. Πριν αρχίσει η αποστολή μηνυμάτων στη συγκεκριμένη διεύθυνση, πρέπει να ακολουθήσετε τις οδηγίες που βρίσκονται στο μήνυμα που σας έχει σταλεί για να επαληθεύσετε ότι η συγκεκριμένη ηλεκτρονική διεύθυνση ανήκει πραγματικά σε εσάς.',
-'throttled-mailpassword' => 'Î\9cια Ï\85Ï\80ενθÏ\8dμιÏ\83η Î³Î¹Î± Ï\84ον ÎºÏ\89δικÏ\8c Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 Î­Ï\87ει Î®Î´Î· σταλεί, μέσα {{PLURAL:$1|στην τελευταία ώρα|στις τελευταίες $1 ώρες}}.
\93ια Ï\84ην Î±Ï\80οÏ\86Ï\85γή ÎºÎ±Ï\84άÏ\87Ï\81ηÏ\83ηÏ\82, Î¼Ï\8cνο Î¼Î¹Î± Ï\85Ï\80ενθÏ\8dμιÏ\83η Î³Î¹Î± Ï\84ον ÎºÏ\89δικÏ\8c Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 θα στέλνεται ανά {{PLURAL:$1|ώρα|$1 ώρες}}.',
+'throttled-mailpassword' => 'Î\88να email ÎµÏ\80αναÏ\86οÏ\81άÏ\82 ÎºÏ\89δικοÏ\8d Î­Ï\87ει Î®Î´Î· Î±Ï\80οσταλεί, μέσα {{PLURAL:$1|στην τελευταία ώρα|στις τελευταίες $1 ώρες}}.
\93ια Ï\84ην Î±Ï\80οÏ\86Ï\85γή ÎºÎ±Ï\84άÏ\87Ï\81ηÏ\83ηÏ\82, Î¼Ï\8cνο Î­Î½Î± email ÎµÏ\80αναÏ\86οÏ\81άÏ\82 ÎºÏ\89δικοÏ\8d θα στέλνεται ανά {{PLURAL:$1|ώρα|$1 ώρες}}.',
 'mailerror' => 'Σφάλμα στην αποστολή του μηνύματος: $1',
 'acct_creation_throttle_hit' => 'Επισκέπτες αυτού του wiki με την διεύθυνση IP σας έχουν ήδη δημιουργήσει {{PLURAL:$1|ένα λογαριασμό|$1 λογαριασμούς}}, κατά την τελευταία μία ημέρα, που είναι και ο μέγιστος επιτρεπόμενος αριθμός.
 Ως αποτέλεσμα, επισκέπτες αυτού του wiki με αυτήν την διεύθυνση IP δεν μπορούν αυτή την στιγμή να δημιουργήσουν περισσότερους λογαριασμούς.',
@@ -851,7 +851,7 @@ $2',
 'loginlanguagelabel' => 'Γλώσσα: $1',
 'suspicious-userlogout' => 'Το αίτημα αποσύνδεσής σας απερρίφθη επειδή φαίνεται ότι στάλθηκε από ένα λανθασμένο φυλλομετρητή (browser) ή διακομιστή προσωρινής αποθήκευσης.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Άγνωστο σφάλμα στη συνάρτηση mail() της PHP.',
 'user-mail-no-addy' => 'Προσπαθήσατε να στείλετε e-mail χωρίς μια διεύθυνση e-mail.',
 'user-mail-no-body' => 'Προσπάθησε να στείλει e-mail με ένα κενό ή αδικαιολόγητα σύντομο σώμα.',
@@ -876,7 +876,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Κωδικός επαναφοράς',
-'passwordreset-text' => 'ΣÏ\85μÏ\80ληÏ\81Ï\8eÏ\83Ï\84ε Î±Ï\85Ï\84ή Ï\84η Ï\86Ï\8cÏ\81μα Î³Î¹Î± Î½Î± Î»Î¬Î²ÎµÏ\84ε Î­Î½Î±  e-mail Ï\85Ï\80ενθÏ\8dμιÏ\83η Ï\84οÏ\85 Î»Î¿Î³Î±Ï\81ιαÏ\83μοÏ\8d σας.',
+'passwordreset-text' => 'ΣÏ\85μÏ\80ληÏ\81Ï\8eÏ\83Ï\84ε Î±Ï\85Ï\84ή Ï\84η Ï\86Ï\8cÏ\81μα Î³Î¹Î± Î½Î± ÎµÏ\80αναÏ\86έÏ\81εÏ\84ε Ï\84ον ÎºÏ\89δικÏ\8c σας.',
 'passwordreset-legend' => 'Επαναφορά κωδικού πρόσβασης',
 'passwordreset-disabled' => 'Η επαναφορά κωδικού πρόσβασης έχει απενεργοποιηθεί σε αυτό το wiki',
 'passwordreset-pretext' => '{{PLURAL:$1||Εισάγεται ένα από τα στοιχεία δεδομένων που βλέπετε παρακάτω}}',
@@ -886,13 +886,13 @@ $2',
 'passwordreset-capture-help' => 'Εάν μαρκάρετε αυτό το πλαίσιο, το μήνυμα ηλεκτρονικού ταχυδρομείου (με το προσωρινό κωδικό πρόσβασης) θα εμφανιστεί σε σας καθώς θα αποσταλεί στο χρήστη.',
 'passwordreset-email' => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου:',
 'passwordreset-emailtitle' => 'Λεπτομέρειες λογαριασμού για {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1 ) ζήτησε μια υπενθύμιση των λεπτομερειών του λογαριασμού σας σε {{SITENAME}} ($4).  {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
+'passwordreset-emailtext-ip' => 'Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1) ζήτησε την επαναφορά του κωδικού σας σε {{SITENAME}} ($4).  {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
 
 $2
 
-{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει| Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5| μία ημέρα| $5 ημέρες}}.
+{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει|Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5|μία ημέρα|$5 ημέρες}}.
 Θα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.',
-'passwordreset-emailtext-user' => 'Ο χρήστης $1 στη {{SITENAME}} ζήτησε μια υπενθύμιση των λεπτομερειών του λογαριασμού σας σε {{SITENAME}} ($4).  {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
+'passwordreset-emailtext-user' => 'Ο χρήστης $1 στη {{SITENAME}} ζήτησε μια επαναφορά του κωδικού πρόσβασης σας σε {{SITENAME}} ($4). {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
 
 $2
 
@@ -900,9 +900,9 @@ $2
 Θα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.',
 'passwordreset-emailelement' => 'Όνομα χρήστη: $1
 Προσωρινός κωδικός πρόσβασης:$2',
-'passwordreset-emailsent' => 'Έχει αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για υπενθύμιση.',
-'passwordreset-emailsent-capture' => 'Έχει αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για υπενθύμιση, το οποίο φαίνεται πιο κάτω.',
-'passwordreset-emailerror-capture' => 'Ένα μήνυμα υπενθύμισης ηλεκτρονικού ταχυδρομείου έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο χρήστη: $1',
+'passwordreset-emailsent' => 'Έχει αποσταλεί email επαναφοράς κωδικού.',
+'passwordreset-emailsent-capture' => 'Έχει αποσταλεί email επαναφοράς κωδικού, το οποίο φαίνεται πιο κάτω.',
+'passwordreset-emailerror-capture' => 'Ένα email επαναφοράς κωδικού έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο χρήστη: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Αλλαγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου',
@@ -1510,7 +1510,7 @@ $1",
 'prefs-displaywatchlist' => 'Επιλογές εμφάνισης',
 'prefs-diffs' => 'Διαφορές',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου φαίνεται έγκυρη',
 'email-address-validity-invalid' => 'Εισάγετε  μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου',
 
@@ -2237,7 +2237,7 @@ $1',
 'linksearch-ok' => 'Αναζήτηση',
 'linksearch-text' => 'Μπορούν να χρησιμοποιηθούν χαρακτήρες μπαλαντέρ όπως "*.wikipedia.org". 
 Χρειάζεται τουλάχιστον μια κατάληξη ανωτάτου επιπέδου, για παράδειγμα "*.org".<br />
-Υποστηριζόμενα {{PLURAL:$2|πρωτόκολλο|πρωτόκολλα}}: <code>$1</code> (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).',
+{{PLURAL:$2|Υποστηριζόμενο πρωτόκολλο|Υποστηριζόμενα πρωτόκολλα}}: <code>$1</code> (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).',
 'linksearch-line' => 'Η $1 συνδεδεμένη από την $2',
 'linksearch-error' => 'Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).',
 
@@ -2275,7 +2275,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Μπορεί να προσθέσει όλες τις ομάδες στο δικό σας λογαριασμό',
 'listgrouprights-removegroup-self-all' => 'Μπορεί να αφαιρέσει όλες τις ομάδες από το δικό σας λογαριασμό',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Δεν υπάρχει διεύθυνση παραλήπτη.',
 'mailnologintext' => 'Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει
 μια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]
@@ -2926,6 +2926,7 @@ $1',
 'import-interwiki-templates' => 'Συμπερίληψη όλων των προτύπων',
 'import-interwiki-submit' => 'Εισαγωγή',
 'import-interwiki-namespace' => 'Προορισμός στον ονοματοχώρο:',
+'import-interwiki-rootpage' => 'Σελίδα ρίζα προορισμού (προαιρετικό):',
 'import-upload-filename' => 'Όνομα αρχείου:',
 'import-comment' => 'Σχόλιο:',
 'importtext' => 'Παρακαλούμε εξάγετε το αρχείο από το πηγαίο wiki (χρησιμοποιώντας το [[Special:Export|εργαλείο εξαγωγής]]), αποθηκεύστε το στον υπολογιστή σας και μεταφορτώστε το από εκεί.',
@@ -3114,6 +3115,7 @@ $1',
 'pageinfo-robot-noindex' => 'Μη καταχωρήσιμο σε ευρετήριο',
 'pageinfo-views' => 'Αριθμός προβολών',
 'pageinfo-watchers' => 'Αριθμός παρατηρητών σελίδας',
+'pageinfo-few-watchers' => 'Λιγότεροι από $1 {{PLURAL:$1| ακόλουθος|ακόλουθοι}}',
 'pageinfo-redirects-name' => 'Ανακατευθύνσεις σε αυτή τη σελίδα',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Υποσελίδες αυτής της σελίδας',
@@ -3129,6 +3131,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)',
 'pageinfo-templates' => 'Ενσωματωμένα {{PLURAL:$1|πρότυπο|πρότυπα}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Η σελίδα ενσωματώνεται|Οι σελίδες ενσωματώνονται}} σε ($1)',
 'pageinfo-toolboxlink' => 'Πληροφορίες σελίδας',
 'pageinfo-redirectsto' => 'Ανακατευθύνσεις σε',
 'pageinfo-redirectsto-info' => 'πληροφορίες',
@@ -3159,6 +3162,8 @@ $1',
 'markedaspatrollederror' => 'Δεν μπορεί να σημανθεί ως υπό περιπολία',
 'markedaspatrollederrortext' => 'Πρέπει να ορίσετε μια αναθεώρηση για να σημανθεί ως υπό περιπολία',
 'markedaspatrollederror-noautopatrol' => 'Δεν επιτρέπεται να σημάνετε τις δικές σας αλλάγες ως υπό περιπολία.',
+'markedaspatrollednotify' => 'Αυτή η αλλαγή σε $1 έχει επισημανθεί ως ελεγμένη.',
+'markedaspatrollederrornotify' => 'Σήμανση ως ελεγμένη απέτυχε.',
 
 # Patrol log
 'patrol-log-page' => 'Αρχείο καταγραφής περιπολιών',
@@ -3653,7 +3658,7 @@ $1',
 'monthsall' => 'όλα',
 'limitall' => 'όλες',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Επιβεβαίωση διεύθυνσης e-mail',
 'confirmemail_noemail' => 'Δεν έχετε ορίσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]] σας.',
 'confirmemail_text' => 'Το σύστημα χρειάζεται να επαληθεύσει τη διεύθυνση e-mail που δώσατε για να χρησιμοποιήσετε τις δυνατότητες αλληλογραφίας. Κάνετε κλικ στο παρακάτω κουμπί και θα σας αποσταλεί μήνυμα επαλήθευσης στη διεύθυνσή σας. Στο μήνυμα αυτό θα εμφανίζεται ένας σύνδεσμος που Θα περιέχει τον κωδικό επαλήθευσης -ακολουθήστε το σύνδεσμο αυτό για να μπορέσει το σύστημα να επαληθεύσει τη διεύθυνση αλληλογραφίας σας.',
@@ -3977,7 +3982,9 @@ $5
 'logentry-newusers-newusers' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
 'logentry-newusers-create' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
 'logentry-newusers-create2' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$1|τον|την}} $1',
+'logentry-newusers-byemail' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από τον $1  και ο κωδικός πρόσβασης εστάλη μέσω ηλεκτρονικού ταχυδρομείου',
 'logentry-newusers-autocreate' => 'Ο λογαριασμός $1 δημιουργήθηκε αυτόματα',
+'logentry-rights-rights' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας για {{GENDER:$3|τον|την}} $3 από $4 σε $5',
 'logentry-rights-rights-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3',
 'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
 'rightsnone' => '(κανένα)',
@@ -4055,4 +4062,7 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|αιώνα|αιώνες}}',
 'duration-millennia' => '$1 {{PLURAL:$1|χιλιετία|χιλιετίες}}',
 
+# Image rotation
+'rotate-comment' => 'Η εικόνα περιστράφηκε $1 {{PLURAL:$1| μοίρα|μοίρες}} δεξιόστροφα',
+
 );
index 2bb5a0c..52082af 100644 (file)
@@ -775,9 +775,9 @@ XHTML id names.
 'newwindow'     => '(opens in new window)',
 'cancel'        => 'Cancel',
 'moredotdotdot' => 'More...',
+'morenotlisted' => 'More not listed...',
 'mypage'        => 'Page',
 'mytalk'        => 'Talk',
-'morenotlisted' => 'More not listed...',
 'anontalk'      => 'Talk for this IP address',
 'navigation'    => 'Navigation',
 'and'           => '&#32;and',
@@ -1067,73 +1067,73 @@ 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:',
+'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.
 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.
@@ -1142,53 +1142,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 reminder has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.
-To prevent abuse, only one password reminder 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.
+'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.
 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
@@ -1219,7 +1219,7 @@ You may have already successfully changed your password or requested a new tempo
 
 # Special:PasswordReset
 'passwordreset'                    => 'Reset password',
-'passwordreset-text'               => 'Complete this form to receive an email reminder of your account details.',
+'passwordreset-text'               => 'Complete this form to reset your password.',
 'passwordreset-legend'             => 'Reset password',
 'passwordreset-disabled'           => 'Password resets have been disabled on this wiki.',
 'passwordreset-pretext'            => '{{PLURAL:$1||Enter one of the pieces of data below}}',
@@ -1229,8 +1229,8 @@ You may have already successfully changed your password or requested a new tempo
 'passwordreset-capture-help'       => 'If you check this box, the email (with the temporary password) will be shown to you as well as being sent to the user.',
 'passwordreset-email'              => 'Email address:',
 'passwordreset-emailtitle'         => 'Account details on {{SITENAME}}',
-'passwordreset-emailtext-ip'       => 'Someone (probably you, from IP address $1) requested a reminder of your
-account details for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}
+'passwordreset-emailtext-ip'       => 'Someone (probably you, from IP address $1) requested a reset of your
+password for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}
 associated with this email address:
 
 $2
@@ -1240,7 +1240,7 @@ You should log in and choose a new password now. If someone else made this
 request, or if you have remembered your original password, and you no longer
 wish to change it, you may ignore this message and continue using your old
 password.',
-'passwordreset-emailtext-user'     => 'User $1 on {{SITENAME}} requested a reminder of your account details for {{SITENAME}}
+'passwordreset-emailtext-user'     => 'User $1 on {{SITENAME}} requested a reset of your password for {{SITENAME}}
 ($4). The following user {{PLURAL:$3|account is|accounts are}} associated with this email address:
 
 $2
@@ -1252,9 +1252,9 @@ wish to change it, you may ignore this message and continue using your old
 password.',
 'passwordreset-emailelement'       => 'Username: $1
 Temporary password: $2',
-'passwordreset-emailsent'          => 'A reminder email has been sent.',
-'passwordreset-emailsent-capture'  => 'A reminder email has been sent, which is shown below.',
-'passwordreset-emailerror-capture' => 'A reminder email was generated, which is shown below, but sending it to the user failed: $1',
+'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',
 
 # Special:ChangeEmail
 'changeemail'          => 'Change email address',
@@ -1358,10 +1358,11 @@ To create the page, start typing in the box below (see the [[{{MediaWiki:Helppag
 If you are here by mistake, click your browser's '''back''' button.",
 'newarticletextanon'               => '{{int:newarticletext}}', # do not translate or duplicate this message to other languages
 'talkpagetext'                     => '<!-- MediaWiki:talkpagetext -->', # do not translate or duplicate this message to other languages
-'anontalkpagetext'                 => "----''This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.
+'anontalkpagetext'                 => "----
+''This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.''
 We therefore have to use the numerical IP address to identify him/her.
 Such an IP address can be shared by several users.
-If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.''",
+If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
 'noarticletext'                    => 'There is currently no text in this page.
 You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
@@ -3793,8 +3794,8 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-magic-words'            => 'Magic {{PLURAL:$1|word|words}} ($1)',
 'pageinfo-hidden-categories'      => 'Hidden {{PLURAL:$1|category|categories}} ($1)',
 'pageinfo-templates'              => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
-'pageinfo-footer'                 => '-', # do not translate or duplicate this message to other languages
 'pageinfo-transclusions'          => '{{PLURAL:$1|Page|Pages}} transcluded on ($1)',
+'pageinfo-footer'                 => '-', # do not translate or duplicate this message to other languages
 'pageinfo-toolboxlink'            => 'Page information',
 'pageinfo-redirectsto'            => 'Redirects to',
 'pageinfo-redirectsto-info'       => 'info',
@@ -4605,15 +4606,15 @@ Please confirm that you really want to recreate this page.",
 'size-yottabytes' => '$1 YB', # only translate this message to other languages if you have to change it
 
 # Bitrate units
-'bitrate-bits'      => '$1bps', # only translate this message to other languages if you have to change it
-'bitrate-kilobits'  => '$1kbps', # only translate this message to other languages if you have to change it
-'bitrate-megabits'  => '$1Mbps', # only translate this message to other languages if you have to change it
-'bitrate-gigabits'  => '$1Gbps', # only translate this message to other languages if you have to change it
-'bitrate-terabits'  => '$1Tbps', # only translate this message to other languages if you have to change it
-'bitrate-petabits'  => '$1Pbps', # only translate this message to other languages if you have to change it
-'bitrate-exabits'   => '$1Ebps', # only translate this message to other languages if you have to change it
-'bitrate-zetabits'  => '$1Zbps', # only translate this message to other languages if you have to change it
-'bitrate-yottabits' => '$1Ybps', # only translate this message to other languages if you have to change it
+'bitrate-bits'      => '$1 bps', # only translate this message to other languages if you have to change it
+'bitrate-kilobits'  => '$1 kbps', # only translate this message to other languages if you have to change it
+'bitrate-megabits'  => '$1 Mbps', # only translate this message to other languages if you have to change it
+'bitrate-gigabits'  => '$1 Gbps', # only translate this message to other languages if you have to change it
+'bitrate-terabits'  => '$1 Tbps', # only translate this message to other languages if you have to change it
+'bitrate-petabits'  => '$1 Pbps', # only translate this message to other languages if you have to change it
+'bitrate-exabits'   => '$1 Ebps', # only translate this message to other languages if you have to change it
+'bitrate-zetabits'  => '$1 Zbps', # only translate this message to other languages if you have to change it
+'bitrate-yottabits' => '$1 Ybps', # only translate this message to other languages if you have to change it
 
 # Live preview
 'livepreview-loading' => 'Loading...',
@@ -4868,17 +4869,17 @@ This site is experiencing technical difficulties.',
 'sqlite-no-fts'  => '$1 without full-text search support',
 
 # New logging system
-'logentry-delete-delete'              => '$1 deleted page $3',
-'logentry-delete-restore'             => '$1 restored page $3',
-'logentry-delete-event'               => '$1 changed visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
-'logentry-delete-revision'            => '$1 changed visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
-'logentry-delete-event-legacy'        => '$1 changed visibility of log events on $3',
-'logentry-delete-revision-legacy'     => '$1 changed visibility of revisions on page $3',
-'logentry-suppress-delete'            => '$1 suppressed page $3',
-'logentry-suppress-event'             => '$1 secretly changed visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
-'logentry-suppress-revision'          => '$1 secretly changed visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
-'logentry-suppress-event-legacy'      => '$1 secretly changed visibility of log events on $3',
-'logentry-suppress-revision-legacy'   => '$1 secretly changed visibility of revisions on page $3',
+'logentry-delete-delete'              => '$1 {{GENDER:$2|deleted}} page $3',
+'logentry-delete-restore'             => '$1 {{GENDER:$2|restored}} page $3',
+'logentry-delete-event'               => '$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
+'logentry-delete-revision'            => '$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
+'logentry-delete-event-legacy'        => '$1 {{GENDER:$2|changed}} visibility of log events on $3',
+'logentry-delete-revision-legacy'     => '$1 {{GENDER:$2|changed}} visibility of revisions on page $3',
+'logentry-suppress-delete'            => '$1 {{GENDER:$2|suppressed}} page $3',
+'logentry-suppress-event'             => '$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
+'logentry-suppress-revision'          => '$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
+'logentry-suppress-event-legacy'      => '$1 secretly {{GENDER:$2|changed}} visibility of log events on $3',
+'logentry-suppress-revision-legacy'   => '$1 secretly {{GENDER:$2|changed}} visibility of revisions on page $3',
 'revdelete-content-hid'               => 'content hidden',
 'revdelete-summary-hid'               => 'edit summary hidden',
 'revdelete-uname-hid'                 => 'username hidden',
@@ -4887,20 +4888,20 @@ This site is experiencing technical difficulties.',
 'revdelete-uname-unhid'               => 'username unhidden',
 'revdelete-restricted'                => 'applied restrictions to administrators',
 'revdelete-unrestricted'              => 'removed restrictions for administrators',
-'logentry-move-move'                  => '$1 moved page $3 to $4',
-'logentry-move-move-noredirect'       => '$1 moved page $3 to $4 without leaving a redirect',
-'logentry-move-move_redir'            => '$1 moved page $3 to $4 over redirect',
-'logentry-move-move_redir-noredirect' => '$1 moved page $3 to $4 over a redirect without leaving a redirect',
-'logentry-patrol-patrol'              => '$1 marked revision $4 of page $3 patrolled',
-'logentry-patrol-patrol-auto'         => '$1 automatically marked revision $4 of page $3 patrolled',
-'logentry-newusers-newusers'          => 'User account $1 was created',
-'logentry-newusers-create'            => 'User account $1 was created',
-'logentry-newusers-create2'           => 'User account $3 was created by $1',
-'logentry-newusers-byemail'           => 'User account $3 was created by $1 and password was sent by email',
-'logentry-newusers-autocreate'        => 'User account $1 was created automatically',
-'logentry-rights-rights'              => '$1 changed group membership for $3 from $4 to $5',
-'logentry-rights-rights-legacy'       => '$1 changed group membership for $3',
-'logentry-rights-autopromote'         => '$1 was automatically promoted from $4 to $5',
+'logentry-move-move'                  => '$1 {{GENDER:$2|moved}} page $3 to $4',
+'logentry-move-move-noredirect'       => '$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect',
+'logentry-move-move_redir'            => '$1 {{GENDER:$2|moved}} page $3 to $4 over redirect',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|moved}} page $3 to $4 over a redirect without leaving a redirect',
+'logentry-patrol-patrol'              => '$1 {{GENDER:$2|marked}} revision $4 of page $3 patrolled',
+'logentry-patrol-patrol-auto'         => '$1 automatically {{GENDER:$2|marked}} revision $4 of page $3 patrolled',
+'logentry-newusers-newusers'          => 'User account $1 was {{GENDER:$2|created}}',
+'logentry-newusers-create'            => 'User account $1 was {{GENDER:$2|created}}',
+'logentry-newusers-create2'           => 'User account $3 was {{GENDER:$2|created}} by $1',
+'logentry-newusers-byemail'           => 'User account $3 was {{GENDER:$2|created}} by $1 and password was sent by email',
+'logentry-newusers-autocreate'        => 'User account $1 was {{GENDER:$2|created}} automatically',
+'logentry-rights-rights'              => '$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5',
+'logentry-rights-rights-legacy'       => '$1 {{GENDER:$2|changed}} group membership for $3',
+'logentry-rights-autopromote'         => '$1 was automatically {{GENDER:$2|promoted}} from $4 to $5',
 'rightsnone'                          => '(none)',
 
 # For IRC, see bug 34508. Do not change
@@ -5001,7 +5002,7 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-#Rotation
+# Image rotation
 'rotate-comment' => 'Image rotated by $1 {{PLURAL:$1|degree|degrees}} clockwise',
 
 );
index 8ef27aa..071c7fc 100644 (file)
@@ -15,6 +15,7 @@
  * @author ArnoLagrange
  * @author Blahma
  * @author Castelobranco
+ * @author Eliovir
  * @author Iketsi
  * @author Jens Liebenau
  * @author Kaganer
@@ -2083,6 +2084,9 @@ Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.',
 Ili devus anstataŭe alligi la ĝustan temon.<br />
 Paĝo estas traktata kiel apartigilo se ĝi uzas ŝablonon kiu estas ligita de [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop-prop' => 'Nomo de la atributo:',
+'pageswithprop-submit' => 'Ek',
+
 'doubleredirects' => 'Duoblaj alidirektadoj',
 'doubleredirectstext' => 'Ĉi tiu paĝo montras paĝojn kiuj alidirektas al aliaj alidirektiloj.
 Ĉiu vico enhavas ligilojn ĉe la unua kaj dua alidirektadoj, kaj la unua linio de la dua alidirektado, kiu ĝenerale montras la "veran" celpaĝon, kiu celu la unuan alidirektadon.
@@ -4055,7 +4059,7 @@ Bildoj montriĝas en plena distingivo, aliaj dosiertipoj estas malfermataj rekte
 'logentry-newusers-autocreate' => 'Konto $1 estis kreita aŭtomate',
 'logentry-rights-rights' => '$1 ŝanĝis grupan membrecon por $3 de $4 al $5',
 'logentry-rights-rights-legacy' => '$1 ŝanĝis grupan membrecon por $3',
-'logentry-rights-autopromote' => '$1 estis aŭtomate altrangigita de $4 al $5',
+'logentry-rights-autopromote' => '$1 estis aŭtomate {{GENDER:$2|altrangigita}} de $4 al $5',
 'rightsnone' => '(nenia)',
 
 # Feedback
index 301984d..6c4fe19 100644 (file)
@@ -65,6 +65,7 @@
  * @author Omnipaedista
  * @author Orgullomoore
  * @author Paucabot
+ * @author Penarc
  * @author PerroVerd
  * @author Pertile
  * @author Piolinfax
@@ -77,6 +78,7 @@
  * @author Savh
  * @author Shirayuki
  * @author Spacebirdy
+ * @author Stephensuleeman
  * @author Technorum
  * @author The Evil IP address
  * @author TheBITLINK
@@ -741,7 +743,7 @@ Consulta: $2',
 'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
 'viewyourtext' => "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
 'protectedinterface' => 'Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.
-Para agregar o cambiar las traducciones para todos los wikis, por favor use [//translatewiki.net/translatewiki.net], el proyecto de localización de MediaWiki.',
+Para agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.',
 'editinginterface' => "'''Aviso:''' Estás editando una página usada para proporcionar el texto de la interfaz para el software. 
 Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios de este wiki. 
 Para añadir o cambiar las traducciones, por favor considera usar [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
@@ -2145,6 +2147,12 @@ Entrada: contenttype/subtype, p. ej. <code>image/jpeg</code>.',
 En lugar de ello deberían enlazar a una página más apropiada.<br />
 Una página es considerada página de desambiguación si utiliza la plantilla que está enlazada desde [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Páginas con una propiedad de página',
+'pageswithprop-legend' => 'Páginas con una propiedad de página',
+'pageswithprop-text' => 'Esta página muestra las páginas que usan la propiedad de una página en particular',
+'pageswithprop-prop' => 'Nombre de la propiedad',
+'pageswithprop-submit' => 'Ir',
+
 'doubleredirects' => 'Redirecciones dobles',
 'doubleredirectstext' => 'Esta página contiene una lista de páginas que redirigen a otras páginas de redirección.
 Cada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo «real» al que la primera redirección debería apuntar.
@@ -4141,4 +4149,7 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|siglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
 
+# Image rotation
+'rotate-comment' => 'Imagen girada por $1 {{PLURAL:$1|grado|grados}} en el sentido de las agujas del reloj',
+
 );
index 094e966..aadb5b5 100644 (file)
@@ -448,7 +448,7 @@ $messages = array(
 'vector-action-unprotect' => 'Muuda kaitset',
 'vector-simplesearch-preference' => 'Kasuta lihtsustatud otsiriba (ainult Vektori-kujunduses)',
 'vector-view-create' => 'Loo',
-'vector-view-edit' => 'Redigeeri',
+'vector-view-edit' => 'Muuda',
 'vector-view-history' => 'Näita ajalugu',
 'vector-view-view' => 'Vaata',
 'vector-view-viewsource' => 'Vaata lähteteksti',
@@ -456,7 +456,7 @@ $messages = array(
 'namespaces' => 'Nimeruumid',
 'variants' => 'Variandid',
 
-'navigation-heading' => 'Navigatsioonimenüü',
+'navigation-heading' => 'Navigeerimismenüü',
 'errorpagetitle' => 'Viga',
 'returnto' => 'Naase lehele $1',
 'tagline' => 'Allikas: {{SITENAME}}',
@@ -472,7 +472,7 @@ $messages = array(
 'permalink' => 'Püsilink',
 'print' => 'Prindi',
 'view' => 'Vaata',
-'edit' => 'Redigeeri',
+'edit' => 'Muuda',
 'create' => 'Loo',
 'editthispage' => 'Redigeeri seda lehekülge',
 'create-this-page' => 'Loo see lehekülg',
@@ -558,7 +558,7 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'newmessageslinkplural' => '{{PLURAL:$1|uus sõnum|uusi sõnumeid}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|viimane muudatus|viimased muudatused}}',
 'youhavenewmessagesmulti' => 'Sulle on uusi sõnumeid $1',
-'editsection' => 'redigeeri',
+'editsection' => 'muuda',
 'editsection-brackets' => '[$1]',
 'editold' => 'redigeeri',
 'viewsourceold' => 'vaata lähteteksti',
@@ -988,9 +988,9 @@ Kui see ikka ei tööta, proovi [[Special:UserLogout|välja]] ja tagasi sisse lo
 Muudatus lükati tagasi, et vältida lehekülje segiminekut.
 See juhtub mõnikord siis, kui kasutatakse vigast veebipõhist anonüümsusserverit.",
 'edit_form_incomplete' => "'''Redigeerimisvormi mõni osa ei jõudnud serverisse; kontrolli, kas sinu tehtud muudatused on alles, ja proovi uuesti.'''",
-'editing' => 'Redigeerimisel on $1',
+'editing' => 'Muutmisel on $1',
 'creating' => 'Alustamisel on $1',
-'editingsection' => 'Redigeerimisel on osa leheküljest $1',
+'editingsection' => 'Muutmisel on osa leheküljest $1',
 'editingcomment' => 'Muutmisel on $1 (uus alaosa)',
 'editconflict' => 'Redigeerimiskonflikt: $1',
 'explainconflict' => "Keegi teine on muutnud seda lehekülge pärast seda, kui sina seda redigeerima hakkasid.
index bc0f2ea..61a1b3a 100644 (file)
@@ -1351,7 +1351,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-addgroup-all' => 'Añiil tolos grupus',
 'listgrouprights-removegroup-all' => 'Esborral tolos grupus',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nu envial direción',
 'mailnologintext' => 'Ebis estal [[Special:UserLogin|rutrau]]
 i tenel una direción d´email correta enas tus [[Special:Preferences|preferéncias]]
@@ -2222,7 +2222,7 @@ Cualisquiel otru atihu ena mesma línia se consierará ececión, p.s. páhinas o
 'namespacesall' => 'tó',
 'monthsall' => 'tó',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmal email',
 'confirmemail_noemail' => 'Nu as escrebiu una direción d´email correta enas tus [[Special:Preferences|preferéncias]].',
 'confirmemail_text' => "{{SITENAME}} requieri que confirmis la tu direción d'email enantis de gastal las huncionis de correu. Ativa el botón d'embahu pa envial un correu e confirmación a la tu direción. El correu incluirá un atihu con un cóigu; sigui el atihu pa confirmal la tu direción d'email.",
index 42bbc9b..745aca1 100644 (file)
@@ -2038,6 +2038,7 @@ Sivua kohdellaan täsmennyssivuna, jos se käyttää mallinetta, johon on linkki
 'pageswithprop' => 'Sivut sivun ominaisuuden mukaan',
 'pageswithprop-legend' => 'Sivut sivun ominaisuuden mukaan',
 'pageswithprop-text' => 'Tällä sivulla on lueteltu sivut, jotka käyttävät erityistä sivun ominaisuutta.',
+'pageswithprop-prop' => 'Ominaisuuden nimi',
 'pageswithprop-submit' => 'Siirry',
 
 'doubleredirects' => 'Kaksinkertaiset ohjaukset',
index c449f1e..ed66796 100644 (file)
@@ -159,7 +159,7 @@ $messages = array(
 
 'underline-always' => 'Altíð',
 'underline-never' => 'Ongantíð',
-'underline-default' => 'Kagarastandard',
+'underline-default' => 'Standard fyri útsjónd og kaga',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Rættað økið typografi:',
@@ -244,7 +244,8 @@ $messages = array(
 'newwindow' => '(kemur í nýggjan glugga)',
 'cancel' => 'Ógilda',
 'moredotdotdot' => 'Meira...',
-'mypage' => 'Mín síða',
+'morenotlisted' => 'Meira, ið ikki verður víst',
+'mypage' => 'Síða',
 'mytalk' => 'Kjak',
 'anontalk' => 'Kjak til hesa ip-adressuna',
 'navigation' => 'Navigatión',
@@ -267,7 +268,7 @@ $messages = array(
 'vector-action-protect' => 'Friða',
 'vector-action-undelete' => 'Endurstovna',
 'vector-action-unprotect' => 'Broyt friðing',
-'vector-simplesearch-preference' => 'Ger virkið betraði leiti uppskot (bert Vector útsjónd)',
+'vector-simplesearch-preference' => 'Ger lættari leititeig virknan (bert Vector útsjónd)',
 'vector-view-create' => 'Stovna',
 'vector-view-edit' => 'Rætta',
 'vector-view-history' => 'Søga',
@@ -277,6 +278,7 @@ $messages = array(
 'namespaces' => 'Navnarúm',
 'variants' => 'Ymisk sløg',
 
+'navigation-heading' => 'Navigatiónsskrá',
 'errorpagetitle' => 'Villa',
 'returnto' => 'Vend aftur til $1.',
 'tagline' => 'Frá {{SITENAME}}',
@@ -432,9 +434,9 @@ Hetta kann eisini benda á ein feil í software'ini sum {{SITENAME}} brúkar.",
 'dberrortext' => '↓ Tað er hend ein syntaks villa í fyrispurninginum til dátugrunnin.
 Hetta kann merkja, at tað er feilur í ritbúnaðinum (software).
 Seinasta royndin at spyrja dátugrunnin var:
-<blockquote><tt>$1</tt></blockquote>
-frá funktiónini "<tt>$2</tt>".
-Dátugrunnurin sendi feilin aftur "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+frá innaru funktión "<code>$2</code>".
+Dátagrunnurin gav feilmelding "<samp>$3: $4</samp>".',
 'dberrortextcl' => '↓ Ein syntaks feilur hendi í fyrispurningi til dátugrunnin.
 Seinasta royndin at leita í dátugrunninum var:
  "$1"
@@ -471,6 +473,8 @@ Vinarliga fortel hetta fyri einum [[Special:ListUsers/sysop|administrator]], og
 'cannotdelete' => 'Síðan ella fílan $1 kundi ikki strikast. 
 Møguliga hevur onkur annar longu strikað hana.',
 'cannotdelete-title' => 'Kann ikki strika síðu "$1"',
+'delete-hook-aborted' => 'Ein húkur (hook) forðaði fyri sletting.
+Ongin frágreiðing varð givin.',
 'badtitle' => 'Ógyldugt heiti',
 'badtitletext' => 'Umbidna síðan er ógyldugt, tómt ella skeivt tilslóðað heiti millum mál ella wikur.',
 'perfcached' => 'Fylgjandi upplýsingar eru "fangaðir" (cached) og eru møguliga ikki dagførdir. Í mesta lagi {{PLURAL:$1|eitt úrslit er|$1 úrslit eru}} tøk í cache.',
@@ -485,13 +489,14 @@ Fyrispurningur: $2',
 'actionthrottled' => 'Hendingin kvaldist',
 'actionthrottledtext' => '↓ Fyri at mótvirka spam, er tað ikki møguligt at gera hetta alt ov nógvar ferðir uppá stutta tíð, og tú ert farin yvir tað markið.
 Vinarliga royn aftur um fáir minuttir.',
-'protectedpagetext' => 'Hendan síða er læst fyri at steðga rættingum.',
+'protectedpagetext' => 'Hendan síða er blivin vard fyri at steðga rættingum ella øðrum handlingum.',
 'viewsourcetext' => 'Tú kanst síggja og avrita kelduna til hesa grein:',
 'viewyourtext' => "Tú kanst síggja og avrita kelduna fyri '''tínar rættingar''' til hesa síðuna:",
-'protectedinterface' => '↓ Henda síðan gevur markamóts tekst til ritbúnaðin (software), og er vard fyri at fyribyrgja misnýtslu.',
+'protectedinterface' => "↓ Henda síðan gevur markamóts tekst til ritbúnaðin (software), og er vard fyri at fyribyrgja misnýtslu.
+Fyri at gera rættingar ella broyta týðingar á øllum wiki'um, vinarliga nýt [//translatewiki.net/ translatewiki.net], MediaWiki verkætlanina.",
 'editinginterface' => "↓ '''Ávaring:''' Tú rættar eina síðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).
-Broytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrir brúkarar.
-Fyri at gera týðingar verður tú vinarliga biðin um at umhugsa at brúka [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], sum er verkætlan fyri týðingum av MediaWiki.",
+Broytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrar brúkarar á hesi wiki.
+Fyri at gera týðingar ella broyta týðingar á øllum wiki, vinarliga nýt [//translatewiki.net/ translatewiki.net],  sum er ein MediaWiki verkætlan.",
 'sqlhidden' => '(SQL fyrispurningur fjaldur)',
 'cascadeprotected' => 'Henda síðan er vard fyri rættingum, tí hon er í fylgjandi {{PLURAL:$1|síðu, sum er|síðum, sum eru}}
 vardar við "arvaðari síðuverjing"
@@ -502,6 +507,11 @@ $2',
 'ns-specialprotected' => 'Serstakar síður kunnu ikki rættast.',
 'titleprotected' => '[[User:$1|$1]] hevur vart hetta heitið frá skapan.
 Givin orsøk er "\'\'$2\'\'".',
+'filereadonlyerror' => 'Tað var ikki møguligt at broyta fíluna "$1" tí at fílugoymslan "$2" er í bara-lesa støðu.
+
+Umboðsstjórin sum stongdi hana, gav hesa frágreiðing: "$3".',
+'invalidtitle-knownnamespace' => 'Ógyldugt heiti við navnaøki "$2" og teksti "$3"',
+'invalidtitle-unknownnamespace' => 'Ógyldigt heiti við ókendum navnaøkis tali $1 og teksti "$2"',
 'exception-nologin' => 'Tú ert ikki loggað/ur inn',
 'exception-nologin-text' => 'Henda síða ella tað tú ætlar at gera kremvur at tú ert innritað/ur á hesa wiki.',
 
@@ -539,7 +549,7 @@ Gloym ikki at broyta tínar [[Special:Preferences|{{SITENAME}}-innstillingar]].'
 'gotaccount' => "Hevur tú longu eina kontu? '''$1'''.",
 'gotaccountlink' => 'Rita inn',
 'userlogin-resetlink' => 'Hevur tú gloymt tínar logg inn upplýsingar',
-'createaccountmail' => 'eftur t-posti',
+'createaccountmail' => 'Nýt eitt fyribils tilvildarligt loyniorð og send tað til t-post adressuna niðanfyri',
 'createaccountreason' => 'Orsøk:',
 'badretype' => 'Loyniorðið tú hevur skriva er ikki rætt.',
 'userexists' => 'Brúkaranavnið sum tú valdi er longu í nýtslu.
@@ -613,9 +623,10 @@ Vinarliga bíða áðrenn tú roynir aftur.',
 'loginlanguagelabel' => 'Mál: $1',
 'suspicious-userlogout' => 'Tín fyrispurningur um at útrita var noktaður, tí tað sær út til at hann varð sendur frá einum oyðiløgdum kaga ella caching proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Ókend villa í PHP'sa teldupost () funktión.",
 'user-mail-no-addy' => 'Royndi at senda t-post uttan eina t-post adressu.',
+'user-mail-no-body' => 'Tú royndi at senda ein teldupost við ongum ella órímiliga stuttum innihaldi.',
 
 # Change password dialog
 'resetpass' => 'Broyt loyniorð',
@@ -680,6 +691,7 @@ Fyribils loyniorð: $2',
 'changeemail-oldemail' => 'Verandi t-post adressa:',
 'changeemail-newemail' => 'Nýggj t-post adressa:',
 'changeemail-none' => '(ongin)',
+'changeemail-password' => 'Títt {{SITENAME}} loyniorð:',
 'changeemail-submit' => 'Broyt t-post',
 'changeemail-cancel' => 'Ógilda',
 
@@ -778,8 +790,8 @@ Tú kanst [[Special:Search/{{PAGENAME}}|leita eftir hesum síðu heitinum]] á 
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leita í líknandi loggum],
 ella [{{fullurl:{{FULLPAGENAME}}|action=edit}} rætta hesa síðu]</span>.',
 'noarticletext-nopermission' => 'Tað er í løtuni ongin tekstur á hesi síðu.
-Tú kanst [[Special:Search/{{PAGENAME}}|leita eftir hesum síðu heiti]] á øðrum siðum, 
-ella <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} síggja viðkomandi logglistar]</span>.',
+Tú kanst [[Special:Search/{{PAGENAME}}|leita eftir hesum síðuheiti]] á øðrum síðum, 
+ella <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leita eftir viðkomandi loggum]</span>, men tú hevur ikki loyvi til at stovna hesa síðu.',
 'missing-revision' => 'Endurskoðan #$1 av síðuni við heitinum "{{PAGENAME}}" er ikki til.
 
 Hetta skyldast vanliga tað, at tú fylgir einari gamlari søguslóð til eina síðu, sum er blivin slettað. 
@@ -810,7 +822,7 @@ Tilevnaðar .css og .js síður brúka heiti sum byrja við lítlum bókstavi, t
 'note' => "'''Viðmerking:'''",
 'previewnote' => "'''Minst til at hetta bara er ein forskoðan.'''
 Tínar broytingar eru ikki goymdar enn!",
-'continue-editing' => 'Halt fram við at rætta',
+'continue-editing' => 'Far til økið har ið tú kanst gera rættingar',
 'previewconflict' => 'Henda forskoðanin vísir tekstin í erva soleiðis sum hann sær út, um tú velur at goyma.',
 'session_fail_preview' => "'''Orsakað! Vit kundu ikki fullføra tínar broytingar, tí tínar sessións dáta eru horvin.'''
 Vinarliga royn aftur.
@@ -834,6 +846,8 @@ Tú mást flætta tínar rættingar inn í verandi tekstin.
 '''Bert''' teksturin í ovara økinum verður goymdur, tá tú trýstir á \"{{int:savearticle}}\".",
 'yourtext' => 'Tín tekstur',
 'storedversion' => 'Goymd útgáva',
+'nonunicodebrowser' => "'''Ávaring: Tín internetkagi er ikki í samsvar við Unicode.'''
+Ein dagføring er neyðug fyri at tú á tryggan hátt kanst rætta síður: Ikki-ASCII bókstavar fara at koma fram í rættingarteiginum sum hexadecimal kotur.",
 'editingold' => "'''Ávaring: Tú rættar ein gamla versjón av hesi síðu.'''
 Um tú goymir hana, so fara allar broytingar sum eru gjørdar síðan hesa versjónina mistar.",
 'yourdiff' => 'Munir',
@@ -846,6 +860,10 @@ Tú lovar okkum eisini, at tú sjálv/ur hevur skrivað hetta, ella at tú hevur
 '''Tú mást ikki senda tilfar inn, sum er vart av upphavsrætti, uttan so at tú hevur fingið loyvi til tað!'''",
 'longpageerror' => "'''Feilur: Teksturin sum tú hevur sent inn er {{PLURAL:$1|eitt kilobyte|$1 kilobytes}} langur, sum er longri enn mest loyvda, sum er  {{PLURAL:$2|eitt kilobyte|$2 kilobytes}}.'''
 Teksturin kann tí ikki verða goymdur.",
+'readonlywarning' => "'''Ávaring: Dátugrunnurin er blivin stongdur orsakað av viðlíkahaldi, so tú kanst ikki goyma tínar rættingar júst nú.'''
+Tað hevði kanska verið eitt gott hugskot, um tú avritar og goymir tín tekst í eina tekstfílu og goymir tað til seinni.
+
+Umboðsstjórin ið stongdi hann gav hesa frágreiðing: $1",
 'protectedpagewarning' => "'''Ávaring: Henda síðan er friðað, so at einans brúkarar við umboðsstjóra heimildum kunnu broyta hana.'''
 Tann seinasta logg inn er goymt niðanfyri fyri ávísing:",
 'semiprotectedpagewarning' => "'''Viðmerking:''' Hendan grein er vard soleiðis at bert skrásetir brúkarar kunnu rætta hana.
@@ -882,14 +900,27 @@ Tað sær út til at hon er blivin strikað.',
 'edit-no-change' => 'Tín rætting var sæð burtur frá, tí ongin broyting varð gjørd í tekstinum.',
 'edit-already-exists' => 'Tað var ikki møguligt at upprætta nýggja síðu.
 Síðan er longu til.',
+'defaultmessagetext' => 'Standard boðtekstur',
+'invalid-content-data' => 'Ógyldug innihalds dáta',
+'content-not-allowed-here' => '"$1" innihald er ikki loyvt á síðu [[$2]]',
+
+# Content models
+'content-model-text' => 'simpul tekstur',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
+'expensive-parserfunction-category' => 'Síður við ov nógvum dýrum parsara funktiónskallum',
 'post-expand-template-inclusion-warning' => "'''Ávaring:''' Tað eru ov nógvar skabilónir á hesi síðu. 
 Nakrar skabilónir vera ikki vístar.",
 'post-expand-template-inclusion-category' => 'Síður sum innihalda ov nógvar skabilónir',
 'post-expand-template-argument-warning' => "'''Ávaring:''' Henda síðan inniheldur í minsta lagi eitt skabilón parametur (template argument), sum fyllir meira enn loyvdu støddina. 
 Hetta parametur er tí ikki tikið við.",
 'post-expand-template-argument-category' => 'Síður har skabilón parametur (template arguments) ikki eru tikin við',
+'parser-template-loop-warning' => 'Skapilónssloyfa funnin: [[$1]]',
+'node-count-exceeded-category' => 'Síður har talið av notum (node) er ov høgt',
+'node-count-exceeded-warning' => 'Síðan hevur og høgt tal av notum (node-count)',
+'expansion-depth-exceeded-category' => 'Síður ið fara yvir loyvdu víðkanar-dýpdina',
 
 # "Undo" feature
 'undo-success' => 'Rættingin kann takast burtur aftur.
@@ -964,7 +995,14 @@ Tú kanst síggja munin; smálutir eru at finna í [{{fullurl:{{#Special:Log}}/s
 'rev-delundel' => 'skoða/fjal',
 'rev-showdeleted' => 'vís',
 'revisiondelete' => 'Strika/endurnýggja broytingina',
+'revdelete-nologtype-title' => 'Onki slag av loggi er upplýst',
+'revdelete-nologtype-text' => 'Tú hevur ikki útgreinað nakað slag av loggi, fyri at útføra hesa handling á.',
+'revdelete-nologid-title' => 'Ógyldugur loggpostur',
+'revdelete-no-file' => 'Nevnda fíla er ikki til.',
+'revdelete-show-file-confirm' => 'Ert tú vís/ur í, at tú ynskir at síggja eina strikaða endurskoðan av fíluni "<nowiki>$1</nowiki>" frá $2 kl. $3?',
 'revdelete-show-file-submit' => 'Ja',
+'revdelete-selected' => "'''{{PLURAL:$2|Valda versjón|Valdar versjónir}} hjá [[:$1]]:'''",
+'revdelete-confirm' => 'Vinarliga vátta, at tú ætlar at gera hetta, at tú skilir avleiðingarnar, og at tú ger hetta í samsvari við [[{{MediaWiki:Policy-url}}|mannagongdirnar]].',
 'revdelete-legend' => 'Set avmarkinga fyri sjónligheit',
 'revdelete-hide-text' => 'Goym burtur tekstin á hesi versjónini',
 'revdelete-hide-image' => 'Fjal fílu innihald',
@@ -991,12 +1029,18 @@ $1",
 Hon kann ikki fjalast.',
 'revdelete-show-no-access' => 'Feilur tá hesin lutur dagfestur $1 klokkan $2 skuldi vísast:Hesin lutur er blivin markeraður sum "avmarkaður".
 Tú hevur ikki atgongd til hann.',
+'revdelete-no-change' => "'''Ávaring:''' Pettið ið er dagfest $1, kl. $2 hevði longu tær umbidnu innstillingar fyri sjónligheit.",
+'revdelete-concurrent-change' => 'Ein feilur hendi, meðan tú dagførdi tekstin frá $1, kl. $2: Teksturin sær út til at vera blivin broyttur av onkrum øðrum, meðan tú royndi at rætta hann.',
 'revdelete-otherreason' => 'Onnur orsøk',
 'revdelete-reasonotherlist' => 'Onnur orsøk',
 'revdelete-edit-reasonlist' => 'Rætta strikingar orsøkir',
 'revdelete-offender' => 'Høvundurin av hesi endurskoðan:',
 
 # History merging
+'mergehistory' => 'Samantvinna søgurnar hjá síðunum',
+'mergehistory-header' => 'Henda síðan letur teg samanflætta versjónirnar frá søguni av einari síðu til eina nýggjari síðu.
+Tryggja tær, at henda broyting fer at varðveita framhaldssøguna hjá síðuni.',
+'mergehistory-box' => 'Samantvinna versjónirnar av tveimum síðum:',
 'mergehistory-from' => 'Keldusíða:',
 'mergehistory-no-source' => 'Keldu síðan $1 er ikki til.',
 'mergehistory-no-destination' => 'Destinatiónssíðan $1 er ikki til.',
@@ -1067,7 +1111,7 @@ Tú hevur ikki atgongd til hann.',
 'search-interwiki-default' => '$1 úrslit:',
 'search-interwiki-more' => '(meira)',
 'search-relatedarticle' => 'Líknandi',
-'mwsuggest-disable' => 'Slá AJAX uppskot frá',
+'mwsuggest-disable' => 'Slá leitingaruppskot frá',
 'searcheverything-enable' => 'Leita í øllum navnaøkjum',
 'searchrelated' => 'líknandi',
 'searchall' => 'alt',
@@ -1153,23 +1197,27 @@ Legg til merkis, at teirra innihaldsyvirlit av {{SITENAME}} kann vera gamalt og
 'timezoneregion-indian' => 'Indiska Havið',
 'timezoneregion-pacific' => 'Stillahavið',
 'allowemail' => 'Tilset t-post frá øðrum brúkarum',
-'prefs-searchoptions' => 'Leiti møguleikar',
+'prefs-searchoptions' => 'Leita',
 'prefs-namespaces' => 'Navnarúm',
 'defaultns' => 'Um ikki, leita so í hesum navnateigum:',
 'default' => 'standard',
 'prefs-files' => 'Fílur',
 'prefs-custom-css' => 'Tilpassað CSS',
 'prefs-custom-js' => 'Tilpassað JavaScript',
+'prefs-common-css-js' => 'Møgulig CSS/JavaScript fyri allar útsjóndir:',
+'prefs-reset-intro' => 'Tú kanst brúka hesa síðuna til at nullstilla allar tínar valdu innstillingar, so tað kemur aftur til standard.
+Tú kanst ikki angra, tá tað fyrst er gjørt.',
 'prefs-emailconfirm-label' => 'Vátta tína t-post adressu:',
 'prefs-textboxsize' => 'Støddin á rættingar vindeyganum',
 'youremail' => 'T-postur (sjálvboðið)*:',
-'username' => 'Brúkaranavn:',
-'uid' => 'Brúkara ID:',
-'prefs-memberingroups' => 'Limir í {{PLURAL:$1|bólki|bólkum}}:',
+'username' => '{{GENDER:$1|Brúkaranavn}}:',
+'uid' => '{{GENDER:$1|Brúkari}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Limur}} í {{PLURAL:$1|bólki|bólkum}}:',
 'prefs-registration' => 'Skrásett tíðspunkt:',
 'yourrealname' => 'Títt navn*:',
 'yourlanguage' => 'Mál til brúkaraflatu:',
 'yournick' => 'Nýggj undirskrift:',
+'prefs-help-signature' => 'Viðmerkingar á kjaksíðum eiga at vera undirskrivaðar við "<nowiki>~~~~</nowiki>", sum verður gjørt um til tína undirskrift og eitt dagfestingarmerki.',
 'badsiglength' => 'Tín undirskrift er ov long. 
 Hon má ikki hava meira enn $1 {{PLURAL:$1|tekn|tekn}}',
 'yourgender' => 'Kyn:',
@@ -1187,6 +1235,7 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'prefs-info' => 'Grundleggjandi kunning',
 'prefs-i18n' => 'Altjóðagerð',
 'prefs-signature' => 'Undirskrift',
+'prefs-dateformat' => 'Slag av dagfesting',
 'prefs-timeoffset' => 'Tíðarmunur',
 'prefs-advancedediting' => 'Víðkaðir møguleikar',
 'prefs-advancedrc' => 'Víðkaðir møguleikar',
@@ -1198,7 +1247,7 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'prefs-displaywatchlist' => 'Vís møguleikar',
 'prefs-diffs' => 'Munir',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'T-post adressan sær út til at vera í gildi',
 'email-address-validity-invalid' => 'Skriva eina gylduga t-post adressu',
 
@@ -1417,6 +1466,13 @@ Vinarliga gev fíluni nýtt navn og royn at senda hana upp (uploada) enn einafer
 'large-file' => 'Tað verður viðmælt, at fílur ikki eru størri enn $1;
 henda fílin er $2.',
 'largefileserver' => 'Henda fílan er størri enn servarin er innstillaður til at loyva.',
+'windows-nonascii-filename' => "Henda wiki'in stuðlar ikki fílunøvn við serstøkum bókstavum/teknum.",
+'fileexists' => 'Ein fíla við hesum navninum er longu til, vinarliga kanna eftir <strong>[[:$1]]</strong> um tú ivast í, um tú ynskir at broyta tað.
+[[$1|thumb]]',
+'filepageexists' => 'Síðan við frágreingin fyri hesa fíluna er longu til, hon er á <strong>[[:$1]]</strong>, men ongin fíla við hesum navninum er til í løtuni.
+Frágreiðingin sum tú hevur skrivað kemur ikki at síggjast á síðuni.
+Fyri at tín frágreiðing skal síggjast á síðuni, noyðist tú at skriva tað manuelt.
+[[$1|thumb]]',
 'file-deleted-duplicate' => 'Ein fíla, sum er líka sum henda ([[:$1]]) er fyrr blivin strikað.
 Tú eigur at kanna eftir strikingarsøguna hjá hesi fílu, áðrenn tú heldur áframm við at leggja hana út enn einaferð.',
 'uploadwarning' => 'Ávaring',
@@ -1704,7 +1760,7 @@ Møguliga er [[{{MediaWiki:Listgrouprights-helppage}}|meira kunning]] um einstø
 'listgrouprights-addgroup-self-all' => 'Legg allir bólkar til egna konto',
 'listgrouprights-removegroup-self-all' => 'Tak burtur allir bólkar frá egnari konto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ongin móttakara bústaður',
 'mailnologintext' => 'Tú mást hava [[Special:UserLogin|ritað inn]]
 og hava virkandi teldupostadressu í [[Special:Preferences|innstillingum]] tínum
@@ -1731,8 +1787,8 @@ Teldupost adressan sum tú skrivaði í [[Special:Preferences|tíni brúkara yns
 'emailsenttext' => 'Títt t-post boð er sent.',
 
 # Watchlist
-'watchlist' => 'Mítt eftirlit',
-'mywatchlist' => 'Mítt eftirlit',
+'watchlist' => 'Eftirlitslisti',
+'mywatchlist' => 'Eftirlitslisti',
 'watchlistfor2' => 'Fyri $1 $2',
 'nowatchlist' => 'Tú hevur ongar lutir í eftirlitinum.',
 'watchnologin' => 'Tú hevur ikki ritað inn',
@@ -2161,7 +2217,7 @@ Onnur metadáta verða fjald sum standard.
 'namespacesall' => 'alt',
 'monthsall' => 'allir',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Vátta t-post adressu',
 'confirmemail_send' => 'Send eina váttanarkotu',
 'confirmemail_sent' => 'Játtanar t-postur sendur.',
index 228d04c..839696b 100644 (file)
@@ -388,9 +388,9 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Souligner les liens :',
 'tog-justify' => 'Justifier les paragraphes',
-'tog-hideminor' => 'Masquer les modifications mineures dans les modifications récentes',
+'tog-hideminor' => 'Masquer les modifications mineures dans les changements récents',
 'tog-hidepatrolled' => 'Masquer les modifications surveillées dans les modifications récentes',
-'tog-newpageshidepatrolled' => 'Masquer les pages surveillées parmi les nouvelles pages',
+'tog-newpageshidepatrolled' => 'Masquer les pages surveillées parmi la liste des nouvelles pages',
 'tog-extendwatchlist' => 'Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes',
 'tog-usenewrc' => 'Grouper les changements dans les modifications récentes et la liste de suivi (nécessite JavaScript)',
 'tog-numberheadings' => 'Numéroter automatiquement les titres de section',
@@ -863,7 +863,7 @@ pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
 'blocked-mailpassword' => 'Votre adresse IP est bloquée en écriture, la fonction de rappel du mot de passe est donc désactivée pour éviter les abus.',
 'eauthentsent' => "Un courriel de confirmation a été envoyé à l'adresse indiquée.
 Avant qu'un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.",
-'throttled-mailpassword' => "Un courriel de rappel de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de rappel sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.",
+'throttled-mailpassword' => "Un courriel de réinitialisation de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de réinitialisation de votre mot de passe sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.",
 'mailerror' => "Erreur lors de l'envoi du courriel : $1",
 'acct_creation_throttle_hit' => "Quelqu'un utilisant votre adresse IP a créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui constitue la limite autorisée dans cet intervalle de temps.
 Par conséquent, la création de compte a été temporairement désactivée pour cette adresse IP.",
@@ -914,7 +914,7 @@ Vous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mo
 
 # Special:PasswordReset
 'passwordreset' => 'Remise à zéro du mot de passe',
-'passwordreset-text' => 'Remplissez ce formulaire pour recevoir un courriel de rappel des détails de votre compte.',
+'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-pretext' => '{{PLURAL:$1||Entrez un élément de données ci-dessous}}',
@@ -924,21 +924,21 @@ Vous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mo
 'passwordreset-capture-help' => "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu'il sera envoyé à l'utilisateur.",
 'passwordreset-email' => 'Adresse de courriel :',
 'passwordreset-emailtitle' => 'Détails du compte sur {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
+'passwordreset-emailtext-ip' => "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
 
 $2
 
 {{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
-'passwordreset-emailtext-user' => "L'utilisateur $1 sur {{SITENAME}} a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
+'passwordreset-emailtext-user' => "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
 
 $2
 
 {{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
 'passwordreset-emailelement' => "Nom d'utilisateur : $1
 Mot de passe temporaire : $2",
-'passwordreset-emailsent' => 'Un courriel de rappel a été envoyé.',
-'passwordreset-emailsent-capture' => 'Un courriel de rappel a été envoyé, qui est affiché ci-dessous.',
-'passwordreset-emailerror-capture' => "Un courriel de rappel a été généré, qui est affiché ci-dessous, mais l'envoi à l'utilisateur a échoué : $1",
+'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",
 
 # Special:ChangeEmail
 'changeemail' => "Changer l'adresse de courriel",
@@ -4133,17 +4133,17 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'sqlite-no-fts' => '$1 sans recherche en texte intégral supportée',
 
 # New logging system
-'logentry-delete-delete' => '$1 a supprimé la page $3',
-'logentry-delete-restore' => '$1 a restauré la page $3',
-'logentry-delete-event' => "$1 a modifié la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
-'logentry-delete-revision' => '$1 a modifié la visibilité {{PLURAL:$5|d’une révision|de $5 révisions}} sur la page $3&nbsp;: $4',
-'logentry-delete-event-legacy' => '$1 a modifié la visibilité des événements du journal sur $3',
-'logentry-delete-revision-legacy' => '$1 a modifié la visibilité des révisions sur la page $3',
-'logentry-suppress-delete' => '$1 a supprimé la page $3',
-'logentry-suppress-event' => "$1 a secrètement modifié la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
-'logentry-suppress-revision' => "$1 a secrètement modifié la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3: $4",
-'logentry-suppress-event-legacy' => '$1 a secrètement modifié la visibilité des événements du journal sur $3',
-'logentry-suppress-revision-legacy' => '$1 a secrètement modifié la visibilité des révisions sur la page $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|a supprimé}} la page $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|a restauré}} la page $3',
+'logentry-delete-event' => "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
+'logentry-delete-revision' => '$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d’une révision|de $5 révisions}} sur la page $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|a modifié}} la visibilité des événements du journal sur $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|a modifié}} la visibilité des révisions sur la page $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|a supprimé}} la page $3',
+'logentry-suppress-event' => "$1 {{GENDER:$2|a secrètement modifié}} la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
+'logentry-suppress-revision' => "$1 {{GENDER:$2|a secrètement modifié}} la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3: $4",
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|a secrètement modifié}} la visibilité des événements du journal sur $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|a secrètement modifié}} la visibilité des révisions sur la page $3',
 'revdelete-content-hid' => 'contenu masqué',
 'revdelete-summary-hid' => 'résumé de modification masqué',
 'revdelete-uname-hid' => 'nom d’utilisateur masqué',
@@ -4152,20 +4152,20 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'revdelete-uname-unhid' => 'nom d’utilisateur affiché',
 'revdelete-restricted' => 'restrictions appliquées aux administrateurs',
 'revdelete-unrestricted' => 'restrictions retirées pour les administrateurs',
-'logentry-move-move' => '$1 a déplacé la page $3 vers $4',
-'logentry-move-move-noredirect' => '$1 a déplacé la page $3 vers $4 sans laisser de redirection',
-'logentry-move-move_redir' => '$1 a déplacé la page $3 vers $4 par-dessus une redirection',
-'logentry-move-move_redir-noredirect' => '$1 a déplacé la page $3 vers $4 par-dessus une redirection sans laisser de redirection',
-'logentry-patrol-patrol' => '$1 a marqué la révision $4 de la page $3 comme relue',
-'logentry-patrol-patrol-auto' => '$1 a automatiquement marqué la révision $4 de la page $3 comme relue',
-'logentry-newusers-newusers' => 'Le compte utilisateur $1 a été créé',
-'logentry-newusers-create' => 'Le compte utilisateur $1 a été créé',
-'logentry-newusers-create2' => 'Le compte utilisateur $3 a été créé par $1',
-'logentry-newusers-byemail' => 'Le compte utilisateur $3 a été créé par $1 et le mot de passe a été envoyé par courriel',
-'logentry-newusers-autocreate' => 'Le compte $1 a été créé automatiquement',
-'logentry-rights-rights' => "$1 a modifié l'appartenance au groupe pour $3 de $4 à $5",
-'logentry-rights-rights-legacy' => "$1 a modifié l'appartenance au groupe pour $3",
-'logentry-rights-autopromote' => '$1 a été promu automatiquement de $4 à $5',
+'logentry-move-move' => '$1 {{GENDER:$2|a déplacé}} la page $3 vers $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 sans laisser de redirection',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 par-dessus une redirection',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 par-dessus une redirection sans laisser de redirection',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|a marqué}} la révision $4 de la page $3 comme relue',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|a automatiquement marqué}} la révision $4 de la page $3 comme relue',
+'logentry-newusers-newusers' => 'Le compte utilisateur $1 {{GENDER:$2|a été créé}}',
+'logentry-newusers-create' => 'Le compte utilisateur $1 {{GENDER:$2|a été créé}}',
+'logentry-newusers-create2' => 'Le compte utilisateur $3 {{GENDER:$2|a été créé}} par $1',
+'logentry-newusers-byemail' => 'Le compte utilisateur $3 {{GENDER:$2|a été créé}} par $1 et le mot de passe a été envoyé par courriel',
+'logentry-newusers-autocreate' => 'Le compte $1 {{GENDER:$2|a été créé}} automatiquement',
+'logentry-rights-rights' => "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3 de $4 à $5",
+'logentry-rights-rights-legacy' => "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3",
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5',
 'rightsnone' => '(aucun)',
 
 # Feedback
index 72e628c..997c21a 100644 (file)
@@ -797,7 +797,7 @@ Se vos plét, tornâd-vos branchiér aprés l’avêr reçu.',
 'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.',
 'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica endicâye.
 Devant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo compto est franc lo voutro.',
-'throttled-mailpassword' => 'Un mèssâjo de sovegnence de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
+'throttled-mailpassword' => 'Un mèssâjo de remês’a zérô de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
 Por èvitar los abus, ren que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
 'mailerror' => 'Fôta pendent l’èxpèdicion du mèssâjo : $1',
 'acct_creation_throttle_hit' => 'Des visitors de cél vouiqui-que qu’emplèyont voutron adrèce IP ant fêt $1 compto{{PLURAL:$1||s}} pendent lo jorn passâ, cen qu’est lo més ôtorisâ dens ceti temps.
@@ -852,7 +852,7 @@ Pôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben dema
 
 # Special:PasswordReset
 'passwordreset' => 'Remês’a zérô du contresegno',
-'passwordreset-text' => 'Rempléd ceti formulèro por recêvre un mèssâjo de sovegnence des dètalys de voutron compto.',
+'passwordreset-text' => 'Rempléd ceti formulèro por rebetar a zérô voutron contresegno.',
 'passwordreset-legend' => 'Rebetar a zérô lo contresegno',
 'passwordreset-disabled' => 'La remês’a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.',
 'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yona de les piéces de balyês ce-desot}}',
@@ -862,8 +862,8 @@ Pôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben dema
 'passwordreset-capture-help' => 'Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat montrâ quand serat mandâ a l’utilisator.',
 'passwordreset-email' => 'Adrèce èlèctronica :',
 'passwordreset-emailtitle' => 'Dètalys du compto dessus {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Yon (probâblament vos, dês l’adrèce IP $1) at demandâ na sovegnence des dètalys
-de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
+'passwordreset-emailtext-ip' => 'Yon (probâblament vos, dês l’adrèce IP $1) at demandâ na remês’a zérô de voutron
+contresegno por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
 a cel’adrèce èlèctronica :
 
 $2
@@ -872,8 +872,8 @@ $2
 Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
 ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
 vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
-'passwordreset-emailtext-user' => 'L’utilisator $1 dessus {{SITENAME}} at demandâ na sovegnence des dètalys
-de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
+'passwordreset-emailtext-user' => 'L’utilisator $1 dessus {{SITENAME}} at demandâ na remês’a zérô de voutron contresegno por {{SITENAME}}
+($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
 a cel’adrèce èlèctronica :
 
 $2
@@ -884,9 +884,9 @@ ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souh
 vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
 'passwordreset-emailelement' => 'Nom d’utilisator : $1
 Contresegno temporèro : $2',
-'passwordreset-emailsent' => 'Un mèssâjo de sovegnence est étâ mandâ.',
-'passwordreset-emailsent-capture' => 'Un mèssâjo de sovegnence est étâ mandâ, qu’est montrâ ce-desot.',
-'passwordreset-emailerror-capture' => 'Un mèssâjo de sovegnence est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisator at pas reussi : $1',
+'passwordreset-emailsent' => 'Un mèssâjo de remês’a zérô de contresegno est étâ mandâ.',
+'passwordreset-emailsent-capture' => 'Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’est montrâ ce-desot.',
+'passwordreset-emailerror-capture' => 'Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisator at pas reussi : $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Changiér l’adrèce èlèctronica',
@@ -1233,7 +1233,7 @@ fonccion, la vèrsion spècifiâye ègziste pas ou ben vos èprovâd de cachiér
 'revdelete-show-file-submit' => 'Ouè',
 'revdelete-selected' => "'''{{PLURAL:$2|Vèrsion chouèsia|Vèrsions chouèsies}} de [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Èvènement du jornal chouèsi|Èvènements du jornal chouèsis}} :'''",
-'revdelete-text' => "'''Les vèrsions et los èvènements suprimâ(ye)s aparètront adés dedens l’historico de la pâge et pués dedens los jornals, mas quârques parties de lor contegnu seront inaccèssibles u publico.'''
+'revdelete-text' => "'''Les vèrsions et los èvènements suprimâ(ye)s aparètront adés dedens l’historico de la pâge et pués sur los jornals, mas quârques parties de lor contegnu seront inaccèssibles u publico.'''
 Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela mém’entèrface, du muens que des rèstriccions de ples seyont pas dèfenies.",
 'revdelete-confirm' => 'Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
 'revdelete-suppress-text' => "La rèprèssion dêt étre empleyêe '''ren que''' dens cetos câs :
@@ -1336,7 +1336,7 @@ Notâd que l’usâjo des lims de navigacion rebeterat a zérô cela colona.',
 'difference-missing-revision' => '{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.
 
 En g·ènèral cen arreve en siuvent un lim d’una dif dèpassâye de vers na pâge qu’est étâye suprimâye.
-Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
+Vos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
 
 # Search results
 'searchresults' => 'Rèsultats de la rechèrche',
@@ -1511,8 +1511,9 @@ Dêt pas dèpassar $1 caractèro{{PLURAL:$1||s}}.',
 'prefs-help-gender' => 'U chouèx : empleyê por acordar en sèxo los mèssâjos de la programeria.
 Cel’enformacion serat publica.',
 'email' => 'Mèssageria èlèctronica',
-'prefs-help-realname' => 'U chouèx : se vos lo balyéd, serat empleyê por vos atribuar voutres ôvres.',
-'prefs-help-email' => 'L’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
+'prefs-help-realname' => 'L’endicacion du veré nom est u chouèx.
+Se vos chouèsésséd de lo balyér, serat empleyê por vos atribuar voutres ôvres.',
+'prefs-help-email' => 'L’endicacion de l’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
 'prefs-help-email-others' => 'Vos porriâd asse-ben chouèsir de lèssiér los ôtros sè veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron identitât.',
 'prefs-help-email-required' => 'Un’adrèce èlèctronica est nècèssèra.',
 'prefs-info' => 'Enformacions de bâsa',
@@ -1748,11 +1749,11 @@ Les pâges de voutra [[Special:Watchlist|lista de siuvu]] sont en '''grâs'''.",
 
 Por comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot :",
 'uploadtext' => "Empleyéd lo formulèro ce-desot por tèlèchargiér des fichiérs.
-Por vêre ou ben rechèrchiér des fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dedens lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions dedens lo [[Special:Log/delete|jornal de les suprèssions]].
+Por vêre ou ben rechèrchiér des fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs sur lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions sur lo [[Special:Log/delete|jornal de les suprèssions]].
 
 Por entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de cetes fôrmes :
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.jpg]]</nowiki></code>''' por empleyér la vèrsion en plêna largior du fichiér
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por empleyér na figura de 200 pixèls de lârjo dedens na bouèta gôche avouéc « tèxto dèscriptif » coment dèscripcion
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por empleyér na figura de 200 pixèls de lârjo dedens na bouèta gôche avouéc « tèxto dèscriptif » coment dèscripcion
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichiér.ogg]]</nowiki></code>''' por liyér tot drêt vers lo fichiér sen lo fâre vêre",
 'upload-permitted' => 'Tipos de fichiérs ôtorisâs : $1.',
 'upload-preferred' => 'Tipos de fichiérs prèferâs : $1.',
@@ -1885,7 +1886,7 @@ $1',
 Se vos plét, veriéd-vos vers un [[Special:ListUsers/sysop|administrator]].',
 'upload-misc-error' => 'Fôta encognua pendent lo tèlèchargement',
 'upload-misc-error-text' => 'Na fôta encognua est arrevâye pendent lo tèlèchargement.
-Se vos plét, controlâd que l’URL est justa et accèssibla, et pués tornâd èprovar.
+Se vos plét, controlâd que l’URL est justa et accèssibla et pués tornâd èprovar.
 Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administrator]].',
 'upload-too-many-redirects' => 'L’URL contint trop de redirèccions',
 'upload-unknown-size' => 'Talye encognua',
@@ -2139,6 +2140,12 @@ Oubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devan
 Devriant pletout pouentar vers na pâge que vat avouéc.<br />
 Na pâge est trètâye coment na pâge d’homonimia s’emplèye un modèlo liyê a [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Pâges avouéc na propriètât de pâge',
+'pageswithprop-legend' => 'Pâges avouéc na propriètât de pâge',
+'pageswithprop-text' => 'Ceta pâge liste les pâges qu’emplèyont na propriètât de pâge particuliére.',
+'pageswithprop-prop' => 'Nom de la propriètât :',
+'pageswithprop-submit' => 'Alar trovar',
+
 'doubleredirects' => 'Redirèccions dobles',
 'doubleredirectstext' => 'Ceta pâge liste les pâges que redirijont vers d’ôtres pâges de redirèccion.
 Châque renche contint des lims de vers la premiére et la seconda redirèccion, et pués la ciba de la seconda redirèccion, cen que balye habituèlament la « veré » pâge ciba, de vers laquinta la premiére redirèccion devrêt pouentar.
@@ -2244,8 +2251,8 @@ Se vos plét, notâd que d’ôtros setos Vouèbe pôvont avêr un lim de vers u
 'log' => 'Jornals',
 'all-logs-page' => 'Tôs los jornals publicos',
 'alllogstext' => 'Vua combinâye de tôs los jornals disponiblos dessus {{SITENAME}}.
-Vos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom d’utilisator (sensiblo a la câssa) la pâge regardâye (sensibla la câssa avouéc).',
-'logempty' => 'Niona piéce que corrèspond dedens lo jornal.',
+Vos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom d’utilisator (sensiblo a la câssa) la pâge regardâye (sensibla la câssa avouéc).',
+'logempty' => 'Niona piéce que corrèspond sur lo jornal.',
 'log-title-wildcard' => 'Chèrchiér entre-mié los titros que començont per cél tèxto',
 'showhideselectedlogentries' => 'Montrar / cachiér les entrâs de jornal chouèsies',
 
@@ -2432,7 +2439,7 @@ Veriéd-vos vers lo contributor :
 mèl. : $PAGEEDITOR_EMAIL
 vouiqui : $PAGEEDITOR_WIKI
 
-Y arat gins d’ôtra notificacion en câs de changements a vegnir, a muens que vos visitâd cela pâge. Vos pouede asse-ben tornar inicialisar los segnalements de notificacion por totes les pâges de voutra lista de survelyence.
+Y arat gins d’ôtra notificacion en câs de changements a vegnir, du muens que vos visiteyâd cela pâge. Vos pouede asse-ben rebetar a zérô los segnalements de notificacion por totes les pâges de voutra lista de siuvu.
 
 Voutron sistèmo de notificacion de {{SITENAME}}
 
@@ -2440,10 +2447,10 @@ Voutron sistèmo de notificacion de {{SITENAME}}
 Por changiér la configuracion de notificacion per mèssageria èlèctronica, visitâd
 {{canonicalurl:{{#special:Preferences}}}}
 
-Por changiér la configuracion de voutra lista de survelyence, visitâd
+Por changiér la configuracion de voutra lista de siuvu, visitâd
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Por suprimar la pâge de voutra lista de survelyence, visitâd
+Por suprimar la pâge de voutra lista de siuvu, visitâd
 $UNWATCHURL
 
 Avis et assistance de ples :
@@ -2454,21 +2461,21 @@ Avis et assistance de ples :
 # Delete
 'deletepage' => 'Suprimar la pâge',
 'confirm' => 'Confirmar',
-'excontent' => 'contegnéve « $1 »',
-'excontentauthor' => 'contegnéve « $1 » (et son solèt contributor ére « [[Special:Contributions/$2|$2]] »)',
-'exbeforeblank' => 'contegnéve devant blanchiment « $1 »',
+'excontent' => 'lo contegnu ére : « $1 »',
+'excontentauthor' => 'lo contegnu ére : « $1 » (et lo solèt contributor ére « [[Special:Contributions/$2|$2]] »)',
+'exbeforeblank' => 'lo contegnu devant blanchiment ére : « $1 »',
 'exblank' => 'la pâge ére voueda',
 'delete-confirm' => 'Suprimar « $1 »',
 'delete-legend' => 'Suprimar',
-'historywarning' => "'''Atencion :''' la pâge que vos éte prèst a suprimar at un historico que contint a pou prés $1 {{PLURAL:$1|vèrsion|vèrsions}} :",
-'confirmdeletetext' => 'Vos éte prèst a suprimar una pâge ou ben un fichiér et pués tot son historico.
-Volyéd confirmar qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos féte cen en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
+'historywarning' => "'''Atencion :''' la pâge que vos éte prèst a suprimar at un historico avouéc a pou prés $1 vèrsion{{PLURAL:$1||s}} :",
+'confirmdeletetext' => 'Vos éte prèst a suprimar na pâge et pués tot lo sin historico.
+Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
 'actioncomplete' => 'Accion fêta',
-'actionfailed' => 'L’accion at pas reussia',
-'deletedtext' => '« $1 » at étâ suprimâ.
-Vêde lo $2 por una lista de les novèles suprèssions.',
+'actionfailed' => 'L’accion at pas reussi',
+'deletedtext' => '« $1 » est étâye suprimâye.
+Vêde lo $2 por na lista de les novèles suprèssions.',
 'dellogpage' => 'Jornal de les suprèssions',
-'dellogpagetext' => 'Vê-que la lista de les suprèssions les ples novèles.',
+'dellogpagetext' => 'Vê-que na lista de les suprèssions les ples novèles.',
 'deletionlog' => 'jornal de les suprèssions',
 'reverted' => 'Vèrsion devant rètablia',
 'deletecomment' => 'Rêson :',
@@ -2479,10 +2486,10 @@ Vêde lo $2 por una lista de les novèles suprèssions.',
 ** Violacion du drêt d’ôtor
 ** Vandalismo',
 'delete-edit-reasonlist' => 'Changiér les rêsons de suprèssion',
-'delete-toobig' => 'Ceta pâge at un historico important, dèpassent $1 vèrsion{{PLURAL:$1||s}}.
-La suprèssion de tâles pâges at étâ limitâ por èvitar des pèrturbacions emprèvues de {{SITENAME}}.',
-'delete-warning-toobig' => 'Ceta pâge at un historico important, dèpassent $1 vèrsion{{PLURAL:$1||s}}.
-La suprimar pôt troblar lo fonccionement de la bâsa de balyês de {{SITENAME}} ;
+'delete-toobig' => 'Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.
+La suprèssion de pâges d’ense est étâye rètrenta por prèvegnir des pèrturbacions emprèvues de {{SITENAME}}.',
+'delete-warning-toobig' => 'Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.
+La suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;
 a fâre avouéc prudence.',
 
 # Rollback
@@ -2491,63 +2498,65 @@ a fâre avouéc prudence.',
 'rollbacklink' => 'rèvocar',
 'rollbacklinkcount' => 'rèvocar $1 changement{{PLURAL:$1||s}}',
 'rollbacklinkcount-morethan' => 'rèvocar més de $1 changement{{PLURAL:$1||s}}',
-'rollbackfailed' => 'La rèvocacion at pas reussia',
-'cantrollback' => 'Empossiblo de rèvocar lo changement ;
+'rollbackfailed' => 'La rèvocacion at pas reussi',
+'cantrollback' => 'Y at pas moyen de rèvocar lo changement ;
 lo dèrriér contributor est lo solèt ôtor de ceta pâge.',
-'alreadyrolled' => 'Empossiblo de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|Discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
-quârqu’un d’ôtro at ja changiê ou ben rèvocâ la pâge.
+'alreadyrolled' => 'Y at pas moyen de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
+un ôtro at ja changiê ou ben rèvocâ la pâge.
 
-Lo dèrriér changement de la pâge at étâ fêt per [[User:$3|$3]] ([[User talk:$3|Discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Lo dèrriér changement de la pâge est étâ fêt per [[User:$3|$3]] ([[User talk:$3|discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Lo rèsumâ de changement ére : « ''$1'' ».",
-'revertpage' => 'Rèvocacion des changements a [[Special:Contributions/$2|$2]] ([[User talk:$2|Discutar]]) de vers la dèrriére vèrsion a [[User:$1|$1]]',
-'revertpage-nouser' => 'Rèvocacion des changements per (nom d’usanciér suprimâ) a la dèrriére vèrsion per [[User:$1|$1]]',
-'rollback-success' => 'Rèvocacion des changements fêts per $1 ;
-rètablissement de la dèrriére vèrsion per $2.',
+'revertpage' => 'Rèvocacion des changements de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]]) de vers la dèrriére vèrsion de [[User:$1|$1]]',
+'revertpage-nouser' => 'Rèvocacion des changements de (nom d’utilisator enlevâ) de vers la dèrriére vèrsion de [[User:$1|$1]]',
+'rollback-success' => 'Rèvocacion des changements de $1 ;
+rèstoracion de la dèrriére vèrsion de $2.',
 
 # Edit tokens
-'sessionfailure-title' => 'Èrror de sèance',
+'sessionfailure-title' => 'Falyita de sèance',
 'sessionfailure' => 'Voutra sèance de branchement semble avêr des problèmos ;
-cela accion at étâ anulâ en prèvencion d’un piratâjo de sèance.
-Volyéd clicar dessus « Devant », rechargiér la pâge de yô que vos vegnéd, et pués tornar èprovar.',
+cel’accion est étâye anulâye en prèvencion d’un piratâjo de sèance.
+Se vos plét, clicâd dessus « Devant », rechargiéd la pâge de yô que vos vegnéd et pués tornâd èprovar.',
 
 # Protect
 'protectlogpage' => 'Jornal de les protèccions',
-'protectlogtext' => 'Vê-que na lista des changements de protèccion de les pâges.
-Vêde la [[Special:ProtectedPages|lista de les pâges protègiêyes]] por la lista de les protèccions que sont ora actives.',
+'protectlogtext' => 'Vê-que na lista des changements de les protèccions de pâges.
+Vêde la [[Special:ProtectedPages|lista de les pâges protègiêes]] por la lista de les protèccions que sont ora actives.',
 'protectedarticle' => 'at protègiê « [[$1]] »',
 'modifiedarticleprotection' => 'at changiê lo nivél de protèccion de « [[$1]] »',
 'unprotectedarticle' => 'at enlevâ la protèccion de « [[$1]] »',
-'movedarticleprotection' => 'at dèplaciê los paramètres de protèccion dês « [[$2]] » vers « [[$1]] »',
-'protect-title' => 'Changiér lo nivél de protèccion por « $1 »',
+'movedarticleprotection' => 'at dèplaciê la configuracion de protèccion dês « [[$2]] » vers « [[$1]] »',
+'protect-title' => 'Changiér lo nivél de protèccion de « $1 »',
 'protect-title-notallowed' => 'Vêre lo nivél de protèccion de « $1 »',
-'prot_1movedto2' => 'at renomâ [[$1]] en [[$2]]',
+'prot_1movedto2' => 'at dèplaciê [[$1]] vers [[$2]]',
 'protect-badnamespace-title' => 'Èspâço de noms pas protèjâblo',
-'protect-badnamespace-text' => 'Les pâges dens ceti èspâço de noms pôvont pas étre protègiês.',
+'protect-badnamespace-text' => 'Les pâges dedens cet’èspâço de noms pôvont pas étre protègiêes.',
+'protect-norestrictiontypes-text' => 'Cela pâge pôt pas étre protègiêe, y at gins de tipo de rèstriccion disponiblo.',
+'protect-norestrictiontypes-title' => 'Pâge pas protèjâbla',
 'protect-legend' => 'Confirmar la protèccion',
 'protectcomment' => 'Rêson :',
 'protectexpiry' => 'Dâta d’èxpiracion :',
-'protect_expiry_invalid' => 'La dâta d’èxpiracion est envalida.',
-'protect_expiry_old' => 'La dâta d’èxpiracion est ja passâ.',
+'protect_expiry_invalid' => 'La dâta d’èxpiracion est pas justa.',
+'protect_expiry_old' => 'La dâta d’èxpiracion est ja passâye.',
 'protect-unchain-permissions' => 'Dèvèrrolyér adés més de chouèx de protèccion',
-'protect-text' => "Vos pouede vêre et changiér lo nivél de protèccion de la pâge '''$1'''.",
-'protect-locked-blocked' => "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ.
+'protect-text' => "Ique vos pouede vêre et changiér lo nivél de protèccion de la pâge '''$1'''.",
+'protect-locked-blocked' => "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ{{GENDER:||ye|(ye)}}.
 Vê-que la configuracion d’ora de la pâge '''$1''' :",
-'protect-locked-dblock' => "Los nivéls de protèccion pôvont pas étre changiês perce que la bâsa de balyês est vèrrolyê.
+'protect-locked-dblock' => "Los nivéls de protèccion pôvont pas étre changiês, la bâsa de balyês est vèrrolyêe.
 Vê-que la configuracion d’ora de la pâge '''$1''' :",
-'protect-locked-access' => "Vos avéd pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.
+'protect-locked-access' => "Voutron compto at pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.
 Vê-que la configuracion d’ora de la pâge '''$1''' :",
-'protect-cascadeon' => 'Ora, ceta pâge est protègiê perce qu’el est encllua dens {{PLURAL:$1|ceta pâge|cetes pâges}}, {{PLURAL:$1|qu’at étâ protègiê|qu’ont étâ protègiês}} avouéc lo chouèx « Protèccion en cascâda » activâ.
-Vos pouede changiér lo nivél de protèccion de ceta pâge sen que cen afècte la protèccion en cascâda.',
-'protect-default' => 'Ôtorisar tôs los usanciérs',
-'protect-fallback' => 'At fôta de la pèrmission « $1 »',
-'protect-level-autoconfirmed' => 'Blocar los novéls usanciérs et los usanciérs pas encartâs',
-'protect-level-sysop' => 'Solament los administrators',
+'protect-cascadeon' => 'Ora cela pâge-que est protègiêe, el est entrebetâye dedens {{PLURAL:$1|ceta pâge qu’est étâye protègiêe|cetes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ.
+Vos pouede changiér lo nivél de protèccion de cela pâge sen que cen afècte la protèccion en cascâda.',
+'protect-default' => 'Ôtorisar tôs los utilisators',
+'protect-fallback' => 'Ôtorisar ren que los utilisators avouéc lo drêt « $1 »',
+'protect-level-autoconfirmed' => 'Ôtorisar ren que los utilisators ôtoconfirmâs',
+'protect-level-sysop' => 'Ôtorisar ren que los administrators',
 'protect-summary-cascade' => 'protèccion en cascâda',
-'protect-expiring' => 'èxpire lo $1 (UTC)',
+'protect-expiring' => 'èxpire lo $2 a $3 (UTC)',
 'protect-expiring-local' => 'èxpire lo $1',
 'protect-expiry-indefinite' => 'sen fin',
-'protect-cascade' => 'Protège asse-ben les pâges encllues dens ceta (protèccion en cascâda).',
-'protect-cantedit' => 'Vos pouede pas changiér los nivéls de protèccion de ceta pâge perce que vos avéd pas la pèrmission de la changiér.',
+'protect-cascade' => 'Protègiér les pâges entrebetâyes dedens ceta (protèccion en cascâda)',
+'protect-cantedit' => 'Vos pouede pas changiér los nivéls de protèccion de ceta pâge, vos éd pas la pèrmission de la changiér.',
 'protect-othertime' => 'Ôtra dâta d’èxpiracion :',
 'protect-othertime-op' => 'ôtra dâta d’èxpiracion',
 'protect-existing-expiry' => 'Dâta d’èxpiracion ègzistenta : $2 a $3',
@@ -2562,47 +2571,47 @@ Vos pouede changiér lo nivél de protèccion de ceta pâge sen que cen afècte
 'protect-expiry-options' => '1 hora:1 hour,1 jorn:1 day,1 semana:1 week,2 semanes:2 weeks,1 mês:1 month,3 mês:3 months,6 mês:6 months,1 an:1 year,sen fin:infinite',
 'restriction-type' => 'Pèrmission :',
 'restriction-level' => 'Nivél de rèstriccion :',
-'minimum-size' => 'Talye la ples petiôta',
-'maximum-size' => 'Talye la ples granta :',
+'minimum-size' => 'Talye minimon',
+'maximum-size' => 'Talye maximon :',
 'pagesize' => '(octèts)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Changiér',
-'restriction-move' => 'Renomar',
+'restriction-move' => 'Dèplaciér',
 'restriction-create' => 'Fâre',
 'restriction-upload' => 'Tèlèchargiér',
 
 # Restriction levels
-'restriction-level-sysop' => 'Protèccion complèta',
-'restriction-level-autoconfirmed' => 'Mié-protèccion',
-'restriction-level-all' => 'Tôs los nivéls',
+'restriction-level-sysop' => 'protèccion complèta',
+'restriction-level-autoconfirmed' => 'mié-protèccion',
+'restriction-level-all' => 'tôs los nivéls',
 
 # Undelete
 'undelete' => 'Vêre les pâges suprimâyes',
 'undeletepage' => 'Vêre et refâre des pâges suprimâyes',
-'undeletepagetitle' => "'''Ceta lista contint des vèrsions suprimâs de [[:$1|$1]].'''",
+'undeletepagetitle' => "'''Ceta lista contint des vèrsions suprimâyes de [[:$1|$1]].'''",
 'viewdeletedpage' => 'Vêre les pâges suprimâyes',
-'undeletepagetext' => '{{PLURAL:$1|Ceta pâge at étâ suprimâ et sè trove|Cetes pâges ont étâ suprimâs et sè trovont}} dens les arch·ives, de yô que pô{{PLURAL:$1||von}}t adés étre refêt{{PLURAL:$1|a|es}}.
-Les arch·ives pôvont étre èfaciês règuliérement.',
+'undeletepagetext' => '{{PLURAL:$1|Ceta pâge est étâye suprimâye et pués sè trôve|Cetes pâges sont étâyes suprimâyes et pués sè trôvont}} adés dedens les arch·ives, de yô que pô{{PLURAL:$1||von}}t étre refêt{{PLURAL:$1|a|es}}.
+Les arch·ives pôvont étre èfaciêes règuliérement.',
 'undelete-fieldset-title' => 'Refâre les vèrsions',
-'undeleteextrahelp' => "Por refâre l’historico complèt de la pâge, lèssiéd totes les câses pas pouentâs et pués clicâd dessus '''''{{int:undeletebtn}}'''''.
-Por fâre una rèstoracion encomplèta, pouentâd les câses que corrèspondont a les vèrsions a refâre, et pués clicâd dessus '''''{{int:undeletebtn}}'''''.",
-'undeleterevisions' => '$1 {{PLURAL:$1|vèrsion arch·ivâ|vèrsions arch·ivâs}}',
-'undeletehistory' => 'Se vos reféte la pâge, totes les vèrsions seront replaciês dens l’historico.
-S’una pâge novèla avouéc lo mémo nom at étâ fêta dês la suprèssion, les vèrsions refêtes aparètront dens l’historico devant et la vèrsion d’ora serat pas remplaciê ôtomaticament.',
-'undeleterevdel' => 'La rèstoracion serat pas fêta se, a la fin, la vèrsion la ples novèla de la pâge ou ben du fichiér réste suprimâ a mêtiêt.
-Dens celos câs, vos dête pas pouentar ou ben pas cachiér les vèrsions suprimâs les ples novèles (d’amont la lista).',
-'undeletehistorynoadmin' => 'Ceta pâge at étâ suprimâ.
-La rêson de la suprèssion est montrâ dens lo rèsumâ ce-desot, avouéc los dètalys ux usanciérs que l’ont changiê devant sa suprèssion.
-Lo contegnu èfèctif de celes vèrsions suprimâs est accèssiblo ren qu’ux administrators.',
-'undelete-revision' => 'Vèrsion suprimâ de $1 (vèrsion du $4 a $5) per $3 :',
-'undeleterevision-missing' => 'Vèrsion fôssa ou ben manquenta.
-Vos avéd pôt-étre un crouyo lim, ou ben la vèrsion at possu étre refêta ou ben suprimâ de les arch·ives.',
-'undelete-nodiff' => 'Gins de vèrsion devant trovâ.',
+'undeleteextrahelp' => "Por refâre l’historico complèt de la pâge, lèssiéd totes les câses pas pouentâyes et pués clicâd dessus '''''{{int:undeletebtn}}'''''.
+Por fâre na rèstoracion a mêtiêt, pouentâd les câses que corrèspondont a les vèrsions a refâre et pués clicâd dessus '''''{{int:undeletebtn}}'''''.",
+'undeleterevisions' => '$1 {{PLURAL:$1|vèrsion arch·ivâye|vèrsions arch·ivâyes}}',
+'undeletehistory' => 'Se vos reféte la pâge, totes les vèrsions seront rebetâyes dedens l’historico.
+S’una pâge novèla avouéc lo mémo nom est étâye fêta dês la suprèssion, les vèrsions refêtes aparêtront dedens l’historico devant.',
+'undeleterevdel' => 'La rèstoracion serat pas fêta s’a la fin la vèrsion la ples novèla de la pâge du fichiér réste a mêtiêt suprimâye.
+Dens celos câs, vos dête pas pouentar ou ben cachiér la vèrsion suprimâye la ples novèla.',
+'undeletehistorynoadmin' => 'Ceta pâge est étâye suprimâye.
+La rêson de la suprèssion est montrâye dens lo rèsumâ ce-desot, avouéc los dètalys des utilisators que l’ant changiê devant la sina suprèssion.
+Lo contegnu èfèctif de celes vèrsions suprimâyes est accèssiblo ren qu’ux administrators.',
+'undelete-revision' => 'Vèrsion suprimâye de $1 (du $4 a $5) per $3 :',
+'undeleterevision-missing' => 'Vèrsion pas justa ou ben manquenta.
+Pôt-étre vos éd un crouyo lim ou ben la vèrsion at possu étre refêta ou enlevâye de les arch·ives.',
+'undelete-nodiff' => 'Niona vèrsion devant trovâye.',
 'undeletebtn' => 'Refâre',
 'undeletelink' => 'vêre / refâre',
 'undeleteviewlink' => 'vêre',
-'undeletereset' => 'Tornar inicialisar',
+'undeletereset' => 'Rebetar a zérô',
 'undeleteinvert' => 'Envèrsar lo chouèx',
 'undeletecomment' => 'Rêson :',
 'undeletedrevisions' => '$1 {{PLURAL:$1|vèrsion refêta|vèrsions refêtes}}',
@@ -2610,10 +2619,10 @@ Vos avéd pôt-étre un crouyo lim, ou ben la vèrsion at possu étre refêta ou
 'undeletedfiles' => '$1 {{PLURAL:$1|fichiér refêt|fichiérs refêts}}',
 'cannotundelete' => 'Falyita de la rèstoracion :
 $1',
-'undeletedpage' => "'''La pâge $1 est étâye refêta.'''
+'undeletedpage' => "'''$1 est étâye refêta'''
 
-Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr la lista de les novèles suprèssions et rèstoracions.",
-'undelete-header' => 'Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr la lista de les pâges suprimâyes dèrriérement.',
+Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr na lista de les novèles suprèssions et rèstoracions.",
+'undelete-header' => 'Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr les pâges suprimâyes dês pou.',
 'undelete-search-title' => 'Rechèrchiér des pâges suprimâs',
 'undelete-search-box' => 'Rechèrchiér des pâges suprimâs',
 'undelete-search-prefix' => 'Montrar les pâges que començont per :',
index 24cbbea..dadabb0 100644 (file)
@@ -500,7 +500,7 @@ Mälde wi önj eefter dü jü füngen heest.',
 'eauthentsent' => 'En bestääsiings-E-mail wörd önj jü önjjääwen adräs sånd.
 
 Iir en E-mail foon oudere brükere ouer jü E-mail-funksjoon emfångd wårde koon, mötj jü adräs än har wörklike tuhiirihäid tu dåtheer brükerkonto jarst bestääsied wårde. Wees sü gödj än befülie da haanewisinge önj di bestääsiings-E-mail.',
-'throttled-mailpassword' => 'Deer wörd önj da leeste {{PLURAL:$1|stün|$1 stüne}} ål en nai pååsuurd önjfrååged. Am en misbrük foon jüdeer funksjoon tu ferhanren, koon bloot {{PLURAL:$1|iinjsen pro stün|åle $1 stüne}} en nai pååsuurd önjfrååged wårde.',
+'throttled-mailpassword' => 'Deer wörd önj da leeste {{PLURAL:$1|stün|$1 stüne}} ål en nai pååsuurd önjfrååged. Am en masbrük foon jüdeer funksjoon tu ferhanren, koon bloot {{PLURAL:$1|iinjsen pro stün|åle $1 stüne}} en nai pååsuurd önjfrååged wårde.',
 'mailerror' => 'Fäägel bai dåt siinjen foon e E-mail: $1',
 'acct_creation_throttle_hit' => 'Besäkere foon jüheer Wiki, da din IP-adräse brüke, heewe önj e leeste däi {{PLURAL:$1|1 brükerkonto|$1 brükerkontos}} mååged, wat jü maksimool tuleet tål önj jüdeer tidperioode as.
 
@@ -552,7 +552,7 @@ Möölikerwise heest dü din pååsuurd ål ma erfolch änred heest unti en nai
 
 # Special:PasswordReset
 'passwordreset' => 'Paasuurd tubääg seete',
-'passwordreset-text' => 'Fal detheer formulaar ütj, an do woort di en e-mail tusjüürd mä henwiiser tu din brükerkonto-uunmeldang.',
+'passwordreset-text' => 'Fal detheer formulaar ütj, am din paaswurd turag tu saaten.',
 'passwordreset-legend' => 'Paasuurd tubääg seete',
 'passwordreset-disabled' => 'Dü koost din paasuurd aw jüdeer wiki ai tubääg seete',
 'passwordreset-pretext' => '{{PLURAL:$1||Du ian faan jo dooten oner iin}}',
@@ -566,13 +566,13 @@ Möölikerwise heest dü din pååsuurd ål ma erfolch änred heest unti en nai
 
 $2
 
-{{PLURAL:$3|Detheer tidjwis paaswurd lääpt|Joheer tidjwis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. 
+{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. 
 Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää an dü din ual paaswurd käänst, do säärst dü niks widjer onernem. Melde di ianfach widjerhen mä din ual paaswurd uun.',
 'passwordreset-emailtext-user' => 'Di brüker $1 üüb {{SITENAME}} hää am brükerinformatsjuunen för {{SITENAME}} uunfraaget ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-Adres ferbünjen:
 
 $2
 
-{{PLURAL:$3|Detheer tidjwis paaswurd lääpt|Joheer tidjwis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.',
+{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.',
 'passwordreset-emailelement' => 'Brükernoome: $1
 Tidwis paasuurd: $2',
 'passwordreset-emailsent' => 'Diar as en E-Mail tu di onerwais.',
@@ -1510,9 +1510,9 @@ Feranerangen faan detdiar sidj wurd üüb detdiar list fäästhäälen.",
 'protect-locked-access' => "Din brükerkonto ferfäiget ai ouer da nüsie ruchte tu jü änring foon e sideschüts. Heer san da aktuäle sideschütsönjstalinge fon jü sid '''„$1“:'''",
 'protect-cascadeon' => 'Jüdeer sid as nütutids diilj foon e kaskaadenspäre. Jü as önj {{PLURAL:$1|jü füliende sid|da füliende side}} önjbünen, huk döör jü kaskaadenspäropsjoon schütsed {{PLURAL:$1|as|san}}. Di sideschütsstatus koon for jüdeer sid änred wårde, dåtdeer heet ouers nån influs aw jü kaskaadenspäre:',
 'protect-default' => 'Åle brükere',
-'protect-fallback' => 'Jü "$1"-beruchtiging as nüsi.',
-'protect-level-autoconfirmed' => 'Späring for naie än ai registriirde brükere',
-'protect-level-sysop' => 'Bloot administratoore',
+'protect-fallback' => 'Ferloof bluas för brükern mä "$1"-rochten.',
+'protect-level-autoconfirmed' => 'Ferloof bluas för registriaret brükern.',
+'protect-level-sysop' => 'Ferloof bluas för administratooren.',
 'protect-summary-cascade' => 'kaskadiirend',
 'protect-expiring' => 'bit $2, am e klook $3 (UTC)',
 'protect-cascade' => 'Kaskadiirende späre - åle önj jüdeer sid önjbünene forlååge wårde uk spärd.',
@@ -1668,7 +1668,7 @@ For di fål dåt dü dåt ai dääst, präiw aw [[Special:DoubleRedirects|dööw
 Dü bast deerfor feroontuurdlik, dåt links fortönj ap dåt koräkt muul wise.
 
 Jü sid wårt '''ai''' ferschääwen, wan dåt ål en sid ma di seelew noome jeeft,
-süwid jüdeer ai lääsi unti en widerliidjing suner färsjoonshistoori as. Dåtdeer bedjüset,
+süwid jüdeer ai bloots en widerliidjing suner färsjoonshistoori as. Dåtdeer bedjüset,
 dåt dü jü sid tubääg ferschüwe koost, wan dü en fäägel mååged heest. Dü koost
 deeriinj niinj sid ouerschriwe.
 
index c974809..a2ac05e 100644 (file)
@@ -1658,7 +1658,7 @@ Der kin [[{{MediaWiki:Listgrouprights-helppage}}|ekstra ynformaasje]] oer yndivi
 'listgrouprights-addgroup-all' => 'Kin brûkers oan alle groepen tafoegje',
 'listgrouprights-removegroup-all' => 'Kin brûkers út alle groepen fuorthelje',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Gjin adres beskikber',
 'mailnologintext' => 'Jo moatte [[Special:UserLogin|oanmelden]] wêze, en in jildich e-postadres [[Special:Preferences|ynsteld]] hawwe, om oan oare meidoggers e-post stjoere te kinnen.',
 'emailuser' => 'Skriuw meidogger',
@@ -2237,7 +2237,7 @@ Alle folgjende links dy't op deselde rigel steane, wurde behannele as útsûnder
 'namespacesall' => 'alles',
 'monthsall' => 'alle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Befêstigjen netpostadres',
 'confirmemail_text' => '{{SITENAME}} freget dat jo jo netpostadres befêstigje eart jo hjir netpost brûke. Brûk de knop hjirûnder om josels in befêstigingskoade ta te stjoeren op it adres dat jo opjûn hawwe. Iepenje de koade dan yn jo blêder om te befêstigjen dat jo netpostadres jildich is.',
 'confirmemail_send' => 'Stjoer in befêstigingskoade',
index d0f4166..7139033 100644 (file)
@@ -557,7 +557,7 @@ Iontráil seoladh dea-fhormáidte le do thoil, nó glan an réimse sin.',
 'usernamehasherror' => 'Ní cheadaítear hais a úsáid in ainm úsáideora',
 'loginlanguagelabel' => 'Teanga: $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Earráid anaithnid i bhfeidhm mail() de chuid PHP',
 
 # Change password dialog
@@ -1254,7 +1254,7 @@ Féach freisin ar [[Special:WantedCategories|catagóirí faoi iarraidh]].',
 'listgrouprights-rights' => 'Cearta',
 'listgrouprights-members' => '(liostaigh baill)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Níl aon seoladh maith ann',
 'mailnologintext' => 'Ní mór duit bheith  [[Special:UserLogin|logáilte isteach]]
 agus bheith le seoladh ríomhphoist bhailí i do chuid [[Special:Preferences|sainroghanna]]
@@ -2120,7 +2120,7 @@ cúlra i bhfócas)',
 'monthsall' => 'gach mí',
 'limitall' => 'iad uile',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Deimhnigh do ríomhsheoladh',
 'confirmemail_text' => 'Tá sé de dhíth an an vicí seo do ríomhsheoladh a bhailíochtú sula n-úsáideann tú na gnéithe ríomhphoist. Brúigh an cnaipe seo thíos chun teachtaireacht deimhnithe a sheoladh chuig do chuntas ríomhphoist. Beidh nasc ann sa chomhad ina mbeidh cód áirithe; lódáil an nasc i do bhrabhsálaí chun deimhniú go bhfuil do ríomhsheoladh bailí.',
 'confirmemail_send' => 'Seol cód deimhnithe',
index 1479ce5..983559c 100644 (file)
@@ -1233,7 +1233,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员名单)',
 
-# E-mail user
+# Email user
 'mailnologin' => '冇email地址',
 'mailnologintext' => '倷要[[Special:UserLogin|登入]] 起同到倷𠮶[[Special:Preferences|参数设置]] 有只有效𠮶email才发得正email到别𠮶用户。',
 'emailuser' => '发email到个只用户',
@@ -2112,7 +2112,7 @@ $1',
 'namespacesall' => '全部',
 'monthsall' => '全部',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '确认email地址',
 'confirmemail_noemail' => '倷冇到倷𠮶[[Special:Preferences|用户设置]]设正一只有效𠮶电子邮件地址。',
 'confirmemail_text' => '个只网站要求倷用email功能之前确认下倷𠮶email地址。按吖下底𠮶键来发封确认邮件到倷𠮶邮箱。佢会附带一只代码链接;请到倷𠮶浏览器打开个只链接来确认倷𠮶email地址系有效𠮶。',
index 7a50d26..95b292c 100644 (file)
@@ -1255,7 +1255,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(成員名單)',
 
-# E-mail user
+# Email user
 'mailnologin' => '冇email地址',
 'mailnologintext' => '倷要[[Special:UserLogin|登入]] 起同到倷嗰[[Special:Preferences|參數設置]] 有隻有效嗰email才發得正email到別嗰用戶。',
 'emailuser' => '發email到箇隻用戶',
@@ -2134,7 +2134,7 @@ $1',
 'namespacesall' => '全部',
 'monthsall' => '全部',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '確認email地址',
 'confirmemail_noemail' => '倷冇到倷嗰[[Special:Preferences|用戶設置]]設正一隻有效嗰電子郵件地址。',
 'confirmemail_text' => '箇隻網站要求倷用email功能之前確認下倷嗰email地址。按吖下底嗰鍵來發封確認郵件到倷嗰郵箱。佢會附帶一隻代碼連結;請到倷嗰瀏覽器打開箇隻連結來確認倷嗰email地址係有效嗰。',
index 85faf16..5b4e3d9 100644 (file)
@@ -732,13 +732,13 @@ e non o quere modificar, pode ignorar esta mensaxe e
 continuar a utilizar o seu contrasinal vello.',
 'noemail' => 'O usuario "$1" non posúe ningún enderezo de correo electrónico rexistrado.',
 'noemailcreate' => 'Ten que proporcionar un enderezo de correo electrónico válido',
-'passwordsent' => 'Envióuselle un contrasinal novo ao enderezo de correo electrónico rexistrado de "$1".
+'passwordsent' => 'Enviouse un contrasinal novo ao enderezo de correo electrónico rexistrado de "$1".
 Por favor, acceda ao sistema de novo tras recibilo.',
 'blocked-mailpassword' => 'O seu enderezo IP está bloqueado e ten restrinxida a edición de artigos. Tampouco se lle permite usar a función de recuperación do contrasinal para evitar abusos do sistema.',
 'eauthentsent' => 'Envióuselle un correo electrónico de confirmación ao enderezo mencionado.
 Antes de que se lle envíe calquera outro correo a esta conta terá que seguir as instrucións que aparecen nesa mensaxe para confirmar que a conta é realmente súa.',
-'throttled-mailpassword' => 'Enviouse un aviso co contrasinal {{PLURAL:$1|na última hora|nas últimas $1 horas}}.
-Para evitar o abuso do sistema só se envía unha mensaxe cada {{PLURAL:$1|hora|$1 horas}}.',
+'throttled-mailpassword' => 'Enviouse un correo electrónico de restablecemento do contrasinal {{PLURAL:$1|na última hora|nas últimas $1 horas}}.
+Para evitar o abuso do sistema só se enviará unha mensaxe de restablecemento cada {{PLURAL:$1|hora|$1 horas}}.',
 'mailerror' => 'Produciuse un erro ao enviar o correo electrónico: $1',
 'acct_creation_throttle_hit' => 'Alguén que visitou este wiki co seu enderezo IP creou, no último día, {{PLURAL:$1|unha conta|$1 contas}}, que é o máximo permitido neste período de tempo.
 Como resultado, os visitantes que usen este enderezo IP non poden crear máis contas nestes intres.',
@@ -789,7 +789,7 @@ Pode ser que xa cambiase o seu contrasinal ou que solicitase un novo contrasinal
 
 # Special:PasswordReset
 'passwordreset' => 'Restablecer o contrasinal',
-'passwordreset-text' => 'Encha este formulario para recibir un recordatorio por correo electrónico cos detalles da súa conta.',
+'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-pretext' => '{{PLURAL:$1||Introduza un dos datos a continuación}}',
@@ -799,31 +799,31 @@ Pode ser que xa cambiase o seu contrasinal ou que solicitase un novo contrasinal
 'passwordreset-capture-help' => 'Se marca esta caixa, poderá ver o correo electrónico (co contrasinal temporal) que se envía ao usuario.',
 'passwordreset-email' => 'Enderezo de correo electrónico:',
 'passwordreset-emailtitle' => 'Detalles da conta de {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Alguén (probablemente vostede, desde o enderezo IP $1) solicitou un recordatorio coa
-información da súa conta en {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}
+'passwordreset-emailtext-ip' => 'Alguén (probablemente vostede, desde o enderezo IP $1) solicitou o restablecemento do seu
+contrasinal de {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}
 a este enderezo de correo electrónico:
 
 $2
 
 {{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.
-Debería acceder ao sistema e elixir un novo contrasinal agora. Se outro fixo esta
+Debería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta
 solicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,
 ignore esta mensaxe e continúe empregando o seu contrasinal vello.',
-'passwordreset-emailtext-user' => 'O usuario $1 solicitou un recordatorio coa información da súa conta en {{SITENAME}}
+'passwordreset-emailtext-user' => 'O usuario $1 solicitou o restablecemento do contrasinal de {{SITENAME}}
 ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}
 a este enderezo de correo electrónico:
 
 $2
 
 {{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.
-Debería acceder ao sistema e elixir un novo contrasinal agora. Se outro fixo esta
+Debería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta
 solicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,
 ignore esta mensaxe e continúe empregando o seu contrasinal vello.',
 'passwordreset-emailelement' => 'Nome de usuario: $1
 Contrasinal temporal: $2',
-'passwordreset-emailsent' => 'Enviouse o correo electrónico co recordatorio.',
-'passwordreset-emailsent-capture' => 'Enviouse un correo electrónico recordatorio, mostrado a continuación.',
-'passwordreset-emailerror-capture' => 'Xerouse un correo electrónico recordatorio, mostrado a continuación, pero o envío ao usuario fallou: $1.',
+'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',
 
 # Special:ChangeEmail
 'changeemail' => 'Cambiar o enderezo de correo electrónico',
@@ -3965,17 +3965,17 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'sqlite-no-fts' => '$1 sen soporte para procuras de texto completo',
 
 # New logging system
-'logentry-delete-delete' => '$1 borrou a páxina "$3"',
-'logentry-delete-restore' => '$1 restaurou a páxina "$3"',
-'logentry-delete-event' => '$1 mudou a visibilidade {{PLURAL:$5|dunha entrada|de $5 entradas}} do rexistro de "$3": $4',
-'logentry-delete-revision' => '$1 mudou a visibilidade {{PLURAL:$5|dunha revisión|de $5 revisións}} da páxina "$3": $4',
-'logentry-delete-event-legacy' => '$1 mudou a visibilidade de entradas do rexistro de "$3"',
-'logentry-delete-revision-legacy' => '$1 mudou a visibilidade de revisións da páxina "$3"',
-'logentry-suppress-delete' => '$1 suprimiu a páxina "$3"',
-'logentry-suppress-event' => '$1 mudou de xeito secreto a visibilidade {{PLURAL:$5|dunha entrada|de $5 entradas}} do rexistro de "$3": $4',
-'logentry-suppress-revision' => '$1 mudou de xeito secreto a visibilidade {{PLURAL:$5|dunha revisión|de $5 revisións}} da páxina "$3": $4',
-'logentry-suppress-event-legacy' => '$1 mudou de xeito secreto a visibilidade de entradas do rexistro de "$3"',
-'logentry-suppress-revision-legacy' => '$1 mudou de xeito secreto a visibilidade de revisións da páxina "$3"',
+'logentry-delete-delete' => '$1 {{GENDER:$2|borrou}} a páxina "$3"',
+'logentry-delete-restore' => '$1 {{GENDER:$2|restaurou}} a páxina "$3"',
+'logentry-delete-event' => '$1 {{GENDER:$2|mudou}} a visibilidade {{PLURAL:$5|dunha entrada|de $5 entradas}} do rexistro de $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|mudou}} a visibilidade {{PLURAL:$5|dunha revisión|de $5 revisións}} da páxina "$3": $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|mudou}} a visibilidade de entradas do rexistro de $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|mudou}} a visibilidade de revisións da páxina "$3"',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|suprimiu}} a páxina "$3"',
+'logentry-suppress-event' => '$1 {{GENDER:$2|mudou}} de xeito secreto a visibilidade {{PLURAL:$5|dunha entrada|de $5 entradas}} do rexistro de $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|mudou}} de xeito secreto a visibilidade {{PLURAL:$5|dunha revisión|de $5 revisións}} da páxina "$3": $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|mudou}} de xeito secreto a visibilidade de entradas do rexistro de $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|mudou}} de xeito secreto a visibilidade de revisións da páxina "$3"',
 'revdelete-content-hid' => 'agochou contidos',
 'revdelete-summary-hid' => 'agochou o resumo de edición',
 'revdelete-uname-hid' => 'agochou o nome de usuario',
@@ -3984,20 +3984,20 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'revdelete-uname-unhid' => 'descubriu o nome de usuario',
 'revdelete-restricted' => 'aplicou restricións aos administradores',
 'revdelete-unrestricted' => 'eliminou restricións aos administradores',
-'logentry-move-move' => '$1 moveu a páxina "$3" a "$4"',
-'logentry-move-move-noredirect' => '$1 moveu a páxina "$3" a "$4" sen deixar unha redirección',
-'logentry-move-move_redir' => '$1 moveu a páxina "$3" a "$4" sobre unha redirección',
-'logentry-move-move_redir-noredirect' => '$1 moveu a páxina "$3" a "$4" sobre unha redirección sen deixar unha redirección',
-'logentry-patrol-patrol' => '$1 marcou a revisión $4 da páxina "$3" como patrullada',
-'logentry-patrol-patrol-auto' => '$1 marcou automaticamente a revisión $4 da páxina "$3" como patrullada',
-'logentry-newusers-newusers' => 'Creouse a conta de usuario $1',
-'logentry-newusers-create' => 'Creouse a conta de usuario $1',
-'logentry-newusers-create2' => '$1 creou a conta de usuario $3',
-'logentry-newusers-byemail' => '$1 creou a conta de usuario $3; o contrasinal enviouse por correo electrónico',
-'logentry-newusers-autocreate' => 'A conta de usuario $1 creouse automaticamente',
-'logentry-rights-rights' => '$1 cambiou o grupo ao que pertence $3 de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 cambiou o grupo ao que pertence $3',
-'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
+'logentry-move-move' => '$1 {{GENDER:$2|moveu}} a páxina "$3" a "$4"',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|moveu}} a páxina "$3" a "$4" sen deixar unha redirección',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|moveu}} a páxina "$3" a "$4" sobre unha redirección',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|moveu}} a páxina "$3" a "$4" sobre unha redirección sen deixar unha redirección',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|marcou}} a revisión $4 da páxina "$3" como patrullada',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|marcou}} automaticamente a revisión $4 da páxina "$3" como patrullada',
+'logentry-newusers-newusers' => 'Creouse a conta de {{GENDER:$2|usuario|usuaria}} $1',
+'logentry-newusers-create' => 'Creouse a conta de {{GENDER:$2|usuario|usuaria}} $1',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|creou}} a conta de usuario $3',
+'logentry-newusers-byemail' => '$1 {{GENDER:$2|creou}} a conta de usuario $3; o contrasinal enviouse por correo electrónico',
+'logentry-newusers-autocreate' => 'A conta de {{GENDER:$2|usuario|usuaria}} $1 creouse automaticamente',
+'logentry-rights-rights' => '$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3',
+'logentry-rights-autopromote' => '$1 foi {{GENDER:$2|promovido|promovida}} automaticamente de $4 a $5',
 'rightsnone' => '(ningún)',
 
 # Feedback
index 6a4316f..bd03044 100644 (file)
@@ -1500,7 +1500,7 @@ $1",
 'listgrouprights-addgroup-self-all' => 'Προστιθέναι ἁπάσας τὰς ὁμάδας τῷ λογισμῷ ἐμοῦ τοῦ ἰδίου',
 'listgrouprights-removegroup-self-all' => 'Ἀφαιρεῖν ἁπάσας τὰς ὁμάδας ἀπὸ τὸν λογισμὸν ἐμοῦ τοῦ ἰδίου',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Οὐδεμία διεύθυνσις παραλήπτου',
 'emailuser' => 'Ἠλεκτρονικὴν ἐπιστολὴν τῷδε τῷ χρωμένῳ πέμπειν',
 'emailpage' => 'Χρώμενος ἠλ.-ταχυδρομείου',
@@ -2486,7 +2486,7 @@ $1',
 'monthsall' => 'ἅπαντες',
 'limitall' => 'ἅπασαι',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Ἐπιβεβαίωσον διεύθυνσιν ἠλ-ταχυδρομείου',
 'confirmemail_send' => 'Ταχυδρομήσειν κώδικα ἐπιβεβαιώσεως',
 'confirmemail_sent' => 'Ἐπιβεβαίωσις διευθύνσεως ἠλ.-ταχυδρομείου ἐστάλη.',
index 904d1d5..e38cb95 100644 (file)
@@ -630,7 +630,7 @@ Wänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignori
 'loginlanguagelabel' => 'Sproch: $1',
 'suspicious-userlogout' => 'Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nit bekannte Fähler mit dr Funktion mail() vu PHP',
 'user-mail-no-addy' => 'Es isch versuecht worde e E-Mail ohni Angab vunere E-Mail-Adräss z verschigge.',
 
@@ -1294,7 +1294,7 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'prefs-displaywatchlist' => 'Aazeigoptione',
 'prefs-diffs' => 'Versionsverglych',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Siht giltig uus',
 'email-address-validity-invalid' => 'S brucht e giltigi Adräss!',
 
@@ -2057,7 +2057,7 @@ Zuesätzligi Informatione iber einzelni Rächt git s [[{{MediaWiki:Listgrouprigh
 'listgrouprights-addgroup-self-all' => 'Cha alli Gruppe zum eigene Benutzerkonto zuefiege',
 'listgrouprights-removegroup-self-all' => 'Cha alli Gruppe us em eigene Benutzerkonto useneh',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Du bisch nid aagmäldet oder hesch keis Mail aaggä',
 'mailnologintext' => 'Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.',
 'emailuser' => 'Es Mail schrybe',
@@ -3363,7 +3363,7 @@ Andri wäre standardmäßig nit aazeigt.
 'monthsall' => 'alli',
 'limitall' => 'alli',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Bstätigung vo Ihre E-Poscht-Adräss',
 'confirmemail_noemail' => 'Du hesch in dyne [[Special:Preferences|persönliche Ystellige]] e kei E-Mail-Adress ygää.',
 'confirmemail_text' => 'Dermit du di erwyterete Mailfunktione chasch bruuche, muesch du die E-Mail-Adrässe, wo du hesch aaggä, la bestätige. Klick ufe Chnopf unte; das schickt dir es Mail. I däm Mail isch e Link; we du däm Link folgsch, de tuesch dadermit bestätige, das die E-Mail-Adrässe dyni isch.',
index bc14e93..ae6b140 100644 (file)
@@ -667,7 +667,7 @@ $2',
 'loginlanguagelabel' => 'ભાષા: $1',
 'suspicious-userlogout' => 'લોગ આઉટ કરવાની તમારી વિનંતિ પૂરી ન કરી શકાઇ. એમ લાગે છે કે તેને તૃટિ પામેલ બ્રાઉઝર કે પ્રોક્સી દ્વારા મોકલાઈ હતી.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ',
 'user-mail-no-addy' => 'ઈ મેલ એડ્રસ વગર ઈ મેલ મોકલવા પ્રયત્ન કરેલ.',
 
@@ -1341,7 +1341,7 @@ HTML નાકું ચકાસો',
 'prefs-displaywatchlist' => 'પ્રદર્શન વિકલ્પો',
 'prefs-diffs' => 'ફરક',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ઈ-મેલ યોગ્ય લાગે છે.',
 'email-address-validity-invalid' => 'પ્રમાણભૂત શૈલિમાં ઈ-મેલ એડ્રેસ લખો',
 
@@ -2107,7 +2107,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'listgrouprights-addgroup-self-all' => 'દરેક જૂથને તેમના પોતાના ખાતા માં ઉમેરો',
 'listgrouprights-removegroup-self-all' => 'બધા જૂથને તેમના પોતાના ખાતામાંથી હટાવો',
 
-# E-mail user
+# Email user
 'mailnologin' => 'મેળવનારનું સરનામું નથી',
 'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ',
 'emailuser' => 'સભ્યને ઇ-મેલ કરો',
@@ -3447,7 +3447,7 @@ $1',
 'monthsall' => 'બધા',
 'limitall' => 'બધા',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો',
 'confirmemail_noemail' => 'તમારા [[Special:Preferences|user preferences]] માં વૈધ ઈ-મેલ સરનામું નથી.',
 'confirmemail_text' => '{{SITENAME}} માં તમારા ઇ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જરૂરી છે.
index d66885c..1031e4d 100644 (file)
@@ -1008,7 +1008,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(sṳ̀n-yèn chhîn-tân)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Mò email thi-tiám',
 'mailnologintext' => 'Ngì pit-sî siên [[Special:UserLogin|tên-ngi̍p]] pin-chhai [[Special:Preferences|chhâm-su sat-chṳ]] chûng yû yit-ke yû-háu ke e-mail thi-tiám chhòi-nèn email khì-thâ yung-fu.',
 'emailuser' => 'Email ke-yung-fu',
@@ -1574,7 +1574,7 @@ yèn-heu thùng yit-hòng heu-fông ke lièn-chiap chiông-voi pûn sṳ-vì li-
 'namespacesall' => 'Chhiòn-phu',
 'monthsall' => 'chhiòn-phu',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Khok-ngin email thi-tiám',
 'confirmemail_noemail' => 'Ngì mò-yû chhai ngì-ke [[Special:Preferences|yung-fu sat-thin]] sû-ngi̍p yit-ke yû-háu ke email thi-tiám.',
 'confirmemail_text' => 'Chhṳ́ mióng-chham yêu-khiù ngì chhai sṳ́-yung sin-siông kûng-nèn chṳ̂-chhièn ngiam-chṳn ngì-ke sin-siông thi-tiám. Tiám-kit yî-ha on-néu chhṳ̍t-hiong ngì-ke sin-siông fat-sung yit-fûng khok-ngin sin-siông. Ke-sin-siông pâu-hàm yû yit-hòng me̍t-me̍t lièn-kiet; chhiáng chhai ngì-ke hi-khí chûng kâ-chai chhṳ́ lièn-kiet yî khok-ngin ngì-ke sin-siông thi-tiám he yû-háu ke.',
index 5d9db96..a1e453c 100644 (file)
@@ -838,8 +838,8 @@ $2',
 'blocked-mailpassword' => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.',
 'eauthentsent' => 'דוא"ל אימות נשלח לכתובת הדוא"ל שקבעת.
 לפני שדברי דוא"ל אחרים יישלחו לחשבון הזה, יהיה עליך לפעול לפי ההוראות בדוא"ל, כדי לאשר שהחשבון אכן שייך לך.',
-'throttled-mailpassword' => '×\9b×\91ר × ×¢×©×\94 ×©×\99×\9e×\95ש ×\91×\90פשר×\95ת ×©×\97×\96×\95ר הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.
-כדי למנוע ניצול לרעה, יכול להישלח רק דואר אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.',
+'throttled-mailpassword' => '×\9b×\91ר × ×©×\9c×\97 ×\93×\95×\90\9c ×\9c×\90×\99פ×\95ס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.
+כדי למנוע ניצול לרעה, יכול להישלח רק דוא אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.',
 'mailerror' => 'שגיאה בשליחת דואר: $1',
 'acct_creation_throttle_hit' => 'מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.
 לפיכך, מבקרים דרך כתובת ה־IP הזו לא יכולים ליצור חשבונות נוספים ברגע זה.',
@@ -891,7 +891,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'איפוס סיסמה',
-'passwordreset-text' => '×\9e×\9c×\90×\95 ×\98×\95פס ×\96×\94 ×\9b×\93×\99 ×\9cק×\91×\9c ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\95×\91×\95 ×ª×\96×\9b×\95רת ×©×\9c ×¤×¨×\98×\99 ×\94×\97ש×\91×\95×\9f.',
+'passwordreset-text' => '×\9e×\9c×\90×\95 ×\98×\95פס ×\96×\94 ×\9b×\93×\99 ×\9c×\90פס ×\90ת ×\94ס×\99ס×\9e×\94.',
 'passwordreset-legend' => 'איפוס סיסמה',
 'passwordreset-disabled' => 'איפוסי סיסמה בוטלו באתר ויקי זה.',
 'passwordreset-pretext' => '{{PLURAL:$1||הקלידו אחד מפריטי המידע למטה}}',
@@ -901,8 +901,8 @@ $2',
 'passwordreset-capture-help' => 'אם תסמנו תיבה זו, הדואר האלקטרוני (יחד עם הסיסמה הזמנית) יוצג לכם במקביל לשליחתו למשתמש.',
 'passwordreset-email' => 'כתובת דוא"ל:',
 'passwordreset-emailtitle' => 'פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => '×\9e×\99ש×\94×\95 (×\9b×\9b×\9c ×\94נר×\90×\94 ×\90ת×\9d, ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\9eספר $1) ×\91×\99קש ×ª×\96×\9b×\95רת ×©×\9c ×¤×¨×\98×\99
\94×\97ש×\91×\95×\9f שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
+'passwordreset-emailtext-ip' => '×\9e×\99ש×\94×\95 (×\9b×\9b×\9c ×\94נר×\90×\94 ×\90ת×\9d, ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\9eספר $1) ×\91×\99קש ×\90×\99פ×\95ס ×©×\9c
\94ס×\99ס×\9e×\94 שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
 שייכים לכתובת הדואר האלקטרוני הזו:
 
 $2
@@ -911,9 +911,8 @@ $2
 עליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם
 המקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה
 הישנה.',
-'passwordreset-emailtext-user' => 'המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש תזכורת של פרטי
-החשבון שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
-שייכים לכתובת הדואר האלקטרוני הזו:
+'passwordreset-emailtext-user' => 'המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}
+($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}} שייכים לכתובת הדואר האלקטרוני הזו:
 
 $2
 
@@ -923,9 +922,9 @@ $2
 הישנה.',
 'passwordreset-emailelement' => 'שם משתמש: $1
 סיסמה זמנית: $2',
-'passwordreset-emailsent' => 'נש×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\9d ×ª×\96×\9b×\95רת.',
-'passwordreset-emailsent-capture' => 'נש×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\9d ×ª×\96×\9b×\95רת, והוא מוצג להלן.',
-'passwordreset-emailerror-capture' => '× ×\95צר ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\9d ×ª×\96×\9b×\95רת, והוא מוצג להלן, אך שליחתו למשתמש נכשלה: $1',
+'passwordreset-emailsent' => 'נש×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94.',
+'passwordreset-emailsent-capture' => 'נש×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94, והוא מוצג להלן.',
+'passwordreset-emailerror-capture' => '× ×\95צר ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94, והוא מוצג להלן, אך שליחתו למשתמש נכשלה: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'שינוי כתובת דוא"ל',
@@ -4112,17 +4111,17 @@ $5
 '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 גרסאות}} של הדף $3: $4',
-'logentry-delete-event-legacy' => '$1 שינה את מצב התצוגה של פעולות יומן של $3',
-'logentry-delete-revision-legacy' => '$1 שינה את מצב התצוגה של גרסאות בדף $3',
-'logentry-suppress-delete' => '$1 הסתיר לחלוטין את הדף $3',
-'logentry-suppress-event' => '$1 שינה בסודיות את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
-'logentry-suppress-revision' => '$1 שינה בסודיות את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
-'logentry-suppress-event-legacy' => '$1 שינה בסודיות את מצב התצוגה של פעולות יומן של $3',
-'logentry-suppress-revision-legacy' => '$1 שינה בסודיות את מצב התצוגה של גרסאות של הדף $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|מחק|מחקה}} את הדף $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של פעולות יומן של $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של גרסאות בדף $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|הסתיר|הסתירה}} לחלוטין את הדף $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של פעולות יומן של $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של גרסאות של הדף $3',
 'revdelete-content-hid' => 'התוכן הוסתר',
 'revdelete-summary-hid' => 'תקציר העריכה הוסתר',
 'revdelete-uname-hid' => 'שם המשתמש הוסתר',
@@ -4131,19 +4130,19 @@ $5
 'revdelete-uname-unhid' => 'הסתרת שם המשתמש בוטלה',
 'revdelete-restricted' => 'נוספו הגבלות למפעילי מערכת',
 'revdelete-unrestricted' => 'הוסרו הגבלות ממפעילי מערכת',
-'logentry-move-move' => '$1 העביר את הדף $3 ל$4',
-'logentry-move-move-noredirect' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה',
-'logentry-move-move_redir' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה',
-'logentry-move-move_redir-noredirect' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה',
-'logentry-patrol-patrol' => '$1 סימן את הגרסה $4 בדף $3 כבדוקה',
-'logentry-patrol-patrol-auto' => '$1 סימן אוטומטית את הגרסה $4 בדף $3 כבדוקה',
-'logentry-newusers-newusers' => 'חשבון המשתמש $1 נוצר',
-'logentry-newusers-create' => 'חשבון המשתמש $1 נוצר',
+'logentry-move-move' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל$4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|סימן|סימנה}} את הגרסה $4 בדף $3 כבדוקה',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|סימן|סימנה}} אוטומטית את הגרסה $4 בדף $3 כבדוקה',
+'logentry-newusers-newusers' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}}',
+'logentry-newusers-create' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}}',
 'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
 'logentry-newusers-byemail' => 'חשבון המשתמש $3 נוצר על ידי $1 והסיסמה נשלחה בדוא"ל',
-'logentry-newusers-autocreate' => 'חשבון המשתמש $1 נוצר אוטומטית',
-'logentry-rights-rights' => '$1 שינה את ההרשאות של $3 מ$4 ל$5',
-'logentry-rights-rights-legacy' => '$1 שינה את ההרשאות של $3',
+'logentry-newusers-autocreate' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית',
+'logentry-rights-rights' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ$4 ל$5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3',
 'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
 'rightsnone' => '(כלום)',
 
index 8494883..a7a4085 100644 (file)
@@ -693,7 +693,7 @@ $2',
 'loginlanguagelabel' => 'भाषा: $1',
 'suspicious-userlogout' => 'अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP के mail() फ़ंक्शन में अज्ञात त्रुटि हुई।',
 'user-mail-no-addy' => 'ई-मेल पते के बिना ई-मेल भेजने की कोशिश की।',
 
@@ -1365,7 +1365,7 @@ HTML टैग की जाँच करें।',
 'prefs-displaywatchlist' => 'प्रदर्शन विकल्प',
 'prefs-diffs' => 'अंतर',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ई-मेल पता वैध प्रतीत होता है',
 'email-address-validity-invalid' => 'एक वैध ई-मेल पता प्रविष्ट करें',
 
@@ -2153,7 +2153,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'listgrouprights-addgroup-self-all' => 'अपने खाते में सभी समूह शामिल करें',
 'listgrouprights-removegroup-self-all' => 'अपने खाते से सभी समूह हटाएँ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'पाने वाले का एड्रेस दिया नहीं',
 'mailnologintext' => 'अन्य सदस्यों को इ-मेल भेजने के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है और आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना आवश्यक है।',
 'emailuser' => 'इस सदस्य को ई-मेल भेजें',
@@ -3500,7 +3500,7 @@ $1',
 'monthsall' => 'सभी',
 'limitall' => 'सभी',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ई-मेल प्रमाणित करे',
 'confirmemail_noemail' => 'आपके [[Special:Preferences|सदस्य वरीयतायें]]में वैध इ-मेल एड्रेस नहीं दिया हुआ हैं।',
 'confirmemail_text' => '{{SITENAME}} पर उपलब्ध इ-मेल सुविधाओंका लाभ उठाने के लिये प्रमाणित एड्रेस होना जरूरी हैं।
index c9176a6..fe473fb 100644 (file)
@@ -540,7 +540,7 @@ Thora deri baad fir se kosis karna.',
 'loginlanguagelabel' => 'Bhasa: $1',
 'suspicious-userlogout' => 'Aap ke log out kare ke maang ke na kar dewa gais hae kaahe ki ii janaawe hae ki ii maang ke ek tuuta browser nai to caching proxy bhejis hae.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP ke mail() function me koi anjaan kharaabi hae',
 'user-mail-no-addy' => 'Bina e-mail address rahe pe bhi e-mail bheje ke kosis karaa gais hae.',
 
@@ -1226,7 +1226,7 @@ Iske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.',
 'prefs-displaywatchlist' => 'Choice dekhao',
 'prefs-diffs' => 'Farka',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail address kanuni hae',
 'email-address-validity-invalid' => 'Ek kanuni e-mail ke likho',
 
@@ -2005,7 +2005,7 @@ Support karaa gais protocol: <code>$1</code> (defaults to http:// if no protocol
 'listgrouprights-addgroup-self-all' => 'Sab group ke aapan account me jorre saktaa hai',
 'listgrouprights-removegroup-self-all' => 'Sab group ke aapan account se hatae saktaa hai',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Koi bheje waala address nai hai',
 'mailnologintext' => 'Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]]  me thik e-mail hoew ke chaahi.',
 'emailuser' => 'Ii user ke E-mail karo',
@@ -3138,7 +3138,7 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 'monthsall' => 'sab',
 'limitall' => 'sab',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-mail address ke pakka karo',
 
 # Delete conflict
index 88215c4..765c9ae 100644 (file)
@@ -491,7 +491,7 @@ $messages = array(
 'history' => 'Stare izmjene',
 'history_short' => 'Stare izmjene',
 'updatedmarker' => 'obnovljeno od zadnjeg posjeta',
-'printableversion' => 'Verzija za ispis',
+'printableversion' => 'Inačica za ispis',
 'permalink' => 'Trajna poveznica',
 'print' => 'Ispiši',
 'view' => 'Vidi',
@@ -1987,7 +1987,7 @@ Možda želite urediti njen opis na [$2 stranici opisa datoteke].',
 'filedelete-success' => "Datoteka '''$1''' je izbrisana.",
 'filedelete-success-old' => "Inačica datoteke '''[[Media:$1|$1]]''' od $3, $2 je obrisana.",
 'filedelete-nofile' => "'''$1''' ne postoji.",
-'filedelete-nofile-old' => "Nema arhivirane verzije datoteke '''$1''' s zadanim parametrima.",
+'filedelete-nofile-old' => "Nema arhivirane inačice datoteke '''$1''' sa zadanim parametrima.",
 'filedelete-otherreason' => 'Drugi/dodatni razlog:',
 'filedelete-reason-otherlist' => 'Drugi razlog',
 'filedelete-reason-dropdown' => '*Česti razlozi brisanja
@@ -2832,7 +2832,7 @@ Molimo odaberite drugo ime.',
 
 # Export
 'export' => 'Izvezi stranice',
-'exporttext' => 'Možete izvesti tekst i prijašnje promjene jedne ili više stranica uklopljene u XML kod. U budućim verzijama MediaWiki softvera bit će moguće uvesti ovakvu stranicu u neki drugi wiki. Trenutačna verzija to još ne podržava.
+'exporttext' => 'Možete izvesti tekst i prijašnje promjene jedne ili više stranica uklopljene u kȏd XML. U budućim inačicama MediaWiki softvera bit će moguće uvesti ovakvu stranicu u neki drugi wiki. Trenutačna inačica to još ne podržava.
 
 Za izvoz stranica unesite njihove naslove u polje ispod, jedan naslov po retku, i označite želite li trenutačnu inačicu zajedno sa svim prijašnjima, ili samo trenutačnu inačicu s informacijom o zadnjoj promjeni.
 
index ae8984e..f8ea051 100644 (file)
@@ -625,7 +625,7 @@ Prošu přizjew so znowa, po tym zo sy je přijał.',
 'blocked-mailpassword' => 'Twoja IP-adresa je přećiwo wobdźěłowanju zablokowana, a tohodla njeje dowolene, funkciju za wobnowjenje hesłow wužiwać, zo by znjewužiwanju zadźěwało.',
 'eauthentsent' => 'Wobkrućenska e-mejlka bu na naspomnjenu e-mejlowu adresu pósłana.
 Prjedy hač so druha e-mejlka na konto pósćele, dyrbiš so po instrukcijach w e-mejlce měć, zo by wobkrućił, zo konto je woprawdźe twoje.',
-'throttled-mailpassword' => 'Bu hižo nowe hesło za {{PLURAL:$1|poslednju hodźinu|poslednjej $1 hodźinje|poslednje $1 hodźiny|poslednich $1 hodźin}} pósłane. Zo by znjewužiwanju zadźěwało, so jenož jedne hesło na {{PLURAL:$1|hodźinu|$1 hodźinje|$1 hodźiny|$1 hodźin}} pósćele.',
+'throttled-mailpassword' => 'E-mejl za anulowanje hesło je so za {{PLURAL:$1|poslednju hodźinu|poslednjej $1 hodźinje|poslednje $1 hodźiny|poslednich $1 hodźin}} pósłała. Zo by znjewužiwanju zadźěwało, so jenož jedna e-mejl za anulowanje hesła na {{PLURAL:$1|hodźinu|$1 hodźinje|$1 hodźiny|$1 hodźin}} pósćele.',
 'mailerror' => 'Zmylk při słanju e-mejlki: $1',
 'acct_creation_throttle_hit' => 'Wopytowarjo tutoho wikija, kotřiž twoju IP-adresu wužiwaja, su {{PLURAL:$1|1 konto|$1 kontaj|$1 konty|$1 kontow}} posledni dźeń wutworił, štož je maksimalna ličba za tutu periodu. Wopytowarjo, kotřiž tutu IP-adresu wužiwaja, njemóža tuchwilu dalše konta wutworić.',
 'emailauthenticated' => 'Twoja e-mejlowa adresa bu $2 $3 hodź. wobkrućena.',
@@ -672,7 +672,7 @@ Snano sy swoje hesło hižo wuspěšnje změnił abo nowe nachwilne hesło poža
 
 # Special:PasswordReset
 'passwordreset' => 'Hesło wróćo stajić',
-'passwordreset-text' => 'Wupjelń tutón formular, zo by dopomnjensku e-mejl wo swojich kontowych podrobnosćach dóstał.',
+'passwordreset-text' => 'Wupjelń tutón formular, zo by swoje hesło anulował.',
 'passwordreset-legend' => 'Hesło wróćo stajić',
 'passwordreset-disabled' => 'Wróćostajenje hesłow je so na  tutym wikiju znjemóžniło.',
 'passwordreset-pretext' => '{{PLURAL:$1||Zapodaj deleka jedne ze slědowacych datowych podaćow}}',
@@ -682,23 +682,23 @@ Snano sy swoje hesło hižo wuspěšnje změnił abo nowe nachwilne hesło poža
 'passwordreset-capture-help' => 'Jeli nakřižuješ tutón kašćik, budźe so e-mejlka z nachwilnym hesło pokazować a tež wužiwarjej pósłać.',
 'passwordreset-email' => 'E-mejlowa adresa:',
 'passwordreset-emailtitle' => 'Kontowe podrobnosće na {{GRAMMAR:lokatiw|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Něchtó (najskerje ty, z IP-adresu $1) je dopomnjenku na twoje kontowe podrobnosće za {{SITENAME}} požadał ($4).  {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane|zwjazane}}:
+'passwordreset-emailtext-ip' => 'Něchtó (najskerje ty, z IP-adresu $1) je anulowanje hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4).  {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:
 
 $2
 
-{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
 Ty měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.',
-'passwordreset-emailtext-user' => 'Wužiwar $1 je dopomnjenku na twoje kontowe podrobnosće za {{SITENAME}} požadał ($4).  {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane|zwjazane}}:
+'passwordreset-emailtext-user' => 'Wužiwar $1 na {{GRAMMAR:lokatiw|{{SITENAME}}}} je anulowanje twojeho hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4).  {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:
 
 $2
 
-{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
 Ty měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.',
 'passwordreset-emailelement' => 'Wužiwarske mjeno: $1
 Nachwilne hesło: $2',
-'passwordreset-emailsent' => 'Wopomnjenska e-mejlka je so pósłała.',
-'passwordreset-emailsent-capture' => 'Deleka pokazana dopomnjenska e-mejl je so wotpósłała.',
-'passwordreset-emailerror-capture' => 'Deleka pokazana dopomnjenska e-mejl je so wutworiła, ale słanje wužiwarjej je so njeporadźiło: $1',
+'passwordreset-emailsent' => 'E-mejl za anulowanje hesło je so pósłała.',
+'passwordreset-emailsent-capture' => 'E-mejl za anulowanje hesła je so pósłała, kotraž so deleka pokazuje.',
+'passwordreset-emailerror-capture' => 'E-mejl za anulowanje hesła je so wutworiła, kotraž so deleka pokazuje, ale słanje wužiwarjej je so njeporadźiło: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-mejlowu adresu změnić',
@@ -3720,17 +3720,17 @@ Wobrazy so połnym rozeznaću pokazuja, druhe datajowe typy so ze zwjazanym prog
 'sqlite-no-fts' => '$1 połnotekstowe pytanje njepodpěruje',
 
 # New logging system
-'logentry-delete-delete' => '$1 je stronu $3 zhašał',
-'logentry-delete-restore' => '$1 je stronu $3 wobnowił',
-'logentry-delete-event' => '$1 změni widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-delete-revision' => '$1 změni widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow|$5 wersijow|$5 wersijow}} na $3: $4',
-'logentry-delete-event-legacy' => '$1 změni widźomnosć protokolowych zapiskow na $3',
-'logentry-delete-revision-legacy' => '$1 změni widźomnosć wersijow na stronje $3',
-'logentry-suppress-delete' => '$1 je stronu $3 potłóčił',
-'logentry-suppress-event' => '$1 změni skradźu widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-suppress-revision' => '$1 změni skradźu widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow|$5 wersijow|$5 wersijow}} na stronje $3: $4',
-'logentry-suppress-event-legacy' => '$1 změni skradźu widźomnosć protokolowych zapiskow na $3',
-'logentry-suppress-revision-legacy' => '$1 změni skradźu widźomnosć wersijow na stronje $3',
+'logentry-delete-delete' => '$1 je stronu $3 {{GENDER:$1|zhašał|zhašała}}',
+'logentry-delete-restore' => '$1 je stronu $3 {{GENDER:$1wobnowił|wobnowiła}}',
+'logentry-delete-event' => '$1 je widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow}} na $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-delete-revision' => '$1 je widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow}} na $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-delete-event-legacy' => '$1 je widźomnosć protokolowych zapiskow na $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-delete-revision-legacy' => '$1 je widźomnosć wersijow na stronje $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-suppress-delete' => '$1 je stronu $3 {{GENDER:$2|potłóčił|potłóčiła}}',
+'logentry-suppress-event' => '$1 je skradźu widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow}} na $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-suppress-revision' => '$1 je skradźu widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow}} na stronje $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-suppress-event-legacy' => '$1 je skradźu widźomnosć protokolowych zapiskow na $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-suppress-revision-legacy' => '$1 je skradźu widźomnosć wersijow na stronje $3 {{GENDER:$2|změnił|změniła}}',
 'revdelete-content-hid' => 'wobsah schowany',
 'revdelete-summary-hid' => 'Zjeće schowane',
 'revdelete-uname-hid' => 'wužiwarske mjeno schowane',
@@ -3739,20 +3739,20 @@ Wobrazy so połnym rozeznaću pokazuja, druhe datajowe typy so ze zwjazanym prog
 'revdelete-uname-unhid' => 'wužiwarske mjeno widźomne',
 'revdelete-restricted' => 'na administratorow nałožene wobmjezowanja',
 'revdelete-unrestricted' => 'Wobmjezowanja za administratorow wotstronjene',
-'logentry-move-move' => '$1 je stronu $3 do $4 přesunył',
-'logentry-move-move-noredirect' => '$1 přesuny stronu $3 do $4, bjeztoho zo by dalesposrědkowanje wutworił',
-'logentry-move-move_redir' => '$1 přesuny stronu $3 do $4 přepisujo dalesposrědkowanje',
-'logentry-move-move_redir-noredirect' => '$1 přesuny stronu $3 do $4 přepisujo dalesposrědkowanje, bjeztoho zo by dalesposrědkowanje wutworił',
-'logentry-patrol-patrol' => '$1 markěrowaše wersiju $4 strony $3 jako skontrolowanu',
-'logentry-patrol-patrol-auto' => '$1 awtomatisce markěrowaše wersiju $4 strony $3 jako skontrolowanu',
-'logentry-newusers-newusers' => 'Wužiwarske konto $1 je so załožiło',
-'logentry-newusers-create' => 'Wužiwarske konto $1 je so załožiło',
-'logentry-newusers-create2' => '$1 załoži wužiwarske konto $3',
-'logentry-newusers-byemail' => 'Wužiwarske konto $3 je so wot $1 załožiło a hesło je so přez e-mejl pósłało.',
-'logentry-newusers-autocreate' => 'Konto $1 je so awtomatisce załožiło',
-'logentry-rights-rights' => '$1 změni skupinske čłonstwo za $3 z $4 do $5',
-'logentry-rights-rights-legacy' => '$1 změni skupinske čłonstwo za $3',
-'logentry-rights-autopromote' => '$1 powyši so awtomatisce wot $4 do $5',
+'logentry-move-move' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}}',
+'logentry-move-move-noredirect' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}}, bjeztoho zo by dalesposrědkowanje {{GENDER:$2|wutworił|wutworiła}}',
+'logentry-move-move_redir' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}} přepisujo dalesposrědkowanje',
+'logentry-move-move_redir-noredirect' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}} přepisujo dalesposrědkowanje, bjeztoho zo by dalesposrědkowanje {{GENDER:$2|wutworił|wutworiła}}',
+'logentry-patrol-patrol' => '$1 je wersiju $4 strony $3 jako dohladowanu {{GENDER:$2|markěrował|markěrowała}}',
+'logentry-patrol-patrol-auto' => '$1 je wersiju $4 strony $3 awtomatisce jako dohladowanu {{GENDER:$2|markěrował|markěrowała}}',
+'logentry-newusers-newusers' => 'Wužiwarske konto $1 je so {{GENDER:$2|załožiło}}',
+'logentry-newusers-create' => 'Wužiwarske konto $1 je so {{GENDER:$2|załožiło}}',
+'logentry-newusers-create2' => '$1 je wužiwarske konto $3 {{GENDER:$2|załožił|załožiła}}',
+'logentry-newusers-byemail' => '$1 je wužiwarske konto $3 {{GENDER:$2|załožił|załožiła}} a hesło je so přez e-mejl pósłało.',
+'logentry-newusers-autocreate' => 'Wužiwarske konto $1 je so awtomatisce {{GENDER:$2|załožiło}}',
+'logentry-rights-rights' => '$1 je skupinske čłonstwo za $3 z $4 do $5 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-rights-legacy' => '$1 je skupinske čłonstwo za $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-autopromote' => '$1 je so awtomatisce wot $4 do $5 {{GENDER:$2|přirjadował|přirjadowała}}',
 'rightsnone' => '(ničo)',
 
 # Feedback
index 33548dd..ef8f3eb 100644 (file)
@@ -600,7 +600,7 @@ Pa pòte atansyon pou mesaj sa si kont sa kreye pa erè.',
 'loginlanguagelabel' => 'Lang : $1',
 'suspicious-userlogout' => 'Demand ou te fè pou dekonekte w te refize paske sanble li te voye pa yon navigatè ki fè erè oubyen li soti nan yon proksi pou kach.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Erè nou pa konnen nan fonksyon mail() PHP a.',
 
 # Change password dialog
@@ -1100,7 +1100,7 @@ Gade tou [[Special:WantedCategories|kategori moun mande]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis manm yo)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Voye yon mesaj (imèl) pou itilizatè sa a',
 
 # Watchlist
index aa16856..178f1e5 100644 (file)
@@ -328,10 +328,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Szakaszok szerkesztése a szakaszcímre való jobb kattintással (JavaScript-alapú)',
 'tog-showtoc' => 'Tartalomjegyzék megjelenítése a három fejezetnél többel rendelkező cikkeknél',
 'tog-rememberpassword' => 'Emlékezzen rám ezzel a böngészővel (legfeljebb {{PLURAL:$1|egy|$1}} napig)',
-'tog-watchcreations' => 'Az általam létrehozott lapok felvétele a figyelőlistára',
-'tog-watchdefault' => 'Az általam szerkesztett lapok felvétele a figyelőlistára',
-'tog-watchmoves' => 'Az általam átnevezett lapok felvétele a figyelőlistára',
-'tog-watchdeletion' => 'Az általam törölt lapok felvétele a figyelőlistára',
+'tog-watchcreations' => 'Az általam létrehozott lapok és feltöltött fájlok felvétele a figyelőlistámra',
+'tog-watchdefault' => 'Az általam szerkesztett lapok és fájlok felvétele a figyelőlistámra',
+'tog-watchmoves' => 'Az általam átnevezett lapok és fájlok felvétele a figyelőlistámra',
+'tog-watchdeletion' => 'Az általam törölt lapok és fájlok felvétele a figyelőlistámra',
 'tog-minordefault' => 'Alapértelmezetten minden szerkesztésemet jelölje aprónak',
 'tog-previewontop' => 'Előnézet megjelenítése a szerkesztőablak előtt',
 'tog-previewonfirst' => 'Előnézet első szerkesztésnél',
@@ -354,8 +354,8 @@ $messages = array(
 'tog-watchlisthideliu' => 'Bejelentkezett szerkesztők módosításainak elrejtése a figyelőlistáról',
 'tog-watchlisthideanons' => 'Névtelen szerkesztések elrejtése',
 'tog-watchlisthidepatrolled' => 'Az ellenőrzött szerkesztések elrejtése',
-'tog-ccmeonemails' => 'A másoknak küldött e-mailjeimről kapjak én is másolatot',
-'tog-diffonly' => 'Ne mutassa a lap tartalmát lapváltozatok közötti eltérések megtekintésekor',
+'tog-ccmeonemails' => 'A másoknak küldött e-mailjeimről kapjak másolatot',
+'tog-diffonly' => 'Ne mutassa a lap tartalmát 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',
 
@@ -365,7 +365,7 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style' => 'A szerkesztőterület betűtípusa:',
-'editfont-default' => 'a böngésző alapértelmezett betűtípusa',
+'editfont-default' => 'a böngésző alapértelmezett beállítása',
 'editfont-monospace' => 'fix szélességű betűtípus',
 'editfont-sansserif' => 'talpatlan (sans-serif) betűtípus',
 'editfont-serif' => 'talpas (serif) betűtípus',
@@ -423,12 +423,12 @@ $messages = array(
 'dec' => 'dec',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategória|Kategóriák}}',
+'pagecategories' => '{{PLURAL:$1|Kategória|Kategória}}',
 'category_header' => 'A(z) „$1” kategóriába tartozó lapok',
 'subcategories' => 'Alkategóriák',
 'category-media-header' => 'A(z) „$1” kategóriába tartozó médiafájlok',
 'category-empty' => "''Ebben a kategóriában pillanatnyilag egyetlen lap vagy médiafájl sem szerepel.''",
-'hidden-categories' => '{{PLURAL:$1|Rejtett kategória|Rejtett kategóriák}}',
+'hidden-categories' => '{{PLURAL:$1|Rejtett kategória|Rejtett kategória}}',
 'hidden-category-category' => 'Rejtett kategóriák',
 'category-subcat-count' => "''{{PLURAL:$2|Ennek a kategóriának csak egyetlen alkategóriája van.|Ez a kategória az alábbi {{PLURAL:$1|alkategóriával|$1 alkategóriával}} rendelkezik (összesen $2 alkategóriája van).}}''",
 'category-subcat-count-limited' => 'Ebben a kategóriában {{PLURAL:$1|egy|$1}} alkategória található.',
@@ -464,7 +464,7 @@ $messages = array(
 'faqpage' => 'Project:GyIK',
 
 # Vector skin
-'vector-action-addsection' => 'Új szakasz nyitása',
+'vector-action-addsection' => 'Új téma nyitása',
 'vector-action-delete' => 'Törlés',
 'vector-action-move' => 'Átnevezés',
 'vector-action-protect' => 'Lapvédelem',
@@ -478,7 +478,7 @@ $messages = array(
 'vector-view-viewsource' => 'A lap forrása',
 'actions' => 'Műveletek',
 'namespaces' => 'Névterek',
-'variants' => 'Változók',
+'variants' => 'Változatok',
 
 'navigation-heading' => 'Navigációs menü',
 'errorpagetitle' => 'Hiba',
@@ -493,7 +493,7 @@ $messages = array(
 'history_short' => 'Laptörténet',
 'updatedmarker' => 'az utolsó látogatásom óta frissítették',
 'printableversion' => 'Nyomtatható változat',
-'permalink' => 'Link erre a változatra',
+'permalink' => 'Hivatkozás erre a változatra',
 'print' => 'Nyomtatás',
 'view' => 'Olvasás',
 'edit' => 'Szerkesztés',
@@ -536,9 +536,8 @@ $messages = array(
 'jumpto' => 'Ugrás:',
 'jumptonavigation' => 'navigáció',
 'jumptosearch' => 'keresés',
-'view-pool-error' => 'Sajnos a szerverek jelen pillanatban túl vannak terhelve, mert
-túl sok felhasználó próbálta megtekinteni ezt az oldalt.
-Kérjük, várj egy kicsit, mielőtt újrapróbálkoznál a lap megtekintésével!
+'view-pool-error' => 'A szerverek jelenleg túl vannak terhelve, mert túl sok felhasználó próbálta megtekinteni ezt az oldalt.
+Kérjük, várj egy kicsit, mielőtt újra próbálkoznál a lap megtekintésével!
 
 $1',
 'pool-timeout' => 'Letelt a zárolás feloldására szánt várakozási idő',
@@ -569,9 +568,9 @@ $1',
 'badaccess-group0' => 'Ezt a tevékenységet nem végezheted el.',
 'badaccess-groups' => 'Ezt a tevékenységet csak a(z) $1 {{PLURAL:$2|csoportba|csoportok valamelyikébe}} tartozó felhasználó végezheti el.',
 
-'versionrequired' => 'A MediaWiki $1-s verziója szükséges',
-'versionrequiredtext' => 'A lap használatához a MediaWiki $1-s verziójára van szükség.
-További információkat a [[Special:Version|verzióinformációs lapon]] találhatsz.',
+'versionrequired' => 'A MediaWiki $1 verziója szükséges',
+'versionrequiredtext' => 'A lap használatához a MediaWiki $1 verziójára van szükség.
+További információkat a [[Special:Version|verzióinformációs lapon]] találsz.',
 
 'ok' => 'OK',
 'retrievedfrom' => 'A lap eredeti címe: „$1”',
@@ -582,7 +581,7 @@ További információkat a [[Special:Version|verzióinformációs lapon]] talál
 'youhavenewmessagesmanyusers' => '$1ed van több szerkesztőtől ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|Új üzenet vár|Új üzenetek várnak}}',
 'newmessagesdifflinkplural' => 'Az utolsó {{PLURAL:$1|változtatást|változtatásokat}}',
-'youhavenewmessagesmulti' => 'Új üzenetet vár a(z) $1 wikin',
+'youhavenewmessagesmulti' => 'Új üzenet vár a(z) $1 wikin',
 'editsection' => 'szerkesztés',
 'editold' => 'szerkesztés',
 'viewsourceold' => 'lapforrás',
@@ -595,7 +594,7 @@ További információkat a [[Special:Version|verzióinformációs lapon]] talál
 'collapsible-collapse' => 'becsuk',
 'collapsible-expand' => 'kinyit',
 'thisisdeleted' => '$1 megtekintése vagy helyreállítása?',
-'viewdeleted' => '$1 megtekintése',
+'viewdeleted' => '$1 megtekintése?',
 'restorelink' => '{{PLURAL:$1|Egy|$1}} törölt szerkesztés',
 'feedlinks' => 'Hírcsatorna:',
 'feed-invalid' => 'A figyelt hírcsatorna típusa érvénytelen.',
@@ -645,10 +644,10 @@ Az utolsó adatbázis-lekérdezés a(z) „$2” függvényből történt, és a
 Az adatbázis ezzel a hibával tért vissza: „$3: $4”.',
 'laggedslavemode' => "'''Figyelem:''' Ez a lap nem feltétlenül tartalmazza a legfrissebb változtatásokat!",
 'readonly' => 'Az adatbázis le van zárva',
-'enterlockreason' => 'Add meg a lezárás okát, valamint egy becslést, hogy mikor kerül a lezárás feloldásra',
-'readonlytext' => 'A wiki adatbázisa ideiglenesen le van zárva (valószínűleg adatbázis-karbantartás miatt). A lezárás időtartama alatt a lapok nem szerkeszthetők, és új szócikkek sem hozhatóak létre, az oldalak azonban továbbra is böngészhetőek.
+'enterlockreason' => 'Add meg a lezárás okát, valamint egy becslést, hogy mikor lesz a lezárásnak vége',
+'readonlytext' => 'A wiki adatbázisa ideiglenesen le van zárva (valószínűleg adatbázis-karbantartás miatt). A lezárás időtartama alatt a lapok nem szerkeszthetők, és új szócikkek sem hozhatók létre, az oldalakat azonban lehet böngészni.
 
-Az adminisztrátor, aki lezárta az adatbázist, az alábbi magyarázatot adta: $1',
+Az adminisztrátor, aki lezárta az adatbázist, az alábbi indoklást adta: $1',
 'missing-article' => 'Az adatbázisban nem található meg a(z) „$1” című lap szövege $2.
 
 Ennek az oka általában az, hogy egy olyan lapra vonatkozó linket követtél, amit már töröltek.
@@ -657,7 +656,7 @@ Ha ez nem így van, lehet, hogy hibát találtál a szoftverben.
 Jelezd ezt egy [[Special:ListUsers/sysop|adminiszttrátornak]] az URL megadásával.',
 'missingarticle-rev' => '(változat azonosítója: $1)',
 'missingarticle-diff' => '(eltérés: $1, $2)',
-'readonly_lag' => 'Az adatbázis automatikusan zárolásra került, amíg a mellékkiszolgálók utolérik a főkiszolgálót.',
+'readonly_lag' => 'Az adatbázis automatikusan le lett zárva, amíg a mellékkiszolgálók utolérik a főkiszolgálót.',
 'internalerror' => 'Belső hiba',
 'internalerror_info' => 'Belső hiba: $1',
 'fileappenderrorread' => 'A(z) „$1” nem olvasható hozzáírás közben.',
@@ -699,16 +698,16 @@ $2',
 'namespaceprotected' => "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
 'customcssprotected' => 'Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.',
 'customjsprotected' => 'Nem szerkesztheted ezt a JavaScript-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.',
-'ns-specialprotected' => 'A speciális lapok nem szerkeszthetőek.',
+'ns-specialprotected' => 'A speciális lapok nem szerkeszthetők.',
 'titleprotected' => "Ilyen címmel nem lehet szócikket készíteni, [[User:$1|$1]] letiltotta.
-A blokkolás oka: „''$2''”.",
+Az indoklás: „''$2''”.",
 'filereadonlyerror' => 'A(z) "$1" fájl nem módosítható, mert a(z) "$2" fájltároló csak olvasható módban üzemel.
 
 A lezárást végrehajtó rendszergazda az alábbi indoklást adta meg: "$3".',
 'invalidtitle-knownnamespace' => 'Érvénytelen cím "$2" névtérrel és "$3" szöveggel',
 'invalidtitle-unknownnamespace' => 'Érvénytelen cím az ismeretlen $1 névtérszámmal és "$2" szöveggel',
 'exception-nologin' => 'Nem vagy bejelentkezve.',
-'exception-nologin-text' => 'Ezen lap vagy művelet használatához be kell jelenetkezned erre a wikire.',
+'exception-nologin-text' => 'Ezen lap vagy művelet használatához be kell jelentkezned erre a wikire.',
 
 # Virus scanner
 'virus-badscanner' => "Hibás beállítás: ismeretlen víruskereső: ''$1''",
@@ -742,7 +741,7 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 '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'''!",
+'gotaccount' => "Ha már korábban regisztráltál, '''$1'''.",
 'gotaccountlink' => 'Bejelentkezés',
 'userlogin-resetlink' => 'Elfelejtetted a bejelentkezési adataidat?',
 'createaccountmail' => 'Átmeneti, véletlenszerű jelszó használata és kiküldése az alábbi e-mail címre',
@@ -752,10 +751,10 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 Kérlek, válassz másikat!',
 'loginerror' => 'Hiba történt a bejelentkezés során',
 'createaccounterror' => 'Nem sikerült létrehozni a felhasználói fiókot: $1',
-'nocookiesnew' => 'A felhasználói fiókod létrejött, de nem vagy bejelentkezve. A wiki sütiket („cookie”) használ a szerkesztők azonosítására. Nálad ezek le vannak tiltva. Kérlek, engedélyezd őket, majd lépj be az új azonosítóddal és jelszavaddal.',
+'nocookiesnew' => 'A felhasználói fiókod létrejött, de nem vagy bejelentkezve. A wiki sütiket („cookie”) használ a szerkesztők azonosítására. Nálad ezek le vannak tiltva. Kérlek, engedélyezd őket a böngésződben, majd lépj be az új azonosítóddal és jelszavaddal.',
 'nocookieslogin' => 'A wiki sütiket („cookie”) használ a szerkesztők azonosításhoz.
 Nálad ezek le vannak tiltva.
-Engedélyezd őket, majd próbáld meg újra.',
+Engedélyezd őket a böngésződben, majd próbáld újra.',
 'nocookiesfornew' => 'A felhasználói fiók nem lett létrehozva, mivel nem sikerült megerősítenünk a forrását.
 Ellenőrizd, hogy a sütik engedélyezve vannak-e, majd frissítsd az oldalt, és próbálkozz újra.',
 'noname' => 'Érvénytelen szerkesztőnevet adtál meg.',
@@ -781,14 +780,12 @@ Ellenőrizd, hogy helyesen írtad-e be.',
 Ha te kértél új jelszót, lépj be, és változtasd meg.
 Az ideiglenes jelszó {{PLURAL:$5|egy nap|$5 nap}} múlva érvényét veszti.
 
-Ha nem te küldted a kérést, vagy közben eszedbe jutott a régi,
-és már nem akarod megváltoztatni, nyugodtan hagyd figyelmen kívül
-ezt az üzenetet, és használd továbbra is a régi jelszavadat.',
+Ha nem te küldted a kérést, vagy közben eszedbe jutott a régi, és már nem akarod megváltoztatni, hagyd figyelmen kívül ezt az üzenetet, és használd továbbra is a régi jelszavadat.',
 'noemail' => '„$1” e-mail címe nincs megadva.',
 'noemailcreate' => 'Meg kell adnod egy valós e-mail címet',
 'passwordsent' => 'Az új jelszót elküldtük „$1” e-mail címére.
 Lépj be a levélben található adatokkal.',
-'blocked-mailpassword' => 'Az IP-címedet blokkoltuk, azaz eltiltottuk a szerkesztéstől, ezért a visszaélések elkerülése érdekében a jelszóvisszaállítás funkciót nem használhatod.',
+'blocked-mailpassword' => 'Az IP-címedet blokkoltuk, azaz eltiltottunk a szerkesztéstől, ezért a visszaélések elkerülése érdekében a jelszó-visszaállítás funkciót nem használhatod.',
 'eauthentsent' => 'Egy ellenőrző e-mailt küldtünk a megadott címre. Mielőtt más leveleket kaphatnál, igazolnod kell az e-mailben írt utasításoknak megfelelően, hogy valóban a tiéd a megadott cím.',
 'throttled-mailpassword' => 'Már elküldtünk egy jelszóemlékeztetőt az utóbbi {{PLURAL:$1|egy|$1}} órában.
 A visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy jelszó-emlékeztetőt küldünk.',
@@ -800,18 +797,18 @@ A visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy
 'emailconfirmlink' => 'E-mail cím megerősítése',
 'invalidemailaddress' => 'A megadott e-mail cím érvénytelen formátumú. Kérlek, adj meg egy érvényes e-mail címet vagy hagyd üresen azt a mezőt.',
 'cannotchangeemail' => 'Ezen a wikin nem módosítható a fiókhoz tartozó e-mail cím.',
-'emaildisabled' => 'Ezen az oldalon nem lehet küldeni e-mailek.',
+'emaildisabled' => 'Ez az oldal nem küld e-maileket.',
 'accountcreated' => 'Felhasználói fiók létrehozva',
 'accountcreatedtext' => '$1 felhasználói fiókja sikeresen létrejött.',
 'createaccount-title' => 'Új {{SITENAME}}-azonosító létrehozása',
 'createaccount-text' => 'Valaki létrehozott számodra egy "$2" nevű {{SITENAME}}-azonosítót ($4).
-A hozzátartozó jelszó "$3", melyet a bejelentkezés után minél előbb változtass meg.
+A hozzá tartozó jelszó "$3", melyet a bejelentkezés után minél előbb változtass meg.
 
-Ha nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, nyugodtan hagyd figyelmen kívül.',
+Ha nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, hagyd figyelmen kívül.',
 'usernamehasherror' => 'A felhasználónév nem tartalmazhat hash karaktereket',
 'login-throttled' => 'Túl sok hibás bejelentkezés.
 Várj egy kicsit, mielőtt újra próbálkozol.',
-'login-abort-generic' => 'Bejelentkezés sikertelen – megszakítva',
+'login-abort-generic' => 'A bejelentkezés sikertelen – megszakítva',
 'loginlanguagelabel' => 'Nyelv: $1',
 'suspicious-userlogout' => 'A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.',
 
@@ -822,7 +819,7 @@ Várj egy kicsit, mielőtt újra próbálkozol.',
 
 # Change password dialog
 'resetpass' => 'Jelszó módosítása',
-'resetpass_announce' => 'Az e-mailben elküldött ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell megadnod egy új jelszót:',
+'resetpass_announce' => 'Az e-mailben elküldött ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell adnod egy új jelszót:',
 'resetpass_text' => '<!-- Ide írd a szöveget -->',
 'resetpass_header' => 'A fiókhoz tartozó jelszó megváltoztatása',
 'oldpassword' => 'Régi jelszó:',
@@ -830,8 +827,8 @@ Várj egy kicsit, mielőtt újra próbálkozol.',
 'retypenew' => 'Új jelszó ismét:',
 'resetpass_submit' => 'Add meg a jelszót és jelentkezz be',
 'resetpass_success' => 'A jelszavad megváltoztatása sikeresen befejeződött! Bejelentkezés...',
-'resetpass_forbidden' => 'A jelszavak nem változtathatóak meg',
-'resetpass-no-info' => 'Be kell jelentkezned hogy közvetlenül elérd ezt a lapot.',
+'resetpass_forbidden' => 'A jelszavak nem változtathatók meg',
+'resetpass-no-info' => 'Be kell jelentkezned, hogy közvetlenül elérd ezt a lapot.',
 'resetpass-submit-loggedin' => 'Jelszó megváltoztatása',
 'resetpass-submit-cancel' => 'Mégse',
 'resetpass-wrong-oldpass' => 'Nem megfelelő ideiglenes vagy jelenlegi jelszó.
@@ -839,15 +836,15 @@ Lehet, hogy már sikeresen megváltoztattad a jelszavad, vagy pedig időközben
 'resetpass-temp-password' => 'Ideiglenes jelszó:',
 
 # Special:PasswordReset
-'passwordreset' => 'Jelszó beállítása',
-'passwordreset-text' => 'Az alábbi űrlap kitöltése után egy értesítő e-mailt kapsz a fiók adataival.',
+'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-legend' => 'Új jelszó kérése',
 'passwordreset-disabled' => 'Új jelszó kérése nem engedélyezett 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:',
 'passwordreset-capture' => 'Meg szeretnéd nézni az elkészült üzenetet?',
-'passwordreset-capture-help' => 'Ha kipipálod a dobozt, amellett, hogy kiküldődik az üzenet a felhasználónak, megjelenik számodra (az ideiglenes jelszavakkal együtt)',
+'passwordreset-capture-help' => 'Ha kipipálod a dobozt, elmegy az üzenet a felhasználónak és megjelenik számodra (az ideiglenes jelszóval együtt).',
 'passwordreset-email' => 'E-mail cím:',
 'passwordreset-emailtitle' => 'A(z) {{SITENAME}}-fiók adatai',
 'passwordreset-emailtext-ip' => 'Valaki (vélhetően Te, a $1 IP-címről) emlékeztetőt kért a {{SITENAME}} ($4) oldalon felvett fiókokról. A következő felhasználói {{PLURAL:$3|fiók van|fiókok vannak}} hozzárendelve ehhez az e-mail címhez:
@@ -863,7 +860,7 @@ $2
 'passwordreset-emailelement' => 'Felhasználónév: $1
 Ideiglenes jelszó: $2',
 'passwordreset-emailsent' => 'Emlékeztető e-mail elküldve.',
-'passwordreset-emailsent-capture' => 'Az alább látható emlékeztető e-mail elküldve.',
+'passwordreset-emailsent-capture' => 'Az alább látható emlékeztető e-mail lett elküldve.',
 'passwordreset-emailerror-capture' => 'Az emlékeztető levél generálása megtörtént, mint az alább látszik, de elküldése a szerkesztőnek nem sikerült: $1',
 
 # Special:ChangeEmail
@@ -883,9 +880,9 @@ Ideiglenes jelszó: $2',
 'bold_tip' => 'Félkövér szöveg',
 'italic_sample' => 'Dőlt szöveg',
 'italic_tip' => 'Dőlt szöveg',
-'link_sample' => 'Belső hivatkozás',
+'link_sample' => 'Hivatkozás megnevezése',
 'link_tip' => 'Belső hivatkozás',
-'extlink_sample' => 'http://www.példa-hivatkozás.hu hivatkozás címe',
+'extlink_sample' => 'http://www.példa-hivatkozás.hu hivatkozás megnevezése',
 'extlink_tip' => 'Külső hivatkozás (ne felejtsd el a http:// előtagot)',
 'headline_sample' => 'Alfejezet címe',
 'headline_tip' => 'Alfejezetcím',
@@ -911,9 +908,9 @@ Ideiglenes jelszó: $2',
 'anoneditwarning' => "'''Figyelem:''' Nem vagy bejelentkezve, ha szerkesztesz, az IP-címed látható lesz a laptörténetben.",
 'anonpreviewwarning' => "''Nem vagy bejelentkezve. A mentéskor az IP-címed rögzítve lesz a laptörténetben.''",
 'missingsummary' => "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.",
-'missingcommenttext' => 'Kérjük, hogy írj összefoglalót szerkesztésedhez.',
+'missingcommenttext' => 'Kérjük, írj összefoglalót a szerkesztésedhez.',
 'missingcommentheader' => "'''Emlékeztető:''' Nem adtad meg a megjegyzés tárgyát vagy címét.
-Ha ismét a „{{int:savearticle}}” gombra kattintasz, akkor a szerkesztésed nélküle kerül mentésre.",
+Ha ismét a „{{int:savearticle}}” gombra kattintasz, akkor a szerkesztésed nélküle lesz elmentve.",
 'summary-preview' => 'A szerkesztési összefoglaló előnézete:',
 'subject-preview' => 'A téma/főcím előnézete:',
 'blockedtitle' => 'A szerkesztő blokkolva van',
@@ -951,7 +948,7 @@ Kérjük, hogy érdeklődés esetén mindkettőt add meg.",
 'confirmedittext' => 'Lapok szerkesztése előtt meg kell erősítened az e-mail címedet. Kérjük, hogy a [[Special:Preferences|szerkesztői beállításaidban]] add meg, majd erősítsd meg az e-mail címedet.',
 'nosuchsectiontitle' => 'A szakasz nem található',
 'nosuchsectiontext' => 'Egy olyan szakaszt próbáltál meg szerkeszteni, ami nem létezik.
-Lehet, hogy áthelyezték vagy törölték miközben nézted a lapot.',
+Lehet, hogy áthelyezték, átnevezték vagy törölték, miközben nézted a lapot.',
 'loginreqtitle' => 'Bejelentkezés szükséges',
 'loginreqlink' => 'be kell jelentkezned',
 'loginreqpagetext' => '$1 más oldalak megtekintéséhez.',
@@ -1003,24 +1000,22 @@ A blokkolási napló legutóbbi ide vonatkozó bejegyzése a következő:',
 'session_fail_preview' => "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.
 Kérjük próbálkozz újra!
 Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
-'session_fail_preview_html' => "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.'''
+'session_fail_preview_html' => "'''Az elveszett munkamenetadatok miatt nem tudtuk feldolgozni a szerkesztésedet.'''
 
 ''Mivel a wikiben engedélyezett a nyers HTML-kód használata, az előnézet el van rejtve a JavaScript-alapú támadások megakadályozása céljából.''
 
-'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
+'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!''' (a változtatásaidat mentsd el magadnak, különben elvesznek!)",
 'token_suffix_mismatch' => "'''A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket
 a szerkesztési tokenben. A szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.
-Ez a probléma akkor fordulhat elő, ha hibás, web-alapú proxyszolgáltatást használsz.'''",
-'edit_form_incomplete' => "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd újra, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
+Ez a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.'''",
+'edit_form_incomplete' => "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
 'editing' => '$1 szerkesztése',
 'creating' => '$1 létrehozása',
 'editingsection' => '$1 szerkesztése (szakasz)',
 'editingcomment' => '$1 szerkesztése (új szakasz)',
 'editconflict' => 'Szerkesztési ütközés: $1',
-'explainconflict' => "Valaki megváltoztatta a lapot, mióta elkezdted szerkeszteni.
-A felső szövegdobozban láthatod az oldal jelenlegi tartalmát.
-A te módosításaid az alsó dobozban találhatóak.
-Át kell másolnod a módosításaidat a felsőbe.
+'explainconflict' => "Valaki megváltoztatta a lapot, mióta elkezdted szerkeszteni. A felső szövegdobozban láthatod az oldal jelenlegi tartalmát. A te módosításaid az alsó dobozban találhatók. Át kell másolnod a módosításaidat a felsőbe! 
+
 '''Csak''' a felső dobozban levő szöveg lesz elmentve, amikor a „{{int:savearticle}}” gombra kattintasz.",
 'yourtext' => 'A te változatod',
 'storedversion' => 'A tárolt változat',
@@ -2179,7 +2174,7 @@ A napló típusának, a szerkesztő nevének (kis- és nagybetűérzékeny), vag
 'allpages' => 'Az összes lap listája',
 'alphaindexline' => '$1 – $2',
 'nextpage' => 'Következő lap ($1)',
-'prevpage' => 'Előző oldal ($1)',
+'prevpage' => 'Előző lap ($1)',
 'allpagesfrom' => 'Lapok listázása a következő címtől kezdve:',
 'allpagesto' => 'Lapok listázása a következő címig:',
 'allarticles' => 'Az összes lap listája',
@@ -3094,6 +3089,7 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'spambot_username' => 'MediaWiki spam kitakarítása',
 'spam_reverting' => 'Visszatérés a $1 lapra mutató hivatkozásokat nem tartalmazó utolsó változathoz',
 'spam_blanking' => 'Az összes változat tartalmazott a $1 lapra mutató hivatkozásokat, kiürítés',
+'spam_deleting' => 'Minden változat tartalmazott $1-re mutató hivatkozást, törlöm',
 
 # Info page
 'pageinfo-title' => 'Információk a(z) „$1” lapról',
@@ -3114,7 +3110,7 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-watchers' => 'Figyelők száma',
 'pageinfo-few-watchers' => 'Kevesebb mint $1 szerkesztő figyeli',
 'pageinfo-redirects-name' => 'Átirányítások erre a lapra',
-'pageinfo-subpages-name' => 'Az lap allapjai',
+'pageinfo-subpages-name' => 'A lap allapjai',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|átirányítás}}; $3 {{PLURAL:$3|nem átirányítás}})',
 'pageinfo-firstuser' => 'A lap létrehozója',
 'pageinfo-firsttime' => 'A lap létrehozásának ideje',
@@ -3583,7 +3579,7 @@ míg a többi elem a táblázat összecsukása után alapértelmezett esetben re
 
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'Kilométer óránként',
-'exif-gpsspeed-m' => 'Márföld óránként',
+'exif-gpsspeed-m' => 'Mérföld óránként',
 'exif-gpsspeed-n' => 'Csomó',
 
 # Pseudotags used for GPSDestDistanceRef
@@ -3722,6 +3718,7 @@ Ez a megerősítő e-mail $4-ig érvényes.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Wikiközi beillesztés le van tiltva]',
 'scarytranscludefailed' => '[$1 sablon letöltése sikertelen]',
+'scarytranscludefailed-httpstatus' => ' [Nem sikerült betölteni a(z) $1 sablont: HTTP $2]',
 'scarytranscludetoolong' => '[Az URL túl hosszú]',
 
 # Delete conflict
@@ -4054,4 +4051,7 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'duration-centuries' => '{{PLURAL:$1|egy|$1}} évszázad',
 'duration-millennia' => '{{PLURAL:$1|egy|$1}} évezred',
 
+# Image rotation
+'rotate-comment' => 'Elforgattam a képet $1 fokkal, az óramutató járásával megegyező irányban',
+
 );
index 11cb3fd..d1ab972 100644 (file)
@@ -1647,7 +1647,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'ncategories' => '$1 {{PLURAL:$1|կատեգորիա|կատեգորիաներ}}',
 'ninterwikis' => '$1 {{PLURAL:$1|ինտերվիքի|ինտերվիքիներ}}',
 'nlinks' => '$1 {{PLURAL:$1|հղում|հղումներ}}',
-'nmembers' => '$1 {{PLURAL:$1|անդամ|անդամներ}}',
+'nmembers' => '$1 {{PLURAL:$1|անդամ|անդամ}}',
 'nrevisions' => '$1 {{PLURAL:$1|տարբերակ|տարբերակներ}}',
 'nviews' => '$1 {{PLURAL:$1|դիտում|դիտումներ}}',
 'nimagelinks' => 'օգտագործվում է $1 {{PLURAL:$1|էջ|էջեր}}',
index 2c71229..0214e82 100644 (file)
@@ -257,7 +257,7 @@ $messages = array(
 'category_header' => 'Articulos in le categoria "$1"',
 'subcategories' => 'Subcategorias',
 'category-media-header' => 'Multimedia in categoria "$1"',
-'category-empty' => "''Iste categoria non contine alcun pagina o file multimedia al momento.''",
+'category-empty' => "''Iste categoria non contine actualmente alcun pagina o file multimedial.''",
 'hidden-categories' => '{{PLURAL:$1|Categoria celate|Categorias celate}}',
 'hidden-category-category' => 'Categorias celate',
 'category-subcat-count' => '{{PLURAL:$2|Iste categoria ha solmente le sequente subcategoria.|Iste categoria ha le sequente {{PLURAL:$1|subcategoria|$1 subcategorias}}, ex $2 in total.}}',
index 12b6a35..281987d 100644 (file)
@@ -972,7 +972,7 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 # Special:ListGroupRights
 'listgrouprights-members' => '(liste de membres)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Parlar che ti usator',
 'usermailererror' => 'Objecte de postage retornat errore:',
 'usermaildisabled' => 'E-mail de usator desvalidat',
index 553bf8c..9a96023 100644 (file)
@@ -47,28 +47,28 @@ $messages = array(
 'tog-showtoolbar' => 'Ipakita ti ramit ti panag-urnos (masapul ti JavaScript)',
 'tog-editondblclick' => 'Urnosen dagiti panid iti mamindua a panagtakla (masapul ti JavaScript)',
 'tog-editsection' => 'Pakabaelan ti paset a panag-urnos babaen kadagiti [urnosen] a  panilpo',
-'tog-editsectiononrightclick' => 'Pakabaelan ti paset  a panag-urnos babaen ti agtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
+'tog-editsectiononrightclick' => 'Pakabaelan ti paset  a panag-urnos babaen ti panagtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
 'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga adda ti ad-adu ngem dagiti 3 a paulo)',
 'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kapaut nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
-'tog-watchcreations' => 'Agnayon kadagiti panid a pinartuatko ken papeles  nga inpanko idiay listaan ti bambantayak',
+'tog-watchcreations' => 'Agnayon kadagiti panid a pinartuatko ken papeles nga inpanko idiay listaan ti bambantayak',
 'tog-watchdefault' => 'Agnayon kadagiti panid ken papeles nga inurnosko idiay listaan ti bambantayak',
 'tog-watchmoves' => 'Agnayon kadagiti panid ken papeles nga inyalisko idiay listaan ti bambantayak',
 'tog-watchdeletion' => 'Agnayon kadagiti panid ken papeles nga inikkatko idiay listaan ti bambantayak',
-'tog-minordefault' => 'Markaan amin nga  inurnos a kas sigud a bassit',
-'tog-previewontop' => 'Ipakita ti panag-padas sakbay ti kahon ti inurnos',
+'tog-minordefault' => 'Markaan amin nga inurnos a kas sigud a bassit',
+'tog-previewontop' => 'Ipakita ti panagipadas sakbay ti pagurnosan a kahon',
 'tog-previewonfirst' => 'Ipakita ti pinadas iti umuna a panag-urnos',
 'tog-nocache' => 'Ibaldado ti panagilemmeng ti pabasabasa ti panid',
-'tog-enotifwatchlistpages' => 'E-suratannak no mabaliwan ti panid wenno papeles idiay listaan dagiti bambantayak',
-'tog-enotifusertalkpages' => 'E-suratannak no mabaliwan ti tungtungan a panidko',
-'tog-enotifminoredits' => 'E-suratannak pay para kadagiti bassit a panag-urnos kadagiti panid ken papeles',
-'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti e-suratko kadagiti panagipakaaammo nga  e-surat',
+'tog-enotifwatchlistpages' => 'Esuratannak no mabaliwan ti panid wenno papeles idiay listaan dagiti bambantayak',
+'tog-enotifusertalkpages' => 'Esuratannak no mabaliwan ti tungtungan a panidko',
+'tog-enotifminoredits' => 'Esuratannak pay para kadagiti bassit a panag-urnos kadagiti panid ken papeles',
+'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti esuratko kadagiti panagipakaaammo nga esurat',
 '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-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',
 'tog-watchlisthideown' => 'Ilemmeng dagiti inurnosko manipud ti listaan ti bambantayan',
 'tog-watchlisthidebots' => 'Ilemmeng dagiti inurnos ti bot manipud ti listaan ti bambantayan',
@@ -76,10 +76,10 @@ $messages = array(
 'tog-watchlisthideliu' => 'Ilemmeng dagiti inurnos ti nakasterk nga agar-aramat manipud ti listaan ti bambantayan',
 'tog-watchlisthideanons' => 'Ilemmeng dagiti inurnos ti di am-ammo nga agar-aramat manipud ti  listaan ti bambantayan',
 'tog-watchlisthidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos manipud ti listaan ti bambantayan',
-'tog-ccmeonemails' => 'Patulodandak kadagiti kopia ti e-surat nga ipatulodko kadagiti sabsabali nga agar-aramat',
+'tog-ccmeonemails' => 'Patulodandak kadagiti kopia ti esurat nga ipatulodko kadagiti sabsabali nga agar-aramat',
 '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 panagi-subli',
+'tog-norollbackdiff' => 'Laksiden ti paggiddiatan kalpasan ti panagaramid ti panagisubli',
 
 'underline-always' => 'Kanayon',
 'underline-never' => 'Saan uray kaanoman',
@@ -146,22 +146,22 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Kategoria|Katkategoria}}',
-'category_header' => 'Dagiti panid nga adda iti kategoria  "$1"',
-'subcategories' => 'Dagiti apo ti kategoria',
-'category-media-header' => 'Dagiti midia nga adda iti kategoria  "$1"',
+'category_header' => 'Dagiti panid nga adda iti kategoria "$1"',
+'subcategories' => 'Dagiti subkategoria',
+'category-media-header' => 'Dagiti midia nga adda iti kategoria "$1"',
 'category-empty' => "''Daytoy a kategoria ket agdama a saan nga aglaon kadagiti panid wenno midia.''",
 'hidden-categories' => '{{PLURAL:$1|Nailemmeng a kategoria|Nailemmeng a katkategoria}}',
 'hidden-category-category' => 'Nailemmeng a katkategoria',
-'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad a subkategoria.|Daytoy a kategoria ket adda ti sumaganad {{PLURAL:$1|a subkategoria|$1 a dagiti subkategoria}}, manipud ti dagup nga $2.}}',
-'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad  {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
-'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad  {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
-'category-article-count-limited' => 'Ti sumaganad {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
-'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad  {{PLURAL:$1| a papeles|$1  a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
-'category-file-count-limited' => 'Ti sumaganad  {{PLURAL:$1|a papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
+'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad a subkategoria.|Daytoy a kategoria ket adda ti sumaganad a {{PLURAL:$1|a subkategoria|$1 a subkategoria}}, manipud ti $2 a dagup.}}',
+'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad a {{PLURAL:$1|a subkategoria|$1 a subkategoria}}.',
+'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad a {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti $2 a dagup.}}',
+'category-article-count-limited' => 'Ti sumaganad a {{PLURAL:$1|panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
+'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad a {{PLURAL:$1| a papeles|$1 a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
+'category-file-count-limited' => 'Ti sumaganad a {{PLURAL:$1|papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
 'listingcontinuesabbrev' => 'tuloy.',
-'index-category' => 'Dagiti naipasurutan a panid',
-'noindex-category' => 'Dagiti saan a pagsurutan a panid',
-'broken-file-category' => 'Dagiti panid a nadadael ti panag-silpo na iti papeles',
+'index-category' => 'Naipasurotan a pampanid',
+'noindex-category' => 'Di naipasurotan a pampanid',
+'broken-file-category' => 'Pampanid nga adda nadadael a silsilpo kadagiti papeles',
 
 'about' => 'Maipapan iti',
 'article' => 'Naglaon a panid',
@@ -289,7 +289,7 @@ $1',
 
 'badaccess' => 'Biddut ti pammalubos',
 'badaccess-group0' => 'Saanka a mapalubosan a mangpataray ti aramid a kiniddawmo.',
-'badaccess-groups' => 'Ti kiniddawmo nga aramid ket agpatingga laeng kadagiti agar-aramat {{PLURAL:$2|iti bunggoy|iti maysa kadagiti bunggoy}}: $1.',
+'badaccess-groups' => 'Ti kiniddawmo nga aramid ket agpatingga laeng kadagiti agar-aramat {{PLURAL:$2|iti grupo|iti maysa kadagiti grupo}}: $1.',
 
 'versionrequired' => 'Masapul ti bersion $1 ti MediaWiki',
 'versionrequiredtext' => 'Masapul ti bersion $1 ti MediaWiki tapno maaramat daytoy a panid. Kitaen ti [[Special:Version|panid ti bersion]].',
@@ -343,9 +343,9 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => 'Awan ti kasta nga aramid',
-'nosuchactiontext' => 'Ti inted nga inaganan ti URL ket imbalido.
-Baka madi ti naimakiniliam nga URL, wenno sinurotmo ti saan nga agpayso a panilpo.
-Baka daytoy ket "kiteb" ti "software" nga ususaren babaen ti {{SITENAME}}.',
+'nosuchactiontext' => 'Ti inted nga innaganan ti URL ket imbalido.
+Mabalin a madi ti naimakiniliam nga URL, wenno sinurotmo ti saan nga agpayso a panilpo.
+Mabalin a daytoy ket kiteb ti sopwer nga ususaren babaen ti {{SITENAME}}.',
 'nosuchspecialpage' => 'Awan ti kasta nga espesial a panid',
 'nospecialpagetext' => '<strong>Nagkiddawka ti imbalido nga espesial a panid.</strong>
 
@@ -371,13 +371,13 @@ Ti database ket nangipatulod ti biddut "$3: $4".',
 'readonlytext' => 'Ti database ket agdama a naikandado kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kanayon a pagsimpa, ket no malpas kadawyanto nga agsubli.
 
 Ti administrador a nangkandado ket nangited ti daytoy a palawag: $1',
-'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a mabirukanna kuma, a napanaganan ti "$1" $2.
+'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a mabirukanna koma, a napanaganan ti "$1" $2.
 
 Dayoty ket gapu babaen ti sumaganad a baak a paggiddiatan wenno panilpo ti pakasaritaan ti maysa panid a dati a naikkat.
 
-No saan a kasta, baka nakasarak ti kiteb ti "software".
+No saan a kasta, mabalin a nakasarak ti kiteb ti sopwer.
 
-Panngaasi nga  ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isurat mo ti pakaammo dayta URL.',
+Panngaasi nga ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isuratmo ti pakaammo dayta URL.',
 'missingarticle-rev' => '(binaliwan#: $1)',
 'missingarticle-diff' => '(Sabali: $1, $2)',
 'readonly_lag' => 'Automatiko a narikpan ti database kabayatan a dagiti tagabu a database server ket kumamakam iti agturay',
@@ -400,8 +400,8 @@ Amangan no addan sabali a nangikkat.',
 'delete-hook-aborted' => 'Inukas ti kawit ti panagborra.
 Awan ti intedna a palawag.',
 'badtitle' => 'Madi a titulo',
-'badtitletext' => 'Ti nakiddaw a titulo ti panid ket imbalido, blanko, wenno maysa a saan nga husto a naisilpo a titulo nga inter-lengguahe wenno inter-wiki a titulo.
-Adda ngata nagyan a maysa wenno ad-adu pay a kababalin a saan a mausar iti titulo.',
+'badtitletext' => 'Ti kiniddaw idi a titulo ti panid ket imbalido, blanko, wenno maysa a saan nga husto a naisilpo a silpo ti pagsasao wenno interwiki a titulo.
+Mabalin nga aglaon ti a maysa wenno ad-adu a karakter a saan a mausar kadagiti titulo.',
 'perfcached' => 'Ti sumaganad a datos ket naidulin ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagan|dagiti $1 a nagbanagan}} ket magun-od idiay nagidulinan.',
 'perfcachedts' => 'Ti sumaganad a datos ket naidulin, ken naudi a napabaro idi $1. Ti kaadu a {{PLURAL:$4|iti maysa a nagbanagan |dagiti $4 nagbanagan}} ket magun-od idiay pagidulinan.',
 'querypage-no-updates' => 'Dagiti panangpabaro iti daytoy a panid ket agdama a nabaldado. 
@@ -412,7 +412,7 @@ Panagsapul: $2',
 'viewsource' => 'Kitaen ti taudan',
 'viewsource-title' => 'Kitaen ti taudan para iti $1',
 'actionthrottled' => 'Napabuntog ti aramid',
-'actionthrottledtext' => 'Para ti pagkontra ti spam, naipatinggaka ti panagtungpal ti adu unay iti daytoy nga aramid iti nasiket nga oras, ken nalippasamon ti patingga.
+'actionthrottledtext' => 'Para iti pagkontra ti spam, naipatinggaka ti panagtungpal ti adu unay iti daytoy nga aramid iti nasiket nga oras, ken nalabsamon ti patingga.
 Pangngaasi nga ipadasmo manen no madamdama.',
 'protectedpagetext' => 'Nasalakniban daytoy a panid tapno mapawilan ti panag-urnos wenno dagiti dadduma pay nga aksion.',
 'viewsourcetext' => 'Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid:',
@@ -423,7 +423,7 @@ Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,
 Dagiti panagsukat iti daytoy a panid ket maarigan ti langa ti panagaramat nga interface dagiti sabali nga agar-aramat iti daytoy a wiki.
 Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki..",
 'sqlhidden' => '(nakalemmeng ti biniruk a SQL )',
-'cascadeprotected' => 'Daytoy a panid ket nasalakniban para iti panag-urnos, ngamin ket nairaman kadagiti sumaganad {{PLURAL:$1|a panid, a|a pampanid, a}} nasalakniban nga adda ti napili nga "agsariap"  :
+'cascadeprotected' => 'Daytoy a panid ket nasalakniban para iti panag-urnos ngamin ket nairaman kadagiti sumaganad {{PLURAL:$1|a panid, a|a pampanid, a}} nasalakniban nga adda ti napili nga "agsariap"  :
 $2',
 'namespaceprotected' => "Awan ti pammalubosmo nga agurnos kadagiti panid iti '''$1''' a nagan ti lugar.",
 'customcssprotected' => 'Awan ti pammalubosmo nga agurnos ditoy panid ti CSS, ngamin ket adda linaonna a tagikua dagiti agar-aramat ti sabali a kasasaad.',
@@ -474,7 +474,7 @@ Dimo liplipatan a sukatan dagiti kakaykayatam idiay [[Special:Preferences|{{SITE
 'gotaccount' => "Addaanka kadin ti pakabilangam? '''$1'''.",
 'gotaccountlink' => 'Sumrek',
 'userlogin-resetlink' => 'Nalipatam dagiti salaysay ti pagserrek mo?',
-'createaccountmail' => 'Agusar ti maysa a temporario a pugto a kontrasenias ken ipatulod idiay e-surat a pagtaengan a nainganan dita baba',
+'createaccountmail' => 'Agusar ti maysa a temporario a pugto a kontrasenias ken ipatulod idiay esurat a pagtaengan a nainaganan dita baba',
 'createaccountreason' => 'Rason:',
 'badretype' => 'Saan nga agpada dagiti impanmo a kontrasenias.',
 'userexists' => 'Maus-usaren ti nagan a kayatmo.
@@ -509,7 +509,7 @@ Pangngaasi a padasem manen.',
 'passwordtooshort' => 'Ti kontrasenias ket nasken a saan a basbasit ngem  {{PLURAL:$1|1 a karakter| $1 a karkarakter}}.',
 'password-name-match' => 'Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.',
 'password-login-forbidden' => 'Ti panag-usar ti daytoy a nagan ket kontrasenias ket naiparit..',
-'mailmypassword' => 'E-surat ti baro a kontrasenias',
+'mailmypassword' => 'Ipatulod iti esurat ti baro a kontrasenias',
 'passwordremindertitle' => 'Baro a temporario a kontrasenias para iti  {{SITENAME}}',
 'passwordremindertext' => 'Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw ti baro
 a kontrasenias para iti {{SITENAME}} ($4). Ti saan nga agnayon a kontrasenias ti agususar
@@ -518,26 +518,26 @@ masapul a sumrek ka ta agpili ka ti baro a kontrasenias.
 Ti temporario a bukodmo a kontrasenias ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 
 No sabali ti nagkiddaw, wenno no malagipmo pay ti kontrasenias mo ket dimon kayat a suktan daytoy, mabalin a dimo lattan ikaskaso daytoy a mensahe ket itultuloymo latta nga usaren ti daan a kontrasenias.',
-'noemail' => 'Awan ti i e-surat a pagtaengan a nairehistro para  iti agar-aramat a ni "$1".',
-'noemailcreate' => 'Mangtedka to pudno nga e-surat a pagtaengam',
-'passwordsent' => 'Naipatulod ti baro a kontrasenias iti e-surat a pagtaengan a nairehistro kenni "$1".
+'noemail' => 'Awan ti i esurat a pagtaengan a nairehistro para  iti agar-aramat a ni "$1".',
+'noemailcreate' => 'Mangtedka to pudno nga esurat a pagtaengam',
+'passwordsent' => 'Naipatulod ti baro a kontrasenias iti esurat a pagtaengan a nairehistro kenni "$1".
 Sumrekka koma manen kalpasan a maawatmo daytoy a baro a kontrasenias.',
 'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan manipud ti panag-urnos, ken isu a saan a mabalin nga agusar ti panagala ti kontrasenias a pamay-an tapno mapawilan ti panag-abuso.',
-'eauthentsent' => 'Naipatuloden ti pammasingked nga e-surat iti naited nga e-surat a pagtaengan.
-Sakbay nga ania man nga e-surat ti maipatulod iti pakabilangan, masapul a surotem dagiti maibagbaga iti e-surat, tapno mapasingkedan a ti pakabilangan ket agpayso a kukuam.',
-'throttled-mailpassword' => 'Ti palagip ti kontrasenias ket naipatuloden, iti napalabas nga {{PLURAL:$1|oras|$1 nga oras}}.
-Tapno maipawilan ti panag-abuso, maysa laeng a palagip ti kontrasenias ti maipatulod ti tunggal maysa nga {{PLURAL:$1|oras|$1 nga oras}}.',
+'eauthentsent' => 'Naipatuloden ti pammasingked nga esurat iti naited nga esurat a pagtaengan.
+Sakbay nga ania man nga esurat ti maipatulod iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapasingkedan a ti pakabilangan ket agpayso a kukuam.',
+'throttled-mailpassword' => 'Ti panangidisso manen ti kontrasenias ket naipatuloden, iti napalabas nga {{PLURAL:$1|oras|$1 nga oras}}.
+Tapno maipawilan ti panag-abuso, maysa laeng a panangidisso manen ti kontrasenias ti maipatulod iti tunggal maysa nga {{PLURAL:$1|oras|$1 nga oras}}.',
 'mailerror' => 'Biddut iti panagipatulod ti surat: $1',
 'acct_creation_throttle_hit' => 'Dagiti sumarungkar ti daytoy a wiki nga agususar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.
 A kas ti nagbanagan, dagiti agsarsarummgkar nga agususar ti IP a pagtaengan ket agdama a saanda a mabalin a makaaramid kadagiti pakabilangan.',
-'emailauthenticated' => 'Napasingkedan ti e-surat a pagtaengan idi $2 ti oras nga $3.',
-'emailnotauthenticated' => 'Saan pay a napasingkedan ti e-surat mo.
-Awan ti e-surat a naipatulod para kadagiti sumaganad a langa.',
-'noemailprefs' => 'Ipanaganan ti e-surat a pagtaengan tapno agbalin dagitoy a langa.',
-'emailconfirmlink' => 'Pasingkedam ti e-surat a pagtaengam',
-'invalidemailaddress' => 'Ti e-surat a pagtaengam ket saan a maawat ngamin ket kasla adda ti saan a napudno a nakabuklan.
-Pangngaasi nga ikkam ti nasayaat  a  nakabuklan a pagtaengan wenno ikkatem amin dagiti naikabil mo.',
-'cannotchangeemail' => 'Dagiti pakabilangan nga e-surat a pagtaengan ket saan a mabaliwan ditoy a wiki.',
+'emailauthenticated' => 'Napasingkedan ti esurat a pagtaengan idi $2 ti oras nga $3.',
+'emailnotauthenticated' => 'Saan pay a napasingkedan ti esuratmo.
+Awan ti esurat a naipatulod para kadagiti sumaganad a langa.',
+'noemailprefs' => 'Ipanaganan ti esurat a pagtaengan tapno agbalin dagitoy a langa.',
+'emailconfirmlink' => 'Pasingkedam ti esurat a pagtaengam',
+'invalidemailaddress' => 'Ti esurat a pagtaengam ket saan a maawat ngamin ket kasla adda ti saan a napudno a nakabuklan.
+Pangngaasi nga ikkam ti nasayaat a nakabuklan a pagtaengan wenno ikkatem amin dagiti naikabil mo.',
+'cannotchangeemail' => 'Dagiti pakabilangan nga esurat a pagtaengan ket saan a mabaliwan ditoy a wiki.',
 'emaildisabled' => 'Daytoy a pagsaaadan ket saan a makaipatuod kadagiti e-surat.',
 'accountcreated' => 'Naaramiden ti pakabilangan',
 'accountcreatedtext' => 'Ti pakabilangan ti agar-aramat para iti  $1 ket naaramiden.',
@@ -555,12 +555,12 @@ Pangaasi nga agurayka sakbay nga agipadas manen.',
 
 # Email sending
 'php-mail-error-unknown' => 'Di am-ammo a biddut iti surat ti PHP  () a pamay-an.',
-'user-mail-no-addy' => 'Pinadas nga impatulod ti e-surat nga awan ti e-surat a pagtaengan.',
-'user-mail-no-body' => 'Nangpadaska a nangipatulod ti e-surat nga awan linaonna wenno ababa laeng a bagi.',
+'user-mail-no-addy' => 'Pinadas nga inpatulod ti esurat nga awan ti esurat a pagtaengan.',
+'user-mail-no-body' => 'Nangpadaska a nangipatulod ti esurat nga awan linaonna wenno ababa laeng a bagi.',
 
 # Change password dialog
 'resetpass' => 'Sukatan ti kontrasenias',
-'resetpass_announce' => 'Simrekka a nagus-usar ti temporario a kodigo ti e-surat.
+'resetpass_announce' => 'Simrekka a nagus-usar ti temporario a kodigo ti esurat.
 Tapno malpaska a makastrek, nasken a mangikabilka ti baro a kontrasenias ditoy:',
 'resetpass_header' => 'Sukatan ti kontrasenias ti pakabilangan',
 'oldpassword' => 'Daan a kontrasenias:',
@@ -580,19 +580,18 @@ Mabalin a nagballigi ti panagsukatmo ti kontrasenias wenno nagkiddaw ti baro a t
 
 # Special:PasswordReset
 'passwordreset' => 'Ipasubli ti kontrasenias',
-'passwordreset-text' => 'Lippasem daytoy a kinabuklan tapno maipatulodanka ti e-surat a paglagipan kadagiti salaysay ti pakabilangam.',
+'passwordreset-text' => 'Lippasem daytoy a porma tapno maidisso manen ti bukodmo a kontrasenias.',
 'passwordreset-legend' => 'Ipasubli ti kontrasenias',
 'passwordreset-disabled' => 'Nabaldado dagiti panagisubli ti kontrasenias iti daytoy a wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Ikabil ti maysa a piraso ti datos dita baba}}',
 'passwordreset-username' => 'Nagan ti agar-aramat:',
 'passwordreset-domain' => 'Pagturayan:',
-'passwordreset-capture' => 'Kitaem ti nagbanagan ti e-surat?',
+'passwordreset-capture' => 'Kitaem ti nagbanagan ti esurat?',
 'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda ti temporario a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
-'passwordreset-email' => 'E-surat a pagtaengan:',
+'passwordreset-email' => 'Esurat a pagtaengan:',
 'passwordreset-emailtitle' => 'Salaysay ti pakabilangan iti {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti palagip para
-dagiti salaysay ti pakabilangam para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket
-nakairaman iti daytoy nga e-surat a pagtaengan:
+'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangidisso manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket
+nakairaman iti daytoy nga esurat a pagtaengan:
 
 $2
 
@@ -600,32 +599,32 @@ $2
 Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
 panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
 agtuloy ka nga agusar ti daan a kontrasenias.',
-'passwordreset-emailtext-user' => 'Daytoy nga  agar-aramat  $1 iti {{SITENAME}} ket nagkiddaw ti palagip para dagiti salaysay ti pakabilangan iti {{SITENAME}}
+'passwordreset-emailtext-user' => 'Daytoy nga  agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangidisso manen ti bukodmo a kontrasenias para iti {{SITENAME}}
 ($4) .  {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilanagn ti agar-aramat ket
-nakairaman iti daytoy nga e-surat a pagtaengan:
+nakairaman iti daytoy nga esurat a pagtaengan:
 
 $2
 
 {{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
-Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
+Sumrekka koman tapno agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
 panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
-agtuloy kan nga agusar ti daan a kontrasenias mo.',
+agtuloykan nga agusar ti daan a kontraseniasmo.',
 'passwordreset-emailelement' => 'Nagan ti agar-aramat: $1
 Temporario a kontrasenias: $2',
-'passwordreset-emailsent' => 'Maipatuloden ti e-surat a palagip.',
-'passwordreset-emailsent-capture' => 'Naipatulod ti palagip nga e-surat, a napaikita dita baba.',
-'passwordreset-emailerror-capture' => 'Naaramid ti palagip nga e-surat, a napaikita dita baba, ngem napaay a napaitulod iti agar-aramat: $1',
+'passwordreset-emailsent' => 'Ti maysa nga esurat ti panangidisso manen ti kontrasenias ket naipatuloden.',
+'passwordreset-emailsent-capture' => 'Ti maysa nga esurat ti panangidisso manen ti kontrasenias ket naipatuloden, a napaikita dita baba.',
+'passwordreset-emailerror-capture' => 'Ti maysa nga esurat ti panangidisso manen ti kontrasenias ket naaramiden, a napaikita dita baba, ngem napaay a napaitulod iti agar-aramat: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Sukatan ti e-surat a pagtaengan',
-'changeemail-header' => 'Sukatan ti e-surat a pagtaengan ti pakabilangan',
-'changeemail-text' => 'Lippasem daytoy a kabuklan ti panagsukat ti e-surat a pagtaengam. Nasken nga ikabilmo ti kontrasenias tapno mapasingkedan daytoy a panagsukat.',
+'changeemail' => 'Sukatan ti esurat a pagtaengan',
+'changeemail-header' => 'Sukatan ti esurat a pagtaengan ti pakabilangan',
+'changeemail-text' => 'Lippasem daytoy a kabuklan ti panagsukat ti esurat a pagtaengam. Nasken nga ikabilmo ti kontrasenias tapno mapasingkedan daytoy a panagsukat.',
 'changeemail-no-info' => 'Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.',
-'changeemail-oldemail' => 'Agdama nga E-surat a pagtaengam:',
-'changeemail-newemail' => 'Baro nga e-surat a pagtaengan:',
+'changeemail-oldemail' => 'Agdama nga esurat a pagtaengam:',
+'changeemail-newemail' => 'Baro nga esurat a pagtaengan:',
 'changeemail-none' => '(awan)',
 'changeemail-password' => 'Ti bukodmo a kontrasenias ti {{SITENAME}}:',
-'changeemail-submit' => 'Sukatan ti e-surat',
+'changeemail-submit' => 'Sukatan ti esurat',
 'changeemail-cancel' => 'Ukasen',
 
 # Edit page toolbar
@@ -663,7 +662,7 @@ Mairehistro ti IP a pagtaengam iti pakasaritaan ti panagurnos iti daytoy a panid
 No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
 'missingcommenttext' => 'Pangngaasi nga agikabil ti komentario dita baba.',
 'missingcommentheader' => "'''Palagip:''' Saanka a nakaited  iti suheto/paulo para iti daytoy a komentario.
-No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
+No agtaklaka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
 'summary-preview' => 'Naipadas a  pakabuklan:',
 'subject-preview' => 'Suheto/naipadas a paulo:',
 'blockedtitle' => 'Naseraan ti agar-aramat',
@@ -674,11 +673,11 @@ Ti rason ket ''$2''.
 
 * Rugi ti panangserra: $8
 * Panagpaso ti panangserra: $6
-* Ti kuma serraan na: $7
+* Ti koma serraanna: $7
 
 Mabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panag-serra.
-Dimo mabalin nga aramaten ti ramit nga e-suratan daytoy nga agar-aramat malaksid no adda napudno nga e-surat a pagtaengan a naipan iti  [[Special:Preferences|pakabilangan ti kaykayatmo]] ken no saanka a naparitan nga agaramat iti daytoy.
-Ti agdama nga IP a pagtaengam ket $3, ti naserraan nga  ID ket #$5. Pangngaasim nga iramanmo nga ited ti ania man wenno agpada kadagitoy iti ania man a panagsaludsodmo.",
+Dimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a naipan iti [[Special:Preferences|pakabilangan ti kaykayatmo]] ken no saanka a naparitan nga agaramat iti daytoy.
+Ti agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. Pangngaasim nga iramanmo nga ited ti ania man wenno agpada kadagitoy iti ania man a panagsaludsodmo.",
 'autoblockedtext' => 'Ti IP a pagtaengam ket na-automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.
 Ti rason nga inted ket:
 
@@ -686,19 +685,18 @@ Ti rason nga inted ket:
 
 * Rugi ti panag-serra: $8
 * Panagpaso ti panag-serra: $6
-* Ti serraan na kuma: $7
+* Ti serraanna koma: $7
 
 Mabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panag-serra.
 
-Laglagipem nga saanmo a mabalin nga usaren ti "e-suratam daytoy nga agar-aramat "  ket laeng no addaan ka ti napudno nga e-surat a pagtaengan a nakarehistro idiay [[Special:Preferences|kakaykayatam]] ken saan ka a
-naserraan ti panag-usar na.
+Laglagipem a saanmo a mabalin nga usaren ti "esuratan daytoy nga agar-aramat" a langa malaksid no addaanka ti napudno nga esurat a pagtaengan a nakarehistro idiay [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panag-usar daytoy.
 
 Ti tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.
-Pangaasi nga iramanmo amin dagiti salaysay ti amin a panagsaludsodmo.',
+Pangaasi nga iramanmo amin dagiti salaysay kadagiti amin a panagsaludsodmo.',
 'blockednoreason' => 'awan ti naited a rason',
 'whitelistedittext' => 'Nasken ti $1 tapno maurnosmo dagitoy a panid.',
-'confirmedittext' => 'Masapul a pasingkedam ti e-surat sakbay a makaurnos kadagitoy a panid.
-Pangngaasim nga ikabil ken ipapudnom ti e-suratmo idiay [[Special:Preferences|kaykayat dagiti agar-aramat ]].',
+'confirmedittext' => 'Masapul a pasingkedam ti esurat sakbay a makaurnos kadagitoy a panid.
+Pangngaasim nga ikabil ken ipapudnom ti esuratmo idiay [[Special:Preferences|kaykayat dagiti agar-aramat ]].',
 'nosuchsectiontitle' => 'Saan a mabirukan ti paset',
 'nosuchsectiontext' => 'Pinadasmo nga inurnos ti awan a paset.
 Mabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.',
@@ -775,9 +773,9 @@ Mapasamak daytoy no agus-usarka ti saan a nasayaat a naibasta ti sapot a diamamm
 'editingcomment' => 'Ururnosen ti $1 (baro a paset)',
 'editconflict' => 'Adda kasinnungat ti panag-urnos: $1',
 'explainconflict' => "Adda sabali a nagsukat iti daytoy a panid idi nangrugi ka a nagurnos.
-Ti ngato a lugar ti testo ket adda dagiti nagyanna a testo ti panid a kasla agdama a kita na.
+Ti ngato a lugar ti testo ket adda dagiti nagyanna a testo ti panid a kasla agdama a kitana.
 Ti inurnosmo ket maipakita dita babba a lugar ti testo
-Ipatipon mo dagiti sinukatam idiay lugar ti testo.
+Ipatiponmo dagiti sinukatam idiay lugar ti testo.
 '''Iti laeng''' testo dita ngato a lugar ti testo ti maidulin no pesselem ti \"{{int:savearticle}}\".",
 'yourtext' => 'Ti testom',
 'storedversion' => 'Bersion a naidulin',
@@ -804,7 +802,7 @@ Ti administrador a nangrikep ket nangited iti daytoy a palawag: $1",
 Ti nakaudi a naikabil a listaan ket adda dita baba tapno usaren a  reperensia:",
 'semiprotectedpagewarning' => "'''Pakaammo:'''Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.
 Ti naudi a naikabil a listaan ket adda dita baba tapno usaren a reperensia:",
-'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga adda ti  gundaway ti makaurnos, ngamin ket nairaman kadagiti sumaganad a nasalakniban ti sariap
+'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga adda ti pammalubos ti makaurnos ngamin ket nairaman kadagiti sumaganad a nasalakniban iti sariap
 {{PLURAL:$1|a panid|a pampanid}}:",
 'titleprotectedwarning' => "'''Ballaag:  Nasalakniban daytoy a panid tapno [[Special:ListGroupRights|dagiti naisangayan a karbengan ]] ket nasken ti makapartuat iti daytoy.'''
 Ti kinaudi a naikabil iti listaan ket naikabil dita baba tapno usaren a reperensia:",
@@ -851,7 +849,7 @@ Adda met daytoyen.',
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser a pamay-an  a panagtawtawag.
 
-Adda kuman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
+Adda koman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
 'expensive-parserfunction-category' => 'Dagiti panid nga adda ti adu unay a nangina a parser a pamay-an a panagtawtawag',
 'post-expand-template-inclusion-warning' => "'''Ballaag:''' Dakkel unay ti nairaman a kadakkel ti plantilia.
 Adda dagiti plantilia a saanto a mairaman.",
@@ -873,7 +871,7 @@ Dagitoy a panagpalawag  ket naikkaten.",
 # "Undo" feature
 'undo-success' => 'Ti panag-urnos ket saan a maisubli.
 Pangngaasi a kitaen ti pagipadaan dita baba tapno maamuan no agpaypayso ti kayatmo nga aramiden, ken idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.',
-'undo-failure' => 'Ti inurnos ket saan a maipasubli ta adda dagiti nakisinnungat a patingnga a naurnos.',
+'undo-failure' => 'Ti inurnos ket saan a maipasubli gaputa adda dagiti nakisinnungat a patingnga a naurnos.',
 'undo-norev' => 'Saan a maibabawi ti naurnos ngamin ket awan met daytoy wenno mabalin a naikkat.',
 'undo-summary' => 'Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])',
 
@@ -920,17 +918,17 @@ Padasem ti [[Special:Search|agbiruk ditoy a wiki]] para kadagiti maitutop a baro
 'rev-deleted-user' => '(naikkat ti nagan ti agar-aramat)',
 'rev-deleted-event' => '(naikkat ti aramid a listaan)',
 'rev-deleted-user-contribs' => '[ti nagan ti agar-aramat wenno IP a pagtaengan ket naikkat - ti inurnos ket nailemmeng kadagiti nagparawad]',
-'rev-deleted-text-permission' => "Ti panakabaliw daytoy a panid ket '''naikkaten'''.
+'rev-deleted-text-permission' => "Ti pannakabaliw daytoy a panid ket '''naikkaten'''.
 Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti naikkat].",
-'rev-deleted-text-unhide' => "Ti panakabaliw daytoy a panid ket '''naikkaten'''.
+'rev-deleted-text-unhide' => "Ti pannakabaliw daytoy a panid ket '''naikkaten'''.
 Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti naikkat].
 Mabalinmo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
-'rev-suppressed-text-unhide' => "Ti panakabaliw daytoy a panid ket '''napasardeng'''.
+'rev-suppressed-text-unhide' => "Ti pannakabaliw daytoy a panid ket '''napasardeng'''.
 Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti napasardeng].
 Mabalinmo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
-'rev-deleted-text-view' => "Ti panakabaliw daytoy a panid ket '''naikkaten'''.
+'rev-deleted-text-view' => "Ti pannakabaliw daytoy a panid ket '''naikkaten'''.
 Mabalinmo a kitaen; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti naikkat].",
-'rev-suppressed-text-view' => "Ti panakabaliw daytoy a panid ket '''napasardeng'''.
+'rev-suppressed-text-view' => "Ti pannakabaliw daytoy a panid ket '''napasardeng'''.
 Mabalinmo a kitaen; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti napasardeng].",
 'rev-deleted-no-diff' => "Saanmo a makita daytoy a paggiddiatan ngamin ket ti maysa a panagbaliw ket '''naikkat''.
 Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti naikkat].",
@@ -1162,8 +1160,8 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'prefs-watchlist-token' => 'Tandaan ti bambantayan:',
 'prefs-misc' => 'Sabsabali',
 'prefs-resetpass' => 'Sukatan ti kontrasenias',
-'prefs-changeemail' => 'Sukatan ti e-surat a pagtaengan',
-'prefs-setemail' => 'Ikabil ti e-surat a pagtaengan',
+'prefs-changeemail' => 'Sukatan ti esurat a pagtaengan',
+'prefs-setemail' => 'Ikabil ti esurat a pagtaengan',
 'prefs-email' => 'Pagpilian ti e-surat',
 'prefs-rendering' => 'Tabas',
 'saveprefs' => 'Idulin',
@@ -1203,7 +1201,7 @@ Adda ditoy ti pugto a pateg a mausarmo: $1',
 'timezoneregion-europe' => 'Europa',
 'timezoneregion-indian' => 'Taaw Indiano',
 'timezoneregion-pacific' => 'Taaw Pasipiko',
-'allowemail' => 'Pakabaelam ti e-surat a naggapu kadagiti sabali nga agar-aramat',
+'allowemail' => 'Pakabaelam ti esurat a naggapu kadagiti sabali nga agar-aramat',
 'prefs-searchoptions' => 'Biruken',
 'prefs-namespaces' => 'Nagan ti luglugar',
 'defaultns' => 'Wenno saan agbirukka kadagitoy a nagan ti luglugar:',
@@ -1214,9 +1212,9 @@ Adda ditoy ti pugto a pateg a mausarmo: $1',
 'prefs-common-css-js' => 'Bingay a CSS/JavaScript dagiti amin a kudil:',
 'prefs-reset-intro' => 'Mabalinmo nga usaren daytoy a panid tapno maisublim dagita kakaykayatam iti kasisigud ti daytoy a wiki.
 Ngem saanto a mabalinen nga ipasubli.',
-'prefs-emailconfirm-label' => 'Pagsingkedan ti e-surat:',
+'prefs-emailconfirm-label' => 'Pammasingked ti esurat:',
 'prefs-textboxsize' => 'Ti kadakkel ti pagurnosan a tawa',
-'youremail' => 'E-surat:',
+'youremail' => 'Esurat:',
 'username' => '{{GENDER:$1|Nagan ti agar-aramat}}:',
 'uid' => 'ID ti {{GENDER:$1|Agar-aramat}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Kameng}} ti {{PLURAL:$1|a grupo|a grupgrupo}}:',
@@ -1230,19 +1228,19 @@ Ngem saanto a mabalinen nga ipasubli.',
 'badsig' => 'Saan a pudno a kilaw a pirma.
 Ikur-it dagiti HTML nga etiketa.',
 'badsiglength' => 'Atiddog unay ti pirmam.
-Masapul a nababbaba ngem $1 {{PLURAL:$1| a karakter|kadagiti karakter}} ti kaatiddog na.',
+Masapul a nababbaba ngem $1 {{PLURAL:$1| a karakter|kadagiti karakter}} ti kaatiddogna.',
 'yourgender' => 'Lalaki wenno Babai:',
 'gender-unknown' => 'Saan a naibagbaga',
 'gender-male' => 'Lalaki',
 'gender-female' => 'Babai',
-'prefs-help-gender' => 'Makapili: Usaren no lalaki wenno babai a panagtawag ti "software" .
+'prefs-help-gender' => 'Makapili: Usaren no lalaki wenno babai a panagtawag ti sopwer.
 Daytoy a pakaammo ket makita ti publiko.',
-'email' => 'E-surat',
+'email' => 'Esurat',
 'prefs-help-realname' => 'Saan a nasken ti pudno a nagan.
 Ngem no kayatmo nga ited, maaramat daytoy a kas pammadayaw ken pangpatalged iti obram.',
-'prefs-help-email' => 'Ti e-surat a pagtaengan ket saan a masapul, ngem masapul no agsukat ka ti kontrasenias, no baka malipatam ti kontrasenias mo.',
-'prefs-help-email-others' => 'Mabalinmo nga agpili tapno dagiti sabsabali nga agar-aramat ket ma e-suratandaka idiay panagsilpo ti panidmo wenno ti panid ti tungtungam.
-Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak kenka.',
+'prefs-help-email' => 'Ti esurat a pagtaengan ket saan a masapul, ngem masapul no agsukatka ti kontrasenias, no baka malipatam ti kontraseniasmo.',
+'prefs-help-email-others' => 'Mabalinmo nga agpili tapno dagiti sabsabali nga agar-aramat ket ma esuratandaka idiay panagsilpo ti panidmo wenno ti panid ti tungtungam.
+Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak kenka.',
 'prefs-help-email-required' => 'Masapul ti e-surat a pagtaengan.',
 'prefs-info' => 'Kangrunaan a pakaammuan',
 'prefs-i18n' => 'Internasionalisasion',
@@ -1260,33 +1258,33 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'prefs-diffs' => 'Sabali',
 
 # User preference: email validation using jQuery
-'email-address-validity-valid' => 'Ti e-surat a pagtaengan ket kasla umiso',
-'email-address-validity-invalid' => 'Ikabil ti umiso nga e-surat a pagtaengan',
+'email-address-validity-valid' => 'Ti esurat a pagtaengan ket kasla umiso',
+'email-address-validity-invalid' => 'Ikabil ti umiso nga esurat a pagtaengan',
 
 # User rights
-'userrights' => 'Agtartaripatu dagiti kaberngan ti agar-aramat',
-'userrights-lookup-user' => 'Agtaripatu kadagiti bunggoy ti agar-aramat',
+'userrights' => 'Panagtaripatu kadagiti karbengan ti agar-aramat',
+'userrights-lookup-user' => 'Agtaripatu kadagiti grupo ti agar-aramat',
 'userrights-user-editname' => 'Mangiserrek iti nagan-agar-aramat:',
-'editusergroup' => 'Urnosen dagita bunggoy ti agar-aramat',
+'editusergroup' => 'Urnosen dagita grupo ti agar-aramat',
 'editinguser' => "Suksukatan ti karbengan ti agar-aramat ni '''[[User:$1|$1]]''' $2",
-'userrights-editusergroup' => 'Urnosen dagita bunggoy ti agar-aramat',
-'saveusergroups' => 'Idulin dagita bunggoy ti agar-aramat',
+'userrights-editusergroup' => 'Urnosen dagita grupo ti agar-aramat',
+'saveusergroups' => 'Idulin dagita grupo ti agar-aramat',
 'userrights-groupsmember' => 'Kameng iti:',
 'userrights-groupsmember-auto' => 'Napudno a kameng iti:',
-'userrights-groups-help' => 'Mabaliwam dagiti ayan a bunggoy ti agar-aramat:
-* Ti nakur-it a kahon ket kayatna a saoen nga adda ti agar-aramat dita a bunggoy.
-* Ti saan a nakur-it a kahon ket kayatna a saoen nga awan ti agar-aramat dita a bunggoy.
-* A * ti kunana ket saan mo a maikkat ti bunggoy no nainayonmon, wenno pagbalittaden.',
+'userrights-groups-help' => 'Mabaliwam dagiti ayan a grupo ti agar-aramat:
+* Ti nakur-it a kahon ket kayatna a saoen nga adda ti agar-aramat dita a grupo.
+* Ti saan a nakur-it a kahon ket kayatna a saoen nga awan ti agar-aramat dita a grupo.
+* A * ti kunana ket saanmo a maikkat ti grupo no nainayonmon, wenno pagbalittaden.',
 'userrights-reason' => 'Rason:',
 'userrights-no-interwiki' => 'Awan ti pammalubosmo nga agbaliw ti karbengan ti agar-aramat kadagiti sabali a wiki.',
 'userrights-nodatabase' => 'Awan ti database a $1 wenno saan a lokal.',
 'userrights-nologin' => 'Masapul a [[Special:UserLogin|sumrekka]] nga adda pakabilangan nga administrador ti magted kadagiti karbengan ti agar-aramat.',
 'userrights-notallowed' => 'Awan ti pammalubos ti pakabilangam a mangted iti kakaberngan ti agar-aramat.',
-'userrights-changeable-col' => 'Dagiti bunggoy a mabalinmo a baliwan',
-'userrights-unchangeable-col' => 'Dagiti bunggoy a dimo mabalin a baliwan',
+'userrights-changeable-col' => 'Dagiti grupo a mabalinmo a baliwan',
+'userrights-unchangeable-col' => 'Dagiti grupo a dimo mabalin a baliwan',
 
 # Groups
-'group' => 'Bunggoy:',
+'group' => 'Grupo:',
 'group-user' => 'Dagiti agar-aramat',
 'group-autoconfirmed' => 'Dagiti automatiko a napasingkedan nga agar-aramat',
 'group-bot' => 'Dagiti bot',
@@ -1323,7 +1321,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-suppressredirect' => 'Saan nga agaramid ti baw-ing a naggapo iti taudan no iyalis dagiti panid',
 'right-upload' => 'Agipan ti papeles',
 'right-reupload' => 'Suratam manen dagiti adda a papeles',
-'right-reupload-own' => 'Pasuratam manen dagiti addaan ti pinag-ipan mo a papeles',
+'right-reupload-own' => 'Pasuratam manen dagiti addaan ti pinag-ipanmo a papeles',
 'right-reupload-shared' => 'Paawanen dagiti papeles idiay pagbingayan ti nakaikabilan ti midia a lokal',
 'right-upload_by_url' => 'Pag-ipan ti papeles a naggapu ti URL',
 'right-purge' => 'Purgaen ti pagidulinan ti pagsaadan a ti panid nga awan ti panagpasingked',
@@ -1343,7 +1341,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-suppressrevision' => 'Kitaen ken ipasubli dagiti binaliwan a nailemmeng manipud kadagiti administrador',
 'right-suppressionlog' => 'Kitaen dagita pribado a listaan',
 'right-block' => 'Serraan dagiti sabali nga agar-aramat manipud iti panag-urnos',
-'right-blockemail' => 'Serraan dagiti agar-aramat nga agpatulod manipud ti e-surat',
+'right-blockemail' => 'Serraan dagiti agar-aramat nga agpatulod manipud ti esurat',
 'right-hideuser' => 'Serraan ti maysa a nagan ti agar-aramat, ilemmeng manipud ti publiko',
 'right-ipblock-exempt' => 'Labsan dagiti IP a serra, dagiti automatiko a serra ken dagiti nasakup a serra.',
 'right-proxyunbannable' => 'Labsan dagiti automatiko a serra dagiti proxie',
@@ -1368,8 +1366,8 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-userrights-interwiki' => 'Urnosen dagiti karbengan ti agar-aramat kadagiti agar-aramat iti sabsabali a wiki',
 'right-siteadmin' => 'Ikandado ken lukatan ti database',
 'right-override-export-depth' => 'Ipan dagiti panid ken iraman dagiti nasilpo a panid iti kauneg nga 5',
-'right-sendemail' => 'Agpatulod ti e-surat kadagiti sabali nga agar-aramat',
-'right-passwordreset' => 'Kitaen dagiti e-surat ti naipasubli a kontrasenias',
+'right-sendemail' => 'Agpatulod ti esurat kadagiti sabali nga agar-aramat',
+'right-passwordreset' => 'Kitaen dagiti esurat a panagidisso manen ti kontrasenias',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Listaan dagiti naaramid nga agar-aramat',
@@ -1414,7 +1412,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'action-userrights' => 'urnosen amin dagiti karbengan ti agar-aramat',
 'action-userrights-interwiki' => 'urnosen dagiti karbengan ti agar-aramat iti agar-aramat kadagiti sabsabali a wiki',
 'action-siteadmin' => 'kandaduan wenno lukatan daytoy "database"',
-'action-sendemail' => 'ipatulod dagiti e-surat',
+'action-sendemail' => 'agipatulod kadagiti esurat',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|sinukatan|dagiti sinukatan}}',
@@ -1473,9 +1471,9 @@ Dagiti panid iti [[Special:Watchlist|listaan ti bambantayam]] ket '''napuskol'''
 'upload_directory_missing' => 'Ti direktorio ti pag-ipan ($1) ket napukaw ken saan a mabalin nga aramiden iti webserver.',
 'upload_directory_read_only' => 'Ti pagipanan a direktoria ($1) ket saan a masuratan ti webserver.',
 'uploaderror' => 'Biddut ti panang-ipan',
-'upload-recreate-warning' => "'''Ballag: ti papeles nga adda itoy ti nagan na ket naikkat wenno naiyalis.'''
+'upload-recreate-warning' => "'''Ballag: Ti papeles babaen ti dayta a nagan ket naikkat wenno naiyalis.'''
 
-Ti listaan ti panagikkat ken panagiyalis daytoy a panid ket adda ditoy tapno makitam:",
+Ti listaan ti panagikkat ken panagiyalis para iti daytoy a panid ket adda ditoy tapno makitam:",
 'uploadtext' => "Usaren ti kabuklan dita baba ti pinag-ipan ti papeles.
 Ti panagkita wenno panagbiruk ti napalubos a pinag-ipan ti papeles mapan ka idiay [[Special:FileList|listaan dagiti napag-ipan a papeles]], dagiti pinag-ipan wenno pinag-ipan manen ket nakalista pay idiay [[Special:Log/upload|listaan ti pinag-ipan]], dagiti panagikkat ket idiay [[Special:Log/delete|listaan ti panagikkat]].
 
@@ -1512,7 +1510,7 @@ Ti mapalubusan  {{PLURAL:\$3|a kita ti papeles ket|kadagiti kita ti papeles ket}
 'filetype-banned-type' => 'Ti \'\'\'".$1"\'\'\' {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}.
 Ti mapalubusan {{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
 'filetype-missing' => 'Daytoy a papeles ket awan ti kita na a (kasla ".jpg").',
-'empty-file' => 'Ti papeles nga intedmo ket awan ti nagyan na.',
+'empty-file' => 'Ti papeles nga intedmo ket awan ti nagyanna.',
 'file-too-large' => 'Ti papeles nga intedmo ket dakkel unay.',
 'filename-tooshort' => 'Ti nagan daytoy a papeles ket bassit unay.',
 'filetype-banned' => 'Ti kita daytoy a papeles ket maiparit.',
@@ -1546,7 +1544,7 @@ Pangngaasi a kitaem ti papeles a <strong>[[:$1]]</strong>.
 No ti nakitam a papeles ket isu met laeng dayta dati a kadakkel, saanka a mang-ipan iti sabali pay a napabassit nga imahen.",
 'file-thumbnail-no' => "Ti nagan ti papeles ket mangrugi ti <strong>$1</strong>.
 Kasla imahen a napabassit ''(thumbnail)''.
-No addaan ka ti dakkel a resolusion daytoy nga imahen ipag-ipan daytoy, no saan ket pangngaasi ta sukatam ti nagan ti papeles.",
+No addaanka ti dakkel a resolusion daytoy nga imahen ipag-ipan daytoy, no saan ket pangngaasi a sukatam ti nagan ti papeles.",
 'fileexists-forbidden' => 'Daytoy a nagan ti papeles ket adda dita, ken saan a mabalin a masuratan manen.
 No ket kayatmo latta nga agipan ti papeles, pangngaasi ta agsubli ka ken usarem ti baro a nagan.
 [[File:$1|thumb|center|$1]]',
@@ -1593,7 +1591,7 @@ $1',
 'upload-warning-msg' => 'Addaan a parikut ti panag-ipan a naggapu idiay [$2]. Mabalin mo ti agsubli ti [[Special:Upload/stash/$1|nakabuklan ti pag-ipan]] tapno masimpaan ti parikut.',
 
 'upload-proto-error' => 'Saan a husto a protokol',
-'upload-proto-error-text' => 'Dagiti adayo a pinag-ipan ket kasapulan a dagiti URLs ket mangrugi iti <code>http://</code> wenno <code>ftp://</code>.',
+'upload-proto-error-text' => 'Dagiti adayo a pinag-ipan ket makasapul kadagiti URL a mangrugi iti <code>http://</code> wenno <code>ftp://</code>.',
 'upload-file-error' => 'Akin-uneg a biddut',
 'upload-file-error-text' => 'Adda biddut a naggapu iti uneg idi padasen ti agaramid ti saan nga agnayon a papeles dita server.
 Pangngaasi a kontaken ti [[Special:ListUsers/sysop|administrador]]',
@@ -1624,7 +1622,7 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-closetemp' => 'Saan a marikpan ti temporario a papeles.',
 'backend-fail-read' => 'Saan a mabasa ti papeles $1.',
 'backend-fail-create' => 'Saan a masuratan ti papeles $1.',
-'backend-fail-maxsize' => 'Saan a masuratan ti papeles $1 gapu ta dakdakkel ngem {{PLURAL:$2|maysa a byte|dagiti $2 a byte}}.',
+'backend-fail-maxsize' => 'Saan a masuratan ti papeles $1 gaputa dakdakkel ngem {{PLURAL:$2|maysa a byte|$2 a byte}}.',
 'backend-fail-readonly' => 'Ti pagidulinan a kalikudan ti "$1" ket agdama a mabasa laeng. Ti rason a naited idi ket: "$2"',
 'backend-fail-synced' => 'Ti papeles "$1" ket bangking ti kasasaad na  iti kinauneg a pagidulinan ti kalikudan',
 'backend-fail-connect' => 'Saan a makaikapet idiay pagidulinan a kalikudan  "$1".',
@@ -1659,7 +1657,7 @@ Saan a matutup ti pinagkita ti seguridad na.',
 
 # Special:UploadStash
 'uploadstash' => 'Pinag-ipan ti stash',
-'uploadstash-summary' => 'Daytoy a panid ket mangted ti panagserrek ti papeles a napag-ipan (wenno nairugi nga ipan) ngem saan pay na naipablaak dita wiki. Dagitoy a papeles ket saan a makita ti sabsabali ngem laeng ti agar-aramat a nag-ipan kaniada.',
+'uploadstash-summary' => 'Daytoy a panid ket mangted ti panagserrek kadagiti papeles a napag-ipan (wenno nairugi a naipan) ngem saan pay a naipablaak iti wiki. Dagitoy a papeles ket saan a makita ti sabsabali ngem laeng ti agar-aramat a nag-ipan kaniada.',
 'uploadstash-clear' => 'Dalusan dagiti na stash a papeles',
 'uploadstash-nofiles' => 'Awan ti na stash a papeles mo.',
 'uploadstash-badtoken' => 'Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talek mo ti panag-urnos ket nagpaso. Padasem manen.',
@@ -1787,7 +1785,7 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
 'filedelete-success' => "Naikkaten ti '''$1'''.",
 'filedelete-success-old' => "Ti bersion iti '''[[Media:$1|$1]]''' manipud idi $3, $2 ket naikkaten.",
 'filedelete-nofile' => "awan ti '''$1''' .",
-'filedelete-nofile-old' => "Awan ti nailebbeng a bersion ti '''$1''' nga addaan ti naited a kakitkita na.",
+'filedelete-nofile-old' => "Awan ti nailebbeng a bersion ti '''$1''' nga addaan ti naited a kakitkitana.",
 'filedelete-otherreason' => 'Sabali/maipatinayon a rason:',
 'filedelete-reason-otherlist' => 'Sabali a rason',
 'filedelete-reason-dropdown' => '*Kadawyan a rasrason ti pannakaikkat
@@ -1924,7 +1922,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'protectedpagestext' => 'Dagiti pampanid a nasalakniban para iti panaka-iyalis wenno panag-urnos',
 'protectedpagesempty' => 'Awan ti pampanid a madama a nasalakniban babaen kadagitoy a parametro.',
 'protectedtitles' => 'Dagiti nasalakniban a titulo',
-'protectedtitlestext' => 'Dagitoy a titulo ket nasalakniban ti panakaaramid',
+'protectedtitlestext' => 'Dagiti sumaganad a titulo ket nasalakniban manipud ti pannakapartuat',
 'protectedtitlesempty' => 'Awan dagiti titulo a madama a nasalakniban iti dagitoy a parametro.',
 'listusers' => 'Listaan dagiti agar-aramat',
 'listusers-editsonly' => 'Ipakita laeng dagiti agar-aramat nga adda inurnosda',
@@ -1937,7 +1935,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'move' => 'Iyalis',
 'movethispage' => 'Iyalis daytoy a panid',
 'unusedimagestext' => 'Adda dagiti sumaganad a papeles ngem saanda a naikabil iti ania man a panid.
-Pangngaasi a laglagipen a dagiti sabali a sapot ti pagsaadan  ket makasilpoda ti papeles iti dagus a URL, ken isu pay a nailista da ditoy uray no saan da a naus-usar iti agdama.',
+Pangngaasi a laglagipen a dagiti sabali a sapot ti pagsaadan  ket makasilpoda ti papeles iti dagus a URL, ken isu pay a nailista da ditoy urayno saanda a naus-usar iti agdama.',
 'unusedcategoriestext' => 'Adda dagiti sumaganad a kategoria a panid, ngem awan ti sabali a panid wenno kategoria ti agus-usar kaniada.',
 'notargettitle' => 'Awan ti napuntaan',
 'notargettext' => 'Saanmo a nainagan ti puntaan a panid wenno agar-aramat ti mangtungpal daytoy nga opisio.',
@@ -1979,7 +1977,7 @@ Mapabassit mo ti pinagpakita no piliam ti kita ti listaan, ti nagan ti gar-arama
 'allpagesprev' => 'Napalabas',
 'allpagesnext' => 'Sumaruno',
 'allpagessubmit' => 'Inkan',
-'allpagesprefix' => 'Iparang dagiti pampanid nga adda pasaruno na:',
+'allpagesprefix' => 'Iparang dagiti pampanid nga adda pasarunona:',
 'allpagesbadtitle' => 'Ti naited a titulo ti panid ket imbalido wenno  adda maki-pagsasao wenno maki-wiki a pasaruno na.',
 'allpages-bad-ns' => 'Awan ti {{SITENAME}} iti nagan ti lugar a "$1".',
 'allpages-hide-redirects' => 'Ilemmeng dagiti baw-ing',
@@ -2030,31 +2028,31 @@ Masapul ti kangatuan a pagturayan, a kaspagarigan "*.org".<br />
 'activeusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
 
 # Special:ListGroupRights
-'listgrouprights' => 'Dagiti karbengan ti bunggoy ti agar-aramat',
+'listgrouprights' => 'Dagiti karbengan ti grupo ti agar-aramat',
 'listgrouprights-summary' => 'Dagiti sumaganad a listaan ti bunggoy ti agar-aramat a naipalawag iti daytoy a wiki, a nairaman dagiti karbengan ti panagserrekda.
 Adda pay ngata [[{{MediaWiki:Listgrouprights-helppage}}|adu pay a pakaammo]] a maipapan kadagiti kabukbukodda a karbengan.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Naikkan ti karbengan</span>
 * <span class="listgrouprights-revoked">Naikkat ti karbengan</span>',
-'listgrouprights-group' => 'Bunggoy',
+'listgrouprights-group' => 'Grupo',
 'listgrouprights-rights' => 'Dagiti karbengan',
-'listgrouprights-helppage' => 'Help:Karbengan ti bunggoy',
-'listgrouprights-members' => '(listaan dagiti kameng)',
-'listgrouprights-addgroup' => 'Inayon {{PLURAL:$2|ti bunggoy|dagiti bunggoy}} : $1',
-'listgrouprights-removegroup' => 'Ikkaten {{PLURAL:$2|ti bunggoy|dagiti bunggoy}}: $1',
-'listgrouprights-addgroup-all' => 'Inayon amin dagiti bunggoy',
-'listgrouprights-removegroup-all' => 'Ikkatem amin dagiti bunggoy',
-'listgrouprights-addgroup-self' => 'Inayon {{PLURAL:$2|ti bunggoy|dagiti bunggoy}} ti bukodda a pakabilangan: $1',
-'listgrouprights-removegroup-self' => 'Ikkaten {{PLURAL:$2|ti bunggoy|dagiti bungoy}} ti bukodda a pakabilangan: $1',
-'listgrouprights-addgroup-self-all' => 'Inayon amin dagiti bunggoy ti bukodmo a pakabilangan',
+'listgrouprights-helppage' => 'Help:Karbengan ti grupo',
+'listgrouprights-members' => '(listaan ti kamkameng)',
+'listgrouprights-addgroup' => 'Inayon {{PLURAL:$2|ti grupo|dagiti grupo}} : $1',
+'listgrouprights-removegroup' => 'Ikkaten {{PLURAL:$2|ti grupo|dagiti grupo}}: $1',
+'listgrouprights-addgroup-all' => 'Inayon amin dagiti grupo',
+'listgrouprights-removegroup-all' => 'Ikkatem amin dagiti grupo',
+'listgrouprights-addgroup-self' => 'Inayon {{PLURAL:$2|ti grupo|dagiti grupo}} ti bukod a pakabilangan: $1',
+'listgrouprights-removegroup-self' => 'Ikkaten {{PLURAL:$2|ti grupo|dagiti grupo}} manipud ti bukod a pakabilangan: $1',
+'listgrouprights-addgroup-self-all' => 'Inayon amin dagiti bunggoy ti bukod a pakabilangan',
 'listgrouprights-removegroup-self-all' => 'Ikkatem amin dagiti bunggoy ti bukod a pakabilangan',
 
 # Email user
 'mailnologin' => 'Awan ti pagipatulodan a pagtaengan',
-'mailnologintext' => 'Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga e-surat a pagtaengan idiay [[Special:Preferences|kaykayatmo]] ti agipatulod ti e-surat kadagiti sabsabali nga agar-aramat.',
-'emailuser' => 'E-suratan daytoy nga agar-aramat',
-'emailuser-title-target' => 'E-suratam daytoy nga {{GENDER:$1|agar-aramat}}',
-'emailuser-title-notarget' => 'E-suratan ti agar-aramat',
-'emailpage' => 'E-suratan ti agar-aramat',
+'mailnologintext' => 'Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga esurat a pagtaengan idiay [[Special:Preferences|kaykayatmo]] ti agipatulod ti esurat kadagiti sabsabali nga agar-aramat.',
+'emailuser' => 'Esuratan daytoy nga agar-aramat',
+'emailuser-title-target' => 'Esuratam daytoy nga {{GENDER:$1|agar-aramat}}',
+'emailuser-title-notarget' => 'Esuratan ti agar-aramat',
+'emailpage' => 'Esuratan ti agar-aramat',
 'emailpagetext' => 'Mabalinmo nga usaren ti kinabuklan dita baba nga agipatulod ti e-surat a mensahe ti daytoy nga {{GENDER:$1|agar-aramat}}.
 Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparang a kas "Naggapu" a pagtaengan ti e-surat, tapno ti nagipatulodam ket makasungbat kenka.',
 'usermailererror' => 'Kita ti surat ket nangisubli ti biddut:',
@@ -2069,7 +2067,7 @@ Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparan
 'emailtarget' => 'Ikabil ti nagan ti agar-aramat a pangitulodam',
 'emailusername' => 'Nagan ti agar-aramat:',
 'emailusernamesubmit' => 'Ited',
-'email-legend' => 'Ipatulod ti e-surat ti sabali a {{SITENAME}} ti agar-aramat',
+'email-legend' => 'Ipatulod ti esurat ti sabali a {{SITENAME}} ti agar-aramat',
 'emailfrom' => 'Naggapo kenni:',
 'emailto' => 'Para kenni:',
 'emailsubject' => 'Suheto:',
@@ -2106,7 +2104,7 @@ Dagiti masakbayan a panagsukat iti daytoy a panid ken dagiti mainaig a tungtunga
 'notvisiblerev' => 'Ti panagbalbaliw ti sabali nga agar-aramat ket naikkaten',
 'watchnochange' => 'Awan dagiti binambantayam ket naurnos dita panawen a naipakita.',
 'watchlist-details' => '{{PLURAL:$1|$1 panid|$1 dagiti panid}} a bambantayam, saan a mairaman dagiti panid ti tungtongan.',
-'wlheader-enotif' => '* Napakabaelan ti pakiammo ti e-surat.',
+'wlheader-enotif' => '* Napakabaelan ti pakiammo ti esurat.',
 'wlheader-showupdated' => "* Dagiti panid a nasukatan manipud ti kinaudi a panagsarungkarmo ket naipakita iti '''napuskol'''",
 'watchmethod-recent' => 'kitkitaen dagiti kinaudi nga inurnos kadagiti bambantayan a panid',
 'watchmethod-list' => 'kitkitaen dagiti bambantayan a panid kadagiti kinaudi nga inurnos',
@@ -2152,7 +2150,7 @@ Awanen ti sabali pay a paka-ammo a maipatulod kenka no adda pay dagiti masukatan
 Ti gayyemmo ti {{SITENAME}} a sistema ti pagpa-ammo
 
 --
-Ti panagsukat ti kasasaad ti e-surat a pagpa-ammom, sarungkaram ti
+Ti panagsukat ti kasasaad ti esurat a pagpa-ammom, sarungkaram ti
 {{canonicalurl:{{#special:Preferences}}}}
 
 Ti panagsukat kadagiti kasasaad ti bambantayam, sarungkaram ti
@@ -2260,7 +2258,7 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 'protect-level-autoconfirmed' => 'Palubosan laeng dagiti automatiko a napasingkedan nga agar-aramat',
 'protect-level-sysop' => 'Palubosan laeng dagiti administrador',
 'protect-summary-cascade' => 'agsariap',
-'protect-expiring' => 'agpaso inton $1 (UTC)',
+'protect-expiring' => 'agpaso intono $1 (UTC)',
 'protect-expiring-local' => 'agpaso $1',
 'protect-expiry-indefinite' => "inggana't inggana",
 'protect-cascade' => 'Salakniban dagiti pampanid a nairaman iti daytoy a panid (babaen ti sariap a salaknib)',
@@ -2428,7 +2426,7 @@ Ikkan ti nainaganan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid
 ** Saan a maawat a nagan ti agar-aramat',
 'ipb-hardblock' => 'Iparit kadagiti nakastrek nga agar-aramat ti agpabaliw iti naggapo ditoy nga IP a pagtaengan',
 'ipbcreateaccount' => 'Pawilan ti panagpartuat iti pakabilangan',
-'ipbemailban' => 'Pawilan ti agar-aramat nga agipatulod ti e-surat',
+'ipbemailban' => 'Pawilan ti agar-aramat nga agipatulod ti esurat',
 'ipbenableautoblock' => 'Automatiko ti serra ti naudi nga IP a pagtaengan nga inusar daytoy nga agar-aramat, ken dagiti sumaruno nga IP a pagtaengan a padasen da nga agpabaliw',
 'ipbsubmit' => 'Serraan daytoy nga agar-aramat',
 'ipbother' => 'Sabali nga oras:',
@@ -2444,8 +2442,8 @@ Ikkan ti nainaganan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid
 'blockipsuccesssub' => 'Balligi ti panangserra',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ket naserraanen.<br />
 Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti serra.',
-'ipb-blockingself' => 'Mangrugrugika nga agserra kenka! Sigurado nga kayatmo nga aramiden daytoy?',
-'ipb-confirmhideuser' => 'Mangrugrugika ti mangserra ti agar-aramat nga adda ti napabalinna nga "ilemmeng ti agar-aramat". Iddeppenna ti nagan daytoy nga agar-aramat kadagiti amin a listaan ken dagiti naikabkabil ti listaan. Sigurado ka a kasta ti kayatmo?',
+'ipb-blockingself' => 'Mangrugrugika nga agserra kenka! Sigurado a kayatmo nga aramiden daytoy?',
+'ipb-confirmhideuser' => 'Mangrugrugika ti mangserra ti agar-aramat nga adda ti napabalinna nga "ilemmeng ti agar-aramat". Iddeppenna ti nagan daytoy nga agar-aramat kadagiti amin a listaan ken dagiti naikabkabil ti listaan. Siguradoka a kasta ti kayatmo?',
 'ipb-edit-dropdown' => 'Urnosen dagiti rason ti panagserra',
 'ipb-unblock-addr' => 'Lukatan ti serra ni $1',
 'ipb-unblock' => 'Lukatan ti serra ti nagan ti agar-aramat wenno IP a pagtaengan',
@@ -2454,7 +2452,7 @@ Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti
 'unblockip' => 'Lukatan ti serra ti agar-aramat',
 'unblockiptext' => 'Usaren ti kinabuklan dita baba ti pinagisubli ti pinagserrek nga agsurat ti napalabas a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.',
 'ipusubmit' => 'Ikkaten daytoy a serra',
-'unblocked' => 'Naikkat ti panakaserra ni [[User:$1|$1]]',
+'unblocked' => 'Naikkat ti pannakaserra ni [[User:$1|$1]].',
 'unblocked-range' => '$1 naikkaten ti serra na',
 'unblocked-id' => 'Naikkaten ti serra ni $1',
 'blocklist' => 'Dagiti naserraan nga agar-aramat',
@@ -2474,7 +2472,7 @@ Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti
 'ipblocklist-localblock' => 'Serra a lokal',
 'ipblocklist-otherblocks' => 'Sabali {{PLURAL:$1|a serra|kadagiti serra}}',
 'infiniteblock' => "inggana't inggana",
-'expiringblock' => 'agpaso no $1 ti oras nga $2',
+'expiringblock' => 'agpaso intono $1 ti oras nga $2',
 'anononlyblock' => 'di am-ammo laeng',
 'noautoblockblock' => 'nabaldado ti auto a serra',
 'createaccountblock' => 'naserraan ti pannakapartuat ti pakabilangan',
@@ -2510,9 +2508,9 @@ Kitaen ti [[Special:BlockList|Listaan ti lapden nga IP]] para iti listaan kadagi
 'range_block_disabled' => 'Ti abilidad ti administrador nga agaramid ti naabutan a serra ket naiddep.',
 'ipb_expiry_invalid' => 'Imbalido ti oras a panagpaso.',
 'ipb_expiry_temp' => 'Ti serra ti nagan ti agar-aramat ket masapul a permanente.',
-'ipb_hide_invalid' => 'Saan a mapasardeng daytoy a pakabilangan; adda ngata adu unay nga inurnos na.',
+'ipb_hide_invalid' => 'Saan a mapasardeng daytoy a pakabilangan; adda ngata adu unay nga inurnosna.',
 'ipb_already_blocked' => ' "$1" ket naserraan',
-'ipb-needreblock' => '$1 ket naseraan. Kayatmo a sukatan ti serra na?',
+'ipb-needreblock' => '$1 ket naseraan. Kayatmo a sukatan ti serrana?',
 'ipb-otherblocks-header' => 'Sabali {{PLURAL:$1|a naserraan|kadagiti naserraan}}',
 'unblock-hideuser' => 'Saanmo a maisubli ti serra daytoy nga agar-aramat, nailemmengen ti nagan daytoy nga agar-aramat.',
 'ipb_cant_unblock' => 'Biddut: ID $1 ti serra a nabirukan. Baka nalukatan ti serranan.',
@@ -2529,7 +2527,7 @@ Pangngaasi ta kontakem ti agit-ited ti serbisio ti Internet mo wenno teknikal a
 'sorbsreason' => 'Ti IP a pagtaengam ket nakalista a kasla "nalukatan a proxy" idiay DNSBL nga inusar ti {{SITNAME}}.',
 'sorbs_create_account_reason' => 'Ti IP a pagtaengam ket nakalista a kasla "nalukatan proxy" idiay DNSBL nga inusar ti {{SITNAME}}.
 Saanka a makaaramid ti pakabilangan',
-'cant-block-while-blocked' => 'Saanmo a maserraan dagiti sabali nga agar-aramat no naserraan ka met.',
+'cant-block-while-blocked' => 'Saanmo a maserraan dagiti sabali nga agar-aramat no naserraanka met.',
 'cant-see-hidden-user' => 'Ti agar-aramat a kayatmo a serraan ket naserraan ken nailemmeng.
 Ket awan met ti karbengam nga agilemming ti agar-aramat, saan mo a makita wenno mabaliwan ti serra ti agar-aramat.',
 'ipbblocked' => 'Saanmo a mabalin ti agserra wenno agikkat ti serra ti sabali nga agar-aramat, ngamin ket naserraan ka met.',
@@ -2538,10 +2536,10 @@ Ket awan met ti karbengam nga agilemming ti agar-aramat, saan mo a makita wenno
 # Developer tools
 'lockdb' => 'Balunetan ti database',
 'unlockdb' => 'Lukatan ti database',
-'lockdbtext' => 'Ti panagserra ti database ket makaikkat ti abilidad kadagiti amin nga agar-aramat ti agurnos kadagiti panid, ti panagsukat dagiti kaykayat da, ti panagurnos dagiti bambantayan da, ken dagiti sabsabali pay a masapul ti panagsukat idiay database.
-Pangngaasi ta pasingkedam daytoy a kayatmo nga aramiden, ken luktam dayta database no malpas kan nga agsimpa.',
-'unlockdbtext' => 'Ti panaglukat ti database ket mangipasubli ti abilidad dagiti amin nga agar-aramat ti panagurnos kadagiti panid, ti panagsukat dagiti kaykayat da, ti panagurnos dagiti bambantayanda, ken dagiti amin a makasapul ti panagsukat idiay database.
-Pangngaasi ta pasingkedam a daytoy ti kayatmo nga aramiden.',
+'lockdbtext' => 'Ti panagserra ti database ket makaikkat ti abilidad kadagiti amin nga agar-aramat ti agurnos kadagiti panid, ti panagsukat dagiti kaykayatda, ti panagurnos dagiti bambantayanda, ken dagiti sabsabali pay a masapul ti panagsukat idiay database.
+Pangngaasi a pasingkedam daytoy no kayatmo nga aramiden, ken luktam dayta database no malpas kan nga agsimpa.',
+'unlockdbtext' => 'Ti panaglukat ti database ket mangipasubli ti abilidad dagiti amin nga agar-aramat ti panagurnos kadagiti panid, ti panagsukat dagiti kaykayatda, ti panagurnos dagiti bambantayanda, ken dagiti amin a makasapul ti panagsukat idiay database.
+Pangngaasi a pasingkedam a daytoy no kayatmo nga aramiden.',
 'lockconfirm' => 'Wen, talaga a kayatko a balunetan ti database.',
 'unlockconfirm' => 'Wen, talaga a kayatko a balunetan ti database.',
 'lockbtn' => 'Balunetan ti database',
@@ -2626,7 +2624,7 @@ Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
 'delete_and_move' => 'Ikkaten ken iyalis',
 'delete_and_move_text' => '== Masapul nga ikkaten ==
 Ti pangipanan ti panid ket "[[:$1]]" addan.
-Kayatmo nga ikkaten  tapno makaiyalis ka?',
+Kayatmo nga ikkaten  tapno makaiyaliska?',
 'delete_and_move_confirm' => 'Wen, ikkaten ti panid',
 'delete_and_move_reason' => 'Naikkat tapno mawayaan ti panaka-iyalis idiay "[[$1]]"',
 'selfmove' => 'Ti titulo ti taudan ken ti pangipanan ket agpadpada;
@@ -2708,7 +2706,7 @@ Pangngaasi a bisitaen ti [//www.mediawiki.org/wiki/Localisation Lokalisasion ti
 # Special:Import
 'import' => 'Agala kadagiti panid',
 'importinterwiki' => 'Agala ti transwiki',
-'import-interwiki-text' => 'Agpili ka ti wiki ken titulo ti panid nga alaem.
+'import-interwiki-text' => 'Agpilika ti wiki ken titulo ti panid nga alaem.
 Dagit panagbaliw a petsa ken dagiti nagan ti mannurat ket maipreserba.
 Amin a transwiki nga alaem ket mailista idiay [[Special:Log/import|listaan ti pinagala]].',
 'import-interwiki-source' => 'Taudan ti wiki/panid:',
@@ -2753,7 +2751,7 @@ Pangngaasi a padasem manen.',
 'import-error-special' => 'Ti panid ti "$1" ket saan a naala ngamin ket bukod ti  espesial a nagan a lugar a saan nga agpalubos ti pampanid.',
 'import-error-invalid' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket imbalido.',
 'import-error-unserialize' => 'Ti panagbaliw ti $2 iti panid ti "$1" ket di maipagsasaruno. Ti panagbalbaliw ket naireporta idi nga agus-usar ti modelo ti $3 a naipagsasaruno a kas $4.',
-'import-options-wrong' => 'Saan nga husto {{PLURAL:$2|a pagpilian|a pagpilpilian}}: <nowiki>$1</nowiki>',
+'import-options-wrong' => 'Saan a husto {{PLURAL:$2|a pagpilian|a pagpilpilian}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Ti naited a ramut ti panid ket imbalido a titulo.',
 'import-rootpage-nosubpage' => 'Ti nagan ti lugar ti "$1" iti ramut ti panid ket saan amangpalubos kadagiti apo ti panid.',
 
@@ -2814,7 +2812,7 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-t-recentchangeslinked' => 'Kinaudian a sinukatan  dagiti panid a nakasilpo ditoy a panid',
 'tooltip-feed-rss' => 'RSS a pakan para iti daytoy a panid',
 'tooltip-feed-atom' => 'Atom a pakan para iti daytoy a panid',
-'tooltip-t-contributions' => 'Kitaen ti listaan dagiti naaramidan daytoy nga agar-aramat',
+'tooltip-t-contributions' => 'Kitaen ti listaan dagiti naaramid daytoy nga agar-aramat',
 'tooltip-t-emailuser' => 'Patulodan ti e-surat daytoy nga agar-aramat',
 'tooltip-t-upload' => 'Agipan iti papeles',
 'tooltip-t-specialpages' => 'Listaan ti amin nga espesial a pampanid',
@@ -2892,16 +2890,16 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'pageinfo-subpages-name' => 'Apo dagiti panid ti daytoy a panid',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|baw-ing|bawbaw-ing}}; $3 {{PLURAL:$3|saan a baw-ing|saan a bawbaw-ing}})',
 'pageinfo-firstuser' => 'Nagpartuat ti panid',
-'pageinfo-firsttime' => 'Petsa a panakapartuat ti panid',
+'pageinfo-firsttime' => 'Petsa a pannakapartuat ti panid',
 'pageinfo-lastuser' => 'Kinaudi a nagurnos',
 'pageinfo-lasttime' => 'Petsa ti kinaudi a panag-urnos',
 'pageinfo-edits' => 'Dagup a bilang dagiti inurnos',
-'pageinfo-authors' => 'Dagup a bilang dagiti naisangsangayn a mannurat',
+'pageinfo-authors' => 'Dagup a bilang dagiti naisangsangayan a mannurat',
 'pageinfo-recent-edits' => 'Itay nabiit a bilang dagiti inurnos (ti uneg ti napalabas ti $1)',
 'pageinfo-recent-authors' => 'Itay nabiit a bilang dagiti naisangsangayan a mannurat',
 'pageinfo-magic-words' => 'Salamangka  {{PLURAL:$1|a balikas|a balbalikas}} ($1)',
 'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
-'pageinfo-templates' => 'Nailak-am  {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
+'pageinfo-templates' => 'Nailak-am {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
 'pageinfo-transclusions' => '{{PLURAL:$1|A panid|A pampanid}} ti nailak-an=m idiay ($1)',
 'pageinfo-toolboxlink' => 'Pakaammo ti panid',
 'pageinfo-redirectsto' => 'Maibaw-ing idiay',
@@ -2971,8 +2969,8 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'file-info-png-looped' => 'nasiluan',
 'file-info-png-repeat' => 'pinaayayam ti $1 {{PLURAL:$1|a beses|a beses}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|a kuadro| kadagiti kuadro}}',
-'file-no-thumb-animation' => "'''Paammo: Gapu kadagiti teknikal a panakaipatingga, dagiti bassit a ladawan ti daytoy a papeles ket saanto a maanimado.'''",
-'file-no-thumb-animation-gif' => "'''Paammo: Gapu kadagiti teknikal a panakaipatingga, dagiti bassit a ladawan ti nangato a resolusion dagiti  GIF nga imahen a kas daytoy ket saanto a maanimado.'''",
+'file-no-thumb-animation' => "'''Paammo: Gapu kadagiti teknikal a pannakaipatingga, dagiti bassit a ladawan ti daytoy a papeles ket saanto a maanimado.'''",
+'file-no-thumb-animation-gif' => "'''Paammo: Gapu kadagiti teknikal a pannakaipatingga, dagiti bassit a ladawan ti nangato a resolusion dagiti  GIF nga imahen a kas daytoy ket saanto a maanimado.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria dagiti kabarbaro a papeles',
@@ -3033,10 +3031,10 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-photometricinterpretation' => 'Piksel a kabuklan',
 'exif-orientation' => 'Pagturongan',
 'exif-samplesperpixel' => 'Bilang ti nagnagyan',
-'exif-planarconfiguration' => 'Pinakaurnong ti datos',
+'exif-planarconfiguration' => 'Pannaka-urnos ti datos',
 'exif-ycbcrsubsampling' => 'Subsampling ratio ti Y iti C',
 'exif-ycbcrpositioning' => 'Y ken C a panakaipatakderan',
-'exif-xresolution' => 'Horizontal resolution',
+'exif-xresolution' => 'Horisontal a resolusion',
 'exif-yresolution' => 'nakatakder a resolusion',
 'exif-stripoffsets' => 'Lokasion ti datos ti imahen',
 'exif-rowsperstrip' => 'Bilang ti ar-aray tunggal maysa a strip',
@@ -3057,7 +3055,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-flashpixversion' => 'Nasuportaran a Flashpix a bersion',
 'exif-colorspace' => 'Kolor ti lugar',
 'exif-componentsconfiguration' => 'Ti kayat a saoen ti tunggal maysa a nagyan',
-'exif-compressedbitsperpixel' => 'Ti pinagpekkel ti imahen',
+'exif-compressedbitsperpixel' => 'Moda ti kompresion ti imahen',
 'exif-pixelydimension' => 'Kaaba ti imahen',
 'exif-pixelxdimension' => 'Katayag ti imahen',
 'exif-usercomment' => 'Dagiti komentario ti agar-aramat',
@@ -3103,6 +3101,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-contrast' => 'Contrast',
 'exif-saturation' => 'Saturation',
 'exif-sharpness' => 'Kalawag',
+'exif-devicesettingdescription' => 'Deskripsion dagiti pannakaidisso ti ramit',
 'exif-subjectdistancerange' => 'Nasakup a kaadayo ti suheto',
 'exif-imageuniqueid' => 'Naisangsangayan nga ID ti imahen',
 'exif-gpsversionid' => 'Etiketa a bersion ti GPS',
@@ -3418,54 +3417,54 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'limitall' => 'amin',
 
 # Email address confirmation
-'confirmemail' => 'Pasingkedan ti e-surat a pagtaengam',
+'confirmemail' => 'Pasingkedan ti esurat a pagtaengam',
 'confirmemail_noemail' => 'Awan ti umisu nga e-surat a pagtaengam a naikabil idiay [[Special:Preferences|kaykayat ti agar-aramat]].',
-'confirmemail_text' => 'Ti {{SITNAME}} ket masapulna a pasingkedam ti e-surat a pagtaengam sakbay nga agusar ti -surat a langa.
+'confirmemail_text' => 'Ti {{SITNAME}} ket masapulna a pasingkedam ti esurat a pagtaengam sakbay nga agusar ti esurat a langa.
 Ipabalinmo dita baba a buton ti panagitulod ti pasingkedan a surat dita a pagtaengam.
 Ti surat ket mangiraman ti panilpo nga aglaon ti maysa a kodigo;
-ikabil ti panilpo dita pagbasabasam tapno mapasingkedam a ti e-surat a pagtaengam ket umisu.',
+ikabil ti panilpo dita pagbasabasam tapno mapasingkedam a ti esurat a pagtaengam ket umisu.',
 'confirmemail_pending' => 'Ti pasingkedan a kodigo ket naipatulod kenkan:
 no kadamdama ka a nangaramid ti pakabilangam, aguray ka pay ti mano a minutos a sumangpet sakbay ka nga agpadas ti agkiddaw ti baro a kodigo.',
 'confirmemail_send' => 'Agipatulod ti pasingkedan a kodigo',
-'confirmemail_sent' => 'Naipatuloden ti pammasingked nga e-surat.',
+'confirmemail_sent' => 'Naipatuloden ti pammasingked nga esurat.',
 'confirmemail_oncreate' => 'Ti pakasingkedan a kodigo ket naipatulod dita e-surat a pagtaengam.
 Daytoy a kodigo ket saan a masapul ti sumrek, ngem masapulmo nga ited sakbay ka nga agpabalin kadagiti e-surat a langa ti wiki.',
 'confirmemail_sendfailed' => 'Ti {{SITENAME}} ket saan a makaipatulod ti pammasingked a surat.
-Pangngaasi a kitaem ti e-surat a pagtaengam para kadagiti imbalido a karakter.
+Pangngaasi a kitaem ti esurat a pagtaengam para kadagiti imbalido a karakter.
 
 Insubli ti nangisurat: $1',
 'confirmemail_invalid' => 'Imbalido a kodigo ti pammasingked.
 Mabalin a nagpaso daytoy a kodigo.',
-'confirmemail_needlogin' => 'Masapulmo ti $1 tapno mapasingkedan ti e-surat a pagtaengam.',
-'confirmemail_success' => 'Napasingkedanen ti e-surat a pagtaengam.
+'confirmemail_needlogin' => 'Masapulmo ti $1 tapno mapasingkedan ti esurat a pagtaengam.',
+'confirmemail_success' => 'Napasingkedanen ti esurat a pagtaengam.
 Mabalinmo tattan ti [[Special:UserLogin|sumrek]] ken nanamen ti wiki.',
-'confirmemail_loggedin' => 'Napasingkedanen ti e-surat a pagtaengam.',
+'confirmemail_loggedin' => 'Napasingkedanen ti esurat a pagtaengam.',
 'confirmemail_error' => 'Adda banag a biddut ti panangidulin ti pammasingkedmo.',
-'confirmemail_subject' => 'Pammasingked ti e-surat a pagtaengan ti {{SITENAME}}',
+'confirmemail_subject' => 'Pammasingked ti esurat a pagtaengan ti {{SITENAME}}',
 'confirmemail_body' => 'Addaan, baka sika, ti naggapu ti IP a pagtaengan $1,
-ket nagrehistro ti pakabilangan "$2" iti daytoy nga e-surat a pagtaengan idiay {{SITENAME}}
+ket nagrehistro ti pakabilangan "$2" iti daytoy nga esurat a pagtaengan idiay {{SITENAME}}
 
 Tapno mapasingkedan a daytoy a pakabilangan ket kukuam ken ti 
-pinagpabalin ti e-surat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
+pinagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
 
 $3
 
 No *saanmo* nga inrehistro ti pakabilangam, surotem daytoy a panilpo
-ta pasardengem ti pinakasingkedan ti e-surat a  pagtaengam:
+ta pasardengem ti pinakasingkedan ti esurat a  pagtaengam:
 
 $5
 
 Daytoy a pammasingked a kodigo ket agpaso iti $4.',
 'confirmemail_body_changed' => 'Addaan, baka sika, ti naggapu ti IP a pagtaengam $1,
-ket nangsukat ti e-surat a pagtaengan ti pakabilangan "$2" iti daytoy a pagtaengan idiay {{SITENAME}}
+ket nangsukat ti esurat a pagtaengan ti pakabilangan "$2" iti daytoy a pagtaengan idiay {{SITENAME}}
 
 Tapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti 
-panagpabalin ti e-surat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
+panagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
 
 $3
 
 No *saanmo* nga inrehistro ti pakabilangam, surutem daytoy a panilpo
-ta pasardengem ti pinakasingkedan ti e-surat a pagtaengam:
+ta pasardengem ti pinakasingkedan ti esurat a pagtaengam:
 
 $5
 
@@ -3561,7 +3560,7 @@ Mabalinmo pay nga [[Special:EditWatchlist/raw|urnosen ti kilaw a listaan]].',
 'watchlistedit-raw-legend' => 'Urnosen ti kilaw a listaan ti bambantayan',
 'watchlistedit-raw-explain' => 'Dagiti titulo ti listaan ti bambantayam ket naipakita dita baba, ken mabaliwam nga urnosen babaen ti panagnayon ken panagkissay manipud ti listaan;
 maysa a titulo tunggal maysa a linia.
-No malpas ka, itakla ti "{{int:Watchlistedit-raw-submit}}".
+No malpaska, itakla ti "{{int:Watchlistedit-raw-submit}}".
 Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'watchlistedit-raw-titles' => 'Dagiti titulo:',
 'watchlistedit-raw-submit' => 'Pabaruen ti listaan ti bambantayan',
@@ -3601,12 +3600,12 @@ Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'version-license' => 'Lisensia',
 'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[//www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
 'version-poweredby-others' => 'dadduma pay',
-'version-credits-summary' => 'Kayat mi kuma a pammadayawan dagiti sumaganad a tao para kadagiti inparawadda ti [[Special:Version|MediaWiki]].',
-'version-license-info' => 'Ti MediaWiki ket nawaya a software; maiwarasmo ken/wenno mabaliwam babaen ti banag iti GNU General Public License a naipablaak babaen ti Free Software Foundation; nupay iti bersion 2 iti Lisensia, wenno (ti panagpilim) ti  ania man a bersion.
+'version-credits-summary' => 'Kayatmi koma a pammadayawan dagiti sumaganad a tao para kadagiti inparawadda iti [[Special:Version|MediaWiki]].',
+'version-license-info' => 'Ti MediaWiki ket nawaya a sopwer; maiwarasmo ken/wenno mabaliwam babaen ti banag iti GNU General Public License a naipablaak babaen ti Free Software Foundation; nupay iti bersion 2 iti Lisensia, wenno (ti panagpilim) ti  aniaman a bersion.
 
-Ti MediaWiki ket naiwarwaras nga adda ti namnama a makatulong, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANAKAILAKO wenno KALAINGAN NA ITI DAYTOY A PANGGEP. Kitaen ti GNU Sapasap a  Publiko a Lisensia para kadagiti adu pay a salaysay.
+Ti MediaWiki ket naiwarwaras nga adda ti namnama a makatulong, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANAKAILAKO wenno KALAINGAN NA ITI DAYTOY A PANGGEP. Kitaen ti GNU Sapasap a Publiko a Lisensia para kadagiti adu pay a salaysay.
 
-Naka-awat ka kuman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a  Publiko a Lisensia] a nairaman iti daytoy a programa; no saan, agsurat ka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem idiay online].',
+Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a  Publiko a Lisensia] a nairaman iti daytoy a programa; no saan, agsuratka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem idiay online].',
 'version-software' => 'Naikabil a software',
 'version-software-product' => 'Produkto',
 'version-software-version' => 'Bersion',
@@ -3644,7 +3643,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 'specialpages-group-changes' => 'Kaudian a sinukatan ken listaan',
 'specialpages-group-media' => 'Dagiti padamag ti media ken panag-ipan',
 'specialpages-group-users' => 'Dagiti agar-aramat ken karkarbengan',
-'specialpages-group-highuse' => 'Adu ti panaka-usar a pampanid',
+'specialpages-group-highuse' => 'Adu ti pannaka-usar a pampanid',
 'specialpages-group-pages' => 'Listaan dagiti panid',
 'specialpages-group-pagetools' => 'Ramramit ti panid',
 'specialpages-group-wiki' => 'Datos ken ramramit',
@@ -3660,10 +3659,10 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 #Ikabil ti "regular expression fragments" (idiay laeng paset nga ikabil ti tengnga ti  //) dita baba
 #Dagitoy ipada na ti URLs ti ruar (ti napudot a naikapet) imahen 
 #Dagiti agpada ket agparang nga  imahen, ket no saan ti panilpo ti imahen ti agparang laeng
-#Dagiti linia nga  umuna iti # ket maipabalin a komentario
+#Dagiti linia nga umuna iti # ket maipabalin a komentario
 #Daytoy ket "sensetibo ti kadakkel ti letra"
 
-#Ikabil dagita "regex fragment" ti ngato daytoy a linia. Baybayan daytoy a linia a kastoy</pre>',
+#Ikabil dagita "regex fragment" ti ngato daytoy a linia. Baybay-an a kastoy daytoy a linia</pre>',
 
 # Special:Tags
 'tags' => 'Umisu a sukatan dagiti etiketa',
@@ -3691,7 +3690,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 'compare-revision-not-exists' => 'Awan met ti pinagbaliw dayta titulo a nainaganam.',
 
 # Database error messages
-'dberr-header' => 'Adda ti pakirut na daytoy a wiki',
+'dberr-header' => 'Adda ti pakirutna daytoy a wiki',
 'dberr-problems' => 'Pasensian a!
 Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'dberr-again' => 'Padasem ti agururay to manu a minutos ken agikarga.',
@@ -3701,7 +3700,7 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'dberr-cachederror' => 'Daytoy ket cached a kopia ti kiniddaw mo a panid, ken baka saan pay a barbaro.',
 
 # HTML forms
-'htmlform-invalid-input' => 'Adda pakirut kadagiti inkabil mo',
+'htmlform-invalid-input' => 'Adda pakirut kadagiti inkabilmo',
 'htmlform-select-badoption' => 'Ti kuwenta a nainaganam ket saan a mabalin a pagpilian.',
 'htmlform-int-invalid' => 'Ti kuwenta a nainaganam ket saan a sibubukel.',
 'htmlform-float-invalid' => 'Ti kuwenta a nainaganam ket saan a numero.',
@@ -3717,17 +3716,17 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'sqlite-no-fts' => '$1 awan ti suporta ti napno a testo ti panagbiruk',
 
 # New logging system
-'logentry-delete-delete' => 'Inikkat ni $1 ti panid  ti $3',
-'logentry-delete-restore' => 'Insubli ni $1 ti panid ti $3',
-'logentry-delete-event' => 'Sinukatan ni $1  ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
-'logentry-delete-revision' => 'Sinukatan ni $1 ti panagkita  {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
-'logentry-delete-event-legacy' => 'Sinukatan ni $1  ti panagkita ti listaan dagiti pasamak idiay $3',
-'logentry-delete-revision-legacy' => 'Sinukatan ni $1 ti panagkita dagiti panagbaliw idiay panid $3',
-'logentry-suppress-delete' => 'Pinasardeng ni $1 ti panid ti $3',
-'logentry-suppress-event' => 'Sekreto a sinukatan ni $1 ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
-'logentry-suppress-revision' => 'Sekreto a sinukatan ni $1 ti panagkita {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
-'logentry-suppress-event-legacy' => 'Sekreto a sinukatan ni $1 ti panagkita ti listaan dagiti pasamak idiay $3',
-'logentry-suppress-revision-legacy' => 'Sekreto a sinukatan ni $1  ti panagkita dagiti panagbaliw idiay panid $3',
+'logentry-delete-delete' => 'Ni $1 ket {{GENDER:$2|inikkatna}} ti panid ti $3',
+'logentry-delete-restore' => 'Ni $1 ket {{GENDER:$2|insublina}} ti panid ti $3',
+'logentry-delete-event' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
+'logentry-delete-revision' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita  {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
+'logentry-delete-event-legacy' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita ti listaan dagiti pasamak idiay $3',
+'logentry-delete-revision-legacy' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita dagiti panagbaliw idiay panid $3',
+'logentry-suppress-delete' => 'Ni $1 ket {{GENDER:$2|pinasardengna}} ti panid ti $3',
+'logentry-suppress-event' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
+'logentry-suppress-revision' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
+'logentry-suppress-event-legacy' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita ti listaan dagiti pasamak idiay $3',
+'logentry-suppress-revision-legacy' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita dagiti panagbaliw idiay panid $3',
 'revdelete-content-hid' => 'nailemmeng ti nagyan na',
 'revdelete-summary-hid' => 'nailemmeng ti pakabuklan a naurnos',
 'revdelete-uname-hid' => 'nailemmeng ti nagan ti agar-aramat',
@@ -3736,20 +3735,20 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'revdelete-uname-unhid' => 'saan a nailemmeng ti nagan ti agar-aramat',
 'revdelete-restricted' => 'naipakat dagiti pammarit kadagiti administrador',
 'revdelete-unrestricted' => 'naikkat dagiti pammarit para kadagiti administrador',
-'logentry-move-move' => 'Inyalis ni  $1 daytoy panid $3 idiay $4',
-'logentry-move-move-noredirect' => 'Inyalis ni $1  ti panid ti $3 idiay $4 a saan a nangibati ti baw-ing',
-'logentry-move-move_redir' => 'Inyalis ni $1 ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing',
-'logentry-move-move_redir-noredirect' => 'Inyalis ni $1 ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing a saan a nangibati ti baw-ing',
-'logentry-patrol-patrol' => 'Minarkaan ni $1 ti panagbaliw a $4 ti panid ti  $3 a napatruliaan',
-'logentry-patrol-patrol-auto' => 'Automatiko a minarkaan ni $1 ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
-'logentry-newusers-newusers' => 'Nagpartuat idi ti $1 a pakabilangan ti agar-aramat',
-'logentry-newusers-create' => 'Nagpartuat idi ti $1 a pakabilangan ti agar-aramat',
-'logentry-newusers-create2' => 'Nagpartuat ni ti $3 a pakabilangan ti agar-aramat babaen ni $1',
-'logentry-newusers-byemail' => 'Ti pakabilangan a $3 ket pinartuat idi babaen ni $1 ken ti kontrasenias ket naipatulod idi babaen ti e-surat',
-'logentry-newusers-autocreate' => 'Ti pakabilangan ni $1 ket automatiko a napartuat',
-'logentry-rights-rights' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3 manipud ti $4 iti $5',
-'logentry-rights-rights-legacy' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3',
-'logentry-rights-autopromote' => 'Ni $1 ket automatiko idi a naipangato manipud ti $4 iti $5',
+'logentry-move-move' => 'Ni $1 ket {{GENDER:$2|inyalisna}}ti panid $3 idiay $4',
+'logentry-move-move-noredirect' => 'Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 idiay $4 a saan a nangibati ti baw-ing',
+'logentry-move-move_redir' => 'Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing',
+'logentry-move-move_redir-noredirect' => 'Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing a saan a nangibati ti baw-ing',
+'logentry-patrol-patrol' => 'Ni $1 ket {{GENDER:$2|minarkaanna}} ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
+'logentry-patrol-patrol-auto' => 'Ni $1 ket automatiko a {{GENDER:$2|minarkaanna}} ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
+'logentry-newusers-newusers' => 'Ti pakabilangan idi ni $1 ket {{GENDER:$2|napartuat}}',
+'logentry-newusers-create' => 'Ti pakabilangan idi ni $1 ket {{GENDER:$2|napartuat}}',
+'logentry-newusers-create2' => 'Ti pakabilangan ti agar-aramat $3 ket {{GENDER:$2|napartuat}} idi babaen ni $1',
+'logentry-newusers-byemail' => 'Ti pakabilangan a $3 ket {{GENDER:$2|pinartuat}} idi babaen ni $1 ken ti kontrasenias ket naipatulod idi babaen ti esurat',
+'logentry-newusers-autocreate' => 'Ti pakabilangan ti agar-aramat ni $1 ket automatiko a {{GENDER:$2|napartuat}}',
+'logentry-rights-rights' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3 manipud ti $4 iti $5',
+'logentry-rights-rights-legacy' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3',
+'logentry-rights-autopromote' => 'Ni $1 ket automatiko idi a {{GENDER:$2|naipangato}} manipud ti $4 iti $5',
 'rightsnone' => '(awan)',
 
 # Feedback
@@ -3773,10 +3772,10 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'searchsuggest-containing' => 'naglaon ti...',
 
 # API errors
-'api-error-badaccess-groups' => 'Saan mo a mabalin ti agipan kadagiti papeles iti daytoy a wiki.',
+'api-error-badaccess-groups' => 'Saanmo a mabalin ti agipan kadagiti papeles iti daytoy a wiki.',
 'api-error-badtoken' => 'Kinauneg a biddut: Dakes a tandaan.',
 'api-error-copyuploaddisabled' => 'Ti mangipan babaen ti URL ket nabaldado ditoy a server.',
-'api-error-duplicate' => 'Adda {{PLURAL:$1|ket [$2 a sabali a papeles] |dagiti [$2 sabsabali a papeles]}} nga addan ditoy a pagsaadan nga agpada ti nagyan da.',
+'api-error-duplicate' => 'Adda {{PLURAL:$1|ket [$2 a sabali a papeles] |dagiti [$2 sabsabali a papeles]}} nga addan ditoy a pagsaadan nga agpada ti nagyanda.',
 'api-error-duplicate-archive' => 'Adda {{PLURAL:$1|idi [$2 sabali a papeles]|dagidi [$2 sabali a papeles]}} nga adda ditoy a pagsaadan nga agpada ti nagyan da, ngem {{PLURAL:$1|daytoy|dagitoy}} ket naikkat.',
 'api-error-duplicate-archive-popup-title' => 'Duplikado {{PLURAL:$1|ti papeles|dagiti papeles}} a naikkaten.',
 'api-error-duplicate-popup-title' => 'Duplikado {{PLURAL:$1|ti papeles|dagiti papeles}}.',
@@ -3793,7 +3792,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-hookaborted' => 'Ti panagbabaro a pinadasmo ket napasardeng iti pangpa-atiddog a kawit.',
 'api-error-http' => 'Kinauneg a biddut: Saan a makaikabit idiay server.',
 'api-error-illegal-filename' => 'Ti nagan daytoy a papeles ket saan a maipalubos.',
-'api-error-internal-error' => 'Kinauneg a biddut: Addaan ti dakes a napasamak ti panagaramid ti panagipan mo iti daytoy a wiki.',
+'api-error-internal-error' => 'Kinauneg a biddut: Addaan ti dakes a napasamak ti panagaramid ti panagipanmo iti daytoy a wiki.',
 'api-error-invalid-file-key' => 'Kinauneg a biddut: Saan a nabirukan ti papeles idiay temporario a nagidulinan.',
 'api-error-missingparam' => 'Kinauneg a biddut: Kurang dagiti parametro iti kiddaw.',
 'api-error-missingresult' => 'Kinauneg a biddut: Saan a na-ammoan no ti kopia ket nagballigi.',
@@ -3807,9 +3806,9 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-publishfailed' => 'Kinauneg a biddut: Napaay ti server a nagipablaak ti temporario a papeles.',
 'api-error-timeout' => 'Saan a simmungbat ti server iti nanamnama nga oras.',
 'api-error-unclassified' => 'Adda di amammo a biddut a rumsua.',
-'api-error-unknown-code' => 'Di amamo a biddut: "$1"',
-'api-error-unknown-error' => 'Kinauneg a biddut: Addaan ti dakes a napasamak idi inpadas mo ti agipan ti papeles mo.',
-'api-error-unknown-warning' => 'Di am-ammo a ballaag: $1',
+'api-error-unknown-code' => 'Di am-ammo a biddut: "$1".',
+'api-error-unknown-error' => 'Kinauneg a biddut: Addaan ti dakes a napasamak idi nagipadaska ti agipan ti papelesmo.',
+'api-error-unknown-warning' => 'Di am-ammo a ballaag: "$1".',
 'api-error-unknownerror' => 'Di am-ammo a biddut: "$1".',
 'api-error-uploaddisabled' => 'Nabaldado ti mangipapan iti daytoy a wiki.',
 'api-error-verification-error' => 'Dakes ngata daytoy a papeles, wenno addaan ti madi a pagpa-atiddog.',
index 8b883bd..19c2042 100644 (file)
@@ -625,11 +625,11 @@ Il database ha restituito il seguente errore "$3: $4".',
 L'amministratore di sistema che ha imposto il blocco ha fornito questa spiegazione: $1",
 'missing-article' => 'Il database non ha trovato il testo di una pagina che avrebbe dovuto trovare sotto il nome di "$1" $2.
 
-Di solito ciò si verifica quando viene richiamato, a partire dalla cronologia o dal confronto tra revisioni, un collegamento a una pagina cancellata, a un confronto tra revisioni inesistenti o a un confronto tra revisioni ripulite dalla cronologia.
+Di solito ciò si verifica quando viene richiamato, a partire dalla cronologia o dal confronto tra versioni, un collegamento a una pagina cancellata, a un confronto tra versioni inesistenti o a un confronto tra versioni ripulite dalla cronologia.
 
 In caso contrario, si è probabilmente scoperto un errore del software MediaWiki.
 Si prega di segnalare l\'accaduto a un [[Special:ListUsers/sysop|amministratore]] specificando la URL in questione.',
-'missingarticle-rev' => '(numero della revisione: $1)',
+'missingarticle-rev' => '(numero della versione: $1)',
 'missingarticle-diff' => '(Diff: $1, $2)',
 'readonly_lag' => 'Il database è stato bloccato automaticamente per consentire ai server con i database slave di sincronizzarsi con il master',
 'internalerror' => 'Errore interno',
@@ -758,8 +758,8 @@ Per favore, effettua un accesso non appena la ricevi.',
 'blocked-mailpassword' => 'Per prevenire abusi, non è consentito usare la funzione "Invia nuova password" da un indirizzo IP bloccato.',
 'eauthentsent' => "Un messaggio e-mail di conferma è stato spedito all'indirizzo indicato.
 Per abilitare l'invio di messaggi e-mail per questo accesso è necessario seguire le istruzioni che vi sono indicate, in modo da confermare che si è i legittimi proprietari dell'indirizzo",
-'throttled-mailpassword' => 'Una nuova password è già stata inviata da meno di {{PLURAL:$1|1 ora|$1 ore}}.
-Per prevenire abusi, la funzione "Invia nuova password" può essere usata solo una volta ogni {{PLURAL:$1|ora|$1 ore}}.',
+'throttled-mailpassword' => 'Una email di reimpostazione della password è già stata inviata da meno di {{PLURAL:$1|1 ora|$1 ore}}.
+Per prevenire abusi, la funzione di reimpostazione della password può essere usata solo una volta ogni {{PLURAL:$1|ora|$1 ore}}.',
 '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.",
@@ -809,7 +809,7 @@ La password potrebbe essere stata già cambiata, oppure potrebbe essere stata ri
 
 # Special:PasswordReset
 'passwordreset' => 'Reimposta password',
-'passwordreset-text' => 'Compila questo modulo per ricevere i dettagli del tuo account via e-mail.',
+'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-pretext' => '{{PLURAL:$1||Immetti uno dei dati richiesti qui sotto}}',
@@ -819,7 +819,7 @@ La password potrebbe essere stata già cambiata, oppure potrebbe essere stata ri
 'passwordreset-capture-help' => "Se si seleziona questa casella, l'indirizzo e-mail (con la password temporanea), verrà mostrato a voi, oltre ad essere inviato all'utente.",
 'passwordreset-email' => 'Indirizzo e-mail:',
 'passwordreset-emailtitle' => 'Dettagli account su {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo e-mail sono:
+'passwordreset-emailtext-ip' => "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:
 
 $2
 
@@ -827,7 +827,7 @@ $2
 Dovresti accedere e scegliere una nuova password ora. 
 
 Se non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
-'passwordreset-emailtext-user' => "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo e-mail sono:
+'passwordreset-emailtext-user' => "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:
 
 $2
 
@@ -837,9 +837,9 @@ Dovresti accedere e scegliere una nuova password ora.
 Se non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
 'passwordreset-emailelement' => 'Nome utente: $1
 Password temporanea: $2',
-'passwordreset-emailsent' => 'È stata inviata una e-mail di promemoria.',
-'passwordreset-emailsent-capture' => 'È stata inviata una e-mail di promemoria, il contenuto è riportato di seguito.',
-'passwordreset-emailerror-capture' => "È stata generata l'e-mail di promemoria riportata di seguito. L'invio all'utente non è riuscito: $1",
+'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",
 
 # Special:ChangeEmail
 'changeemail' => "Modifica l'indirizzo e-mail",
@@ -2024,9 +2024,9 @@ Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descri
 Esse potrebbero dover puntare a una pagina più appropriata.<br />
 Vengono considerate pagine di disambiguazione tutte quelle che contengono i template elencati in [[MediaWiki:Disambiguationspage]].",
 
-'pageswithprop' => 'Pagine con una pagina di proprietà',
-'pageswithprop-legend' => 'Pagine con una pagina di proprietà',
-'pageswithprop-text' => 'Questa pagina elenca le pagine che utilizzano una particolare pagina di proprietà.',
+'pageswithprop' => 'Pagine con una proprietà di pagina',
+'pageswithprop-legend' => 'Pagine con una proprietà di pagina',
+'pageswithprop-text' => 'Questa pagina elenca le pagine che utilizzano una particolare proprietà di pagina.',
 'pageswithprop-prop' => 'Nome proprietà:',
 'pageswithprop-submit' => 'Vai',
 
@@ -3901,17 +3901,17 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'sqlite-no-fts' => '$1 senza la possibilità di ricerca completa nel testo',
 
 # New logging system
-'logentry-delete-delete' => '$1 ha cancellato la pagina $3',
-'logentry-delete-restore' => '$1 ha ripristinato "$3"',
-'logentry-delete-event' => '$1 ha modificato la visibilità di {{PLURAL:$5|un\'azione del registro|$5 azioni del registro}} di "$3": $4',
-'logentry-delete-revision' => '$1 ha modificato la visibilità per {{PLURAL:$5|una revisione|$5 revisioni}} della pagina $3: $4',
-'logentry-delete-event-legacy' => '$1 ha modificato la visibilità di alcune azioni del registro di "$3"',
-'logentry-delete-revision-legacy' => '$1 ha modificato la visibilità per le revisioni della pagina $3',
-'logentry-suppress-delete' => '$1 ha nascosto la pagina "$3"',
-'logentry-suppress-event' => '$1 ha segretamente modificato la visibilità di {{PLURAL:$5|un\'azione del registro|$5 azioni del registro}} di "$3": $4',
-'logentry-suppress-revision' => '$1 ha segretamente modificato la visibilità di {{PLURAL:$5|una versione|$5 versioni}} di "$3": $4',
-'logentry-suppress-event-legacy' => '$1 ha segretamente modificato la visibilità di alcune azioni del registro di "$3"',
-'logentry-suppress-revision-legacy' => '$1 ha segretamente modificato la visibilità di alcune versioni di "$3"',
+'logentry-delete-delete' => '$1 {{GENDER:$2|ha cancellato}} la pagina $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|ha ripristinato}} la pagina "$3"',
+'logentry-delete-event' => '$1 {{GENDER:$2|ha modificato}} la visibilità di {{PLURAL:$5|un\'azione del registro|$5 azioni del registro}} di "$3": $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|ha modificato}} la visibilità per {{PLURAL:$5|una versione|$5 versioni}} della pagina $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|ha modificato}} la visibilità di alcune azioni del registro di $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|ha modificato}} la visibilità per le versioni della pagina $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|ha nascosto}} la pagina $3',
+'logentry-suppress-event' => "$1 {{GENDER:$2|ha segretamente modificato}} la visibilità di {{PLURAL:$5|un'azione del registro|$5 azioni del registro}} di $3: $4",
+'logentry-suppress-revision' => '$1 {{GENDER:$2|ha segretamente modificato}} la visibilità di {{PLURAL:$5|una versione|$5 versioni}} della pagina $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|ha segretamente modificato}} la visibilità di alcune azioni del registro di $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|ha segretamente modificato}} la visibilità di alcune versioni della pagina $3',
 'revdelete-content-hid' => 'contenuto nascosto',
 'revdelete-summary-hid' => 'oggetto della modifica nascosto',
 'revdelete-uname-hid' => 'nome utente nascosto',
@@ -3920,20 +3920,20 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'revdelete-uname-unhid' => 'nome utente ripristinato',
 'revdelete-restricted' => 'limitazioni ai soli amministratori attivate',
 'revdelete-unrestricted' => 'limitazioni ai soli amministratori rimosse',
-'logentry-move-move' => '$1 ha spostato la pagina $3 a $4',
-'logentry-move-move-noredirect' => '$1 ha spostato la pagina $3 a $4 senza lasciare redirect',
-'logentry-move-move_redir' => '$1 ha spostato la pagina $3 a $4 tramite redirect',
-'logentry-move-move_redir-noredirect' => '$1 ha spostato la pagina $3 a $4 al posto di un redirect senza lasciare redirect',
-'logentry-patrol-patrol' => '$1 ha segnato la versione $4 della pagina $3 come verificata',
-'logentry-patrol-patrol-auto' => '$1 ha segnato automaticamente la versione $4 della pagina $3 come verificata',
-'logentry-newusers-newusers' => "L'utenza $1 è stata creata",
-'logentry-newusers-create' => "L'utenza $1 è stata creata",
-'logentry-newusers-create2' => "L'utenza $3 è stata creata da $1",
-'logentry-newusers-byemail' => "L'utente $3 è stato creato da $1 e la password è stata inviata via e-mail",
-'logentry-newusers-autocreate' => "L'utenza $1 è stata creata automaticamente",
-'logentry-rights-rights' => "$1 ha modificato l'appartenenza di $3 dal gruppo $4 al gruppo $5",
-'logentry-rights-rights-legacy' => "$1 ha modificato l'appartenenza a gruppi di $3",
-'logentry-rights-autopromote' => '$1 è stato/a automaticamente promosso/a da $4 a $5',
+'logentry-move-move' => '$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 senza lasciare redirect',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 tramite redirect',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 al posto di un redirect senza lasciare redirect',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|ha segnato}} la versione $4 della pagina $3 come verificata',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|ha segnato}} automaticamente la versione $4 della pagina $3 come verificata',
+'logentry-newusers-newusers' => "L'utenza $1 è stata {{GENDER:$2|creata}}",
+'logentry-newusers-create' => "L'utenza $1 è stata {{GENDER:$2|creata}}",
+'logentry-newusers-create2' => "L'utenza $3 è stata {{GENDER:$2|creata}} da $1",
+'logentry-newusers-byemail' => "L'utenza $3 è stata {{GENDER:$2|creata}} da $1 e la password è stata inviata via email",
+'logentry-newusers-autocreate' => "L'utenza $1 è stata {{GENDER:$2|creata}} automaticamente",
+'logentry-rights-rights' => "$1 {{GENDER:$2|ha modificato}} l'appartenenza di $3 dal gruppo $4 al gruppo $5",
+'logentry-rights-rights-legacy' => "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3",
+'logentry-rights-autopromote' => '$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5',
 'rightsnone' => '(nessuno)',
 
 # Feedback
index 3b89696..1afc66c 100644 (file)
@@ -59,6 +59,7 @@
  * @author 欅
  * @author 蝋燭α
  * @author 青子守歌
+ * @author 아라
  */
 
 $datePreferences = array(
@@ -848,14 +849,14 @@ Cookieを有効にしていることを確認して、このページを再読
 この申請をしたのが他人の場合、あるいはパスワードを思い出してパスワード変更が不要になった場合は、
 このメッセージを無視して、引き続き以前のパスワードを使用し続けることができます。',
 'noemail' => '利用者「$1」のメールアドレスは登録されていません。',
-'noemailcreate' => '有効なメールアドレスを入力する必要があります',
+'noemailcreate' => '有効なメールアドレスを入力する必要があります',
 'passwordsent' => '新しいパスワードを「$1」に登録されたメールアドレスにお送りしました。
 メールが届いたら、再度ログインしてください。',
 'blocked-mailpassword' => 'ご使用中のIPアドレスからの編集はブロックされており、不正利用防止のため、パスワードの再発行機能は使用できません。',
 'eauthentsent' => '指定したメールアドレスに、アドレス確認のためのメールをお送りしました。
 メールに記載された手順に従って、このアカウントの所有者であることの確認が取れると、このアカウント宛のメールを受け取れるようになります。',
-'throttled-mailpassword' => '新しいパスワードは過去 {{PLURAL:$1|$1 時間}}に送信済みです。
-悪用防止のため、パスワードの再発行は {{PLURAL:$1|$1 時間}}に 1 回のみです。',
+'throttled-mailpassword' => 'パスワード再設定メールを過去 {{PLURAL:$1|$1 時間}}に送信済みです。
+悪用防止のため、パスワードの再設定は {{PLURAL:$1|$1 時間}}に 1 回のみです。',
 'mailerror' => 'メールを送信する際にエラーが発生しました: $1',
 'acct_creation_throttle_hit' => 'あなたと同じ IP アドレスでこのウィキに訪れた人が、最近 24 時間で {{PLURAL:$1|$1 アカウント}}を作成しており、これはこの期間で作成が許可されている最大数です。
 そのため、現在この IP アドレスではアカウントをこれ以上作成できません。',
@@ -910,7 +911,7 @@ Cookieを有効にしていることを確認して、このページを再読
 
 # Special:PasswordReset
 'passwordreset' => 'パスワードの再設定',
-'passwordreset-text' => 'このフォームに入力すると、アカウント詳細のリマインダーをメールでお送りします。',
+'passwordreset-text' => 'このフォームに記入すると、パスワードを再設定できます。',
 'passwordreset-legend' => 'パスワードの再設定',
 'passwordreset-disabled' => 'パスワードの再設定は、このウィキでは無効になっています。',
 'passwordreset-pretext' => '{{PLURAL:$1||下記のデータのいずれか 1 つを入力してください}}',
@@ -920,8 +921,8 @@ Cookieを有効にしていることを確認して、このページを再読
 'passwordreset-capture-help' => 'このボックスにチェックを入れると、利用者に送信されるメールの内容 (仮パスワードを含む) をあなたも閲覧できます。',
 'passwordreset-email' => 'メールアドレス:',
 'passwordreset-emailtitle' => '{{SITENAME}}上のアカウントの詳細',
-'passwordreset-emailtext-ip' => '誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4) での
\81\82ã\81ªã\81\9fã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°æ\83\85å ±ã\82\92é\80\81ä¿¡するよう申請しました。
+'passwordreset-emailtext-ip' => '誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4)
\81§ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92å\86\8d設å®\9aするよう申請しました。
 以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。
 
 $2
@@ -932,7 +933,7 @@ $2
 覚えていてそれを変更したくない場合には、このメッセージを無視して以前のパスワードを
 使用し続けることができます。',
 'passwordreset-emailtext-user' => '{{SITENAME}} の利用者 $1 があなたの {{SITENAME}} ($4)
\81«ã\81\8aã\81\91ã\82\8bã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°æ\83\85å ±ã\82\92é\80\81ä¿¡するよう申請しました。
\81§ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92å\86\8d設å®\9aするよう申請しました。
 以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。
 
 $2
@@ -944,9 +945,9 @@ $2
 以前のパスワードを使い続けることができます。',
 'passwordreset-emailelement' => '利用者名: $1
 仮パスワード: $2',
-'passwordreset-emailsent' => '確認メールをお送りしました。',
-'passwordreset-emailsent-capture' => '下記の内容の、確認メールをお送りしました。',
-'passwordreset-emailerror-capture' => '以下の内容の確認メールを生成しましたが、利用者への送信に失敗しました: $1',
+'passwordreset-emailsent' => 'パスワード再設定メールをお送りしました。',
+'passwordreset-emailsent-capture' => '下記の内容の、パスワード再設定メールをお送りしました。',
+'passwordreset-emailerror-capture' => '以下の内容のパスワード再設定メールを生成しましたが、利用者への送信に失敗しました: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'メールアドレスの変更',
@@ -4276,17 +4277,17 @@ MediaWikiは、有用であることを期待して配布されていますが
 'sqlite-no-fts' => '$1 (全文検索なし)',
 
 # New logging system
-'logentry-delete-delete' => '$1 がページ「$3」を削除しました',
-'logentry-delete-restore' => '$1 がページ「$3」を復元しました',
-'logentry-delete-event' => '$1 が$3の{{PLURAL:$5|記録項目$5件}}の閲覧レベルを変更しました: $4',
-'logentry-delete-revision' => '$1 がページ「$3」の{{PLURAL:$5|$5版}}の閲覧レベルを変更しました: $4',
-'logentry-delete-event-legacy' => '$1 が「$3」の記録項目の閲覧レベルを変更しました',
-'logentry-delete-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを変更しました',
-'logentry-suppress-delete' => '$1 がページ「$3」を隠蔽しました',
-'logentry-suppress-event' => '$1 が$3の{{PLURAL:$5|記録項目$5件}}の閲覧レベルを見えない形で変更しました: $4',
-'logentry-suppress-revision' => '$1 がページ「$3」の{{PLURAL:$5|$5版}}の閲覧レベルを見えない形で変更しました: $4',
-'logentry-suppress-event-legacy' => '$1 が$3で記録項目の閲覧レベルを見えない形で変更しました',
-'logentry-suppress-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを見えない形で変更しました',
+'logentry-delete-delete' => '$1 がページ「$3」を{{GENDER:$2|削除しました}}',
+'logentry-delete-restore' => '$1 がページ「$3」を{{GENDER:$2|復元しました}}',
+'logentry-delete-event' => '$1 が$3の{{PLURAL:$5|記録項目$5件}}の閲覧レベルを{{GENDER:$2|変更しました}}: $4',
+'logentry-delete-revision' => '$1 がページ「$3」の{{PLURAL:$5|$5版}}の閲覧レベルを{{GENDER:$2|変更しました}}: $4',
+'logentry-delete-event-legacy' => '$1 が「$3」の記録項目の閲覧レベルを{{GENDER:$2|変更しました}}',
+'logentry-delete-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを{{GENDER:$2|変更しました}}',
+'logentry-suppress-delete' => '$1 がページ「$3」を{{GENDER:$2|隠蔽しました}}',
+'logentry-suppress-event' => '$1 が$3の{{PLURAL:$5|記録項目$5件}}の閲覧レベルを見えない形で{{GENDER:$2|変更しました}}: $4',
+'logentry-suppress-revision' => '$1 がページ「$3」の{{PLURAL:$5|$5版}}の閲覧レベルを見えない形で{{GENDER:$2|変更しました}}: $4',
+'logentry-suppress-event-legacy' => '$1 が$3で記録項目の閲覧レベルを見えない形で{{GENDER:$2|変更しました}}',
+'logentry-suppress-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを見えない形で{{GENDER:$2|変更しました}}',
 'revdelete-content-hid' => '本文の不可視化',
 'revdelete-summary-hid' => '編集要約の不可視化',
 'revdelete-uname-hid' => '利用者名の不可視化',
@@ -4295,20 +4296,20 @@ MediaWikiは、有用であることを期待して配布されていますが
 'revdelete-uname-unhid' => '利用者名の可視化',
 'revdelete-restricted' => '管理者に対する制限の適用',
 'revdelete-unrestricted' => '管理者に対する制限の除去',
-'logentry-move-move' => '$1 がページ「$3」を「$4」に移動しました',
-'logentry-move-move-noredirect' => '$1 がページ「$3」を「$4」に、リダイレクトを残さずに移動しました',
-'logentry-move-move_redir' => '$1 がページ「$3」をリダイレクトの「$4」に移動しました',
-'logentry-move-move_redir-noredirect' => '$1 がページ「$3」をリダイレクトの「$4」に、リダイレクトを残さずに移動しました',
-'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4 を巡回済みとしました',
-'logentry-patrol-patrol-auto' => '$1 が自動的にページ「$3」の版 $4 を巡回済みとしました',
-'logentry-newusers-newusers' => '利用者アカウント $1 が作成されました',
-'logentry-newusers-create' => '利用者アカウント $1 が作成されました',
-'logentry-newusers-create2' => '利用者アカウント $3 が $1 により作成されました',
-'logentry-newusers-byemail' => '利用者アカウント $3 が $1 によって作成され、そのパスワードをメールで送信しました',
-'logentry-newusers-autocreate' => '利用者アカウント $1 が自動的に作成されました',
-'logentry-rights-rights' => '$1 が $3 の所属グループを $4 から $5 に変更しました',
-'logentry-rights-rights-legacy' => '$1 が $3 の所属グループを変更しました',
-'logentry-rights-autopromote' => '$1 が $4 から $5 に自動的に昇格しました',
+'logentry-move-move' => '$1 がページ「$3」を「$4」に{{GENDER:$2|移動しました}}',
+'logentry-move-move-noredirect' => '$1 がページ「$3」を「$4」に、リダイレクトを残さずに{{GENDER:$2|移動しました}}',
+'logentry-move-move_redir' => '$1 がページ「$3」をリダイレクトの「$4」に{{GENDER:$2|移動しました}}',
+'logentry-move-move_redir-noredirect' => '$1 がページ「$3」をリダイレクトの「$4」に、リダイレクトを残さずに{{GENDER:$2|移動しました}}',
+'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4 を巡回済みと{{GENDER:$2|しました}}',
+'logentry-patrol-patrol-auto' => '$1 が自動的にページ「$3」の版 $4 を巡回済みと{{GENDER:$2|しました}}',
+'logentry-newusers-newusers' => '利用者アカウント $1 が{{GENDER:$2|作成されました}}',
+'logentry-newusers-create' => '利用者アカウント $1 が{{GENDER:$2|作成されました}}',
+'logentry-newusers-create2' => '利用者アカウント $3 が $1 により{{GENDER:$2|作成されました}}',
+'logentry-newusers-byemail' => '利用者アカウント $3 が $1 によって{{GENDER:$2|作成され}}、そのパスワードがメールで送信されました',
+'logentry-newusers-autocreate' => '利用者アカウント $1 が自動的に{{GENDER:$2|作成されました}}',
+'logentry-rights-rights' => '$1 が $3 の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}',
+'logentry-rights-rights-legacy' => '$1 が $3 の所属グループを{{GENDER:$2|変更しました}}',
+'logentry-rights-autopromote' => '$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}',
 'rightsnone' => '(なし)',
 
 # Feedback
index 637df82..a9ecb16 100644 (file)
@@ -831,7 +831,7 @@ Piej pahn [[Special:Watchlist|yu wachlis]] dem '''buol'''.",
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis a memba)',
 
-# E-mail user
+# Email user
 'emailuser' => 'E-miel dis yuuza',
 
 # Watchlist
index 73d4961..83163b9 100644 (file)
@@ -537,7 +537,7 @@ Tulung nunggu dhisik sadurungé njajal manèh.',
 'loginlanguagelabel' => 'Basa: $1',
 'suspicious-userlogout' => 'Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Kasalahan ora dingertèni nèng piguna mail() PHP.',
 'user-mail-no-addy' => 'Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.',
 'user-mail-no-body' => 'Nyoba ngirim layang e-mail, tapi isine kosong.',
@@ -1204,7 +1204,7 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'prefs-displaywatchlist' => 'Opsi tampilan',
 'prefs-diffs' => 'Prabédan',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamat layang èlèktronik kayané sah',
 'email-address-validity-invalid' => 'Lebokaké alamat layang èlèktronik sing sah',
 
@@ -1971,7 +1971,7 @@ Informasi tambahan perkara hak-hak individual bisa ditemokaké ing [[{{MediaWiki
 'listgrouprights-addgroup-self-all' => 'Nambahaké kabèh grup menyang akuné dhéwé',
 'listgrouprights-removegroup-self-all' => 'Mbusak kabèh klompok saka akuné dhéwé',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ora ana alamat layang e-mail',
 'mailnologintext' => 'Panjenengan kudu [[Special:UserLogin|mlebu log]] lan kagungan alamat e-mail sing sah ing [[Special:Preferences|preféèrensi]] yèn kersa ngirim layang e-mail kanggo panganggo liya.',
 'emailuser' => 'Kirim e-mail panganggo iki',
@@ -3316,7 +3316,7 @@ Pranala-pranala sabanjuré ing baris sing padha dianggep minangka ''pengecualian
 'monthsall' => 'kabèh',
 'limitall' => 'kabèh',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Konfirmasi alamat e-mail',
 'confirmemail_noemail' => 'Panjenengan ora maringi alamat e-mail sing absah ing [[Special:Preferences|préferènsi]] panjenengan.',
 'confirmemail_text' => '{{SITENAME}} ngwajibaké panjenengan ndhedhes utawa konfirmasi alamat e-mail panjenengan sadurungé bisa nganggo fitur-fitur e-mail.
index 7057d96..37e4005 100644 (file)
@@ -1378,7 +1378,7 @@ Ja'nede [[Special:WantedCategories|kerekli kategoriyalardı]] qarap ko'rin'.",
 'listgrouprights-addgroup-all' => "Barlıq toparlardı qosıwı mu'mkin",
 'listgrouprights-removegroup-all' => "Barlıq toparlardı o'shiriwi mu'mkin",
 
-# E-mail user
+# Email user
 'mailnologin' => 'Jiberiwge adres tabılmadı',
 'emailuser' => 'Xat jiberiw',
 'emailpage' => "Paydalanıwshıg'a e-mail jiberiw",
@@ -1844,7 +1844,7 @@ Eger fayl jaratılg'anınan keyin o'zgertilgen bolsa, geybir parametrleri o'zger
 'namespacesall' => "ha'mmesi",
 'monthsall' => "ha'mme",
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-mail adresin tastıyıqlaw',
 'confirmemail_send' => 'Tastıyıqlaw kodın jiberiw',
 'confirmemail_sent' => 'Tastıyıqlaw xatı jiberildi.',
index a3f2e0c..33a9490 100644 (file)
@@ -529,7 +529,7 @@ Ilaq ad rǧuḍ ciṭaḥ uqbel ad ɛerdeḍ tikkelt nniḍen.',
 'loginlanguagelabel' => 'Tutlayt: $1',
 'suspicious-userlogout' => 'Asuter n usenser yugwi acku yella ugur s iminig naɣ s tazarkatut n uqeddac proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'anezri warisem deg tawuri mail() n PHP',
 'user-mail-no-addy' => 'Ɛred ad icegaɛ e-mail war tansa e-mail',
 
@@ -1185,7 +1185,7 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'prefs-displaywatchlist' => 'Tixtiṛiyin n ubeqqeḍ',
 'prefs-diffs' => 'Timeẓliwin',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail agi teɣbel',
 'email-address-validity-invalid' => 'Telaq tansa e-mail i ɣbelen !',
 
@@ -1950,7 +1950,7 @@ Zemrent ad ilint [[{{MediaWiki:Listgrouprights-helppage}}|tilɣa nniḍen]] ɣef
 'listgrouprights-addgroup-self-all' => 'Yezmer ad yernu akkw igrawen ar umiḍan-is',
 'listgrouprights-removegroup-self-all' => 'Yezmer ad yekkes akkw igrawen ar umiḍan-is',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ur yufi ḥedd (tansa)',
 'mailnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] u tesɛiḍ tansa e-mail ṭaṣhiḥt deg [[Special:Preferences|isemyifiyen]] inek
 iwakken ad tazneḍ email i imseqdacen wiyaḍ.',
@@ -2849,7 +2849,7 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 'monthsall' => 'akk',
 'limitall' => 'Akkw',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Sentem tansa n e-mail',
 'confirmemail_noemail' => 'Ur tesɛiḍ ara tansa n email ṣaḥiḥ deg [[Special:Preferences|isemyifiyen n wemseqdac]] inek.',
 'confirmemail_text' => '{{SITENAME}} yeḥweǧ aseɣbel n tansa e-mail inek/inem uqbel ad sexdemeḍ tanfa n tirawt.
index 257e949..85b046d 100644 (file)
@@ -539,7 +539,7 @@ $2',
 'loginlanguagelabel' => 'Бзэ: $1',
 'suspicious-userlogout' => 'Сеанс щыгъэтын узкӀэлъэӀуар гъэзэнщӀакъым, мыкорректнэ браузэрым иэ кэш зыщӀ проксим иригъэхьа хуэду ещхьщ.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'ХэщӀыкӀыгъуэ зымыӀэ хэукъуэгъуэ PHP-функциэ mail()',
 
 # Change password dialog
@@ -1114,7 +1114,7 @@ $1",
 # Special:ListGroupRights
 'listgrouprights-members' => '(гупым и тхылъ)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Тхыгъэ хуэтхын',
 
 # Watchlist
index 6bb3162..b8a1b06 100644 (file)
@@ -856,7 +856,7 @@ HTML tags لوڑے.',",
 # Special:ListGroupRights
 'listgrouprights-members' => 'ممبارانن فھرست',
 
-# E-mail user
+# Email user
 'emailuser' => 'ممباروت بشلی کغاز انڅاوے',
 
 # Watchlist
index 8208dd8..3a6fa9d 100644 (file)
@@ -955,8 +955,8 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'rc-enhanced-hide' => 'Tefsilatu bınımne',
 
 # Recent changes linked
-'recentchangeslinked' => 'Ney sero vurnaene',
-'recentchangeslinked-toolbox' => 'Ney sero vurnaene',
+'recentchangeslinked' => 'Ney sero vurnayene',
+'recentchangeslinked-toolbox' => 'Ney sero vurnayene',
 'recentchangeslinked-title' => 'Heqa "$1"i de vurnais',
 'recentchangeslinked-noresult' => 'Pelanê ke link biye ey vurnayîşî çino.',
 'recentchangeslinked-summary' => "Lista cêrêne, pela bêlikerdiye rê (ya ki karberunê kategoriya bêlikerdiye rê) pelunê girêdaoğu de lista de vurnaisê peyênuna.
@@ -1436,7 +1436,7 @@ Tı şikina çımunê dae bıvênê',
 'tooltip-minoredit' => 'Ney jê vurnaiso qıc isaret ke',
 'tooltip-save' => 'Vurnaisunê ho qeyd ke',
 'tooltip-preview' => 'Kerem ke, vurnaisunê ho qeyd-kerdene ra ravêr be verqayt bıasne!',
-'tooltip-diff' => 'Kamci vurnaişi ke to meqale de kerdê, naine bıasne.',
+'tooltip-diff' => 'Kamci vurnayışi ke to meqale de kerdê, ninan basne.',
 'tooltip-compareselectedversions' => 'Ferqunê wertê ni dı nımınunê weçinıtu bıvêne.',
 'tooltip-watch' => 'Na pele lista huya şêrkerdişi ser ke',
 'tooltip-recreate' => 'Na pele esterıte bo ki, nae oncia bıaferne',
index edc0a10..8db1e09 100644 (file)
@@ -1693,7 +1693,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-helppage' => '{{ns:help}}:توپ قۇقىقتارى',
 'listgrouprights-members' => '(مۇشە ٴتىزىمى)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ەش مەكەنجاي جونەلتىلگەن جوق',
 'mailnologintext' => 'باسقا قاتىسۋشىعا حات جونەلتۋ ٴۇشىن [[Special:UserLogin|كىرۋىڭىز]] كەرەك, جانە [[Special:Preferences|باپتاۋىڭىزدا]] جارامدى ە-پوشتا جايى بولۋى ٴجون.',
 'emailuser' => 'قاتىسۋشىعا حات جازۋ',
@@ -2664,7 +2664,7 @@ $1',
 'namespacesall' => 'بارلىعى',
 'monthsall' => 'بارلىعى',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ە-پوشتا مەكەنجايىن قۇپتاۋ',
 'confirmemail_noemail' => '[[{{#special:Preferences}}|پايدالانۋشىلىق باپتالىمدارىڭىزدا]] جارامدى ە-پوشتا مەكەنجايىن قويماپسىز.',
 'confirmemail_text' => '{{SITENAME}} ە-پوشتا مۇمكىندىكتەرىن پايدالانۋ ٴۇشىن الدىنان ە-پوشتا مەكەنجايىڭىزدىڭ جارامدىلىعىن تەكسەرىپ شىعۋىڭىز كەرەك.
index e090991..3dd54eb 100644 (file)
@@ -848,7 +848,7 @@ $2',
 'loginlanguagelabel' => 'Тіл: $1',
 'suspicious-userlogout' => 'Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені, бұл жарамсыз браузер немесе кэштеуші проксидің сұранымына ұқсайды.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Mail() PHP-функциясындағы белгісіз қате.',
 'user-mail-no-addy' => 'Е-пошта есімінсіз хабарлама жіберуге талпынды.',
 
@@ -1927,7 +1927,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-helppage' => '{{ns:help}}:Топ құқықтары',
 'listgrouprights-members' => '(мүше тізімі)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Еш мекенжай жөнелтілген жоқ',
 'mailnologintext' => 'Басқа қатысушыға хат жөнелту үшін [[{{#special:Userlogin}}|кіруіңіз]] жөн, және [[{{#special:Preferences}}|бапталымдарыңызда]] жарамды е-пошта мекенжайы болуы жөн.',
 'emailuser' => 'Қатысушыға хат жазу',
@@ -2935,7 +2935,7 @@ $1',
 'namespacesall' => 'барлығы',
 'monthsall' => 'барлығы',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Е-пошта мекенжайын құптау',
 'confirmemail_noemail' => '[[{{#special:Preferences}}|Пайдаланушылық бапталымдарыңызда]] жарамды е-пошта мекенжайын қоймапсыз.',
 'confirmemail_text' => '{{SITENAME}} е-пошта мүмкіндіктерін пайдалану үшін алдынан е-пошта мекенжайыңыздың жарамдылығын тексеріп шығуыңыз керек.
index d1c1562..608ad71 100644 (file)
@@ -1656,7 +1656,7 @@ Jeke quqıqtar twralı köbirek aqparattı [[{{MediaWiki:Listgrouprights-helppag
 'listgrouprights-helppage' => '{{ns:help}}:Top quqıqtarı',
 'listgrouprights-members' => '(müşe tizimi)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Eş mekenjaý jöneltilgen joq',
 'mailnologintext' => 'Basqa qatıswşığa xat jöneltw üşin [[Special:UserLogin|kirwiñiz]] kerek, jäne [[Special:Preferences|baptawıñızda]] jaramdı e-poşta jaýı bolwı jön.',
 'emailuser' => 'Qatıswşığa xat jazw',
@@ -2627,7 +2627,7 @@ Basqaları ädepkiden jasırıladı.
 'namespacesall' => 'barlığı',
 'monthsall' => 'barlığı',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-poşta mekenjaýın quptaw',
 'confirmemail_noemail' => '[[{{#special:Preferences}}|Paýdalanwşılıq baptalımdarıñızda]] jaramdı e-poşta mekenjaýın qoýmapsız.',
 'confirmemail_text' => '{{SITENAME}} e-poşta mümkindikterin paýdalanw üşin aldınan e-poşta mekenjaýıñızdıñ jaramdılığın tekserip şığwıñız kerek.
index e5b8892..cc838e4 100644 (file)
@@ -388,6 +388,9 @@ $messages = array(
 'index-category' => 'ទំព័រដែលមានលិបិក្រម',
 'noindex-category' => 'ទំព័រដែលគ្មានលិបិក្រម',
 'broken-file-category' => 'ទំព័រទាំងឡាយដែលដាច់តំណភ្ជាប់',
+'categoryviewer-pagedlinks' => '($1) ($2)',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
 'about' => 'អំពី',
 'article' => 'មាតិកាអត្ថបទ',
@@ -522,6 +525,8 @@ $1',
 
 'ok' => 'យល់ព្រម',
 'pagetitle' => '$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'បានពី "$1"',
 'youhavenewmessages' => 'អ្នកមាន $1 ($2)។',
 'newmessageslink' => 'សារថ្មីៗ',
@@ -532,6 +537,7 @@ $1',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}ចុងក្រោយ',
 'youhavenewmessagesmulti' => 'អ្នកមានសារថ្មីៗនៅ $1',
 'editsection' => 'កែប្រែ',
+'editsection-brackets' => '[$1]',
 'editold' => 'កែប្រែ',
 'viewsourceold' => 'មើលកូដ',
 'editlink' => 'កែប្រែ',
@@ -552,6 +558,8 @@ $1',
 'site-atom-feed' => 'បម្រែបម្រួល Atom Feed នៃ $1',
 'page-rss-feed' => 'បម្រែបម្រួល RSS Feed នៃ "$1"',
 'page-atom-feed' => 'បម្រែបម្រួល Atom Feed នៃ "$1"',
+'feed-atom' => 'Atom',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1 (ទំព័រនេះមិនទាន់​មាននៅឡើយទេ)',
 'sort-descending' => 'តម្រៀបតាមលំដាប់ចុះ',
 'sort-ascending' => 'តម្រៀបតាមលំដាប់ឡើង',
@@ -707,6 +715,7 @@ $2',
 អ្នកបានជ្រើសមិនប្រើខូឃី។​
 
 សូមជ្រើសប្រើខូឃីវិញ រួចព្យាយាមម្តងទៀត។',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => 'អ្នកមិនបានផ្ដល់អត្តនាមត្រឹមត្រូវទេ។',
 'loginsuccesstitle' => 'កត់ឈ្មោះចូលបានសំរេច',
 'loginsuccess' => "'''ពេលនេះអ្នកបានកត់ឈ្មោះចូល{{SITENAME}}ដោយប្រើឈ្មោះ \"\$1\"។'''",
@@ -804,7 +813,7 @@ $2',
 # Special:PasswordReset
 'passwordreset' => 'កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ',
 'passwordreset-text' => 'បំពេញសំណុំបែបបទនេះដើម្បីទទួលបានអ៊ីម៉ែលក្រើនរំលឹកពីព័ត៌មានលំអិតរបស់គណនីរបស់អ្នក។',
-'passwordreset-legend' => 'á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\8aá\9e¾á\9e\98',
+'passwordreset-legend' => 'á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9fá\9e¶á\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89',
 'passwordreset-disabled' => 'មុខងារប្ដូរទៅពាក្យសម្ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។',
 'passwordreset-pretext' => '{{PLURAL:$1||វាយបញ្ចូលផ្នែកមួយនៃទិន្នន័យខាងក្រោម}}',
 'passwordreset-username' => 'អត្តនាម៖',
@@ -1354,7 +1363,7 @@ $1",
 'prefs-labs' => 'មុខងារពិសេសថ្មីៗដែលស្ថិតក្រោមការពិសោធន៍នៅឡើយ',
 'prefs-user-pages' => 'ទំព័រអ្នកប្រើប្រាស់',
 'prefs-personal' => 'ប្រវត្តិរូប',
-'prefs-rc' => 'á\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មីៗ',
+'prefs-rc' => 'á\9e\94á\9f\86លាស់ប្ដូរថ្មីៗ',
 'prefs-watchlist' => 'បញ្ជីតាមដាន',
 'prefs-watchlist-days' => 'ចំនួនថ្ងៃត្រូវបង្ហាញក្នុងបញ្ជីតាមដាន៖',
 'prefs-watchlist-days-max' => 'អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}',
@@ -2276,7 +2285,7 @@ $1',
 'enotif_reset' => 'កត់សម្គាល់រាល់គ្រប់ទំព័រដែលបានចូលមើល',
 'enotif_impersonal_salutation' => 'អ្នកប្រើប្រាស់ {{SITENAME}}',
 'enotif_lastvisited' => 'ពិនិត្យ $1 សម្រាប់គ្រប់បន្លាស់ប្តូរតាំងពីពេលចូលមើលចុងក្រោយ។',
-'enotif_lastdiff' => 'សូមពិនិត្យ$1ដើម្បីមើលបន្លាស់ប្តូរនេះ។',
+'enotif_lastdiff' => 'សូមពិនិត្យ $1 ដើម្បីមើលបំលាស់ប្តូរនេះ។',
 'enotif_anon_editor' => 'អ្នកប្រើប្រាស់អនាមិក $1',
 'enotif_body' => 'ជូនចំពោះ $WATCHINGUSERNAME ជាទីរាប់អាន,
 
index 9804e26..a175268 100644 (file)
@@ -428,11 +428,21 @@ MySQL ಹಿಂದಿರುಗಿಸಿದ ದೋಷ "$3: $4"',
 'cascadeprotected' => 'ಈ ಪುಟವು ಸಂಪಾದನೆ ಮಾಡಲಾಗದಂತೆ ಸಂರಕ್ಷಿಸಲಾಗಿದೆ. ಇದಕ್ಕೆ ಕಾರಣ ಈ ಪುಟವನ್ನು ಈ ಕೆಳಗಿನ ತಡಸಲು-ಸಂರಕ್ಷಣೆ ಅಳವಡಿಸಲಾದ {{PLURAL:$1|ಪುಟದಲ್ಲಿ|ಪುಟಗಳಲ್ಲಿ}} ಉಪಯೋಗಿಸಲಾಗಿದೆ:
 $2',
 'namespaceprotected' => "ನಿಮಗೆ '''$1''' ಪುಟಪ್ರಬೇಧಕ್ಕೆ ಸೇರಿರುವ ಪುಟಗಳನ್ನು ಸಂಪಾದಿಸುವ ಅನುಮತಿ ಇಲ್ಲ.",
+'customcssprotected' => 'ಈ ಸಿಎಸ್ಎಸ್ ಪುಟವನ್ನು ಸಂಪಾದಿಸಲು ಈ ಪುಟವು ಇನ್ನೊಬ್ಬ ಬಳಕೆದಾರನ ವಯುಕ್ತಿಕ ವ್ಯವಸ್ಥೆಯನ್ನು ಹೊಂದಿರುವುದರಿಂದ ಅನುಮತಿ ಇಲ್ಲ',
+'customjsprotected' => 'ಈ ಜಾವಾ ಸ್ಕ್ರಿಪ್ಟ್ ಪುಟವನ್ನು ಸಂಪಾದಿಸಲು ಈ ಪುಟವು ಇನ್ನೊಬ್ಬ ಬಳಕೆದಾರನ ವಯುಕ್ತಿಕ ವ್ಯವಸ್ಥೆಯನ್ನು ಹೊಂದಿರುವುದರಿಂದ ಅನುಮತಿ ಇಲ್ಲ',
 'ns-specialprotected' => 'ವಿಶೇಷ ಪುಟಗಳನ್ನು ಸಂಪಾದಿಸಲು ಆಗುವುದಿಲ್ಲ.',
 'titleprotected' => "ಈ ಹೆಸರಿನ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗದಂತೆ [[User:$1|$1]] ಅವರು ಸಂರಕ್ಷಿಸಿದ್ದಾರೆ.
 ಸಂರಕ್ಷಣೆಗೆ ನೀಡಿರುವ ಕಾರಣ: ''$2''.",
+'filereadonlyerror' => '"$1" ಕಡತವು ಓದಲು ಮಾತ್ರ ಸಾದ್ಯವಿರುವ ರೀತಿಯಲ್ಲಿರುವ"$2" ಸಂಪುಟದಲ್ಲಿರುವುದರಿಂದ ಇದನ್ನು  ಮಾರ್ಪಡಿಸಲು ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.
+ಇದನ್ನು ಬದ್ದಗೊಳಿಸಿರುವ ನಿರ್ವಾಹಕರು "$3" ಈ ವಿವರಣೆಯನ್ನು ನೀಡುತ್ತಿದ್ದಾರೆ.',
+'invalidtitle-knownnamespace' => '"$2"ನೇಮ್ ಸ್ಪೇಸ್ ಮತ್ತು "$3"ಪಠ್ಯದೊಂದಿಗೆ ಅಸಮಂಜಸ ತಲೆಬರಹ',
+'invalidtitle-unknownnamespace' => '$1ನೇಮ್ ಸ್ಪೇಸ್ ಮತ್ತು "$2"ಪಠ್ಯದೊಂದಿಗೆ ಅಸಮಂಜಸ ತಲೆಬರಹ',
+'exception-nologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
+'exception-nologin-text' => 'ಈ ಪುಟ ಅಥವಾ ಚಟುವಟಿಕೆಗೆ ನೀವು ಈ ವಿಕಿಗೆ ಲಾಗಿನ್ ಆಗಿರಬೇಕಾಗಿರುತ್ತದೆ',
 
 # Virus scanner
+'virus-badscanner' => "ಅಸಮಂಜಸ ವಿನ್ಯಾಸ:ಅಪರಿಚಿತ ವೈರಸ್ ಸ್ಕಾನರ್:''$1''",
+'virus-scanfailed' => 'ಸ್ಕಾನ್ ವಿಫಲ (code $1)',
 'virus-unknownscanner' => 'ಅಪರಿಚಿತ ವೈರಾಣುನಾಶಕ:',
 
 # Login and logout pages
@@ -440,10 +450,15 @@ $2',
 
 ನೀವು {{SITENAME}} ಅನ್ನು ಅನಾಮಧೇಯವಾಗಿ ಉಪಯೋಗಿಸಬಹುದು, ಅಥವ ಮತ್ತೆ ಇದೇ ಹೆಸರಿನಲ್ಲಿ ಅಥವ ಬೇರೆ ಹೆಸರಿನಲ್ಲಿ <span class='plainlinks'>[$1 ಲಾಗ್ ಇನ್]</span> ಆಗಬಹುದು.
 ಗಮನಿಸಿ: ನಿಮ್ಮ ಬ್ರೌಸರ್‍ನ cache ಅನ್ನು ಅಳಿಸುವವರೆಗೂ ಕೆಲವು ಪುಟಗಳು ನೀವಿನ್ನೂ ಲಾಗ್ ಇನ್ ಆಗಿರುವಂತೆ ಪ್ರದರ್ಶಿತವಾಗಬಹುದು.",
+'welcomeuser' => 'ಸುಸ್ವಾಗತ,$1!',
+'welcomecreation-msg' => 'ನಿಮ್ಮ ಖಾತೆ ತೆರೆಯಲಾಗಿದೆ.ನಿಮ್ಮ [[Special:Preferences|{{SITENAME}} preferences]]ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ.',
 'yourname' => 'ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು',
 'yourpassword' => 'ನಿಮ್ಮ ಪ್ರವೇಶಪದ',
 'yourpasswordagain' => 'ಪ್ರವೇಶ ಪದ ಮತ್ತೊಮ್ಮೆ ಟೈಪ್ ಮಾಡಿ',
 'remembermypassword' => 'ಈ ಗಣಕಯಂತ್ರದಲ್ಲಿ ನನ್ನ ಲಾಗಿನ್ ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊ (ಗರಿಷ್ಠ $1 {{PLURAL:$1|ದಿನದ|ದಿನಗಳ}}ವರೆಗೆ)',
+'securelogin-stick-https' => 'ಲಾಗಿನ್ ಆದ ಬಳಿಕ HTTPS ನ ಸಂಪರ್ಕದಲ್ಲಿರಿ.',
+'yourdomainname' => 'ನಿಮ್ಮ ಕ್ಷೇತ್ರ:',
+'password-change-forbidden' => 'ನೀವು ಈ ವಿಕಿಯಲ್ಲಿ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾದ್ಯವಿಲ್ಲ.',
 'login' => 'ಲಾಗ್ ಇನ್',
 'nav-login-createaccount' => 'ಲಾಗ್ ಇನ್ - log in',
 'loginprompt' => '{{SITENAME}} ತಾಣಕ್ಕೆ ಲಾಗ್ ಇನ್ ಆಗಲು ನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿ ಕುಕೀ (cookie) ಸೌಲಭ್ಯವಿರಬೇಕು.',
@@ -1436,7 +1451,7 @@ $2',
 'listgrouprights-members' => '(ಸದಸ್ಯರ ಪಟ್ಟಿ)',
 'listgrouprights-addgroup-all' => 'ಎಲ್ಲಾ ಗುಂಪುಗಳನ್ನು ಸೇರಿಸಿ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ಕಳುಹಿಸುವ ವಿಳಾಸ ಇಲ್ಲ',
 'mailnologintext' => 'ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇ-ಅಂಚೆ ಕಳುಹಿಸಲು ನೀವು [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಿರಬೇಕು ಮತ್ತು ನಿಮ್ಮ [[Special:Preferences|ಪ್ರಾಶಸ್ತ್ಯಗಳ ಪುಟದಲ್ಲಿ]] ಒಂದು ಧೃಡೀಕೃತ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿರಬೇಕು.',
 'emailuser' => 'ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆ ಕಳಿಸಿ',
@@ -2026,7 +2041,7 @@ $1',
 'monthsall' => 'ಎಲ್ಲಾ',
 'limitall' => 'ಎಲ್ಲಾ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಖಾತ್ರಿ ಮಾಡಿ',
 'confirmemail_noemail' => 'ನಿಮ್ಮ [[Special:Preferences|ಬಳಕೆದಾರ ಪ್ರಾಶಸ್ತ್ಯಗಳಲ್ಲಿ]] ಸರಿಯಾದ ಇ-ಅಂಚೆ ವಿಳಾಸವಿಲ್ಲ.',
 'confirmemail_pending' => 'ನಿಮಗೆ ಧೃಡೀಕರಣ ಕೋಡ್ ಒಂದನ್ನು ಆಗಲೆ ಇ-ಅಂಚೆಯ ಮೂಲಕ ಕಳುಹಿಸಲಾಗಿದೆ;
index 9de6252..61cb9ce 100644 (file)
@@ -358,7 +358,7 @@ $messages = array(
 'tog-editsection' => '[편집] 링크로 부분 편집하기',
 'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트 필요)',
 'tog-showtoc' => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)',
-'tog-rememberpassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1)',
+'tog-rememberpassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1{{PLURAL:$1|일}})',
 'tog-watchcreations' => '내가 만드는 문서와 내가 올린 파일을 주시문서 목록에 추가',
 'tog-watchdefault' => '내가 편집하는 문서와 파일을 주시문서 목록에 추가',
 'tog-watchmoves' => '내가 이동하는 문서와 파일을 주시문서 목록에 추가',
@@ -462,12 +462,12 @@ $messages = array(
 'category-empty' => '이 분류에 속하는 문서나 자료가 없습니다.',
 'hidden-categories' => '{{PLURAL:$1|숨은 분류}}',
 'hidden-category-category' => '숨은 분류',
-'category-subcat-count' => '{{PLURAL:$2|이 분류에는 하위 분류 1개만이 속해 있습니다.|다음은 이 분류에 속하는 하위 분류 $2개 가운데 $1개입니다.}}',
-'category-subcat-count-limited' => '이 분류에 하위 분류 $1개가 있습니다.',
-'category-article-count' => '{{PLURAL:$2|이 분류에는 문서 1개만이 속해 있습니다.|다음은 이 분류에 속하는 문서 $2개 가운데 $1개입니다.}}',
-'category-article-count-limited' => '이 분류에 문서 $1개가 있습니다.',
-'category-file-count' => '{{PLURAL:$2|이 분류에는 파일 1개만이 속해 있습니다.|다음은 이 분류에 속하는 파일 $2개 가운데 $1개입니다.}}',
-'category-file-count-limited' => '이 분류에 파일 $1개가 있습니다.',
+'category-subcat-count' => '{{PLURAL:$2|이 분류에는 하위 분류 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|하위 분류}} $2개 가운데 $1개입니다.}}',
+'category-subcat-count-limited' => '이 분류에 {{PLURAL:$1|하위 분류}} $1개가 있습니다.',
+'category-article-count' => '{{PLURAL:$2|이 분류에는 문서 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|문서}} $2개 가운데 $1개입니다.}}',
+'category-article-count-limited' => '이 분류에 {{PLURAL:$1|문서}} $1개가 있습니다.',
+'category-file-count' => '{{PLURAL:$2|이 분류에는 파일 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|파일}} $2개 가운데 $1개입니다.}}',
+'category-file-count-limited' => '이 분류에 {{PLURAL:$1|파일}} $1개가 있습니다.',
 'listingcontinuesabbrev' => '(계속)',
 'index-category' => '색인된 문서',
 'noindex-category' => '색인에서 제외되는 문서',
@@ -534,8 +534,8 @@ $messages = array(
 'create-this-page' => '이 문서 만들기',
 'delete' => '삭제',
 'deletethispage' => '이 문서 삭제하기',
-'undelete_short' => '편집 $1개 되살리기',
-'viewdeleted_short' => '삭제된 편집 $1개 보기',
+'undelete_short' => '{{PLURAL:$1|편집 $1개}} 되살리기',
+'viewdeleted_short' => '{{PLURAL:$1|삭제된 편집 $1개}} 보기',
 'protect' => '보호',
 'protect_change' => '보호 수준 바꾸기',
 'protectthispage' => '이 문서 보호하기',
@@ -563,7 +563,7 @@ $messages = array(
 'redirectedfrom' => '($1에서 넘어옴)',
 'redirectpagesub' => '넘겨주기 문서',
 'lastmodifiedat' => '이 문서는 $1 $2에 마지막으로 바뀌었습니다.',
-'viewcount' => '이 문서는 $1번 읽혔습니다.',
+'viewcount' => '이 문서는 {{PLURAL:$1|$1번}} 읽혔습니다.',
 'protectedpage' => '보호된 문서',
 'jumpto' => '이동:',
 'jumptonavigation' => '둘러보기',
@@ -574,7 +574,7 @@ $messages = array(
 
 $1',
 'pool-timeout' => '잠금 대기 중 타임아웃',
-'pool-queuefull' => '풀 큐가 가득 찼습니다.',
+'pool-queuefull' => '풀 큐가 가득 찼습니다',
 'pool-errorunknown' => '알 수 없는 오류',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
@@ -607,14 +607,14 @@ $1',
 
 'ok' => '확인',
 'retrievedfrom' => '원본 주소 "$1"',
-'youhavenewmessages' => '다른 사용자가 $1에 글을 남겼습니다. ($2)',
+'youhavenewmessages' => '다른 사용자가 $1에 글을 남겼습니다. ($2)',
 'newmessageslink' => '사용자 토론',
 'newmessagesdifflink' => '마지막 바뀐 내용',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1에 글을 남겼습니다. ($2)',
-'youhavenewmessagesmanyusers' => '여러 사용자가 $1에 글을 남겼습니다. ($2)',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1에 글을 남겼습니다. ($2)',
+'youhavenewmessagesmanyusers' => '여러 사용자가 $1에 글을 남겼습니다. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|사용자 토론}}',
 'newmessagesdifflinkplural' => '마지막 {{PLURAL:$1|바뀐 내용}}',
-'youhavenewmessagesmulti' => '다른 사용자가 $1란에 글을 남겼습니다.',
+'youhavenewmessagesmulti' => '다른 사용자가 $1에 글을 남겼습니다',
 'editsection' => '편집',
 'editold' => '편집',
 'viewsourceold' => '내용 보기',
@@ -628,7 +628,7 @@ $1',
 'collapsible-expand' => '펼치기',
 'thisisdeleted' => '$1을 보거나 되살리겠습니까?',
 'viewdeleted' => '$1을 보겠습니까?',
-'restorelink' => '삭제된 편집 $1개',
+'restorelink' => '{{PLURAL:$1|삭제된 편집 $1개}}',
 'feedlinks' => '피드:',
 'feed-invalid' => '잘못된 구독 피드 방식입니다.',
 'feed-unavailable' => '피드 서비스는 제공하지 않습니다',
@@ -764,7 +764,7 @@ $2',
 'yourname' => '사용자 이름:',
 'yourpassword' => '비밀번호:',
 'yourpasswordagain' => '비밀번호 다시 입력:',
-'remembermypassword' => '이 컴퓨터에서 로그인 상태를 저장하기 (최대 $1일)',
+'remembermypassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1{{PLURAL:$1|일}})',
 'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다',
 'yourdomainname' => '도메인 이름:',
 'password-change-forbidden' => '이 위키에서 비밀번호를 바꿀 수 없습니다.',
@@ -803,8 +803,8 @@ $2',
 'loginsuccesstitle' => '로그인 성공',
 'loginsuccess' => "'''{{SITENAME}}에 \"\$1\" 계정으로 로그인했습니다.'''",
 'nosuchuser' => '"$1" 사용자가 존재하지 않습니다.
-사용자 이름은 대소문자를 구별합니다. 철자가 맞는지 확인해주세요.
-[[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].',
+사용자 이름은 대소문자를 구별합니다.
+철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].',
 'nosuchusershort' => '이름이 "$1"인 사용자는 없습니다.
 철자가 맞는지 확인하세요.',
 'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
@@ -813,7 +813,7 @@ $2',
 다시 시도하세요.',
 'wrongpasswordempty' => '비밀번호를 입력하지 않았습니다.
 다시 시도하세요.',
-'passwordtooshort' => '비밀번호는 $1 문자 이상이어야 합니다.',
+'passwordtooshort' => '비밀번호는 {{PLURAL:$1|$1 글자}} 이상이어야 합니다.',
 'password-name-match' => '비밀번호는 사용자 이름과 반드시 달라야 합니다.',
 'password-login-forbidden' => '이 사용자 이름과 비밀번호는 사용할 수 없습니다.',
 'mailmypassword' => '새 비밀번호를 이메일로 보내기',
@@ -821,21 +821,21 @@ $2',
 'passwordremindertext' => '$1 IP 주소에서 누군가가 아마 자신이 {{SITENAME}} ($4)의 새 비밀번호를 요청했습니다.
 "$2" 사용자의 임시 비밀번호는 "$3"로 설정되었습니다. 이것이 자신이 의도한 바라면
 지금 로그인하여 새로운 비밀번호를 만드세요.
-임시 비밀번호는 $5일 후에 만료됩니다.
+임시 비밀번호는 {{PLURAL:$5|$5일}} 후에 만료됩니다.
 
 이 요청을 다른 사람이 했거나 이전 비밀번호를 기억해 내서 바꿀 필요가 없으면
 이 메시지를 무시하고 이전 비밀번호를 계속 사용할 수 있습니다.',
 'noemail' => '"$1" 사용자는 이메일 주소를 등록하지 않았습니다.',
-'noemailcreate' => '바른 이메일 주소를 제공해야 합니다.',
+'noemailcreate' => '바른 이메일 주소를 제공해야 합니다.',
 'passwordsent' => '"$1" 계정의 새로운 비밀번호를 이메일로 보냈습니다.
 비밀번호를 받고 다시 로그인해 주세요.',
 'blocked-mailpassword' => '당신의 IP 주소는 편집을 할 수 없게 차단되어 있어서 악용하지 못하도록 비밀번호 되살리기 기능 사용이 금지됩니다.',
 'eauthentsent' => '입력한 이메일로 확인 이메일을 보냈습니다.
 게정에서 다른 이메일로 보내기 전에 이메일 내용의 지시대로 계정 확인 절차를 실행해 주십시오.',
-'throttled-mailpassword' => '비밀번호 확인 이메일을 이미 최근 $1시간 안에 보냈습니다.
-악용을 방지하기 위해 비밀번호 확인 메일은 $1시간마다 오직 하나씩만 보낼 수 있습니다.',
+'throttled-mailpassword' => '비밀번호 재설정 이메일을 이미 최근 {{PLURAL:$1|$1시간}} 안에 보냈습니다.
+악용을 방지하기 위해 비밀번호 재설정 메일은 {{PLURAL:$1|$1시간}}마다 오직 하나씩만 보낼 수 있습니다.',
 'mailerror' => '메일 보내기 오류: $1',
-'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 만들어, 계정 만들기 한도를 초과하였습니다.
+'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 {{PLURAL:$1|계정 $1개}}를 만들어, 계정 만들기 한도를 초과하였습니다.
 따라서 지금은 이 IP 주소로는 더 이상 계정을 만들 수 없습니다.',
 'emailauthenticated' => '이메일 주소는 $2 $3에 인증되었습니다.',
 'emailnotauthenticated' => '이메일 주소를 인증하지 않았습니다.
@@ -853,7 +853,7 @@ $2',
 지금 로그인하여 비밀번호를 바꾸십시오.
 
 실수로 계정을 잘못 만들었다면 이 메시지는 무시해도 됩니다.',
-'usernamehasherror' => '사용자 이름에는 해시 문자가 들어갈 수 없습니다.',
+'usernamehasherror' => '사용자 이름에는 해시 문자가 들어갈 수 없습니다',
 'login-throttled' => '로그인에 연속으로 실패하였습니다.
 잠시 후에 다시 시도해주세요.',
 'login-abort-generic' => '로그인에 실패했습니다 - 중지됨',
@@ -887,7 +887,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => '비밀번호 재설정',
-'passwordreset-text' => '이메일을 통해 계정 정보를 받을 수 있습니다. 아래의 칸을 채워주세요.',
+'passwordreset-text' => '비밀번호를 재설정하려면 이 양식을 채워주세요.',
 'passwordreset-legend' => '비밀번호 재설정',
 'passwordreset-disabled' => '이 위키에서는 비밀번호를 재설정할 수 없습니다.',
 'passwordreset-pretext' => '{{PLURAL:$1||아래에 한 가지 정보를 입력하세요}}',
@@ -897,27 +897,29 @@ $2',
 'passwordreset-capture-help' => '이 상자에 체크하면 이메일이 발송된 즉시 임시 비밀번호가 담긴 이메일을 볼 수 있습니다.',
 'passwordreset-email' => '이메일 주소:',
 'passwordreset-emailtitle' => '{{SITENAME}} 계정 자세한 정보',
-'passwordreset-emailtext-ip' => 'IP 주소 $1을 사용하는 누군가가 아마 자신이 {{SITENAME}} ($4)의 비밀번호 찾기를 요청하였습니다.
-이 이메일 주소와 연관된 계정의 목록입니다:
+'passwordreset-emailtext-ip' => '$1 IP 주소를 사용하는 누군가가 아마 자신이 {{SITENAME}} ($4)의 비밀번호 재설정을 요청하였습니다.
+이 이메일 주소와 연관된 {{PLURAL:$3|계정}}의 목록입니다:
 
 $2
 
-이 {{PLURAL:$3|임시 비밀번호}}는 $5일 후에 만료됩니다.
+{{PLURAL:$3|이 임시 비밀번호}}는 {{PLURAL:$5|$5일}} 후에 만료됩니다.
 이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,
-원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
-'passwordreset-emailtext-user' => '{{SITENAME}} ($4)의 사용자 $1이 비밀번호 찾기를 요청하였습니다.
-이 이메일 주소와 연관된 계정의 목록입니다:
+원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고
+이전의 비밀번호를 계속 사용할 수 있습니다.',
+'passwordreset-emailtext-user' => '{{SITENAME}} ($4)의 사용자 $1이 비밀번호 재설정dmf 요청하였습니다.
+이 이메일 주소와 연관된 {{PLURAL:$3|계정}}의 목록입니다:
 
 $2
 
-이 {{PLURAL:$3|임시 비밀번호}}는 $5일 후에 만료됩니다.
+{{PLURAL:$3|이 임시 비밀번호}}는 {{PLURAL:$5|$5일}} 후에 만료됩니다.
 이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,
-원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
+원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고
+이전의 비밀번호를 계속 사용할 수 있습니다.',
 'passwordreset-emailelement' => '사용자 이름: $1
 임시 비밀번호: $2',
-'passwordreset-emailsent' => 'ë¹\84ë°\80ë²\88í\98¸ ì°¾ê¸° 이메일을 보냈습니다.',
-'passwordreset-emailsent-capture' => 'ë¹\84ë°\80ë²\88í\98¸ ì°¾ê¸° 이메일이 발송되었으며, 아래에 나타나 있습니다.',
-'passwordreset-emailerror-capture' => 'ë¹\84ë°\80ë²\88í\98¸ ì°¾ê¸° 이메일이 만들어져 아래에 나타났지만 발송하는 데에는 실패했습니다: $1',
+'passwordreset-emailsent' => 'ë¹\84ë°\80ë²\88í\98¸ ì\9e¬ì\84¤ì \95 이메일을 보냈습니다.',
+'passwordreset-emailsent-capture' => 'ë¹\84ë°\80ë²\88í\98¸ ì\9e¬ì\84¤ì \95 이메일이 발송되었으며, 아래에 나타나 있습니다.',
+'passwordreset-emailerror-capture' => 'ë¹\84ë°\80ë²\88í\98¸ ì\9e¬ì\84¤ì \95 이메일이 만들어져 아래에 나타났지만 발송하는 데에는 실패했습니다: $1',
 
 # Special:ChangeEmail
 'changeemail' => '이메일 주소 바꾸기',
@@ -939,7 +941,7 @@ $2
 'link_sample' => '링크 제목',
 'link_tip' => '안쪽 링크',
 'extlink_sample' => 'http://www.example.com 사이트 이름',
-'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다.)',
+'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다)',
 'headline_sample' => '제목',
 'headline_tip' => '2단계 문단 제목',
 'nowiki_sample' => '여기에 위키 문법을 사용하지 않을 글을 적어 주세요',
@@ -1008,7 +1010,7 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 'loginreqtitle' => '로그인 필요',
 'loginreqlink' => '로그인',
 'loginreqpagetext' => '다른 문서를 보기 위해서는 $1해야 합니다.',
-'accmailtitle' => '비밀번호를 보냈습니다.',
+'accmailtitle' => '비밀번호를 보냈습니다',
 'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2로 전송되었습니다.
 
 새 비밀번호는 로그인한 후 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.',
@@ -1047,9 +1049,9 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 '''아직 저장하지 않았습니다!'''",
 'userjspreview' => "'''사용자 자바스크립트 미리 보기입니다.'''
 '''아직 저장하지 않았습니다!'''",
-'sitecsspreview' => "'''ì\9d´ CSSì\9d\98 ë¯¸ë¦¬ ë³´ê¸°ì\9d¼ ë¿\90ì\9e\85ë\8b\88ë\8b¤.'''
+'sitecsspreview' => "'''이 CSS의 미리 보기입니다.'''
 '''아직 저장하지 않았습니다!'''",
-'sitejspreview' => "'''ì\9d´ ì\9e\90ë°\94ì\8a¤í\81¬ë¦½í\8a¸ ì½\94ë\93\9cì\9d\98 ë¯¸ë¦¬ ë³´ê¸°ì\9d¼ ë¿\90ì\9e\85ë\8b\88ë\8b¤.'''
+'sitejspreview' => "'''이 자바스크립트 코드의 미리 보기입니다.'''
 '''아직 저장하지 않았습니다!'''",
 'userinvalidcssjstitle' => "'''경고''': \"\$1\" 스킨은 없습니다.
 .css와 .js 문서의 제목은 {{ns:user}}:Foo/vector.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Vector.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.",
@@ -1114,7 +1116,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'templatesusedsection' => '이 문단에서 사용하고 있는 {{PLURAL:$1|틀}}:',
 'template-protected' => '(보호됨)',
 'template-semiprotected' => '(준보호됨)',
-'hiddencategories' => '이 문서는 다음 숨은 분류 $1개에 속해 있습니다:',
+'hiddencategories' => '이 문서는 다음 {{PLURAL:$1|숨은 분류 1개|숨은 분류 $1개}}에 속해 있습니다:',
 'edittools' => '<!-- 이 문서는 편집 창과 파일 올리기 창에 출력됩니다. -->',
 'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 만드는 것은 제한되어 있습니다.
 이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들 수 있습니다]].',
@@ -1153,7 +1155,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''경고:''' 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.
 
-$2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
+$2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개를 쓰고 있습니다}}.",
 'expensive-parserfunction-category' => '느린 파서 함수 호출을 너무 많이 하는 문서',
 'post-expand-template-inclusion-warning' => "'''경고:''' 틀 포함 크기가 너무 큽니다.
 일부 틀은 포함되지 않을 수 있습니다.",
@@ -1174,7 +1176,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 
 # "Undo" feature
 'undo-success' => '편집을 되돌릴 수 있습니다.
\8e¸ì§\91 ë\90\98ë\8f\8c리기를 ì\99\84ë£\8cí\95\98려면 ì\9d´ í\8e¸ì§\91ì\9d\84 ë\90\98ë\8f\8c리려면 ì\95\84ë\9e\98ì\9d\98 ë°\94ë\80\9c ì\82¬í\95­을 확인한 후 저장해주세요.',
\8e¸ì§\91 ë\90\98ë\8f\8c리기를 ì\99\84ë£\8cí\95\98려면 ì\9d´ í\8e¸ì§\91ì\9d\84 ë\90\98ë\8f\8c리려면 ì\95\84ë\9e\98ì\9d\98 ë°\94ë\80\90 ë\82´ì\9a©을 확인한 후 저장해주세요.',
 'undo-failure' => '중간의 다른 편집과 충돌하여 이 편집을 되돌릴 수 없습니다.',
 'undo-norev' => '문서가 없거나 삭제되었기 때문에 편집을 되돌릴 수 없습니다.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|토론]]) 의 $1판 편집을 되돌림',
@@ -1206,7 +1208,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'history-show-deleted' => '삭제된 것만',
 'histfirst' => '처음',
 'histlast' => '마지막',
-'historysize' => '($1 바이트)',
+'historysize' => '({{PLURAL:$1|1 바이트|$1 바이트}})',
 'historyempty' => '(비었음)',
 
 # Revision feed
@@ -1249,7 +1251,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 숨겨진 판과 이 판의 편집 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 해당 숨김 기록]에서 찾아볼 수 있습니다.",
 'rev-delundel' => '보이기/숨기기',
 'rev-showdeleted' => '보이기',
-'revisiondelete' => 'í\8c\90 ì\82­ì \9c³µêµ¬',
+'revisiondelete' => 'í\8c\90 ì\82­ì \9c\90\98ì\82´ë¦¬ê¸°',
 'revdelete-nooldid-title' => '대상 판이 잘못되었습니다.',
 'revdelete-nooldid-text' => '이 기능을 수행할 특정 판을 제시하지 않았거나 해당 판이 없습니다. 또는 현재 판을 숨기려 하고 있을 수도 있습니다.',
 'revdelete-nologtype-title' => '기록의 종류가 제시되지 않았습니다.',
@@ -1262,7 +1264,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'revdelete-selected' => "'''[[:$1]]의 {{PLURAL:$2|선택한 판}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|선택한 기록}}:'''",
 'revdelete-text' => "'''삭제된 판과 기록은 문서 역사와 기록에 계속 나타나지만, 내용은 공개되지 않을 것입니다.'''
-{{SITENAME}}ì\9d\98 ë\8b¤ë¥¸ ê´\80리ì\9e\90ë\8a\94 ë\8b¤ë¥¸ ì \9cí\95\9cì\9d´ ì\84¤ì \95ë\90\98ì\96´ ì\9e\88ì§\80 ì\95\8aë\8a\94 í\95\9c, ì\88¨ê²¨ì§\84 ë\82´ì\9a©ì\9d\84 ë³¼ ì\88\98 ì\9e\88ê³ , ê°\99ì\9d\80 ë\8f\84구를 ì\9d´ì\9a©í\95´ ë³µêµ¬í\95  수 있습니다.",
+{{SITENAME}}ì\9d\98 ë\8b¤ë¥¸ ê´\80리ì\9e\90ë\8a\94 ë\8b¤ë¥¸ ì \9cí\95\9cì\9d´ ì\84¤ì \95ë\90\98ì\96´ ì\9e\88ì§\80 ì\95\8aë\8a\94 í\95\9c, ì\88¨ê²¨ì§\84 ë\82´ì\9a©ì\9d\84 ë³¼ ì\88\98 ì\9e\88ê³ , ê°\99ì\9d\80 ë\8f\84구를 ì\9d´ì\9a©í\95´ ë\90\98ì\82´ë¦´ 수 있습니다.",
 'revdelete-confirm' => '이 작업을 수행하는 것의 결과를 알고 있으며, [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지 확인해주세요.',
 'revdelete-suppress-text' => "숨기기는 '''다음 경우에만''' 사용되어야 합니다:
 * 잠재적인 비방 정보
@@ -1279,7 +1281,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'revdelete-radio-set' => '예',
 'revdelete-radio-unset' => '아니오',
 'revdelete-suppress' => '문서 내용을 관리자에게도 보이지 않게 숨기기',
-'revdelete-unsuppress' => '복구ë\90\9c 판에 대한 제한을 해제',
+'revdelete-unsuppress' => 'ë\90\98ì\82´ë¦° 판에 대한 제한을 해제',
 'revdelete-log' => '이유:',
 'revdelete-submit' => '선택한 {{PLURAL:$1|판}}에 적용',
 'revdelete-success' => "'''판의 보이기 설정을 성공적으로 바꾸었습니다.'''",
@@ -1333,7 +1335,7 @@ $1",
 'mergehistory-go' => '합칠 수 있는 편집 보기',
 'mergehistory-submit' => '문서 역사 합치기',
 'mergehistory-empty' => '합칠 수 있는 판이 없습니다.',
-'mergehistory-success' => '[[:$1]] 문서의  $3개가 [[:$2]]에 성공적으로 합쳐졌습니다.',
+'mergehistory-success' => '[[:$1]] 문서의 {{PLURAL:$3|판}} $3개가 [[:$2]]에 성공적으로 합쳐졌습니다.',
 'mergehistory-fail' => '문서 역사 합치기 명령을 수행할 수 없습니다. 문서와 시간 변수를 다시 확인하십시오.',
 'mergehistory-no-source' => '원본인 $1 문서가 존재하지 않습니다.',
 'mergehistory-no-destination' => '대상인 $1 문서가 존재하지 않습니다.',
@@ -1359,9 +1361,9 @@ $1",
 'compareselectedversions' => '선택한 판을 비교하기',
 'showhideselectedversions' => '선택한 판을 보이기/숨기기',
 'editundo' => '편집 취소',
-'diff-multi' => '({{PLURAL:$2|한 사용자의|사용자 $2명의}} 중간의 편집 $1개 숨겨짐)',
-'diff-multi-manyusers' => '({{PLURAL:$2|한 사용자의|사용자 $2명 이상의}} 중간의 편집 $1개 숨겨짐)',
-'difference-missing-revision' => '문서 비교에서 {{PLURAL:$2|하나|$2개}}의 판($1)을 찾을 수 없습니다.
+'diff-multi' => '({{PLURAL:$2|한 사용자의|사용자 $2명의}} {{PLURAL:$1|중간의 편집 $1개}} 숨겨짐)',
+'diff-multi-manyusers' => '({{PLURAL:$2|한 사용자의|사용자 $2명 이상의}} {{PLURAL:$1|중간의 편집 $1개}} 숨겨짐)',
+'difference-missing-revision' => '문서 비교에서 {{PLURAL:$2|하나|$2개}}의 판($1)을 찾을 수 {{PLURAL:$2|없습니다}}.
 
 이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 비교 링크로 인해 발생합니다.
 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.',
@@ -1377,11 +1379,11 @@ $1",
 'notitlematches' => '해당하는 제목 없음',
 'textmatches' => '문서 내용 일치',
 'notextmatches' => '해당하는 문서 없음',
-'prevn' => '이전 $1개',
-'nextn' => '다음 $1개',
-'prevn-title' => '이전 결과 $1개',
-'nextn-title' => '다음 결과 $1개',
-'shown-title' => '쪽마다 ê²°ê³¼ $1ê°\9cì\94© ë³´ì\9d´ê¸°',
+'prevn' => '이전 {{PLURAL:$1|$1개}}',
+'nextn' => '다음 {{PLURAL:$1|$1개}}',
+'prevn-title' => '이전 {{PLURAL:$1|결과}} $1개',
+'nextn-title' => '다음 {{PLURAL:$1|결과}} $1개',
+'shown-title' => '쪽마다 {{PLURAL:$1|ê²°ê³¼}} $1ê°\9cì\94© ë³´ê¸°',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) 보기',
 'searchmenu-legend' => '찾기 설정',
 'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
@@ -1398,8 +1400,8 @@ $1",
 'searchprofile-images-tooltip' => '파일 찾기',
 'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기',
 'searchprofile-advanced-tooltip' => '다음 설정한 이름공간에서 찾기',
-'search-result-size' => '$1 ($2 단어)',
-'search-result-category-size' => '문서 {{PLURAL:$1|1|$1}}개, 하위 분류 {{PLURAL:$2|1|$2}}개, 파일 {{PLURAL:$3|1|$3}}',
+'search-result-size' => '$1 ({{PLURAL:$2|1 단어|$2 단어}})',
+'search-result-category-size' => '{{PLURAL:$1|문서 1개|문서 $1개}}, {{PLURAL:$2|하위 분류 1개|하위 분류 $2개}}, {{PLURAL:$3|파일 1개|파일 $3개}}',
 'search-result-score' => '유사도: $1%',
 'search-redirect' => '($1에서 넘어옴)',
 'search-section' => '($1 문단)',
@@ -1412,9 +1414,9 @@ $1",
 'searcheverything-enable' => '모든 이름공간에서 찾기',
 'searchrelated' => '관련',
 'searchall' => '모두',
-'showingresults' => '<strong>$2</strong>번 부터의 <strong>결과 $1개</strong>입니다.',
-'showingresultsnum' => "'''$2'''번 부터의 '''결과 $3개''' 입니다.",
-'showingresultsheader' => "'''$4''' 검색어에 대하여 결과 '''$3'''개 중 {{PLURAL:$5|'''$1'''개|'''$1 - $2'''번째}}를 보여 주고 있습니다.",
+'showingresults' => "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
+'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}} 입니다.",
+'showingresultsheader' => "'''$4''' 검색어에 대하여 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}를 보여 주고 있습니다",
 'nonefound' => "'''참고''': 몇개의 이름공간만 기본 찾을 범위입니다. 토론이나 틀 등의 모든 자료를 찾하기 위해서는 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
 'search-nonefound' => '찾기 결과가 없습니다.',
 'powersearch' => '고급 찾기',
@@ -1423,7 +1425,7 @@ $1",
 'powersearch-redir' => '넘겨주기 목록',
 'powersearch-field' => '찾기',
 'powersearch-togglelabel' => '확인:',
-'powersearch-toggleall' => '모두 선택',
+'powersearch-toggleall' => '모두',
 'powersearch-togglenone' => '없음',
 'search-external' => '바깥 찾기',
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
@@ -1479,7 +1481,7 @@ $1",
 'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 보여줄 문서 크기 (바이트 수):',
 'stub-threshold-disabled' => '비활성화됨',
 'recentchangesdays' => '최근 바뀜에 보여줄 날짜 수:',
-'recentchangesdays-max' => '최대 $1',
+'recentchangesdays-max' => '최대 $1{{PLURAL:$1|일}}',
 'recentchangescount' => '기본으로 보여줄 편집 수:',
 'prefs-help-recentchangescount' => '이 설정은 최근 바뀜, 문서 역사와 기록에 적용됩니다.',
 'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서 목록에 대한 RSS 피드가 만들어집니다.
@@ -1513,7 +1515,7 @@ $1",
 'prefs-custom-js' => '사용자 자바스크립트',
 'prefs-common-css-js' => '모든 스킨에 대한 공통 CSS/자바스크립트:',
 'prefs-reset-intro' => '이 사이트의 기본값으로 환경 설정을 되돌릴 수 있습니다.
³µêµ¬í\95  수 없습니다.',
\90\98ë\8f\8c릴 수 없습니다.',
 'prefs-emailconfirm-label' => '이메일 인증:',
 'prefs-textboxsize' => '편집창의 크기',
 'youremail' => '이메일:',
@@ -1530,7 +1532,7 @@ $1",
 'badsig' => '서명이 잘못되었습니다.
 HTML 태그를 확인하세요.',
 'badsiglength' => '서명이 너무 깁니다.
-서명은 $1보다 짧아야 합니다.',
+서명은 $1 {{PLURAL:$1|글자}}보다 짧아야 합니다.',
 'yourgender' => '성별:',
 'gender-unknown' => '무응답',
 'gender-male' => '남성',
@@ -1634,13 +1636,13 @@ HTML 태그를 확인하세요.',
 'right-writeapi' => 'API 작성',
 'right-delete' => '문서 삭제',
 'right-bigdelete' => '문서 역사가 긴 문서를 삭제',
-'right-deletelogentry' => '특정 기록 항목을 삭제 및 복구',
-'right-deleterevision' => '문서의 특정 판을 삭제 및 복구',
+'right-deletelogentry' => '특정 기록 항목을 삭제하고 되살리기',
+'right-deleterevision' => '문서의 특정 판을 삭제하고 되살리기',
 'right-deletedhistory' => '삭제된 문서의 내용을 제외한 역사를 보기',
 'right-deletedtext' => '삭제된 문서의 내용과 편집상의 차이를 보기',
 'right-browsearchive' => '삭제된 문서 찾기',
-'right-undelete' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c ë³µêµ¬',
-'right-suppressrevision' => 'ê´\80리ì\9e\90ë\8f\84 ë³´ì§\80 ëª»í\95\98ë\8f\84ë¡\9d ì\88¨ê²¨ì§\84 í\8c\90ì\9d\98 í\99\95ì\9d¸ ë°\8f ë³µêµ¬',
+'right-undelete' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c ë\90\98ì\82´ë¦¬ê¸°',
+'right-suppressrevision' => 'ê´\80리ì\9e\90ë\8f\84 ë³´ì§\80 ëª»í\95\98ë\8f\84ë¡\9d ì\88¨ê²¨ì§\84 í\8c\90ì\9d\84 ê²\80í\86 í\95\98ê³  ë\90\98ì\82´ë¦¬ê¸°',
 'right-suppressionlog' => '숨겨진 기록을 보기',
 'right-block' => '다른 사용자를 편집을 못하도록 차단',
 'right-blockemail' => '다른 사용자가 이메일을 보내지 못하도록 차단',
@@ -1699,8 +1701,8 @@ HTML 태그를 확인하세요.',
 'action-deleterevision' => '이 판을 삭제',
 'action-deletedhistory' => '이 문서의 삭제된 기여의 역사 보기',
 'action-browsearchive' => '삭제된 문서 찾기',
-'action-undelete' => 'ì\9d´ ë¬¸ì\84\9c를 ë³µêµ¬í\95\98기',
-'action-suppressrevision' => 'ì\9d´ ì\88¨ê²¨ì§\84 í\8c\90ì\9d\84 ê²\80í\86 í\95\98ê³  ë³µêµ¬í\95 ',
+'action-undelete' => 'ì\9d´ ë¬¸ì\84\9c를 ë\90\98ì\82´ë¦¬기',
+'action-suppressrevision' => 'ì\9d´ ì\88¨ê²¨ì§\84 í\8c\90ì\9d\84 ê²\80í\86 í\95\98ê³  ë\90\98ì\82´ë¦´',
 'action-suppressionlog' => '비공개 기록 보기',
 'action-block' => '이 사용자를 편집하지 못하도록 차단',
 'action-protect' => '이 문서의 보호 설정을 바꾸기',
@@ -1720,8 +1722,8 @@ HTML 태그를 확인하세요.',
 'nchanges' => '$1개 {{PLURAL:$1|바뀜}}',
 'recentchanges' => '최근 바뀜',
 'recentchanges-legend' => '최근 바뀜 설정',
-'recentchanges-summary' => '위키의 최근 바뀜 내역이 나와 있습니다.',
-'recentchanges-feed-description' => '위키의 최근 바뀜',
+'recentchanges-summary' => '위키의 최근 바뀜이 나와 있습니다.',
+'recentchanges-feed-description' => '위키의 최근 바뀜이 나와 있습니다.',
 'recentchanges-label-newpage' => '새로운 문서',
 'recentchanges-label-minor' => '사소한 편집',
 'recentchanges-label-bot' => '봇의 편집',
@@ -1743,7 +1745,7 @@ HTML 태그를 확인하세요.',
 'minoreditletter' => '잔글',
 'newpageletter' => '새글',
 'boteditletter' => '봇',
-'number_of_watching_users_pageview' => '[$1명이 주시하고 있음]',
+'number_of_watching_users_pageview' => '[{{PLURAL:$1|사용자}} $1명이 주시하고 있음]',
 'rc_categories' => '다음 분류로 제한 ("|"로 구분)',
 'rc_categories_any' => '모두',
 'rc-change-size-new' => '바꾼 후 $1 {{PLURAL:$1|바이트}}',
@@ -1809,8 +1811,8 @@ HTML 태그를 확인하세요.',
 'filetype-bad-ie-mime' => '인터넷 익스플로러가 잠재적으로 위험한 파일 형식으로 판단되어 사용이 금지된 "$1"로 인식할 수 있기 때문에 이 파일을 올릴 수 없습니다.',
 'filetype-unwanted-type' => "'''\".\$1\"''' 확장자는 추천하지 않습니다.
 추천하는 {{PLURAL:\$3|파일 확장자}}는 \$2입니다.",
-'filetype-banned-type' => '{{PLURAL:$3$4}}\'\'\'".$1"\'\'\' 형식의 파일은 올릴 수 없습니다.
-$2 형식만 사용할 수 있습니다.',
+'filetype-banned-type' => '\'\'\'".$1"\'\'\' {{PLURAL:$4|형식의 파일은 올릴 수 없습니다}}.
+$2 {{PLURAL:$3|형식만 사용할 수 있습니다}}.',
 'filetype-missing' => '파일에 확장자(".jpg" 등)가 없습니다.',
 'empty-file' => '올린 파일이 비어 있습니다.',
 'file-too-large' => '올리려는 파일이 너무 큽니다.',
@@ -1943,7 +1945,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'backend-fail-connect' => '"$1" 저장 백엔드에 접속하지 못했습니다.',
 'backend-fail-internal' => '"$1" 저장 백엔드에 알 수 없는 오류가 발생했습니다.',
 'backend-fail-contenttype' => '"$1"에 저장하기 위한 파일의 내용 유형을 판별하지 못했습니다.',
-'backend-fail-batchsize' => 'ì \80ì\9e¥ ë°±ì\97\94ë\93\9cì\97\90ì\84\9c í\8c\8cì\9d¼ {{PLURAL:$1|ì\9e\91ì\97\85}} $1ê°\9cê°\80 ì\8c\93ì\97¬ ì\9e\88ì\8aµë\8b\88ë\8b¤. í\95\9cê³\84ë\8a\94 $2개입니다.',
+'backend-fail-batchsize' => 'ì \80ì\9e¥ ë°±ì\97\94ë\93\9cì\97\90ì\84\9c í\8c\8cì\9d¼ {{PLURAL:$1|ì\9e\91ì\97\85}} $1ê°\9cê°\80 ì\8c\93ì\98\80ì\8aµë\8b\88ë\8b¤. í\95\9cê³\84ë\8a\94 {{PLURAL:$2|ì\9e\91ì\97\85}} $2개입니다.',
 'backend-fail-usable' => '파일 읽기/쓰기 권한이 없거나 저장 위치가 빠졌기 때문에 "$1" 파일을 읽거나 쓸 수 없습니다.',
 
 # File journal errors
@@ -2057,14 +2059,14 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filehist-comment' => '내용',
 'filehist-missing' => '파일을 찾을 수 없음',
 'imagelinks' => '이 파일을 사용하는 문서',
-'linkstoimage' => '다음 문서 $1개가 이 파일을 사용하고 있습니다:',
-'linkstoimage-more' => '$1개 이상의 문서가 이 파일을 가리키고 있습니다.
-다음 목록은 이 파일을 가리키는 처음 $1개 문서만 보여주고 있습니다.
-이 파일을 가리키는 ëª¨ë\93  ë¬¸ì\84\9c를 ë³´ë ¤ë©´ [[Special:WhatLinksHere/$2|ì\97¬ê¸°]]를 ì°¸ê³ í\95´ ì£¼ì\8b­ì\8b\9cì\98¤.',
+'linkstoimage' => '다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:',
+'linkstoimage-more' => '$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.
+다음 목록은 이 파일을 {{PLURAL:$1|가리키는 처음 문서 $1개}}만 보여주고 있습니다.
+이 파일을 가리키는 [[Special:WhatLinksHere/$2|모ë\93  ë¬¸ì\84\9c ëª©ë¡\9d]]ì\9d\84 ë³¼ ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.',
 'nolinkstoimage' => '이 파일을 사용하는 문서가 없습니다.',
 'morelinkstoimage' => '이 파일이 쓰이고 있는 문서 목록 [[Special:WhatLinksHere/$1|더 보기]].',
 'linkstoimage-redirect' => '$1 (파일 넘겨주기) $2',
-'duplicatesoffile' => '다음 파일 $1개가 이 파일과 중복됩니다 ([[Special:FileDuplicateSearch/$2|자세한 정보]]):',
+'duplicatesoffile' => '다음 {{PLURAL:$1|파일 $1개}}가 이 파일과 중복됩니다 ([[Special:FileDuplicateSearch/$2|자세한 정보]]):',
 'sharedupload' => '이 파일은 $1으로부터 왔고, 다른 프로젝트에서 사용하고 있을 가능성이 있습니다.',
 'sharedupload-desc-there' => '이 파일은 $1에 있으며, 다른 프로젝트에서 사용하고 있을 가능성이 있습니다.
 [$2 해당 파일]에 대한 자세한 정보를 확인해주세요.',
@@ -2110,7 +2112,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 ** 저작권 침해
 ** 중복된 파일',
 'filedelete-edit-reasonlist' => '삭제 이유 편집',
-'filedelete-maintenance' => 'ì \90ê²\80 ì¤\91ì\97\90ë\8a\94 ì\9e\84ì\8b\9cì \81ì\9c¼ë¡\9c ì\82­ì \9cì\99\80 ë³µêµ¬를 할 수 없습니다.',
+'filedelete-maintenance' => 'ì \90ê²\80 ì¤\91ì\97\90ë\8a\94 ì\9e\84ì\8b\9cì \81ì\9c¼ë¡\9c ì\82­ì \9cì\99\80 ë\90\98ì\82´ë¦¬ê¸°를 할 수 없습니다.',
 'filedelete-maintenance-title' => '파일을 삭제할 수 없습니다',
 
 # MIME search
@@ -2158,7 +2160,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'statistics-views-peredit' => '편집당 방문 횟수',
 'statistics-users' => '등록된 [[Special:ListUsers|사용자]]',
 'statistics-users-active' => '활동적인 사용자',
-'statistics-users-active-desc' => '최근 $1일 동안 활동한 사용자',
+'statistics-users-active-desc' => '최근 {{PLURAL:$1|$1일}} 동안 활동한 사용자',
 'statistics-mostpopular' => '가장 많이 읽힌 문서',
 
 'disambiguations' => '동음이의 문서를 가리키는 문서 목록',
@@ -2195,15 +2197,15 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'fewestrevisions' => '편집 역사가 짧은 문서 목록',
 
 # Miscellaneous special pages
-'nbytes' => '$1 바이트',
-'ncategories' => '분류 $1개',
+'nbytes' => '$1 {{PLURAL:$1|바이트}}',
+'ncategories' => '{{PLURAL:$1|분류}} $1개',
 'ninterwikis' => '{{PLURAL:$1|인터위키}} $1개',
-'nlinks' => '링크 $1개',
-'nmembers' => '문서 $1개',
-'nrevisions' => '편집 $1개',
-'nviews' => '$1회 읽음',
-'nimagelinks' => '문서 $1개에서 사용 중',
-'ntransclusions' => '문서 $1개에서 사용 중',
+'nlinks' => '{{PLURAL:$1|링크}} $1개',
+'nmembers' => '{{PLURAL:$1|문서}} $1개',
+'nrevisions' => '{{PLURAL:$1|판}} $1개',
+'nviews' => '$1번 {{PLURAL:$1|읽음}}',
+'nimagelinks' => '{{PLURAL:$1|문서}} $1개에서 사용 중',
+'ntransclusions' => '{{PLURAL:$1|문서}} $1개에서 사용 중',
 'specialpage-empty' => '명령에 대한 결과가 없습니다.',
 'lonelypages' => '외톨이 문서 목록',
 'lonelypagestext' => '{{SITENAME}}에서 다른 모든 문서에서 링크되거나 틀로 포함되지 않은 문서의 목록입니다.',
@@ -2245,7 +2247,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'listusers' => '사용자 목록',
 'listusers-editsonly' => '기여가 있는 사용자만 보기',
 'listusers-creationsort' => '계정 등록일 순으로 정렬',
-'usereditcount' => '편집 $1회',
+'usereditcount' => '{{PLURAL:$1|편집}} $1회',
 'usercreated' => '$1 $2에 계정 {{GENDER:$3|만들어짐}}',
 'newpages' => '새 문서 목록',
 'newpages-username' => '사용자 이름:',
@@ -2259,8 +2261,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'notargettext' => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
 'nopagetitle' => '해당 문서 없음',
 'nopagetext' => '찾는 문서가 존재하지 않습니다.',
-'pager-newer-n' => '이전 $1개',
-'pager-older-n' => '다음 $1개',
+'pager-newer-n' => '{{PLURAL:$1|다음 1개|다음 $1개}}',
+'pager-older-n' => '{{PLURAL:$1|이전 1개|이전 $1개}}',
 'suppress' => '오버사이트',
 'querypage-disabled' => '이 특수 문서는 성능상의 이유로 비활성화되었습니다.',
 
@@ -2309,7 +2311,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Special:Categories
 'categories' => '분류 목록',
-'categoriespagetext' => '{{PLURAL:$1}}문서나 자료를 담고 있는 분류 목록입니다.
+'categoriespagetext' => '문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.
 [[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.
 [[Special:WantedCategories|필요한 분류]]도 참고하세요.',
 'categoriesfrom' => '다음으로 시작하는 분류를 보여주기:',
@@ -2340,8 +2342,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Special:ActiveUsers
 'activeusers' => '활동적인 사용자 목록',
-'activeusers-intro' => '다음은 최근 $1 동안 활동한 사용자의 목록입니다.',
-'activeusers-count' => '최근 {{PLURAL:$3|1일|$3일}} 사이의 {{PLURAL:$1|활동}} $1회',
+'activeusers-intro' => '다음은 최근 $1{{PLURAL:$1|일}} 동안 활동한 사용자의 목록입니다.',
+'activeusers-count' => '최근 {{PLURAL:$3|$3일}} 사이의 {{PLURAL:$1|활동}} $1회',
 'activeusers-from' => '다음으로 시작하는 사용자를 보기:',
 'activeusers-hidebots' => '봇을 숨기기',
 'activeusers-hidesysops' => '관리자를 숨기기',
@@ -2424,14 +2426,14 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'notanarticle' => '문서가 아님',
 'notvisiblerev' => '이 판은 삭제되었습니다.',
 'watchnochange' => '주어진 기간 중에 바뀐 주시문서가 없습니다.',
-'watchlist-details' => '토론을 제외하고 문서 $1개를 주시하고 있습니다.',
+'watchlist-details' => '토론을 제외하고 {{PLURAL:$1|문서 $1개}}를 주시하고 있습니다.',
 'wlheader-enotif' => '* 이메일 알림 기능이 활성화되었습니다.',
 'wlheader-showupdated' => "* 마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 보여집니다.",
 'watchmethod-recent' => '주시된 문서를 확인하고자 최근 편집을 확인',
 'watchmethod-list' => '최근 편집을 확인하고자 주시된 문서 확인',
-'watchlistcontains' => '문서 $1개를 주시하고 있습니다.',
+'watchlistcontains' => '{{PLURAL:$1|문서 $1개}}를 주시하고 있습니다.',
 'iteminvalidname' => "'$1' 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...",
-'wlnote' => "다음은 최근 '''$2'''시간 동안 바뀐 문서 '''$1'''개 입니다. ($3 $4 기준)",
+'wlnote' => "다음은 최근 {{PLURAL:$2|'''$2'''시간}} 동안 {{PLURAL:$1|바뀐 문서 '''$1'''개 입니다}}. ($3 $4 기준)",
 'wlshowlast' => '최근 $1시간 $2일 또는 $3 동안에 바뀐 문서',
 'watchlist-options' => '주시문서 목록 설정',
 
@@ -2443,18 +2445,18 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'enotif_mailer' => '{{SITENAME}} 자동 알림 메일',
 'enotif_reset' => '모든 문서를 방문한 것으로 표시하기',
 'enotif_impersonal_salutation' => '{{SITENAME}} 사용자',
-'enotif_subject_deleted' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 삭제했습니다',
-'enotif_subject_created' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 만들었습니다',
-'enotif_subject_moved' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 옮겼습니다',
-'enotif_subject_restored' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 복구했습니다',
-'enotif_subject_changed' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 바꾸었습니다',
-'enotif_body_intro_deleted' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 삭제했습니다. $3 에서 볼 수 있습니다.',
-'enotif_body_intro_created' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 만들었습니다. 현재 판은 $3 에서 볼 수 있습니다.',
-'enotif_body_intro_moved' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 옮겼습니다. 현재 판은 $3 에서 볼 수 있습니다.',
-'enotif_body_intro_restored' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 복구했습니다. 현재 판은 $3 에서 볼 수 있습니다.',
-'enotif_body_intro_changed' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 바꾸었습니다. 현재 판은 $3 에서 볼 수 있습니다.',
-'enotif_lastvisited' => '마지막으로 방문한 뒤 생긴 모든 바뀜 사항을 보려면 $1 을 보세요.',
-'enotif_lastdiff' => 'ì\9d´ ë°\94ë\80\90 ë\82´ì\9a©을 보려면 $1 을 보세요.',
+'enotif_subject_deleted' => '{{SITENAME}} $1 문서를 $2 사용자가 {{GENDER:$2|삭제했습니다}}',
+'enotif_subject_created' => '{{SITENAME}} $1 문서를 $2 사용자가 {{GENDER:$2|만들었습니다}}',
+'enotif_subject_moved' => '{{SITENAME}} $1 문서를 $2 사용자가 {{GENDER:$2|옮겼습니다}}',
+'enotif_subject_restored' => '{{SITENAME}} $1 문서를 $2 사용자가 {{GENDER:$2|되살렸습니다}}',
+'enotif_subject_changed' => '{{SITENAME}} $1 문서를 $2 사용자가 {{GENDER:$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' => 'ì\9d´ ë°\94ë\80\9c을 보려면 $1 을 보세요.',
 'enotif_anon_editor' => '익명 사용자 $1',
 'enotif_body' => '$WATCHINGUSERNAME님,
 
@@ -2494,7 +2496,7 @@ $UNWATCHURL
 'exblank' => '빈 문서',
 'delete-confirm' => '"$1" 삭제',
 'delete-legend' => '삭제',
-'historywarning' => "'''경고:''' 삭제하려는 문서에 과거 편집 내역 약 $1개가 있습니다:",
+'historywarning' => "'''경고:''' 삭제하려는 문서에 이전 {{PLURAL:$1|편집 역사}} 약 $1개가 있습니다:",
 'confirmdeletetext' => '문서와 문서 역사를 삭제하려고 합니다.
 삭제하려는 문서가 맞는지, 이 문서를 삭제하는 것이 [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지를 확인해 주세요.',
 'actioncomplete' => '명령 완료',
@@ -2513,9 +2515,9 @@ $UNWATCHURL
 ** 저작권 침해
 ** 훼손 행위',
 'delete-edit-reasonlist' => '삭제 이유 편집',
-'delete-toobig' => '이 문서에는 편집 역사가 $1개 있습니다.
+'delete-toobig' => '이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.
 편집 역사가 긴 문서를 삭제하면 {{SITENAME}}에 큰 혼란을 줄 수 있기 때문에 삭제할 수 없습니다.',
-'delete-warning-toobig' => '이 문서에는 편집 역사가 $1개 있습니다.
+'delete-warning-toobig' => '이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.
 편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.
 주의해 주세요.',
 
@@ -2523,8 +2525,8 @@ $UNWATCHURL
 'rollback' => '편집 되돌리기',
 'rollback_short' => '되돌리기',
 'rollbacklink' => '되돌리기',
-'rollbacklinkcount' => '편집 $1회 되돌리기',
-'rollbacklinkcount-morethan' => '편집 $1회 이상 되돌리기',
+'rollbacklinkcount' => '{{PLURAL:$1|편집}} $1회 되돌리기',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|편집}} $1회 이상 되돌리기',
 'rollbackfailed' => '되돌리기 실패',
 'cantrollback' => '편집을 되돌릴 수 없습니다.
 문서를 편집한 사용자가 한명뿐입니다.',
@@ -2545,7 +2547,7 @@ $UNWATCHURL
 
 # Protect
 'protectlogpage' => '문서 보호 기록',
-'protectlogtext' => '아래의 목록은 문서 보호에 관한 바뀜 사항에 대한 기록입니다.
+'protectlogtext' => '아래의 목록은 문서 보호에 관한 바뀜에 대한 기록입니다.
 현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참고하세요.',
 'protectedarticle' => '사용자가 "[[$1]]" 문서를 보호했습니다',
 'modifiedarticleprotection' => '사용자가 "[[$1]]" 문서의 보호 설정을 바꿨습니다',
@@ -2619,49 +2621,49 @@ $UNWATCHURL
 'viewdeletedpage' => '삭제된 문서 보기',
 'undeletepagetext' => '다음 {{PLURAL:$1|문서는|문서 $1개는}} 삭제되었지만 아직 보관되어 있고 되살릴 수 있습니다.
 보관된 문서는 주기적으로 삭제될 것입니다.',
-'undelete-fieldset-title' => '문ì\84\9c ë³µêµ¬',
-'undeleteextrahelp' => "문ì\84\9c ì\97­ì\82¬ ì \84체를 ë³µêµ¬í\95\98려면 모든 체크박스의 선택을 해제하고 '''{{int:undeletebtn}}'''를 누르세요.
\8a¹ì \95í\95\9c ë²\84ì \84ë§\8c ë³µêµ¬í\95\98려면 ë³µêµ¬í\95\98려는 버전을 선택하고 '''{{int:undeletebtn}}'''를 누르세요.",
-'undeleterevisions' => '판 $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ë\8a\94 ì\97­ì\82¬ë\8a\94 ì§\80ê¸\88 ì\97­ì\82¬ì\9d\98 ê³¼ê±° 부분에 나타날 것입니다.',
-'undeleterevdel' => '복구í\95\98ë ¤ë\8a\94 ë¬¸ì\84\9cì\9d\98 ìµ\9cì\8b í\8c\90ì\9d´ ì\82­ì \9cë\90\98ì\96´ ì\9e\88ë\8a\94 ê²½ì\9a° ë¬¸ì\84\9c를 ë³µêµ¬ì\8b\9cí\82¬ 수 없습니다.
+'undelete-fieldset-title' => '문ì\84\9c ë\90\98ì\82´ë¦¬ê¸°',
+'undeleteextrahelp' => "문ì\84\9c ì\97­ì\82¬ ì \84체를 ë\90\98ì\82´ë¦¬려면 모든 체크박스의 선택을 해제하고 '''{{int:undeletebtn}}'''를 누르세요.
\8a¹ì \95í\95\9c ë²\84ì \84ë§\8c ë\90\98ì\82´ë¦¬ë ¤ë©´ ë\90\98ì\82´ë¦¬려는 버전을 선택하고 '''{{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´ë¦¬ë ¤ë\8a\94 ë¬¸ì\84\9cì\9d\98 ìµ\9cì\8b í\8c\90ì\9d´ ì\82­ì \9cë\90\98ì\96´ ì\9e\88ë\8a\94 ê²½ì\9a° ë¬¸ì\84\9c를 ë\90\98ì\82´ë¦´ 수 없습니다.
 이러한 경우 삭제된 최신판 문서의 확인 상자를 선택 해제하거나 숨김을 해제해야 합니다.',
 'undeletehistorynoadmin' => '이 문서는 삭제되었습니다.
 삭제된 이유와 삭제되기 전에 이 문서를 편집한 사용자가 아래에 나와 있습니다.
 삭제된 문서의 내용을 보려면 관리자 권한이 필요합니다.',
 'undelete-revision' => '삭제된 $1 문서의 $4 $5 버전 (기여자 $3):',
 'undeleterevision-missing' => '해당 판이 잘못되었거나 존재하지 않습니다.
\9e\98못ë\90\9c ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ì\99\94ê±°ë\82\98, í\8a¹ì \95 í\8c\90ì\9d´ ì\9d´ë¯¸ ë³µêµ¬ë\90\98거나 데이터베이스에서 제거되었을 수도 있습니다.',
\9e\98못ë\90\9c ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ì\99\94ê±°ë\82\98, í\8a¹ì \95 í\8c\90ì\9d´ ì\9d´ë¯¸ ë\90\98ì\82´ë ¸거나 데이터베이스에서 제거되었을 수도 있습니다.',
 'undelete-nodiff' => '이전의 판이 없습니다.',
-'undeletebtn' => '복구',
+'undeletebtn' => 'ë\90\98ì\82´ë¦¬ê¸°',
 'undeletelink' => '보기/되살리기',
 'undeleteviewlink' => '보기',
 'undeletereset' => '초기화',
 'undeleteinvert' => '선택 반전',
 'undeletecomment' => '이유:',
-'undeletedrevisions' => '판 $1개를 복구했습니다',
-'undeletedrevisions-files' => '판 $1개와 파일 $2개를 복구했습니다.',
-'undeletedfiles' => '파일 $1개를 복구했습니다',
-'cannotundelete' => '복구í\95\98는 데 실패했습니다:
+'undeletedrevisions' => '{{PLURAL:$1|판 1개|판 $1개}}를 되살렸습니다',
+'undeletedrevisions-files' => '{{PLURAL:$1|판 1개|판 $1개}}와 {{PLURAL:$2|파일 1개|파일 $2개}}를 되살렸습니다',
+'undeletedfiles' => '{{PLURAL:$1|파일 1개|파일 $1개}}를 되살렸습니다',
+'cannotundelete' => 'ë\90\98ì\82´ë¦¬는 데 실패했습니다:
 $1',
-'undeletedpage' => "'''$1 ë¬¸ì\84\9c를 ë³µêµ¬í\96\88습니다.'''
+'undeletedpage' => "'''$1 ë¬¸ì\84\9c를 ë\90\98ì\82´ë ¸습니다.'''
 
-[[Special:Log/delete|ì\82­ì \9c ê¸°ë¡\9d]]ì\97\90ì\84\9c ìµ\9cê·¼ì\9d\98 ì\82­ì \9cì\99\80 ë³µêµ¬ 기록을 볼 수 있습니다.",
+[[Special:Log/delete|ì\82­ì \9c ê¸°ë¡\9d]]ì\97\90ì\84\9c ìµ\9cê·¼ì\9d\98 ì\82­ì \9cì\99\80 ë\90\98ì\82´ë¦¬ê¸° 기록을 볼 수 있습니다.",
 'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
 'undelete-search-title' => '삭제된 문서 찾기',
 'undelete-search-box' => '삭제된 문서 찾기',
 'undelete-search-prefix' => '다음으로 시작하는 문서 보기:',
 'undelete-search-submit' => '찾기',
 'undelete-no-results' => '삭제된 문서 보존 자료에서 입력한 값에 맞는 문서가 없습니다.',
-'undelete-filename-mismatch' => 'í\83\80ì\9e\84ì\8a¤í\83¬í\94\84ê°\80 $1ì\9d¸ í\8c\8cì\9d¼ì\9d\98 ë²\84ì \84ì\9d\84 ë³µêµ¬í\95  수 없습니다: 파일 이름이 일치하지 않습니다.',
-'undelete-bad-store-key' => 'í\83\80ì\9e\84ì\8a¤í\83¬í\94\84ê°\80 $1ì\9d¸ í\8c\8cì\9d¼ì\9d\98 ë²\84ì \84ì\9d\84 ë³µêµ¬í\95  수 없습니다: 파일이 삭제되기 전에 사라졌습니다.',
+'undelete-filename-mismatch' => 'í\83\80ì\9e\84ì\8a¤í\83¬í\94\84ê°\80 $1ì\9d¸ í\8c\8cì\9d¼ì\9d\98 ë²\84ì \84ì\9d\84 ë\90\98ì\82´ë¦´ 수 없습니다: 파일 이름이 일치하지 않습니다.',
+'undelete-bad-store-key' => 'í\83\80ì\9e\84ì\8a¤í\83¬í\94\84ê°\80 $1ì\9d¸ í\8c\8cì\9d¼ì\9d\98 ë²\84ì \84ì\9d\84 ë\90\98ì\82´ë¦´ 수 없습니다: 파일이 삭제되기 전에 사라졌습니다.',
 'undelete-cleanup-error' => '사용되지 않는 보존된 파일 "$1"을 삭제하는 데 오류가 발생했습니다.',
-'undelete-missing-filearchive' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ì\97\90 ì¡´ì\9e¬í\95\98ì§\80 ì\95\8a기 ë\95\8c문ì\97\90 í\8c\8cì\9d¼ ë³´ì¡´ IDê°\80 $1ì\9d¸ í\8c\8cì\9d¼ì\9d\84 ë³µêµ¬í\95  수 없습니다.
\9d´ë¯¸ ë³µêµ¬ë\90\98ì\97\88을 수 있습니다.',
-'undelete-error' => '문서 복구 중 오류',
-'undelete-error-short' => '파일 복구 오류: $1',
-'undelete-error-long' => 'í\8c\8cì\9d¼ì\9d\84 ë³µêµ¬í\95\98는 동안 오류가 발생했습니다:
+'undelete-missing-filearchive' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ì\97\90 ì¡´ì\9e¬í\95\98ì§\80 ì\95\8a기 ë\95\8c문ì\97\90 í\8c\8cì\9d¼ ë³´ì¡´ IDê°\80 $1ì\9d¸ í\8c\8cì\9d¼ì\9d\84 ë\90\98ì\82´ë¦´ 수 없습니다.
\9d´ë¯¸ ë\90\98ì\82´ë ¸을 수 있습니다.',
+'undelete-error' => '문서를 되살리는 동안 오류',
+'undelete-error-short' => '파일을 되살리는 동안 오류: $1',
+'undelete-error-long' => 'í\8c\8cì\9d¼ì\9d\84 ë\90\98ì\82´ë¦¬는 동안 오류가 발생했습니다:
 
 $1',
 'undelete-show-file-confirm' => '정말 "<nowiki>$1</nowiki>" 파일의 삭제된 $2 $3 버전을 보시겠습니까?',
@@ -2818,7 +2820,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'blocklogtext' => '이 목록은 사용자 차단/차단 해제 기록입니다.
 자동으로 차단된 IP 주소는 여기에 나오지 않습니다.
 [[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
-'unblocklogentry' => '사용자가 $1 사용자를 차단 해제했습니다.',
+'unblocklogentry' => '사용자가 $1 사용자를 차단 해제했습니다',
 'block-log-flags-anononly' => 'IP만 막음',
 'block-log-flags-nocreate' => '계정 만들기 금지됨',
 'block-log-flags-noautoblock' => '자동 차단 비활성화됨',
@@ -2874,7 +2876,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'lockfilenotwritable' => '데이터베이스 잠금 파일에 쓰기 권한이 없습니다.
 데이터베이스를 잠그거나 잠금 해제하려면, 웹 서버에서 이 파일의 쓰기 권한을 설정해야 합니다.',
 'databasenotlocked' => '데이터베이스가 잠겨 있지 않습니다.',
-'lockedbyandtime' => '($1이 $2 $3에 잠금)',
+'lockedbyandtime' => '({{GENDER:$1|$1}} 사용자가 $2 $3에 잠금)',
 
 # Move page
 'move-page' => '$1 이동',
@@ -2933,11 +2935,11 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'movepage-page-exists' => '이동할 수 없습니다. "$1" 문서가 이미 존재합니다.',
 'movepage-page-moved' => '"$1" 문서를 "$2" 문서로 이동했습니다.',
 'movepage-page-unmoved' => '"$1" 문서를 "$2" 문서로 이동할 수 없습니다.',
-'movepage-max-pages' => '문서를 최대 $1개 이동했습니다. 나머지 문서는 자동 이동하지 않습니다.',
+'movepage-max-pages' => '{{PLURAL:$1|문서}}를 최대 $1개 이동했습니다. 나머지 문서는 자동 이동하지 않습니다.',
 'movelogpage' => '이동 기록',
 'movelogpagetext' => '아래는 이동한 문서의 목록입니다.',
 'movesubpage' => '{{PLURAL:$1|하위 문서}}',
-'movesubpagetext' => '이 문서에는 다음 하위 문서 $1개가 있습니다.',
+'movesubpagetext' => '이 문서에는 다음 {{PLURAL:$1|하위 문서}} $1개가 있습니다.',
 'movenosubpage' => '이 문서에는 하위 문서가 존재하지 않습니다.',
 'movereason' => '이유:',
 'revertmove' => '되돌리기',
@@ -3039,9 +3041,9 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'importtext' => '원본 위키에서 [[Special:Export|내보내기]] 기능을 사용해 파일을 내려받으세요.
 그리고 당신의 컴퓨터에 저장해 둔 후 여기에 올려주세요.',
 'importstart' => '문서를 가져오는 중...',
-'import-revision-count' => ' $1개',
+'import-revision-count' => '{{PLURAL:$1|판}} $1개',
 'importnopages' => '가져올 문서가 없습니다.',
-'imported-log-entries' => '기록 항목 $1개를 가져왔습니다.',
+'imported-log-entries' => '{{PLURAL:$1|기록 항목}} $1개를 가져왔습니다.',
 'importfailed' => '가져오기 실패: <nowiki>$1</nowiki>',
 'importunknownsource' => '알 수 없는 가져오기 자료 유형',
 'importcantopen' => '파일을 열 수 없습니다.',
@@ -3078,10 +3080,10 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 # Import log
 'importlogpage' => '가져오기 기록',
 'importlogpagetext' => '다른 위키에서 가져온 문서 기록입니다.',
-'import-logentry-upload' => '사용자가 파일 올리기를 통해 [[$1]] 문서를 가져왔습니다.',
-'import-logentry-upload-detail' => ' $1개',
-'import-logentry-interwiki' => '$1 문서를 다른 위키에서 가져왔습니다.',
-'import-logentry-interwiki-detail' => '$2에서 판 $1개를 가져옴',
+'import-logentry-upload' => '사용자가 파일 올리기를 통해 [[$1]] 문서를 가져왔습니다',
+'import-logentry-upload-detail' => '{{PLURAL:$1|판}} $1개',
+'import-logentry-interwiki' => '$1 문서를 다른 위키에서 가져왔습니다',
+'import-logentry-interwiki-detail' => '$2에서 {{PLURAL:$1|판}} $1개를 가져왔습니다',
 
 # JavaScriptTest
 'javascripttest' => '자바스크립트 테스트',
@@ -3113,7 +3115,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-ca-protect' => '문서 보호하기',
 'tooltip-ca-unprotect' => '이 문서의 보호 설정을 바꾸기',
 'tooltip-ca-delete' => '문서 삭제하기',
-'tooltip-ca-undelete' => 'ì\82­ì \9cë\90\98기 ì \84ì\97\90 ì\9d´ ë¬¸ì\84\9cì\9d\98 ì\99\84ë£\8cí\95\9c í\8e¸ì§\91 ë³µêµ¬í\95\98기',
+'tooltip-ca-undelete' => 'ì\82­ì \9cë\90\98기 ì \84ì\97\90 ì\9d´ ë¬¸ì\84\9cì\9d\98 ì\99\84ë£\8cí\95\9c í\8e¸ì§\91 ë\90\98ì\82´ë¦¬기',
 'tooltip-ca-move' => '문서 이동하기',
 'tooltip-ca-watch' => '이 문서를 주시문서 목록에 추가합니다.',
 'tooltip-ca-unwatch' => '이 문서를 주시문서 목록에서 제거합니다.',
@@ -3319,7 +3321,7 @@ $1',
 파일을 실행하면 컴퓨터에 문제가 생길 가능성이 있습니다.",
 'imagemaxsize' => '그림 최대 크기:<br />(파일 문서에 적용되는 기능)',
 'thumbsize' => '섬네일 크기:',
-'widthheightpage' => '$1 × $2, $3페이지',
+'widthheightpage' => '$1 × $2, $3{{PLURAL:$3|쪽}}',
 'file-info' => '파일 크기: $1, MIME 종류: $2',
 'file-info-size' => '$1 × $2 픽셀, 파일 크기: $3, MIME 종류: $4',
 'file-info-size-pages' => '$1 × $2 픽셀, 파일 크기: $3, MIME 형식: $4, $5{{PLURAL:$5|쪽}}',
@@ -3332,16 +3334,16 @@ $1',
 'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1',
 'show-big-image-size' => '$1 × $2 픽셀',
 'file-info-gif-looped' => '반복됨',
-'file-info-gif-frames' => '$1 프레임',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|프레임}}',
 'file-info-png-looped' => '반복됨',
 'file-info-png-repeat' => '$1{{PLURAL:$1|번}} 재생됨',
-'file-info-png-frames' => '$1 프레임',
+'file-info-png-frames' => '$1 {{PLURAL:$1|프레임}}',
 'file-no-thumb-animation' => "'''참고: 기술적인 제한으로 인해 이 파일의 섬네일은 애니메이션을 지원하지 않습니다.'''",
 'file-no-thumb-animation-gif' => "'''참고: 기술적인 제한으로 인해 고해상도 GIF 그림 섬네일은 애니메이션을 지원하지 않습니다.'''",
 
 # Special:NewFiles
 'newimages' => '새 파일 목록',
-'imagelisttext' => "파일 '''$1'''개를 $2 순으로 정렬한 목록입니다.",
+'imagelisttext' => "{{PLURAL:$1|파일}} '''$1'''개를 $2 순으로 정렬한 목록입니다.",
 'newimages-summary' => '이 특수 문서는 최근에 올라온 파일을 나열하고 있습니다.',
 'newimages-legend' => '필터',
 'newimages-label' => '파일 이름 (또는 그 일부분):',
@@ -3499,7 +3501,7 @@ Variants for Chinese language
 'exif-gpstrack' => '이동 방향',
 'exif-gpsimgdirectionref' => '그림 방향에 대한 정보',
 'exif-gpsimgdirection' => '그림 방향',
-'exif-gpsmapdatum' => '측ì§\80 ì¡°ì\82¬ ë\8d°ì\9d´ì²\98 ì\82¬ì\9a©',
+'exif-gpsmapdatum' => 'ì\82¬ì\9a©ë\90\9c ì¸¡ì§\80 ì¡°ì\82¬ ë\8d°ì\9d´í\84°',
 'exif-gpsdestlatituderef' => '목적지의 위도 정보',
 'exif-gpsdestlatitude' => '목적지의 위도',
 'exif-gpsdestlongituderef' => '목적지의 경도 정보',
@@ -3720,8 +3722,8 @@ Variants for Chinese language
 'exif-gpslongitude-w' => '서경',
 
 # Pseudotags used for GPSAltitudeRef
-'exif-gpsaltitude-above-sealevel' => '해발 $1미터',
-'exif-gpsaltitude-below-sealevel' => '해저 $1미터',
+'exif-gpsaltitude-above-sealevel' => '해발 $1{{PLURAL:$1|미터}}',
+'exif-gpsaltitude-below-sealevel' => '해저 $1{{PLURAL:$1|미터}}',
 
 'exif-gpsstatus-a' => '측정 중',
 'exif-gpsstatus-v' => '인터랙티브 측정',
@@ -3930,19 +3932,19 @@ $5
 일반 미리 보기를 이용하세요.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => '최근 $1 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.',
-'lag-warn-high' => '데이터베이스 서버의 과도한 부하 때문에 최근 $1 안에 바뀐 문서 목록은 보여지지 않을 수 있습니다.',
+'lag-warn-normal' => '최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.',
+'lag-warn-high' => '데이터베이스 서버의 과도한 부하 때문에 최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서 목록은 보여지지 않을 수 있습니다.',
 
 # Watchlist editor
-'watchlistedit-numitems' => '토론 문서를 제외하고 문서 $1개를 주시하고 있습니다.',
+'watchlistedit-numitems' => '토론 문서를 제외하고 {{PLURAL:$1|문서 1개|문서 $1개}}를 주시하고 있습니다.',
 'watchlistedit-noitems' => '주시문서 목록이 비어 있습니다.',
 'watchlistedit-normal-title' => '주시문서 목록 편집하기',
 'watchlistedit-normal-legend' => '주시문서 목록에서 문서 제거하기',
-'watchlistedit-normal-explain' => '주ì\8b\9c문ì\84\9c ëª©ë¡\9dì\97\90 ì\9e\88ë\8a\94 ë¬¸ì\84\9cì\9d\98 ì \9c목ì\9d´ ì\95\84ë\9e\98ì\97\90 ë\82\98ì\97´ë\90\98ì\96´ 있습니다.
+'watchlistedit-normal-explain' => '주ì\8b\9c문ì\84\9c ëª©ë¡\9dì\97\90 ì\9e\88ë\8a\94 ë¬¸ì\84\9cì\9d\98 ì \9c목ì\9d´ ì\95\84ë\9e\98ì\97\90 ë\82\98ì\99\80 있습니다.
 주시문서 목록에서 제거하려는 문서가 있으면 각 항목의 확인 상자를 선택한 다음 "{{int:Watchlistedit-normal-submit}}"를 클릭해주세요.
 또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.',
 'watchlistedit-normal-submit' => '항목 삭제',
-'watchlistedit-normal-done' => '주시문서 목록에서 다음 {{PLURAL:$1|항목}}을 주시하지 않습니다:',
+'watchlistedit-normal-done' => '주시문서 목록에서 다음 {{PLURAL:$1|항목 $1개}}를 제거했습니다:',
 'watchlistedit-raw-title' => '주시문서 목록 직접 편집하기',
 'watchlistedit-raw-legend' => '주시문서 목록 직접 편집하기',
 'watchlistedit-raw-explain' => '주시문서 목록의 각 항목이 나와 있습니다. 필요한 항목을 직접 추가하거나 제거할 수 있습니다.
@@ -3952,8 +3954,8 @@ $5
 'watchlistedit-raw-titles' => '목록:',
 'watchlistedit-raw-submit' => '주시문서 목록 새로 고침',
 'watchlistedit-raw-done' => '주시문서 목록을 새로 고쳤습니다.',
-'watchlistedit-raw-added' => '문서 $1개를 추가했습니다:',
-'watchlistedit-raw-removed' => '문서 $1개를 제거했습니다:',
+'watchlistedit-raw-added' => '{{PLURAL:$1|문서 $1개}}를 추가했습니다:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|문서 $1개}}를 제거했습니다:',
 
 # Watchlist editing tools
 'watchlisttools-view' => '주시문서 최근 바뀜',
@@ -4017,7 +4019,7 @@ $5
 'fileduplicatesearch-submit' => '찾기',
 'fileduplicatesearch-info' => '$1 × $2 픽셀<br />파일 크기: $3<br />MIME 유형: $4',
 'fileduplicatesearch-result-1' => '"$1" 파일과 중복된 파일이 없습니다.',
-'fileduplicatesearch-result-n' => '"$1" 파일은 중복 파일이 $2개 있습니다.',
+'fileduplicatesearch-result-n' => '"$1" 파일은 {{PLURAL:$2|중복 파일이 $2개}} 있습니다.',
 'fileduplicatesearch-noresults' => '"$1"이라는 이름을 가진 파일이 없습니다.',
 
 # Special:SpecialPages
@@ -4104,17 +4106,17 @@ $5
 'sqlite-no-fts' => '$1 (본문은 찾기에서 제외)',
 
 # New logging system
-'logentry-delete-delete' => '$1 사용자가 $3 문서를 삭제했습니다.',
-'logentry-delete-restore' => '$1 사용자가 $3 문서를 복구했습니다.',
-'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 보이기 설정을 바꾸었습니다: $4',
-'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 바꾸었습니다: $4',
-'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 보이기 설정을 바꾸었습니다.',
-'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 보이기 설정을 바꾸었습니다.',
-'logentry-suppress-delete' => '$1 사용자가 $3 문서를 숨겼습니다.',
-'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 바꾸었습니다: $4',
-'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 바꾸었습니다: $4',
-'logentry-suppress-event-legacy' => '$1 사용자가 비공개적으로 $3의 항목에 대한 보이기 설정을 바꾸었습니다.',
-'logentry-suppress-revision-legacy' => '$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 바꾸었습니다.',
+'logentry-delete-delete' => '$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}',
+'logentry-delete-restore' => '$1 사용자가 $3 문서를 {{GENDER:$2|되살렸습니다}}',
+'logentry-delete-event' => '$1 사용자가 $3의 {{PLURAL:$1|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4',
+'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 {{GENDER:$2|바꾸었습니다}}: $4',
+'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}',
+'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}',
+'logentry-suppress-delete' => '$1 사용자가 $3 문서를 {{GENDER:$2|숨겼습니다}}',
+'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4',
+'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4',
+'logentry-suppress-event-legacy' => '$1 사용자가 비공개적으로 $3의 항목에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}',
+'logentry-suppress-revision-legacy' => '$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}',
 'revdelete-content-hid' => '내용 숨겨짐',
 'revdelete-summary-hid' => '편집 요약 숨겨짐',
 'revdelete-uname-hid' => '사용자 이름 숨겨짐',
@@ -4123,20 +4125,20 @@ $5
 'revdelete-uname-unhid' => '사용자 이름 숨김 해제됨',
 'revdelete-restricted' => '관리자에게 제한을 적용함',
 'revdelete-unrestricted' => '관리자에 대한 제한을 해제함',
-'logentry-move-move' => '$1 사용자가 $3 문서를 $4 문서로 옮겼습니다.',
-'logentry-move-move-noredirect' => '$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 옮겼습니다.',
-'logentry-move-move_redir' => '$1 사용자가 $3 문서를 $4 문서로 옮기면서 넘겨주기를 덮어썼습니다.',
-'logentry-move-move_redir-noredirect' => '$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않으면서 옮기면서 옮길 대상에 있던 넘겨주기를 덮어썼습니다.',
-'logentry-patrol-patrol' => '$1 사용자가 $3 문서의 $4판을 검토한 것으로 표시했습니다.',
-'logentry-patrol-patrol-auto' => '$1 사용자가 자동적으로 $3 문서의 $4판을 검토한 것으로 표시했습니다.',
-'logentry-newusers-newusers' => '$1 사용자 계정을 만들었습니다.',
-'logentry-newusers-create' => '$1 사용자 계정을 만들었습니다.',
-'logentry-newusers-create2' => '$1 사용자가 $3 사용자 계정을 만들었습니다.',
-'logentry-newusers-byemail' => '$3 사용자 계정이 $1에 만들어졌고 비밀번호는 이메일로 보냈습니다',
-'logentry-newusers-autocreate' => '$1 사용자 계정을 자동적으로 만들었습니다.',
-'logentry-rights-rights' => '$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 바꾸었습니다.',
-'logentry-rights-rights-legacy' => '$1 사용자가 $3 사용자의 권한을 바꾸었습니다.',
-'logentry-rights-autopromote' => '$1 ì\82¬ì\9a©ì\9e\90ì\9d\98 ê¶\8cí\95\9cì\9d´ ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c $4ì\97\90ì\84\9c $5ì\9c¼ë¡\9c ë°\94ë\80\8cì\97\88ì\8aµë\8b\88ë\8b¤.',
+'logentry-move-move' => '$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮겼습니다}}',
+'logentry-move-move-noredirect' => '$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}',
+'logentry-move-move_redir' => '$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮기면서}} 넘겨주기를 덮어썼습니다',
+'logentry-move-move_redir-noredirect' => '$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않으면서 {{GENDER:$2|옮기면서}} 옮길 대상에 있던 넘겨주기를 덮어썼습니다',
+'logentry-patrol-patrol' => '$1 사용자가 $3 문서의 $4판을 검토한 것으로 {{GENDER:$2|표시했습니다}}',
+'logentry-patrol-patrol-auto' => '$1 사용자가 자동적으로 $3 문서의 $4판을 검토한 것으로 {{GENDER:$2|표시했습니다}}',
+'logentry-newusers-newusers' => '$1 사용자 계정을 {{GENDER:$2|만들었습니다}}',
+'logentry-newusers-create' => '$1 사용자 계정을 {{GENDER:$2|만들었습니다}}',
+'logentry-newusers-create2' => '$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}',
+'logentry-newusers-byemail' => '$3 사용자 계정이 $1에 {{GENDER:$2|만들어졌고}} 비밀번호는 이메일로 보냈습니다',
+'logentry-newusers-autocreate' => '$1 사용자 계정을 자동적으로 {{GENDER:$2|만들었습니다}}',
+'logentry-rights-rights' => '$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}',
+'logentry-rights-rights-legacy' => '$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}',
+'logentry-rights-autopromote' => '$1 ì\82¬ì\9a©ì\9e\90ì\9d\98 ê¶\8cí\95\9cì\9d\84 ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c $4ì\97\90ì\84\9c $5ì\9c¼ë¡\9c {{GENDER:$2|ë°\94꾸ì\97\88ì\8aµë\8b\88ë\8b¤}}',
 'rightsnone' => '(없음)',
 
 # Feedback
index 574c201..46d4361 100644 (file)
@@ -598,9 +598,9 @@ $2',
 'passwordreset-emailtitle' => '{{SITENAME}} сайтдагъы тергеу джазыуну юсюнден билгиле',
 'passwordreset-emailelement' => 'Къошулуучуну аты: $1
 Болджаллы пароль: $2',
-'passwordreset-emailsent' => 'ЭÑ\81геÑ\80Ñ\82иÑ\83 e-mail ийилди.',
-'passwordreset-emailsent-capture' => 'Ийилген эсгертиу e-mail тюбюрекде берилибди.',
-'passwordreset-emailerror-capture' => 'Ийилген эсгертиу e-mail тюбюрекде берилибди, аны ашырыуу джетишимсиз болду, чурум: $1',
+'passwordreset-emailsent' => 'Ð\9fаÑ\80олÑ\8c Ð±Ð»Ð° e-mail ийилди.',
+'passwordreset-emailsent-capture' => 'Ийилген пароль эсгертиу e-mail тюбюрекде берилибди.',
+'passwordreset-emailerror-capture' => 'Ийилген пароль эсгертиу e-mail тюбюрекде берилибди, аны ашырыуу джетишимсиз болду, чурум: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Электрон почтаны адресин ауушдур',
@@ -1057,7 +1057,7 @@ $1",
 'searchprofile-articles-tooltip' => '$1 ичинде изле',
 'searchprofile-project-tooltip' => '$1 ичинде изле',
 'searchprofile-images-tooltip' => 'Файлланы изле',
-'searchprofile-everything-tooltip' => 'Бютёу бетледе изле (сюзюу бетледе да)',
+'searchprofile-everything-tooltip' => 'Бютеу бетледе изле (сюзюу бетледе да)',
 'searchprofile-advanced-tooltip' => 'Энчи ат аланладада изле',
 'search-result-size' => '$1 ({{PLURAL:$2|$2 сёз}})',
 'search-result-category-size' => '{{PLURAL:$1|1 элемент|$1 элемент}} ({{PLURAL:$2|1 тюбкатегория|$2 тюбкатегория}}, {{PLURAL:$3|1 файл|$3 файл}})',
@@ -1070,13 +1070,13 @@ $1",
 'search-interwiki-more' => '(дагъыда)',
 'search-relatedarticle' => 'Байламлы',
 'mwsuggest-disable' => 'AJAX юретиулени джукълатыгъыз',
-'searcheverything-enable' => 'Атланы бютёу аламларында изле',
+'searcheverything-enable' => 'Атланы бютеу аламларында изле',
 'searchrelated' => 'бейламлы',
-'searchall' => 'бютёу',
+'searchall' => 'бютеу',
 'showingresults' => 'Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$1</strong> {{PLURAL:$1|эсеб|эсебле}} {{PLURAL:$1|кёргюзюлгенди|кёргюзюлгендиле}}.',
 'showingresultsnum' => 'Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$3</strong> {{PLURAL:$3|эсеб|эсебле}} {{PLURAL:$3|кёргюзюлгенди|кёргюзюлгендиле}}.',
 'showingresultsheader' => "'''$4''' ючюн {{PLURAL:$5|'''$3''' эсебден '''$1'''|'''$1 — $2''' арасы '''$3''' эсеб}}",
-'nonefound' => "'''Эсгериу.''' Тынгылау бла излеу бютёу атланы аламында бардырылмайды. Бютёу атланы аламында (къошулуучуланы сюзюулери, шаблонла эмда башхала) излер ючюн аллындан ''all:'' префиксни хайырландырыгъыз неда керекли атланы аламын белгилегиз.",
+'nonefound' => "'''Эсгериу:''' тынгылау бла излеу бютеу атланы аламында бардырылмайды. Бютеу атланы аламында (къошулуучуланы сюзюулери, шаблонла эмда башхала) излер ючюн аллындан ''all:'' префиксни хайырландырыгъыз неда керекли атланы аламын белгилегиз.",
 'search-nonefound' => 'Соруу бла келишген эсеб джокъду',
 'powersearch' => 'Кенг излеу',
 'powersearch-legend' => 'Кенг излеу',
@@ -2628,14 +2628,14 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'tooltip-n-recentchanges' => 'Ахыр тюрлениулени тизмеси',
 'tooltip-n-randompage' => 'Эсде болмагъан бир бетге къара',
 'tooltip-n-help' => '«{{SITENAME}}» проектге джардам этиу',
-'tooltip-t-whatlinkshere' => 'Бу бетге джибериу берген бютёу бетлени тизмеси',
+'tooltip-t-whatlinkshere' => 'Бу бетге джибериу берген бютеу бетлени тизмеси',
 'tooltip-t-recentchangeslinked' => 'Бу бет джибериуле берген бетледе ахыр тюрлениуле',
 'tooltip-feed-rss' => 'Бу битге RSS-трансляция',
 'tooltip-feed-atom' => 'Бу бетге Atom-трансляция',
 'tooltip-t-contributions' => 'Къошулуучуну тюрлендирген бетлерине къара',
 'tooltip-t-emailuser' => 'Бу къошулуучугъа письмо джибер',
 'tooltip-t-upload' => 'Файлланы джюклеу',
-'tooltip-t-specialpages' => 'Бютёу къуллукъчу бетлени тизмеси',
+'tooltip-t-specialpages' => 'Бютеу къуллукъчу бетлени тизмеси',
 'tooltip-t-print' => 'Бу бетни басмагъа версиясы',
 'tooltip-t-permalink' => 'Бетни бу версиясына дайым джибериу',
 'tooltip-ca-nstab-main' => 'Статьяны ичиндеги',
@@ -3551,18 +3551,18 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'revdelete-restricted' => 'администраторла ючюн этилген чеклениуле',
 'revdelete-unrestricted' => 'администратолра ючюн этилген чеклениуле къоратылгъандыла',
 'logentry-move-move' => '$1, $3 бетни атын $4 деб тюрлендирди',
-'logentry-move-move-noredirect' => '$1, $3 бетни атын $4 деб тюрлендирди (редирект къоймагъанлай)',
-'logentry-move-move_redir' => '$1, $3 бетни атын $4 деб тюрлендирди (редиректни башы бла)',
-'logentry-move-move_redir-noredirect' => '$1, $3 бетни атын $4 деб тюрлендирди (редиректни башы бла эм редирект къурамай)',
+'logentry-move-move-noredirect' => '$1, $3 бетни атын $4 деб {{GENDER:$2|тюрлендирди}} (редирект къоймагъанлай)',
+'logentry-move-move_redir' => '$1, $3 бетни атын $4 деб {{GENDER:$2|тюрлендирди}} (редиректни башы бла)',
+'logentry-move-move_redir-noredirect' => '$1, $3 бетни атын $4 деб {{GENDER:$2|тюрлендирди}} (редиректни башы бла эм редирект къурамай)',
 'logentry-patrol-patrol' => '$1, $3 бетни $4 версияын партруль этиб чыкъды',
 'logentry-patrol-patrol-auto' => '$1, $3 бетни $4 версиясын автомат халда тинтиб чыкъды',
-'logentry-newusers-newusers' => '$1 тергеу джазыу (аккаунт) къуралды',
+'logentry-newusers-newusers' => '$1 тергеу джазыу (аккаунт) {{GENDER:$2|къуралды}}',
 'logentry-newusers-create' => '$1 тергеу джазыу (аккаунт) къуралды',
 'logentry-newusers-create2' => '$1, $3 тергеу джазыуну къурады',
 'logentry-newusers-autocreate' => '$1 тергеу джазыу автомат халда къуралды',
-'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа кёчюрдю',
+'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа {{GENDER:$2|кёчюрдю}}',
 'logentry-rights-rights-legacy' => '$1 къошулуучу, $3 къушулуучуну къауумлада членлигин тюрлендирди',
-'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа кёчюрюлдю',
+'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа {{GENDER:$2|кёчюрюлдю}}',
 'rightsnone' => '(джокъ)',
 
 # Feedback
index 272dc90..5a5cc2b 100644 (file)
@@ -766,7 +766,7 @@ Waat e Wielsche, ih dat De et widder versöhks.',
 'suspicious-userlogout' => "Do bes '''nit''' ußjelogg.
 Et süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nit bekannte Fähler met dä Funxjohn <code lang="en">mail()</code> vum PHP',
 'user-mail-no-addy' => 'Do häs versöhg en <i lang="en">e-mail</i> der ohne en Adräß ze verschecke',
 
@@ -1510,7 +1510,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'prefs-displaywatchlist' => 'Enstellunge för et Aanzeje',
 'prefs-diffs' => 'Ongerscheide un Verjliische',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'De Addräß fö de <i lang="en">e-mail</i> schingk en Odenung',
 'email-address-validity-invalid' => 'Jivv en jöltijje Addräß fö de <i lang="en">e-mail</i> en',
 
@@ -2353,7 +2353,7 @@ Mieh övver de einzel Rääschte fenkt Er op de [[{{MediaWiki:Listgrouprights-he
 'listgrouprights-addgroup-self-all' => 'Kann sesch sällver en alle Metmaacherjroppe erenn donn',
 'listgrouprights-removegroup-self-all' => 'Kann sesch sällver uß alle Metmaacherjroppe eruß nämme',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Keij E-Mail Adress',
 'mailnologintext' => 'Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail
 Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze
@@ -3788,7 +3788,7 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e
 'monthsall' => 'all',
 'limitall' => 'alle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-Mail Adress bestätije',
 'confirmemail_noemail' => 'En [[Special:Preferences|Ding Enstellunge]] es kein öntlich E-Mail Adress.',
 'confirmemail_text' => 'Ih datte en däm Wiki heh de E-Mail bruche kanns, muss De Ding E-Mail Adress bestätich han, dat se en Oodnung es un dat se och Ding eijene es. Klick op dä Knopp un Do kriss en E-Mail jescheck. Do steiht ene Link met enem Code dren. Wann De met Dingem Brauser op dä Link jeihs, dann deis De domet bestätije, dat et wirklich Ding E-Mail Adress es. Dat es nit allzo secher, alsu wör nix för Die Bankkonto oder bei de Sparkass, ävver et sorg doför, dat nit jede Peijaß met Dinger E-Mail oder Dingem Metmaachername eröm maache kann.',
index 00fc62b..1b1a99d 100644 (file)
@@ -524,7 +524,7 @@ Eger account\'a bikarhêneran şaşî hate çêkirin, guhdare vê peyamê meke.'
 'usernamehasherror' => 'Divê karakterên xerab ji bo navê bikarhêner neyên bikaranîn',
 'loginlanguagelabel' => 'Ziman: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'Hewl da e-nameyekê bê navnîşana e-nameyê bişîne',
 
 # Change password dialog
@@ -566,7 +566,7 @@ Ji bo xelaskirina tomarkirinê, divê tu niha şîfreyeke nû binivîsî:',
 'bold_tip' => 'Nivîsa stûr',
 'italic_sample' => 'Nivîsa xwehr (îtalîk)',
 'italic_tip' => 'Nivîsa xwehr (îtalîk)',
-'link_sample' => 'Navê lînkê',
+'link_sample' => 'Sernavê girêdanê',
 'link_tip' => 'Girêdana navxweyî',
 'extlink_sample' => 'http://www.example.com navê lînkê',
 'extlink_tip' => 'Girêdana derve (http:// di destpêkê de ji bîr neke)',
@@ -945,7 +945,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'prefs-displaywatchlist' => 'Vebijarkan nîşan bide',
 'prefs-diffs' => 'Cudahî',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-name derbasdar e',
 'email-address-validity-invalid' => 'E-nameyeke derbasdar binivîse',
 
@@ -1366,7 +1366,7 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 'listgrouprights-addgroup-all' => 'Hemû koman tevlî bike',
 'listgrouprights-removegroup-all' => 'Hemû koman jê bibe',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Navnîşanê neşîne',
 'mailnologintext' => 'Te gireke xwe [[Special:UserLogin|qeydbikê]] û adrêsa e-nameyan di [[Special:Preferences|tercihên xwe]] da nivîsandibe ji bo şandina e-nameyan ji bikarhênerên din ra.',
 'emailuser' => 'Ji bikarhêner re e-name bişîne',
@@ -1600,7 +1600,7 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'whatlinkshere-links' => '← girêdan',
 'whatlinkshere-hideredirs' => 'Beralîkirinan $1',
 'whatlinkshere-hidetrans' => 'Naverokan $1',
-'whatlinkshere-hidelinks' => 'Lînkan $1',
+'whatlinkshere-hidelinks' => 'Girêdanan $1',
 'whatlinkshere-hideimages' => '$1 lînkên wêneyan',
 'whatlinkshere-filters' => 'Parzûn',
 
@@ -2011,7 +2011,7 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 'monthsall' => 'hemû',
 'limitall' => 'hemû',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Adrêsa e-nameyan nasbike',
 'confirmemail_noemail' => 'Te e-mail-adressê xwe di [[Special:Preferences|tercihên xwe da]] nenivîsandiye.',
 'confirmemail_success' => 'E-Mail adrêsa te hate naskirin. Tu niha dikarî xwe qeydbikê û kêfkê.',
index e49779b..245c003 100644 (file)
@@ -1058,7 +1058,7 @@ Yma'n descrifans war y [$2 folen dhescrifans] disqwedhys a-woles.",
 # Special:ListGroupRights
 'listgrouprights-members' => '(rol esely)',
 
-# E-mail user
+# Email user
 'emailuser' => 'E-bostya an devnydhyer-ma',
 'emailpage' => 'E-bostya devnydhyer',
 'defemailsubject' => 'Ebost danvenys dre {{SITENAME}} gans an devnydhyer "$1"',
@@ -1336,7 +1336,7 @@ Why a yll gweles hy fennfenten.',
 'monthsall' => 'oll',
 'limitall' => 'oll',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Afydhya an drigva ebost',
 'confirmemail_noemail' => "Nyns eus trigva ebost da settyes y'gas [[Special:Preferences|dowisyansow devnydhyer]].",
 
index 929b697..356b857 100644 (file)
@@ -444,7 +444,7 @@ $1',
 'login-abort-generic' => 'Сиздин кирүүңүз ийгиликтүү эмес болду - Үзүлдү',
 'loginlanguagelabel' => 'Тил: $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "PHP'нин mail() функциясындагы белгисиз ката.",
 
 # Change password dialog
@@ -819,7 +819,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'prefs-displaysearchoptions' => 'Көрсөтүүнүн ырастоолору',
 'prefs-displaywatchlist' => 'Көрсөтүүнүн ырастоолору',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Эл. почтанын дареги анык көрүнөт',
 'email-address-validity-invalid' => 'Эл. почтанын анык дарегин киргизиңиз!',
 
@@ -1111,7 +1111,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'listgrouprights-helppage' => 'Help:Топтордун укуктары',
 'listgrouprights-members' => '(мүчөлөрдүн тизмеси)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Бул катышуучуга кат жиберүү',
 'emailusername' => 'Катышуучунун аты:',
 'emailusernamesubmit' => 'Жөнөтүү',
@@ -1625,7 +1625,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'monthsall' => 'баары',
 'limitall' => 'баары',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Электрондук даректи аныктоо',
 'confirmemail_loggedin' => 'Электрондук дарегиңиз аныкталды.',
 
index 578a019..4682739 100644 (file)
@@ -2388,7 +2388,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'logentry-newusers-newusers' => 'Ratio usoris $1 creata est',
 'logentry-newusers-create' => 'Ratio usoris $1 creata est',
 'logentry-newusers-create2' => 'Ratio usoris $3 creata est ab usore $1',
-'logentry-newusers-autocreate' => 'Ratio $1 automatice creata est',
+'logentry-newusers-autocreate' => 'Ratio usoris $1 automatice creata est',
 'rightsnone' => '(nullus)',
 
 # Search suggestions
index 88eab3e..e5ddc84 100644 (file)
@@ -266,37 +266,37 @@ $messages = array(
 'november' => 'Noviembre',
 'december' => 'Deziembre',
 'january-gen' => 'Enero',
-'february-gen' => 'Fevrero',
+'february-gen' => 'Hevrero',
 'march-gen' => 'Março',
-'april-gen' => 'Abril',
+'april-gen' => 'Avril',
 'may-gen' => 'Mayo',
-'june-gen' => 'Junio',
+'june-gen' => 'Juño',
 'july-gen' => 'Jullo',
 'august-gen' => 'Agosto',
-'september-gen' => 'Setembre',
-'october-gen' => 'Ochůvre',
-'november-gen' => 'Novembre',
-'december-gen' => 'Diziembre',
+'september-gen' => 'Setiembre',
+'october-gen' => 'Ochòvre',
+'november-gen' => 'Noviembre',
+'december-gen' => 'Deziembre',
 'jan' => 'Ene',
-'feb' => 'Fev',
+'feb' => 'Hev',
 'mar' => 'Mar',
-'apr' => 'Abr',
+'apr' => 'Avr',
 'may' => 'May',
-'jun' => 'Jun',
+'jun' => 'Juñ',
 'jul' => 'Jull',
 'aug' => 'Ago',
 'sep' => 'Set',
 'oct' => 'Och',
 'nov' => 'Nov',
-'dec' => 'Diz',
+'dec' => 'Dez',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Katēggoría|Katēggorías}}',
-'category_header' => 'Artícůlos en la katēggoría "$1"',
-'subcategories' => 'Sůkatēggorías',
-'category-media-header' => 'Arxivos de multimedya en la katēggoría "$1"',
+'pagecategories' => '{{PLURAL:$1|Kateggoría|Kateggorías}}',
+'category_header' => 'Artíkolos en la kateggoría "$1"',
+'subcategories' => 'Sòkateggorías',
+'category-media-header' => 'Arxivos de multimedya en la kateggoría "$1"',
 'category-empty' => "''Esta katēggoría oy día, no contiene ni artícůlos ni arxivos de multimedya''",
-'hidden-categories' => '{{PLURAL:$1|Katēggoría escondida|Katēggorías escondidas}}',
+'hidden-categories' => '{{PLURAL:$1|Kateggoría escondida|Kateggorías escondidas}}',
 'hidden-category-category' => 'Katēggorías escondidas',
 'category-subcat-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo una baxo-katēggoría:|Esta katēggoría contiene {{PLURAL:$1|esta baxo-katēggoría aquí abaxo|$1 baxo-katēggorías aquí abaxo}}, de un total de $2 baxo-katēggorías:}}',
 'category-subcat-count-limited' => 'Esta katēggoría contiene {{PLURAL:$1|la baxo-katēggoría venidera|$1 baxo-katēggorías venideras}}.',
@@ -315,7 +315,7 @@ $messages = array(
 'cancel' => 'Anular',
 'moredotdotdot' => 'Más...',
 'mypage' => 'Mi hoja',
-'mytalk' => 'La mi diskusyon',
+'mytalk' => 'Mi diskusyon',
 'anontalk' => 'Diskusyón para este adresso de IP',
 'navigation' => 'Navigación',
 'and' => '&#32;y',
@@ -338,14 +338,14 @@ $messages = array(
 'vector-action-undelete' => 'Traer atrás',
 'vector-action-unprotect' => 'No guardar',
 'vector-simplesearch-preference' => 'Aktivar consejos de búsqueda adelantada (sólo pelejo Vector)',
-'vector-view-create' => 'Crîar',
+'vector-view-create' => 'Criar',
 'vector-view-edit' => 'Trocar',
-'vector-view-history' => 'Ver la storia',
+'vector-view-history' => 'Ver la istoria',
 'vector-view-view' => 'Meldar',
 'vector-view-viewsource' => 'Ver su manadero',
-'actions' => 'Acciones',
+'actions' => 'Aksiones',
 'namespaces' => 'Espacios de nombres',
-'variants' => 'Varyantes',
+'variants' => 'Formas diferentes',
 
 'errorpagetitle' => 'Yerro',
 'returnto' => 'Tornar a $1.',
@@ -356,14 +356,14 @@ $messages = array(
 'go' => 'Vate',
 'searcharticle' => 'Vate',
 'history' => 'La îstoria de la hoja',
-'history_short' => 'Îstoria',
+'history_short' => 'Istoria',
 'updatedmarker' => 'trocado desde mi visita de alcavo',
 'printableversion' => 'Forma apropiada para imprimir',
 'permalink' => 'Atamiento permanente',
 'print' => 'Imprimir',
 'view' => 'Ver',
 'edit' => 'Trocar',
-'create' => 'Crîar',
+'create' => 'Criar',
 'editthispage' => 'Trocar esta hoja',
 'create-this-page' => 'Crîar esta hoja',
 'delete' => 'Efaçar',
@@ -379,12 +379,12 @@ $messages = array(
 'talkpage' => 'Diskutir la hoja',
 'talkpagelinktext' => 'Messaje',
 'specialpage' => 'Hoja Especial',
-'personaltools' => 'Aparatos personales',
+'personaltools' => 'Aparates personales',
 'postcomment' => 'Capítůlo muevo',
 'articlepage' => 'Ver el artícůlo de contenido',
 'talk' => 'Diskusyón',
 'views' => 'Vistas',
-'toolbox' => 'Cuadro de Aparatos',
+'toolbox' => 'Cuadro de aparates',
 'userpage' => 'Ver la hoja del usador',
 'projectpage' => 'Ver la hoja del projeto',
 'imagepage' => 'Ver la hoja de la dosya',
@@ -393,10 +393,10 @@ $messages = array(
 'viewhelppage' => 'Ver la hoja de ayudo',
 'categorypage' => 'Ver la hoja de la katēggoría',
 'viewtalkpage' => 'Ver la diskusyón',
-'otherlanguages' => 'En otras lînguas',
+'otherlanguages' => 'En otras linguas',
 'redirectedfrom' => '(Redirigido desde $1)',
 'redirectpagesub' => 'Hoja redirigida',
-'lastmodifiedat' => 'Esta hoja fue trocada por la última vez el $1, a las $2.',
+'lastmodifiedat' => 'Esta hoja fue trocada por la dal cavo vez el $1, a las $2.',
 'protectedpage' => 'Hoja guardada',
 'jumpto' => 'Salta a:',
 'jumptonavigation' => 'navigación',
@@ -442,7 +442,7 @@ $messages = array(
 'thisisdeleted' => 'Ver o restorar $1?',
 'viewdeleted' => 'Desea ver $1?',
 'site-rss-feed' => 'Fuente de RSS de $1',
-'site-atom-feed' => 'Fuente de Atom de $1',
+'site-atom-feed' => 'Alimentela de Atom de $1',
 'page-rss-feed' => '"$1" Fuente RSS',
 'page-atom-feed' => '"$1" Subscripción Atom',
 'red-link-title' => '$1 (esta hoja no egziste)',
@@ -451,13 +451,13 @@ $messages = array(
 'nstab-main' => 'Hoja',
 'nstab-user' => 'Hoja de empleador',
 'nstab-media' => 'Hoja de Meddia',
-'nstab-special' => 'Hoja special',
+'nstab-special' => 'Hoja especial',
 'nstab-project' => 'Hoja del proyecto',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Messaj',
 'nstab-template' => 'Xablón',
 'nstab-help' => 'Ayudo',
-'nstab-category' => 'Katēggoría',
+'nstab-category' => 'Kateggoría',
 
 # Main script and global functions
 'nosuchspecialpage' => 'No ay tala hoja especial',
@@ -465,12 +465,12 @@ $messages = array(
 # General errors
 'error' => 'Yerro',
 'databaseerror' => 'Yerro de la Databasa',
-'missing-article' => 'La basa de dados no topó el teksto de una hoja llamada "$1" $2.
+'missing-article' => 'La basa de dados no topó el teksto de la hoja llamada "$1" $2.
 
-En lo más muńcho, esto se cavza de un "dif" anakróniko ou de un atamiento á la storia de una hoja que s\'efaçó.
+En lo mas muncho, esto se cavsa de un "dif" anakróniko ou de un atamiento a la istoria de una hoja que se efaçó.
 
 Si esto no es el cavso, puede ser que topates una chincha en el lojikal.
-Si puede ser mete un [[Special:ListUsers/sysop|administrador]] en corriente y también ànota la URL.',
+Si puede ser mete un [[Special:ListUsers/sysop|administrador]] en corriente y también anota la URL.',
 'missingarticle-rev' => '(nº. de revisión: $1)',
 'missingarticle-diff' => '(Dif.: $1, $2)',
 'filecopyerror' => 'No se pudo copiar el arxiv "$1" a "$2".',
@@ -485,7 +485,7 @@ Puede ser que contiene uno o más caracteres que no se pueden usar en los títul
 'yourpasswordagain' => 'Entra de muevo la parola',
 'remembermypassword' => 'Acórdate de mi entrada de usador en este bilgisayar/orddênador (por un maksimum de {{PLURAL:$1|día|días}})',
 'login' => 'Entrar',
-'nav-login-createaccount' => 'Entrar / Crîar un cuento',
+'nav-login-createaccount' => 'Entrar / Criar un cuento',
 'loginprompt' => 'Kale tener "cookies" aktivadas enel navegador para enrejistrarse en {{SITENAME}}',
 'userlogin' => 'Entrar / Registrarse',
 'logout' => 'Salir',
@@ -560,12 +560,12 @@ Tu adresso de IP va ser enrejjistrado en la istoria de la hoja.",
 'accmailtitle' => 'La kontrasenya ha sido embiada.',
 'accmailtext' => 'La kontrasenya para "$1" se ha embiado a $2.',
 'newarticle' => '(Nuevo)',
-'newarticletext' => 'Allegates a una hoja que daínda no egziste.
+'newarticletext' => 'Arrivates a una hoja que daínda no egziste.
 Para crear esta hoja, empeça a escribir en la caxa de abaxo. Mira [[{{MediaWiki:Helppage}}|la hoja de ayudo]] para saber más.
 Si venites aquí por yerro, torna a la hoja de antes.',
 'noarticletext' => 'En este momento no ay teksto en esta hoja.
-Puedes [[Special:Search/{{PAGENAME}}|buscar el títůlo de esta hoja]] en otras hojas,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rējistros relatados],
+Puedes [[Special:Search/{{PAGENAME}}|buscar el títolo de esta hoja]] en otras hojas,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rejistros relatados],
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} trocar esta hoja]</span>.',
 'noarticletext-nopermission' => 'No ay teksto en esta oja.
 Puedes [[Special:Search/{{PAGENAME}}|bushkar este titolo de oja]] en otras pajinas,
@@ -605,7 +605,7 @@ Este o estos kampos no van ser amostrados",
 'viewpagelogs' => 'Ver los registros de esta hoja',
 'currentrev' => "Enderechamiento d'al cavo",
 'currentrev-asof' => 'Enderechamiento de alcavo á las $1',
-'revisionasof' => 'Enderechamiento á las $1',
+'revisionasof' => 'Enderechamiento a las $1',
 'revision-info' => 'Revision en data $1 por $2',
 'previousrevision' => '← Enderechamiento de antes',
 'nextrevision' => 'Rêvisión venidera →',
@@ -637,9 +637,9 @@ Leyenda: (act) = diferencias con la versión actual,
 'revdelete-radio-set' => 'Sí',
 'revdelete-radio-unset' => 'No',
 'revdelete-log' => 'Razón:',
-'revdel-restore' => 'troca la viźibilitá',
+'revdel-restore' => 'troca la visibilitá',
 'revdel-restore-deleted' => 'enderechamientos efaçados',
-'revdel-restore-visible' => 'enderechamientos viźivles',
+'revdel-restore-visible' => 'enderechamientos visivles',
 'pagehist' => 'La storia de la hoja',
 'revdelete-reasonotherlist' => 'Otra razón',
 
@@ -651,14 +651,14 @@ Leyenda: (act) = diferencias con la versión actual,
 
 # Diffs
 'history-title' => 'Istorya de trokamientos para «$1»',
-'lineno' => 'Shurá $1:',
+'lineno' => 'Liña $1:',
 'compareselectedversions' => 'Comparar versiones escogidas',
 'editundo' => 'des-haze',
 'diff-multi' => '(No {{PLURAL:$1|es amostrado un trokamiento intermedio echo|son amostrados $1 trokamientos intermedios echos}} por {{PLURAL:$2|un usador|$2 usadores}})',
 
 # Search results
-'searchresults' => 'Resultados de la búsqueda',
-'searchresults-title' => 'Resultados de la búsqueda de «$1»',
+'searchresults' => 'Resultados de la búsquida',
+'searchresults-title' => 'Resultados de la búsquida de «$1»',
 'searchresulttext' => 'Para saber más encima de buscar en {{SITENAME}}, mira la [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'Buscates \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|todas las hojas que empeçan con "$1"]] {{int:pipe-separator}} [[Special:WhatLinksHere/$1|todas las hojas que dan link a «$1»]])',
 'searchsubtitleinvalid' => "Buscates '''$1'''",
@@ -668,7 +668,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'nextn' => '{{PLURAL:$1|$1}} venideras',
 'prevn-title' => '$1 {{PLURAL:$1|resultado|resultados}} de antes',
 'nextn-title' => '$1 {{PLURAL:$1|resultado|resultados}} venideros',
-'shown-title' => 'Àmostrar $1 {{PLURAL:$1|resultado|resultados}} por hoja',
+'shown-title' => 'Amostrar $1 {{PLURAL:$1|resultado|resultados}} por hoja',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => 'Egziste una oja yamada "[[:$1]]" en esta viki',
 'searchmenu-new' => "'''Crîar la hoja «[[:$1]]» en esta viki!'''",
@@ -686,8 +686,8 @@ Leyenda: (act) = diferencias con la versión actual,
 'search-result-size' => '$1 ({{PLURAL:$2|1 biervo|$2 biervos}})',
 'search-result-category-size' => '{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 basho-kateggoria|$2 basho-kateggoria}}, {{PLURAL:$3|1 dossia|$3 dossias}})',
 'search-redirect' => '(direksión desde $1)',
-'search-section' => '(capítůlo $1)',
-'search-suggest' => 'Quisites dezir: $1',
+'search-section' => '(kapítolo $1)',
+'search-suggest' => 'Quijites dezir: $1',
 'search-interwiki-caption' => 'Proyectos hermanos',
 'search-interwiki-default' => 'Los resultados de $1:',
 'search-interwiki-more' => '(más)',
@@ -782,7 +782,7 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de
 'rcshowhidemine' => '$1 mis ediciones',
 'rclinks' => 'Ver los dal cabo $1 trocamientos en los dal cabo $2 días.<br />$3',
 'diff' => 'dif',
-'hist' => 'îst',
+'hist' => 'ist',
 'hide' => 'Esconder',
 'show' => 'Àmostrar',
 'minoreditletter' => 'ch',
@@ -818,7 +818,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son escritas '''con
 
 # File description page
 'file-anchor-link' => 'Archivo',
-'filehist' => 'La storia del dosya',
+'filehist' => 'La istoria de la dosya',
 'filehist-help' => 'Klika encima de una data/ora para vel el arxivo de esta data.',
 'filehist-revert' => 'aboltar',
 'filehist-current' => 'actual',
@@ -930,7 +930,7 @@ Mira $2 para un registro de los efassados nuevos.',
 ** Vandalismo',
 
 # Rollback
-'rollbacklink' => 'àbolta',
+'rollbacklink' => 'abolta',
 
 # Protect
 'protectlogpage' => 'Protecciones de las hojas',
@@ -968,7 +968,7 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 # Contributions
 'contributions' => 'Ajustamientos {{GENDER:$1|del usador|de la usadora}}',
 'contributions-title' => 'Ajustamientos {{GENDER:$1|del usuario|de la usuaria}} $1',
-'mycontris' => 'Mis ajustamientos',
+'mycontris' => 'Mis dados',
 'contribsub2' => '$1 ($2)',
 'uctop' => '(última modificación)',
 'month' => 'Desde el mes (i antes):',
@@ -985,7 +985,7 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'sp-contributions-submit' => 'Buscar',
 
 # What links here
-'whatlinkshere' => 'Atamientos á esta hoja',
+'whatlinkshere' => 'Atamientos a esta hoja',
 'whatlinkshere-title' => 'Hojas que dan link a "$1"',
 'whatlinkshere-page' => 'Hoja:',
 'linkshere' => "Las hojas venideras dan link a '''[[:$1]]''':",
@@ -1006,9 +1006,9 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'blockip' => 'Bloquear usuario',
 'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite',
 'ipblocklist' => 'Usadores bloqueados',
-'blocklink' => 'blokea',
-'unblocklink' => 'quita el bloqueo',
-'change-blocklink' => 'troca el blokeo',
+'blocklink' => 'bloka',
+'unblocklink' => 'quita el bloko',
+'change-blocklink' => 'troca el bloko',
 'contribslink' => 'donos',
 'blocklogpage' => 'Bloqueos de usuarios',
 'blocklogentry' => 'bloqueó a [[$1]] $3 durante un tiempo de $2',
@@ -1047,7 +1047,7 @@ Si puede ser, escoge otro nombre.',
 'movetalk' => 'Renombrar la hoja de diskussión también, si es possible.',
 'movelogpage' => 'Registro de traslados',
 'movereason' => 'Razón:',
-'revertmove' => 'àbolta',
+'revertmove' => 'abolta',
 
 # Export
 'export' => 'Eksportar las hojas',
@@ -1079,13 +1079,13 @@ Puedes ver su manadero',
 'tooltip-ca-protect' => 'Guardar esta hoja',
 'tooltip-ca-delete' => 'Efassar esta hoja',
 'tooltip-ca-move' => 'Taxirea (renombra) esta hoja',
-'tooltip-ca-watch' => 'Àjustar esta hoja á tu lista de akavidamientos',
+'tooltip-ca-watch' => 'Ajustar esta hoja a tu lista de akavidamientos',
 'tooltip-ca-unwatch' => 'Quita esta hoja de tu lista de escogidos',
 'tooltip-search' => 'Busca en {{SITENAME}}',
 'tooltip-search-go' => 'Si ay una hoja con este nombre egzakto, vate allá.',
 'tooltip-search-fulltext' => 'Busca este teksto en las hojas',
 'tooltip-p-logo' => 'Vate a la primera hoja',
-'tooltip-n-mainpage' => 'Visita la primera hoja',
+'tooltip-n-mainpage' => 'Vate a la primera hoja',
 'tooltip-n-mainpage-description' => 'Vate a la primera hoja',
 'tooltip-n-portal' => 'Encima del projeto, lo que puedes hazer y ánde topar todo',
 'tooltip-n-currentevents' => 'Jhaberes y acontècimientos de oy día',
@@ -1093,14 +1093,14 @@ Puedes ver su manadero',
 'tooltip-n-randompage' => 'Carga una hoja por asardo',
 'tooltip-n-help' => 'Para saver mas',
 'tooltip-t-whatlinkshere' => 'La lista de todas las hojas del viki que se atan con esta hoja',
-'tooltip-t-recentchangeslinked' => 'Los trocamientos freskos de las hojas atadas con esta hoja',
+'tooltip-t-recentchangeslinked' => 'Los trocamientos muevos en las hojas atadas con esta hoja',
 'tooltip-feed-rss' => 'Sindicación RSS de esta hoja',
 'tooltip-feed-atom' => "Fuente de Atom d'esta hoja",
 'tooltip-t-contributions' => 'Ver la lista de ajustamientos de este usuario',
 'tooltip-t-emailuser' => 'A este usuario, mándale una letra electrόnica (ímey)',
 'tooltip-t-upload' => 'Suve las dosyas por aquí',
 'tooltip-t-specialpages' => 'Lista de todas las hojas especiales',
-'tooltip-t-print' => "Versión apropiada para imprimir d'esta hoja",
+'tooltip-t-print' => 'Forma apropiada para imprimir esta hoja',
 'tooltip-t-permalink' => 'Atamiento permanente a este enderechamiento de la hoja',
 'tooltip-ca-nstab-main' => 'Ve el artíkolo de contènido',
 'tooltip-ca-nstab-user' => 'Ve la hoja de usuario',
@@ -1115,8 +1115,8 @@ Puedes ver su manadero',
 'tooltip-diff' => 'Mostra los trocamientos que él/ella hizo en el texhto.',
 'tooltip-compareselectedversions' => 'Ve las diferencias entre las dos versiones escogidas de esta hoja.',
 'tooltip-watch' => 'Ajusta esta hoja a tu lista de escogidas',
-'tooltip-rollback' => '«Àbolta» àbolta todas los trocamientos del usador de alcavo, sólo en klikando una vez.',
-'tooltip-undo' => '«Deshaze» àbolta este trocamiento y la avre en el modo de previsteo. Permete àjustar una razón en el somaryo.',
+'tooltip-rollback' => '«Abolta» abolta todas los trocamientos del usador de alcavo, sólo en klikando una vez.',
+'tooltip-undo' => '«Deshaze» abolta este trocamiento y la avre en el modo de previsteo. Permete ajustar una razón en el somario.',
 'tooltip-summary' => 'Entrar un somaryo kurto',
 
 # Attribution
index 3231768..d7a4bdb 100644 (file)
@@ -663,8 +663,8 @@ Mellt Iech w.e.g. domat un, soubal Dir et kritt hutt.',
 'blocked-mailpassword' => "Déi vun Iech benotzten IP-Adress ass fir d'Ännere vu Säite gespaart. Fir Mëssbrauch ze verhënneren, gouf d'Méiglechkeet fir een neit Passwuert unzefroen och gespaart.",
 'eauthentsent' => "Eng Confirmatiouns-E-Mail gouf un déi Adress geschéckt déi Dir uginn hutt.<br />
 Ier iergendeng E-Mail vun anere Benotzer op dee Kont geschéckt ka ginn, musst Dir als éischt d'Instructiounen an der Confirmatiouns-E-Mail befollegen, fir ze bestätegen datt de Kont wierklech Ären eegenen ass.",
-'throttled-mailpassword' => "An {{PLURAL:$1|der leschter Stonn|de leschte(n) $1 Stonnen}} gouf eng Erënenrung un d'Passwuert verschéckt.
-Fir de Mëssbrauch vun dëser Funktioun ze verhënneren kann nëmmen all {{PLURAL:$1|Stonn|$1 Stonnen}} esou eng Erënnerung verschéckt ginn.",
+'throttled-mailpassword' => "An {{PLURAL:$1|der leschter Stonn|de leschte(n) $1 Stonnen}} eng E-Mail verschéckt fir d'Passwuert zréckzesetzen.
+Fir de Mëssbrauch vun dëser Funktioun ze verhënneren kann nëmmen all {{PLURAL:$1|Stonn|$1 Stonnen}} esou eng Mail verschéckt ginn.",
 'mailerror' => 'Feeler beim Schécke vun der E-Mail: $1',
 'acct_creation_throttle_hit' => 'Visiteure vun dëser Wiki déi Är IP-Adress hu {{PLURAL:$1|schonn $1 Benotzerkont|scho(nn) $1 Benotzerkonten}} an de leschten Deeg opgemaach, dëst ass déi maximal Zuel déi an dësem Zäitraum erlaabt ass.
 Dofir kënne Visiteure déi dës IP-Adress benotzen den Ament keng Benotzerkonten opmaachen.',
@@ -718,7 +718,7 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu
 
 # Special:PasswordReset
 'passwordreset' => 'Passwuert zrécksetzen',
-'passwordreset-text' => 'Fëllt dëse Formulaire aus fir eng E-Mail Erënnerung vun den Detailer vun Ärem Benotzerkont ze kréien.',
+'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-pretext' => '{{PLURAL:$1||Gitt eng vun dësen Donnéeën an}}',
@@ -736,9 +736,9 @@ $2
 Dir sollt Iech aloggen an een neit Passwuert festleeën. Wann een Aneren déi Ufro gemaach huet oder Dir Iech erëm un Äert Passwuert erënnere kënnt an et net ännere wëllt, kënnt Dir dës Noriicht ignoréieren an Äert aalt Passwuert weider benotzen.",
 'passwordreset-emailelement' => 'Benotzernumm: $1
 Temporärt Passwuert: $2',
-'passwordreset-emailsent' => 'Eng Erënnerungs-Mail gouf geschéckt.',
-'passwordreset-emailsent-capture' => "D'Erënnerungsmail gouf esou geschéckt wéi Dir se hei drënner gesitt.",
-'passwordreset-emailerror-capture' => "D'Erënnerungsmail gouf esou geschéckt wéi Dir se hei drënner gesitt, awer de Benotzer konnt se net kréien: $1",
+'passwordreset-emailsent' => "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt.",
+'passwordreset-emailsent-capture' => "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt, Dir gesitt se hei drënner.",
+'passwordreset-emailerror-capture' => "Eng Mail fir d'Passwuert zréckzesetze gouf geschéckt, Dir gesitt se hei drënner, awer de Benotzer konnt se net kréien: $1",
 
 # Special:ChangeEmail
 'changeemail' => 'Mailadress änneren',
@@ -1166,6 +1166,10 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 'editundo' => 'zréck',
 'diff-multi' => '({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vun {{PLURAL:$2|engem|$2}} Benotzer {{PLURAL:$1|gëtt|ginn}} net gewisen)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vu méi wéi $2 {{PLURAL:$2|Benotzer|Benotzer}} ginn net gewisen)',
+'difference-missing-revision' => '{{PLURAL:$2|Eng Versioun|$2 Versioune}} vun dëser Differenz ($1) {{PLURAL:$2|gouf|goufen}} net fonnt.
+
+Dat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.
+Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbuch vum Läschen].',
 
 # Search results
 'searchresults' => 'Resultat vum Sichen',
@@ -3767,13 +3771,13 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'sqlite-no-fts' => "$1 ënnerstëtzt d'Volltextsich net",
 
 # New logging system
-'logentry-delete-delete' => "$1 huet d'Säit $3 geläscht",
-'logentry-delete-restore' => "$1 huet d'Säit $3 restauréiert",
+'logentry-delete-delete' => "$1 {{GENDER:$2|huet}} d'Säit $3 geläscht",
+'logentry-delete-restore' => "$1 {{GENDER:$2|huet}} d'Säit $3 restauréiert",
 'logentry-delete-event' => "$1 huet d'Visibilitéit vun {{PLURAL:$5|engem Evenement|$5 Evenementer}} am Logbuch op $3:$4 geännert",
 'logentry-delete-event-legacy' => "$1 huet d'Visibilitéit vun Elementer am Log op $3 geännert",
 'logentry-delete-revision-legacy' => "$1 huet d'Visibilitéit vu Versioune vun der Säit $3 geännert",
-'logentry-suppress-delete' => "$1 huet d'Säit $3 ewechgeholl",
-'logentry-suppress-event-legacy' => "$1 huet diskret d'Visibilitéit vun Elementer am Log op $3 geännert",
+'logentry-suppress-delete' => "$1 {{GENDER:$2|huet}} d'Säit $3 ewechgeholl",
+'logentry-suppress-event-legacy' => "$1 {{GENDER:$2|huet}} diskret d'Visibilitéit vun Elementer am Log op $3 geännert",
 'logentry-suppress-revision-legacy' => "$1 huet diskret d'Visibilitéit vu Versioune vun der Säit $3 geännert",
 'revdelete-content-hid' => 'Inhalt verstoppt',
 'revdelete-summary-hid' => 'Resumé vun der Ännerung verstoppt',
@@ -3783,18 +3787,18 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'revdelete-uname-unhid' => 'Benotzernumm net verstoppt',
 'revdelete-restricted' => 'Limitatioune fir Administrateuren ageschalt',
 'revdelete-unrestricted' => 'Limitatioune fir Administrateuren opgehuewen',
-'logentry-move-move' => "$1 huet d'Säit $3 op $4 geréckelt",
+'logentry-move-move' => "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}}",
 'logentry-move-move-noredirect' => "$1 huet d'Säit $3 op $4 geréckelt ouni eng Viruleedung unzeleeën",
 'logentry-move-move_redir' => "$1 huet d'Säit $3 op $4 geréckelt an dobäi gouf eng Viruleedung iwwerschriwwen",
-'logentry-move-move_redir-noredirect' => "$1 huet d'Säit $3 op $4 geréckelt an dobäi gouf eng Viruleedung iwwerschriwwen an et et gouf keng nei Viruleedung ugeluecht",
-'logentry-patrol-patrol' => "$1 huet d'Versioun $4 vun der Säit $3 als nogekuckt markéiert",
-'logentry-patrol-patrol-auto' => "$1 huet d'Versioun $4 vun der Säit $3 automatesch als nogekuckt markéiert",
-'logentry-newusers-newusers' => 'De Benotzerkont $1 gouf ugeluecht',
-'logentry-newusers-create' => 'De Benotzerkont $1 gouf ugeluecht',
-'logentry-newusers-create2' => 'De Benotzerkont $3 gouf vum $1 ugeluecht',
-'logentry-newusers-byemail' => "De Benotzerkont $3 gouf vum $1 ugeluecht an d'Passwuert gouf per E-Mail geschéckt.",
-'logentry-newusers-autocreate' => 'De Benotzerkont $1 gouf automatesch ugeluecht',
-'logentry-rights-autopromote' => "De Benotzer $1 huet d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
+'logentry-move-move_redir-noredirect' => "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an dobäi gouf eng Viruleedung iwwerschriwwen an et et gouf keng nei Viruleedung ugeluecht",
+'logentry-patrol-patrol' => "$1 huet d'Versioun $4 vun der Säit $3 als nogekuckt {{GENDER:$2|markéiert}}",
+'logentry-patrol-patrol-auto' => "$1 huet d'Versioun $4 vun der Säit $3 automatesch als nogekuckt  {{GENDER:$2|markéiert}}",
+'logentry-newusers-newusers' => 'De Benotzerkont $1 gouf {{GENDER:$2|ugeluecht}}',
+'logentry-newusers-create' => 'De Benotzerkont $1 gouf {{GENDER:$2|ugeluecht}}',
+'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-autopromote' => "De Benotzer $1 {{GENDER:$2|krut}} d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
 'rightsnone' => '(keen)',
 
 # Feedback
index 173fcff..f49b17b 100644 (file)
@@ -11,6 +11,7 @@
  * @author Andrijko Z.
  * @author Aslan4ik
  * @author Cekli829
+ * @author Lezgia
  * @author MF-Warburg
  * @author Migraghvi
  * @author Namik
@@ -162,7 +163,7 @@ $messages = array(
 'vector-action-unprotect' => 'Хуьн дегишарун',
 'vector-simplesearch-preference' => 'Гегьенш жагъурунин рикIел гъун кутун (кьилди "Вектор" акунар патал)',
 'vector-view-create' => 'Туькlуьрун',
-'vector-view-edit' => 'РаÑ\81ун',
+'vector-view-edit' => 'Ð\94Ñ\83Ñ\8cзаÑ\80 Ñ\85Ñ\8aÑ\83вун',
 'vector-view-history' => 'Тарихдиз килигун',
 'vector-view-view' => 'Кlелун',
 'vector-view-viewsource' => 'Чешме къалурун',
@@ -255,7 +256,7 @@ $messages = array(
 'newmessageslink' => 'цlийи чарар',
 'newmessagesdifflink' => 'Эхиримжи масакIавилер',
 'youhavenewmessagesmulti' => '"$1"-да квез цIийи чарар атанва.',
-'editsection' => 'РаÑ\81ун',
+'editsection' => 'Ð\94Ñ\83Ñ\8cзаÑ\80 Ñ\85Ñ\8aÑ\83вун',
 'editold' => 'Дуьзар хъувун',
 'viewsourceold' => 'сифте кьилин коддиз килига',
 'editlink' => 'Дуьзар хъувун',
@@ -314,6 +315,7 @@ $messages = array(
 'actionthrottled' => 'Фадвилин сергьятар',
 
 # Virus scanner
+'virus-scanfailed' => 'Сканди гъалатl (кулег$1)',
 'virus-unknownscanner' => 'Малумтушир антивирус',
 
 # Login and logout pages
@@ -398,7 +400,7 @@ $messages = array(
 'subject' => 'Тема/кьилинцIар',
 'minoredit' => 'ГъвечIи дуьзар хъувун',
 'watchthis' => 'И ччин гуьзетун',
-'savearticle' => 'ЧÑ\8aин Ñ\85вин',
+'savearticle' => 'ЧÑ\87ин Ñ\85Ñ\83Ñ\8cн',
 'preview' => 'Сифтедин килигун',
 'showpreview' => 'Сифтедин килигун къалурун',
 'showlivepreview' => 'Фад сифтедин килигун',
@@ -593,7 +595,7 @@ $messages = array(
 
 # Preferences page
 'preferences' => 'Туькlуьрун',
-'mypreferences' => 'Zi tïķïrunar',
+'mypreferences' => 'Зи низамарунар',
 'prefs-edits' => 'Дьузар хъувунрин кьадар',
 'prefsnologin' => 'Куьне гьахьнавач',
 'changepassword' => 'Парол дегишарун',
@@ -936,7 +938,7 @@ $messages = array(
 
 # Watchlist
 'watchlist' => 'Зи вилив хуьнин сиягь',
-'mywatchlist' => 'Ð\97и Ð²Ð¸Ð»Ð¸Ð² Ñ\85Ñ\8eнин сиягь',
+'mywatchlist' => 'Ð\97и Ð²Ð¸Ð»Ð¸Ð² Ñ\85Ñ\83Ñ\8cнин сиягь',
 'watchlistfor2' => '$1 $2 патал',
 'addedwatchtext' => "Чар \"[[:\$1]]\" тун хъувунай куьн [[Special:Watchlist|watchlist]].                                                                                                             Къвезмай дегишунар и чарчел ва галкlанавай чарчихъ ихтилатар жеда инна, ахъатдава \"сакlус яцlу''''' инна [[Special:RecentChanges|list of recent changes]] гьам кьизил авун.",
 'removedwatchtext' => 'Чар "[[:$1]]" Идай чlурнай [[Special:Watchlist|ахтармишунин цlарар]].',
index d0be172..d951f6e 100644 (file)
@@ -499,7 +499,7 @@ Sooka olindeko akaseera okuddamu n'ate.",
 'suspicious-userlogout' => "Sisitemu ezize ekiragiro kyo eky'okugivaamu kubanga kirabise nga ekivudde mu kalambulanetti enfu<br />
 oba mu puloguramu etereka n'eddamu okuyisa ebiragiro ebivudde awalala.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Wazzewo kiremya atategeerese mu mukolo mail() ogw'omu PHP",
 
 # Change password dialog
@@ -1022,7 +1022,7 @@ W'owandikira by'onoonya bw'osoosawo akagambo ''all:'', okunoonya kubuna Wikipedi
 # Special:ListGroupRights
 'listgrouprights-members' => '(lukalala lwa bamemba)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Memba ono musindikire e-mail',
 
 # Watchlist
index f050977..d7d50bb 100644 (file)
@@ -645,7 +645,7 @@ Doe mós effe wachte ierdets te 't obbenuuts kens perbere.",
 'loginlanguagelabel' => 'Taol: $1',
 'suspicious-userlogout' => "Dien verzeuk óm aaf te melde is genegeerd, ómdet 't liek esof 't verzeuk is versjik door 'ne browser of cacheproxy dae kepot is.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Dao haet ziech 'n ónbekénde fout veurgedaon in de mail()-functie van PHP",
 'user-mail-no-addy' => "Perbeerdjes 'ne mail te sjikke zónger 'n adres",
 
@@ -1294,7 +1294,7 @@ Deze informatie is zichbaar veur angere gebroekers.',
 'prefs-displaywatchlist' => 'Toeaningsinstèllinger',
 'prefs-diffs' => 'Vers',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "'t E-mailadres liek geldig",
 'email-address-validity-invalid' => "Gif 'n geldig e-mailadres op",
 
@@ -2056,7 +2056,7 @@ Infermasie daoreuver èn de individueel rechter vinjs te [[{{MediaWiki:Listgroup
 'listgrouprights-addgroup-self-all' => 'Voeg alle gruup toe aan eige gebroeker',
 'listgrouprights-removegroup-self-all' => 'Wösj alle gruup van eige gebroeker',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Gein e-mailadres bekènd veur deze gebroeker',
 'mailnologintext' => "De mos zien [[Special:UserLogin|aangemèld]] en 'n gèldig e-mailadres in bie dien [[Special:Preferences|veurkäöre]] höbbe ingevuld om mail nao anger gebroekers te sjture.",
 'emailuser' => "Sjik deze gebroeker 'nen e-mail",
@@ -3329,7 +3329,7 @@ Alle volgende links die op dezelfde regel sjtaon, waere behanjeld es oetzunjerin
 'monthsall' => 'al',
 'limitall' => 'al',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Bevèstig e-mailadres',
 'confirmemail_noemail' => 'Doe höbs gein geldig e-mailadres ingegaeve in dien [[Special:Preferences|veurkäöre]].',
 'confirmemail_text' => "Deze wiki vereis dats te dien e-mailadres instèls iedats te e-mailfuncties
index b58684d..9b439ce 100644 (file)
@@ -689,7 +689,7 @@ Palaukite prieš bandant vėl.',
 'loginlanguagelabel' => 'Kalba: $1',
 'suspicious-userlogout' => 'Jūsų prašymas atsijungti buvo atmestas, nes, atrodo, jį klaidingai išsiuntė naršyklė arba spartinantysis tarpinis serveris.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nežinoma klaida PHP mail() funkcijoje',
 'user-mail-no-addy' => 'Bandyta išsiųsti elektroninį laišką be el. pašto adreso.',
 'user-mail-no-body' => 'Mėginta siųsti tuščia ar pernelyg trumpą E-pašto žinutė.',
@@ -1338,7 +1338,7 @@ Jei jūs jį įvesite, jis bus naudojamas pažymėti jūsų darbą.',
 'prefs-displaywatchlist' => 'Rodymo nuostatos',
 'prefs-diffs' => 'Skirtumai',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Panašu, kad E-pašto adresas yra teisingas',
 'email-address-validity-invalid' => 'Įveskite korektišką e-pašto adresą',
 
@@ -2088,7 +2088,7 @@ Palaikomi protokolai: <code>$1</code> (nei vieno iš jų nenurodykite paieškoje
 'listgrouprights-addgroup-self-all' => 'Priskirti visas grupes prie paskyros',
 'listgrouprights-removegroup-self-all' => 'Pašalinti visas grupes iš savo paskyros',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nėra adreso',
 'mailnologintext' => 'Jums reikia būti [[Special:UserLogin|prisijungusiam]] ir turi būti įvestas teisingas el. pašto adresas jūsų [[Special:Preferences|nustatymuose]], kad siųstumėte el. laiškus kitiems nautotojams.',
 'emailuser' => 'Rašyti laišką šiam naudotojui',
@@ -3465,7 +3465,7 @@ Visos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. pusl
 'monthsall' => 'visi',
 'limitall' => 'visi',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Patvirtinkite el. pašto adresą',
 'confirmemail_noemail' => 'Jūs neturite nurodę teisingo el. pašto adreso [[Special:Preferences|savo nustatymuose]].',
 'confirmemail_text' => 'Šiame projekte būtina patvirtinti el. pašto adresą prieš naudojant el. pašto funkcijas. Spustelkite žemiau esantį mygtuką,
index 645a78d..30c4628 100644 (file)
@@ -469,7 +469,7 @@ I tum leh hmain nghâk lawk ang che.',
 'login-abort-generic' => 'I luh tumna a hlawhchham - Pamţùl a ni',
 'loginlanguagelabel' => 'Ţawng: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'E-chenhmun awm lova e-lehkha thawn i tum.',
 
 # Change password dialog
@@ -871,7 +871,7 @@ Hmangtuten e-lehkha an thawn chein i e-chenhmun hrilh an ni chuang lo vang.',
 'prefs-displaywatchlist' => 'Duhthlanna tilang rawh',
 'prefs-diffs' => 'Danglamna',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-chenhmun a dik hmel',
 'email-address-validity-invalid' => 'E-chenhmun dik ziak rawh',
 
@@ -1367,7 +1367,7 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'listgrouprights-members' => '(tel zawng zawng)',
 'listgrouprights-addgroup' => '{{PLURAL:$2|Pawl|Pawl}} belhna: $1',
 
-# E-mail user
+# Email user
 'emailuser' => 'He hmangtu hi e-lehkha thawn rawh',
 'emailusername' => 'Hmangtu hming:',
 'emailusernamesubmit' => 'Thehlut rawh',
index 39ab154..45cb9d0 100644 (file)
@@ -509,7 +509,7 @@ Lūdzu uzgaidi pirms mēģini vēlreiz.',
 'login-abort-generic' => 'Jūsu pieteikšanās bija neveiksmīga — Darbība pārtraukta',
 'loginlanguagelabel' => 'Valoda: $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nezināma kļūda PHP mail() funkcijā',
 
 # Change password dialog
@@ -1079,7 +1079,7 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'prefs-displaywatchlist' => 'Pamatuzstādījumi',
 'prefs-diffs' => 'Izmaiņas',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-pasta adrese šķiet derīga',
 'email-address-validity-invalid' => 'Ievadiet derīgu e-pasta adresi',
 
@@ -1600,7 +1600,7 @@ Katrā rindiņā ir saites uz pirmo un otro pāradresācijas lapu, kā arī pirm
 'brokenredirects-edit' => 'labot',
 'brokenredirects-delete' => 'dzēst',
 
-'withoutinterwiki' => 'Lapas bez interwiki',
+'withoutinterwiki' => 'Lapas bez starpviki saitēm',
 'withoutinterwiki-summary' => "Šajās lapās nav saišu uz citu valodu projektiem (''interwiki''):",
 'withoutinterwiki-legend' => 'Prefikss',
 'withoutinterwiki-submit' => 'Rādīt',
@@ -1750,7 +1750,7 @@ Papildu informāciju par katru individuālu piekļuves tiesību veidu, iespējam
 'listgrouprights-addgroup-self-all' => 'Pievienot visas grupas savam kontam',
 'listgrouprights-removegroup-self-all' => 'Noņemt visas grupas no sava konta',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nav adreses, uz kuru sūtīt',
 'mailnologintext' => 'Tev jābūt [[Special:UserLogin|iegājušam]], kā arī tev jābūt [[Special:Preferences|norādītai]] derīgai e-pasta adresei, lai sūtītu e-pastu citiem lietotājiem.',
 'emailuser' => 'Sūtīt e-pastu šim lietotājam',
@@ -2865,7 +2865,7 @@ Pārējie lauki, pēc noklusējuma, būs paslēpti.
 'monthsall' => 'visi',
 'limitall' => 'visas',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Apstiprini e-pasta adresi',
 'confirmemail_noemail' => '[[Special:Preferences|Tavās izvēlēs]] nav norādīta derīga e-pasta adrese.',
 'confirmemail_text' => 'Šajā wiki ir nepieciešams apstiprināt savu e-pasta adresi, lai izmantotu e-pasta funkcijas.
index 0af7144..9169dcb 100644 (file)
@@ -514,7 +514,7 @@ $2',
 'loginlanguagelabel' => 'भाषा : $1',
 'suspicious-userlogout' => 'अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृति द्वारा पठाओल गेल छल।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'पी.एच.पी.क संदेश कार्य() मे अज्ञात दोष',
 'user-mail-no-addy' => 'बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास',
 
@@ -1168,7 +1168,7 @@ $3 द्वारा देल कारण अछि ''$2''",
 'prefs-displaywatchlist' => 'दृश्य विकल्प सभ',
 'prefs-diffs' => 'अन्तर निर्धारक सभ',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ई-पत्र संकेत मान्य बुझाइत अछि',
 'email-address-validity-invalid' => 'एकटा मान्य ई-पत्र संकेत लिखू',
 
@@ -1888,7 +1888,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'सभटा वर्गकेँ अपन खातामे जोड़ू',
 'listgrouprights-removegroup-self-all' => 'सभटा वर्गकेँ अपन खातासँ निकालू',
 
-# E-mail user
+# Email user
 'mailnologin' => 'कोनो पठेबाक पता नै',
 'mailnologintext' => 'अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]]  मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।',
 'emailuser' => 'ऐ प्रयोक्ताकेँ ई-पत्र पठाउ',
@@ -3206,7 +3206,7 @@ Variants for Chinese language
 'monthsall' => 'सभ',
 'limitall' => 'सभटा',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => ' ई-पत्र सत्यापित करू',
 'confirmemail_noemail' => 'अहाँ लग कोनो मान्य ई-पत्र संकेत नै अछि एतए [[Special:Preferences|प्रयोक्ताक पसिन्न सभ]] देबा लेल।',
 'confirmemail_text' => '{{जालस्थल}}  चाहैए जे अहाँ अपन ई-पत्र सुविधा प्रयोग करबासँ पहिने अपन ई-पत्र संकेतक सत्यापन करू।
index 5730312..8df81a7 100644 (file)
@@ -514,7 +514,7 @@ Tulung ngenteni sedela sedurunge njajal maning.',
 'loginlanguagelabel' => 'Basa: $1',
 'suspicious-userlogout' => "Panjalukan Rika nggo metu log ditolak jalarak ketone dikirim nang panjlajah sing rusak utawa proksi panyinggah (''caching proxy'').",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Kasalahan sing ora genah nang fungsi mail() PHP.',
 'user-mail-no-addy' => 'Njajal ngirimna imel tanpa nganggo alamat imel.',
 
@@ -1036,7 +1036,7 @@ Aja kuatir, alamat imele Rika ora ditidokna dong pangganggo sejen ngontak Rika.'
 'prefs-displaywatchlist' => 'Opsi tampilan',
 'prefs-diffs' => 'Prabédan',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamatimel ketone wis sah',
 'email-address-validity-invalid' => 'Monggo dilebokna alamat imel sing bener',
 
@@ -1453,7 +1453,7 @@ Rika teyeng mbatesi tampilan kanthi milih jinis log, jeneng panganggo (sensitif
 # Special:ListGroupRights
 'listgrouprights-members' => '(daftar anggota)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Kirim imel maring panganggo kiye',
 'emailtarget' => 'Lebokna jeneng panganggo utawa panampa',
 'emailusername' => 'Jeneng panganggo:',
index 008c3b9..e96b255 100644 (file)
@@ -633,7 +633,7 @@ $2',
 'loginlanguagelabel' => 'Кяль: $1',
 'suspicious-userlogout' => 'Вешфксце лисемс кардафоль сяс мес няеви тянь кучезь колаф интернетс вятиень эли ётка ёкамань сервер вельде.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Аф содаф эльбятькс PHP сёрмавятемань функциеса.',
 'user-mail-no-addy' => 'Тяряфтыхть кучемс е-сёрма е-паргафтома',
 
@@ -1685,7 +1685,7 @@ $3 макссь туфталсь - ''$2''",
 'listgrouprights-addgroup-all' => 'Ули кода поладомс сембе полгатне',
 'listgrouprights-removegroup-all' => 'Ули кода сембе полгатне валхтомс',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Аш кучема адрес',
 'mailnologintext' => 'Тондейть эряви [[Special:UserLogin|сувамс]]
 ди эряви кондясти электрононь адресце тонь [[Special:Preferences|арафнемасот]] иля тиихненди электрононь сёрмат кучемаснонды.',
@@ -2692,7 +2692,7 @@ $1',
 'namespacesall' => 'сембе',
 'monthsall' => 'сембе',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Кемостамс электрононь адресть',
 'confirmemail_noemail' => 'Тонь аш кондясти электрононь адрес тяштьф тонь [[Special:Preferences|тиить арафнематнень]] эса.',
 'confirmemail_text' => '{{SITENAME}} веши тонь электрононь адресцень кемокстамац электрононь адресть арафнематнень тевс нолдамада инголе.
index 56195c5..ed3d6f4 100644 (file)
@@ -272,7 +272,7 @@ $1',
 'mainpage-description' => 'Palanta',
 'policy-url' => 'Project:Kabijakan',
 'portal' => 'Portal komunitas',
-'portal-url' => 'Project:Portal komunitas',
+'portal-url' => 'Portal:Komunitas',
 'privacy' => 'Kecipehan privasi',
 'privacypage' => 'Project:Kecipehan privasi',
 
@@ -675,9 +675,9 @@ Kato sandi untuak akun baharu iko dapek diubah di laman ''[[Special:ChangePasswo
 'newarticletext' => "Laman nan awak cari alun ado.
 Untuak mambuek laman tu, mulailah dangan manulih dalam kotak di bawah (caliak [[{{MediaWiki:Helppage}}|laman bantuan]] untuak informasi lanjuiknyo).
 Jikok awak indak sangajo sampai ka laman ko, klik tombol '''back''' pado panjalajah web awak.",
-'anontalkpagetext' => "----''Iko adolah laman pambicaraan saurang pangguno anonim nan alun mambuek akun atau indak manggunoannyo.
-Jadi, kami tapaso harus mamakai alamat IP nan basangkutan untuak maidentifikasikannyo.
-Jikok Sanak adolah saurang pangguno anonim dan marasa mandapekkan komentar-komentar nan indak relevan nan ditujuan langsung kapado Sanak, sila [[Special:UserLogin/signup|mambuek akun]] atau [[Special:UserLogin|masuak log]] untuak mahindari karancuan jo pangguno anonim lainnya di lain wakatu.''",
+'anontalkpagetext' => "----''Iko adolah laman rundiang saurang pangguno anonim nan alun mambuek akun atau indak manggunoannyo.
+Jadi, kami tapaso mamakai alamat IP nan takaik untuak mangenalinyo.
+Jikok Sanak adolah pangguno anonim dan maraso mandapek komentar nan indak lamak nan ditujuan langsung kapado Sanak, cubolah [[Special:UserLogin/signup|mambuek akun]] atau [[Special:UserLogin|masuak log]] guno manghindari karancuan jo pangguno anonim lainnyo.''",
 'noarticletext' => 'Kini ko indak ada teks di laman iko.
 Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancarian untuak judul laman iko]] di laman-laman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancari log takaik], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} manyuntiang laman iko]</span>.',
 'noarticletext-nopermission' => 'Kini ko indak ado teks dalam laman ko.
@@ -885,9 +885,29 @@ Angku dapek mancaliaknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/
 Angku dapek malieknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambanaman]",
 'rev-deleted-no-diff' => "Angku indak dapek maliek pabedoan ko dek salah satu dari revisinyo alah '''dihapuih'''.
 Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].",
+'rev-suppressed-no-diff' => "Angku indak dapek maliek pabedoan ko dek salah satu dari revisinyo alah '''dihapuih'''.",
+'rev-deleted-unhide-diff' => "Revisi laman ko alah '''dihapuih'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].
+Sanak masih dapek [$1 maliek revisi ko] ko' amuah.",
+'rev-suppressed-unhide-diff' => "Revisi laman ko alah '''tabanam'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log pambanaman].
+Sanak masih dapek [$1 maliek revisi ko] ko' amuah.",
+'rev-deleted-diff-view' => "Laman revisi ko alah '''dihapuih'''.
+Sanak dapek mancaliaknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].",
+'rev-suppressed-diff-view' => "Revisi laman ko alah '''tabanam'''.
+Sanak dapek malieknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambanaman]",
 'rev-delundel' => 'tampilkan/suruakkan',
 'rev-showdeleted' => "tunjua'an",
+'revisiondelete' => 'Hapuih/batal hapuih revisi',
+'revdelete-nooldid-title' => 'Target revisi indak basobok',
+'revdelete-nologtype-title' => 'Tipe log indak diagiah',
+'revdelete-nologtype-text' => 'Sanak indak mngagiah tipe log untuak manerapkan tindakan ko.',
+'revdelete-nologid-title' => 'Entri log indak valid',
+'revdelete-no-file' => 'Berkas nan dituju indak basobok.',
+'revdelete-show-file-confirm' => 'Apokah Sanak yakin nio mancaliak revisi nan alah dihapuih dari berkas "<nowiki>$1</nowiki>" per $3, $2?',
 'revdelete-show-file-submit' => 'Yo',
+'revdelete-selected' => "'''{{PLURAL:$2|Revisi piliahan}} dari [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Log pilihan}}:'''",
 'revdelete-radio-set' => 'Yo',
 'revdelete-radio-unset' => 'Indak',
 'revdelete-log' => 'Alasan:',
@@ -1089,8 +1109,8 @@ Jan labiah dari $1 {{PLURAL:$1|karakter}}.',
 'prefs-help-realname' => "Namo asli sifaiknyo opsional.
 Jiko' Angku manambahkannyo, namo asli Angku akan digunoan untuak mengenal hasil karaja Angku.",
 'prefs-help-email' => "Alamaik surel ko hanyolah tambahan, tapi paralu untuak ma-''reset'' kato sandi, bilo Sanak lupo kato sandi.",
-'prefs-help-email-others' => 'Sanak dapek mamiliah untuak mangizinkan urang lain manghubungi jo surel malalui laman pangguno atau laman diskusi.
-Alamaik surel tu indakkan tau dek urang nan manghubungi sanak tu.',
+'prefs-help-email-others' => 'Sanak dapek mamiliah untuak mangizinkan urang lain manghubungi jo surel malalui laman pangguno atau laman rundiang.
+Alamaik surel Sanak indakkan tau dek urang nan manghubungi sanak tu.',
 'prefs-help-email-required' => 'Alamaik surel wajib diisi.',
 'prefs-info' => 'Informasi dasar',
 'prefs-i18n' => 'Internasionalisasi',
@@ -1698,7 +1718,7 @@ Entri log pamblokiran tabaru ado di bawah ko untuak referensi:',
 'ipbotheroption' => 'lainnyo',
 'ipbotherreason' => 'Alasan lain/tambahan:',
 'ipbhidename' => 'Suruakan namo pangguno dari dafta jo suntiangan',
-'ipbwatchuser' => 'Pantau laman pangguno ko jo laman diskusinyo',
+'ipbwatchuser' => 'Pantau laman pangguno ko jo laman rundiangnyo',
 'ipb-disableusertalk' => 'Halang pangguno ko manyuntiang laman diskusinyo wakatu disakek',
 'ipb-change-block' => 'Sakek baliak pangguno jo setelan ko',
 'ipb-confirm' => 'Konfirmasi sakek',
index 53ed722..97adada 100644 (file)
@@ -838,7 +838,7 @@ $2',
 'blocked-mailpassword' => 'Вашата IP-адреса е блокирана за уредување, истовремено е ставена забрана за користење на функцијата за обнова на лозинка за да се спречи можноста за злоупотреба.',
 'eauthentsent' => 'На назначената адреса е испратена потврдна порака.
 Пред да се испрати друга порака на корисничката сметка, ќе морате да ги проследите напатствијата во пораката, за да потврдите дека таа корисничка сметка е навистина ваша.',
-'throttled-mailpassword' => 'Ð\9fоÑ\82Ñ\81еÑ\82Ñ\83ваÑ\9aе Ð·Ð° Ð»Ð¾Ð·Ð¸Ð½ÐºÐ°Ñ\82а Ðµ Ð²ÐµÑ\9cе Ð¿Ñ\80аÑ\82ено во {{PLURAL:$1|изминатиов час|изминативе $1 часа}}.
+'throttled-mailpassword' => 'Ð\92еÑ\9cе Ðµ Ð¸Ñ\81пÑ\80аÑ\82ена Ð¿Ð¾Ñ\80ака Ð·Ð° Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° Ð»Ð¾Ð·Ð¸Ð½ÐºÐ°Ñ\82а во {{PLURAL:$1|изминатиов час|изминативе $1 часа}}.
 За да се спречи злоупотреба, само едно потсетување може да се праќа на {{PLURAL:$1|секој час|секои $1 часа}}.',
 'mailerror' => 'Грешка при испраќање на е-поштата: $1',
 'acct_creation_throttle_hit' => 'Корисници на ова вики користејќи ја вашата IP-адреса создале {{PLURAL:$1|1 корисничка сметка|$1 кориснички сметки}} во последниве денови, при што е достигнат максималниот број на кориснички сметки предвиден и овозможен за овој период.
@@ -892,7 +892,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Менување на лозинка',
-'passwordreset-text' => 'Пополнете го образецов за да ви испратиме потсетник за вашите најавни податоци по е-пошта.',
+'passwordreset-text' => 'Пополнете го образецов за да ја измените лозинката.',
 'passwordreset-legend' => 'Нова лозинка',
 'passwordreset-disabled' => 'На ова вики е оневозможено задавање на нова лозинка.',
 'passwordreset-pretext' => '{{PLURAL:$1||Подолу внесете еден податок}}',
@@ -902,8 +902,8 @@ $2',
 'passwordreset-capture-help' => 'Ако го штиклирате кутивчево, ќе ви се прикаже пораката (со привремената лозинка) и истата ќе му биде испратена на корисникот.',
 'passwordreset-email' => 'Е-пошта:',
 'passwordreset-emailtitle' => 'Најавни податоци за {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Ð\9dекоÑ\98 (веÑ\80оÑ\98аÑ\82но Ð²Ð¸Ðµ, Ð¾Ð´ IP-адÑ\80еÑ\81аÑ\82а $1) Ð¿Ð¾Ð±Ð°Ñ\80а Ð¿Ð¾Ñ\82Ñ\81еÑ\82ник Ð½Ð° Ð²Ð°Ñ\88иÑ\82е
½Ð°Ñ\98авни Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и за {{SITENAME}} ($4). Оваа е-поштенска адреса е наведена во
+'passwordreset-emailtext-ip' => 'Ð\9dекоÑ\98 (веÑ\80оÑ\98аÑ\82но Ð²Ð¸Ðµ, Ð¾Ð´ IP-адÑ\80еÑ\81аÑ\82а $1) Ð¿Ð¾Ð±Ð°Ñ\80а Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° Ð²Ð°Ñ\88аÑ\82а
»Ð¾Ð·Ð¸Ð½ÐºÐ° за {{SITENAME}} ($4). Оваа е-поштенска адреса е наведена во
 {{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:
 
 $2
@@ -912,7 +912,7 @@ $2
 Сега треба да се најавите и да внесете нова лозинка. Ако ова барање го
 поставил некој друг, или пак во меѓувреме сте се сетиле на лозинката, и не сакате
 да ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.',
-'passwordreset-emailtext-user' => 'Ð\9aоÑ\80иÑ\81никоÑ\82 $1 Ð½Ð° {{SITENAME}} Ð¿Ð¾Ð±Ð°Ñ\80а Ð´Ð° Ð¿Ð¾Ñ\82Ñ\81еÑ\82ник Ð·Ð° Ð²Ð°Ñ\88иÑ\82е Ð½Ð°Ñ\98авни Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и на {{SITENAME}}
+'passwordreset-emailtext-user' => 'Ð\9aоÑ\80иÑ\81никоÑ\82 $1 Ð½Ð° {{SITENAME}} Ð¿Ð¾Ð±Ð°Ñ\80а Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° Ð²Ð°Ñ\88аÑ\82а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° на {{SITENAME}}
 ($4). Оваа е-поштенска адреса е наведена во {{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:
 
 $2
@@ -923,9 +923,9 @@ $2
 да ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.',
 'passwordreset-emailelement' => 'Корисничко име: $1
 Привремена лозинка: $2',
-'passwordreset-emailsent' => 'Испратен е потсетник по е-пошта',
-'passwordreset-emailsent-capture' => 'Испратен е потсетник по е-пошта (прикажан подолу).',
-'passwordreset-emailerror-capture' => 'Создаден е потсетник за испраќање по е-пошта (прикажан подолу), но не успеав да го испратам на корисникот: $1',
+'passwordreset-emailsent' => 'Испратено е писмо за измена на лозинката.',
+'passwordreset-emailsent-capture' => 'Испратено е писмо за измена на лозинката (прикажано подолу).',
+'passwordreset-emailerror-capture' => 'Создадено е писмо за измена на лозинката (прикажано подолу), но не успеав да го испратам на корисникот: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Смени е-пошта',
@@ -4242,17 +4242,17 @@ $5
 '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 ревизии}} на страницата $3: $4',
-'logentry-delete-event-legacy' => '$1 ја измени видливоста на настани во дневникот на $3',
-'logentry-delete-revision-legacy' => '$1 ја измени видливоста на ревизии на страницата $3',
-'logentry-suppress-delete' => '$1 ја притаи страницата $3',
-'logentry-suppress-event' => '$1 потајно ја измени видливоста на {{PLURAL:$5|настан во дневникот|$5 настани во дневникот}} на $3: $4',
-'logentry-suppress-revision' => '$1 потајно ја измени видливоста на {{PLURAL:$5|ревизија|$5 ревизии}} на страницата $3: $4',
-'logentry-suppress-event-legacy' => '$1 потајно ја измени видливоста на настани во дневникот на $3',
-'logentry-suppress-revision-legacy' => '$1 потајно ја измени видливоста на ревизии на страницата $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|ја избриша}} страницата $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|ја врати}} страницата $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|ја измени}} видливоста на {{PLURAL:$5|настан во дневникот|$5 настани во дневникот}} на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|ја измени}} видливоста на {{PLURAL:$5|ревизија|$5 ревизии}} на страницата $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|ја измени}} видливоста на настаните во дневникот на $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|ја измени}} видливоста на ревизиите на страницата $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|ја притаи}} страницата $3',
+'logentry-suppress-event' => '$1 потајно {{GENDER:$2|ја измени}} видливоста на {{PLURAL:$5|настан во дневникот|$5 настани во дневникот}} на $3: $4',
+'logentry-suppress-revision' => '$1 потајно {{GENDER:$2|ја измени}} видливоста на {{PLURAL:$5|ревизија|$5 ревизии}} на страницата $3: $4',
+'logentry-suppress-event-legacy' => '$1 потајно {{GENDER:$2|ја измени}} видливоста на настани во дневникот на $3',
+'logentry-suppress-revision-legacy' => '$1 потајно {{GENDER:$2|ја измени}} видливоста на ревизии на страницата $3',
 'revdelete-content-hid' => 'содржината е скриена',
 'revdelete-summary-hid' => 'описот на уредувањето е скриен',
 'revdelete-uname-hid' => 'корисничкото име е скриено',
@@ -4261,20 +4261,20 @@ $5
 'revdelete-uname-unhid' => 'корисничкото име е скриено',
 'revdelete-restricted' => 'применети ограничувања на администратори',
 'revdelete-unrestricted' => 'отстранети ограничувања за систем оператори',
-'logentry-move-move' => '$1 ја премести страницата $3 на $4',
-'logentry-move-move-noredirect' => '$1 ја премести страницата $3 на $4 без да остави пренасочување',
-'logentry-move-move_redir' => '$1 ја премести страницата $3 на $4 презапишувајќи врз пренасочување',
-'logentry-move-move_redir-noredirect' => '$1 ја премести страницата $3 на $4 презапишувајќи врз пренасочување без да остави пренасочување',
-'logentry-patrol-patrol' => '$1 ја означи ревизијата $4 на страницата $3 како испатролирана',
-'logentry-patrol-patrol-auto' => '$1 автоматски ја означи ревизијата $4 на страницата $3 како испатролирана',
-'logentry-newusers-newusers' => 'Направена е корисничката сметка $1',
-'logentry-newusers-create' => 'Направена е корисничката сметка $1',
-'logentry-newusers-create2' => 'Направена е корисничката сметка $3; создавач: $1',
-'logentry-newusers-byemail' => '$1 ја создаде корисничката сметка $3. Лозинката ви ја испративме по е-пошта',
-'logentry-newusers-autocreate' => 'СмеÑ\82каÑ\82а $1 Ðµ Ñ\81оздадена Ð°Ð²Ñ\82омаÑ\82Ñ\81ки',
-'logentry-rights-rights' => '$1 го смени групното членство за $3 од $4 во $5',
-'logentry-rights-rights-legacy' => '$1 го смени групното членство за $3',
-'logentry-rights-autopromote' => '$1 Ðµ Ð°Ð²Ñ\82омаÑ\82Ñ\81ки Ñ\83напÑ\80еден од $4 во $5',
+'logentry-move-move' => '$1 {{GENDER:$2|ја премести}} страницата $3 на $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|ја премести}} страницата $3 на $4 без да остави пренасочување',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|ја премести}} страницата $3 на $4 презапишувајќи врз пренасочување',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|ја премести}} страницата $3 на $4 презапишувајќи врз пренасочување без да остави пренасочување',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|ја означи}} ревизијата $4 на страницата $3 како испатролирана',
+'logentry-patrol-patrol-auto' => '$1 автоматски {{GENDER:$2|ја означи}} ревизијата $4 на страницата $3 како испатролирана',
+'logentry-newusers-newusers' => '{{GENDER:$2|Направена}} корисничката сметка $1',
+'logentry-newusers-create' => '{{GENDER:$2|Направена}} корисничката сметка $1',
+'logentry-newusers-create2' => '{{GENDER:$2|Направена}} корисничката сметка $3 од $1',
+'logentry-newusers-byemail' => '$1 {{GENDER:$2|ја направи}} корисничката сметка $3. Лозинката ви ја испративме по е-пошта',
+'logentry-newusers-autocreate' => 'Ð\90вÑ\82омаÑ\82Ñ\81ки {{GENDER:$2|Ñ\81оздадена}} ÐºÐ¾Ñ\80иÑ\81ниÑ\87каÑ\82а Ñ\81меÑ\82ка $1',
+'logentry-rights-rights' => '$1 {{GENDER:$2|го измени}} групното членство на $3 од $4 во $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|го измени}} групното членство во $3',
+'logentry-rights-autopromote' => '$1 Ð°Ð²Ñ\82омаÑ\82Ñ\81ки {{GENDER:$2|Ñ\83напÑ\80еден|Ñ\83напÑ\80едена}} од $4 во $5',
 'rightsnone' => '(нема)',
 
 # Feedback
index 8cb57d6..83a8cc4 100644 (file)
@@ -23,6 +23,7 @@
  * @author Praveenp
  * @author Sadik Khalid
  * @author Sadik Khalid <sadik.khalid@gmail.com>
+ * @author Santhosh.thottingal
  * @author ShajiA
  * @author Shiju Alex <shijualexonline@gmail.com>
  * @author Shijualex
@@ -806,7 +807,7 @@ $2',
 'passwordsent' => '‘$1” എന്ന അംഗത്വത്തിനായി രജിസ്റ്റർ ചെയ്യപ്പെട്ടിട്ടുള്ള ഇമെയിൽ വിലാസത്തിലേക്ക് ഒരു പുതിയ രഹസ്യവാക്ക് അയച്ചിട്ടുണ്ട്. അത് ലഭിച്ചശേഷം ദയവായി ലോഗിൻ ചെയ്യുക.',
 'blocked-mailpassword' => 'താങ്കളുടെ ഐ.പി. വിലാസത്തെ ഈ വിക്കി തിരുത്തുന്നതിൽ നിന്നു തടഞ്ഞിട്ടുള്ളതാണ്‌. അതിനാൽ രഹസ്യവാക്ക് വീണ്ടെടുക്കുവാനുള്ള സജ്ജീകരണം ഉപയോഗിക്കുന്നതിനു താങ്കൾക്ക് അവകാശമില്ല.',
 'eauthentsent' => 'താങ്കൾ വിക്കിയിൽ ക്രമീകരിച്ചിട്ടുള്ള ഇമെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണത്തിനായി ഒരു മെയിൽ അയച്ചിട്ടുണ്ട്. ഇവിടെ നിന്ന് ആ ഇമെയിൽ വിലാസത്തിലേക്ക് മറ്റൊരു മെയിൽ കൂടി അയക്കുന്നതിനു മുൻപായി, അംഗത്വം താങ്കളുടേതു തന്നെ എന്നു ഉറപ്പു വരുത്തുന്നതിനായി, ഇപ്പോൾ അയച്ചിട്ടുള്ള മെയിലിലെ നിർദ്ദേശങ്ങൾ താങ്കൾ പാലിക്കേണ്ടതാണ്.',
-'throttled-mailpassword' => 'à´\95à´´à´¿à´\9eàµ\8dà´\9e {{PLURAL:$1|മണിà´\95àµ\8dà´\95àµ\82റിനàµ\81à´³àµ\8dളിൽ |$1 à´®à´£à´¿à´\95àµ\8dà´\95àµ\82à´±àµ\81à´\95ൾà´\95àµ\8dà´\95àµ\81à´³àµ\8dളിൽ}} à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\93ർമàµ\8dമപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതാനàµ\81à´³àµ\8dà´³ à´\92à´°àµ\81 à´®àµ\86യിൽ à´\85à´¯à´\9aàµ\8dà´\9aà´¿à´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fàµ\8d. à´¦àµ\81ർവിനിയàµ\8bà´\97à´\82 à´\92ഴിവാà´\95àµ\8dà´\95ാൻ {{PLURAL:$1|à´\92à´°àµ\81 à´®à´£à´¿à´\95àµ\8dà´\95àµ\82റിനàµ\81à´³àµ\8dളിൽ |$1 à´®à´£à´¿à´\95àµ\8dà´\95àµ\82à´±àµ\81à´\95ൾà´\95àµ\8dà´\95àµ\81à´³àµ\8dളിൽ}} à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\93ർമàµ\8dമപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതാനàµ\81à´³àµ\8dà´³ à´\92à´°àµ\81 à´®àµ\86യിൽ à´®à´¾à´¤àµ\8dà´°à´®àµ\87 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\82.',
+'throttled-mailpassword' => 'à´\95à´´à´¿à´\9eàµ\8dà´\9e {{PLURAL:$1|മണിà´\95àµ\8dà´\95àµ\82റിനàµ\81à´³àµ\8dളിൽ |$1 à´®à´£à´¿à´\95àµ\8dà´\95àµ\82à´±àµ\81à´\95ൾà´\95àµ\8dà´\95àµ\81à´³àµ\8dളിൽ}} à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ാനàµ\81à´³àµ\8dà´³ à´\92à´°àµ\81 à´\87à´®àµ\86യിൽ à´\85à´¯à´\9aàµ\8dà´\9aà´¿à´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fàµ\8d. à´¦àµ\81à´°àµ\81പയàµ\8bà´\97à´\82 à´\92ഴിവാà´\95àµ\8dà´\95ാൻ {{PLURAL:$1|à´\92à´°àµ\81 à´®à´£à´¿à´\95àµ\8dà´\95àµ\82റിനàµ\81à´³àµ\8dളിൽ |$1 à´®à´£à´¿à´\95àµ\8dà´\95àµ\82à´±àµ\81à´\95ൾà´\95àµ\8dà´\95àµ\81à´³àµ\8dളിൽ}} à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ാനàµ\81à´³àµ\8dà´³ à´\92à´°àµ\81 à´\87à´®àµ\86യിൽ à´®à´¾à´¤àµ\8dà´°à´®àµ\87 à´\85യയàµ\8dà´\95àµ\8dà´\95àµ\81à´\95à´¯àµ\81à´³àµ\8dà´³àµ\81.',
 'mailerror' => 'മെയിൽ അയയ്ക്കുന്നതിൽ പിഴവ്: $1',
 'acct_creation_throttle_hit' => 'കഴിഞ്ഞ ഒരു ദിവസത്തിനുള്ളിൽ താങ്കളുടെ ഐ.പി. വിലാസത്തിൽ നിന്നുമുള്ള സന്ദർശകർ {{PLURAL:$1|1 അംഗത്വം|$1 അംഗത്വങ്ങൾ}} എടുത്തിട്ടുണ്ട്, പ്രസ്താവിത സമയത്തിനുള്ളിൽ എടുക്കാവുന്ന ഏറ്റവും കൂടിയ പരിധിയാണിത്.
 അതിന്റെ ഫലമായി, ഈ ഐ.പി.യിൽ നിന്നുള്ള സന്ദർശകർക്ക് ഇപ്പോൾ കൂടുതൽ അംഗത്വമെടുക്കാൻ കഴിയുന്നതല്ല.',
@@ -856,7 +857,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക',
-'passwordreset-text' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\85à´\82à´\97à´¤àµ\8dവവിവരà´\99àµ\8dà´\99ൾ à´¸à´\82ബനàµ\8dധിà´\9aàµ\8dà´\9a à´\93ർമàµ\8dമപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതൽ à´\87à´®àµ\86യിൽ à´²à´­ിക്കാനായി ഈ ഫോം പൂരിപ്പിക്കുക.',
+'passwordreset-text' => 'രഹസàµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°ിക്കാനായി ഈ ഫോം പൂരിപ്പിക്കുക.',
 'passwordreset-legend' => 'രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക',
 'passwordreset-disabled' => 'ഈ വിക്കിയിൽ രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കലുകൾ പ്രവർത്തരഹിതമാക്കിയിരിക്കുകയാണ്.',
 'passwordreset-pretext' => '{{PLURAL:$1||താഴെ ഒരു വിവരശകലം നൽകുക}}',
@@ -866,14 +867,14 @@ $2',
 'passwordreset-capture-help' => 'ഈ പെട്ടിയിൽ ശരി ചേർത്താൽ, ഉപയോക്താവിന് അയയ്ക്കുന്നതോടൊപ്പം ഇമെയിൽ (താത്കാലിക രഹസ്യവാക്കിനൊപ്പം) പ്രദർശിപ്പിക്കപ്പെടുന്നതാണ്.',
 'passwordreset-email' => 'ഇമെയിൽ വിലാസം:',
 'passwordreset-emailtitle' => '{{SITENAME}} സംരംഭത്തിലെ അംഗത്വവിവരങ്ങൾ',
-'passwordreset-emailtext-ip' => 'à´\86à´°àµ\8b à´\92രാൾ (മിà´\95àµ\8dà´\95വാറàµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ളായിരിà´\95àµ\8dà´\95àµ\81à´\82, $1 à´\8eà´¨àµ\8dà´¨ à´\90.പി. à´µà´¿à´²à´¾à´¸à´¤àµ\8dതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82) {{SITENAME}} à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിലàµ\86 ($4) à´\85à´\82à´\97à´¤àµ\8dവവിവരà´\99àµ\8dà´\99à´³àµ\86à´\95àµ\8dà´\95àµ\81റിà´\9aàµ\8dà´\9aàµ\81à´³àµ\8dà´³ à´\93ർമàµ\8dà´®à´\95àµ\8dà´\95àµ\81റിപàµ\8dà´ªàµ\8d അഭ്യർത്ഥിച്ചിരിക്കുന്നു. ഈ ഇമെയിൽ വിലാസവുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന {{PLURAL:$3|അംഗത്വം|അംഗത്വങ്ങൾ}} താഴെക്കൊടുത്തിരിക്കുന്നു:
+'passwordreset-emailtext-ip' => 'à´\86à´°àµ\8b à´\92രാൾ (മിà´\95àµ\8dà´\95വാറàµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ളായിരിà´\95àµ\8dà´\95àµ\81à´\82, $1 à´\8eà´¨àµ\8dà´¨ à´\90.പി. à´µà´¿à´²à´¾à´¸à´¤àµ\8dതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82) {{SITENAME}} à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിലàµ\86 ($4) à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ാൻ അഭ്യർത്ഥിച്ചിരിക്കുന്നു. ഈ ഇമെയിൽ വിലാസവുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന {{PLURAL:$3|അംഗത്വം|അംഗത്വങ്ങൾ}} താഴെക്കൊടുത്തിരിക്കുന്നു:
 
 $2
 
 
 ഈ {{PLURAL:$3|താത്കാലിക രഹസ്യവാക്ക്|താത്കാലിക രഹസ്യവാക്കുകൾ}} {{PLURAL:$5|ഒരു ദിവസം|$5 ദിവസങ്ങൾ}} കൊണ്ട് കാലഹരണപ്പെട്ട് പോകുന്നവയാണ്.
 താങ്കൾ ഇപ്പോൾ തന്നെ പ്രവേശിച്ച് രഹസ്യവാക്ക് മാറ്റുന്നതാണ് ഉചിതം. ഈ അഭ്യർത്ഥന മറ്റാരോ ആണ് നടത്തിയത് അല്ലെങ്കിൽ, യഥാർത്ഥ രഹസ്യവാക്ക് താങ്കൾ ഓർമ്മിക്കുകയും അത് മാറ്റാൻ ആഗ്രഹിക്കാതിരിക്കുകയും ആണെങ്കിൽ, ഈ സന്ദേശം അവഗണിച്ച് താങ്കളുടെ പഴയ രഹസ്യവാക്ക് തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്.',
-'passwordreset-emailtext-user' => '{{SITENAME}} à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിലàµ\86 à´\89പയàµ\8bà´\95àµ\8dതാവായ $1 {{SITENAME}} à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിലàµ\86 ($4) à´\85à´\82à´\97à´¤àµ\8dവവിവരà´\99àµ\8dà´\99à´³àµ\86à´\95àµ\8dà´\95àµ\81റിà´\9aàµ\8dà´\9aàµ\81à´³àµ\8dà´³ à´\93ർമàµ\8dà´®à´\95àµ\8dà´\95àµ\81റിപàµ\8dà´ªàµ\8d അഭ്യർത്ഥിച്ചിരിക്കുന്നു. ഈ ഇമെയിൽ വിലാസവുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന {{PLURAL:$3|അംഗത്വം|അംഗത്വങ്ങൾ}} താഴെക്കൊടുത്തിരിക്കുന്നു:
+'passwordreset-emailtext-user' => '{{SITENAME}} à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിലàµ\86 à´\89പയàµ\8bà´\95àµ\8dതാവായ $1 {{SITENAME}} à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിലàµ\86 ($4) à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ാൻ അഭ്യർത്ഥിച്ചിരിക്കുന്നു. ഈ ഇമെയിൽ വിലാസവുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന {{PLURAL:$3|അംഗത്വം|അംഗത്വങ്ങൾ}} താഴെക്കൊടുത്തിരിക്കുന്നു:
 
 $2
 
@@ -882,9 +883,9 @@ $2
 താങ്കൾ ഇപ്പോൾ തന്നെ പ്രവേശിച്ച് രഹസ്യവാക്ക് മാറ്റുന്നതാണ് ഉചിതം. ഈ അഭ്യർത്ഥന മറ്റാരോ ആണ് നടത്തിയത് അല്ലെങ്കിൽ, യഥാർത്ഥ രഹസ്യവാക്ക് താങ്കൾ ഓർമ്മിക്കുകയും അത് മാറ്റാൻ ആഗ്രഹിക്കാതിരിക്കുകയും ആണെങ്കിൽ, ഈ സന്ദേശം അവഗണിച്ച് താങ്കളുടെ പഴയ രഹസ്യവാക്ക് തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്.',
 'passwordreset-emailelement' => 'ഉപയോക്തൃനാമം: $1
 താത്കാലിക രഹസ്യവാക്ക്: $2',
-'passwordreset-emailsent' => 'à´\93ർമàµ\8dമപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതൽ ഇമെയിൽ അയച്ചിട്ടുണ്ട്.',
-'passwordreset-emailsent-capture' => 'താഴàµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨, à´\93ർമàµ\8dമപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതൽ à´\87à´®àµ\86യിൽ à´\85à´¯à´\9aàµ\8dà´\9aà´¿à´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fàµ\8d.',
-'passwordreset-emailerror-capture' => 'താഴàµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨, à´\93ർമàµ\8dമപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതൽ à´\87à´®àµ\86യിൽ à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\9aàµ\8dà´\9aàµ\81, à´ªà´\95àµ\8dà´·àµ\87 ഉപയോക്താവിന് അയയ്ക്കാൻ കഴിഞ്ഞില്ല: $1',
+'passwordreset-emailsent' => 'à´\92à´°àµ\81 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´£ ഇമെയിൽ അയച്ചിട്ടുണ്ട്.',
+'passwordreset-emailsent-capture' => 'രഹസàµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´£ à´\87à´®àµ\86യിൽ à´\85à´¯à´\9aàµ\8dà´\9aà´¿à´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fàµ\8d, à´\85à´¤àµ\8d à´¤à´¾à´´àµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.',
+'passwordreset-emailerror-capture' => 'താഴàµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨, à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81നർസà´\9càµ\8dà´\9càµ\80à´\95à´°à´£ à´\87à´®àµ\86യിൽ à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95ാനായàµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82, ഉപയോക്താവിന് അയയ്ക്കാൻ കഴിഞ്ഞില്ല: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക',
@@ -2080,6 +2081,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'disambiguations-text' => "താഴെക്കൊടുത്തിരിക്കുന്ന താളുകളിൽ '''വിവക്ഷിതങ്ങൾ താളിലേയ്ക്ക്''' കുറഞ്ഞത് ഒരു കണ്ണിയുണ്ട്. അവ അനുയോജ്യമായ താളിലേയ്ക്ക് കണ്ണിചേർക്കപ്പെടേണ്ടതാവാം. <br />
 [[MediaWiki:Disambiguationspage]] എന്ന താളിൽ കണ്ണി ചേർത്തിട്ടുള്ള ഫലകം ഉപയോഗിക്കുന്ന താളുകളെ വിവക്ഷിതങ്ങൾ താളായി കണക്കാക്കുന്നു.",
 
+'pageswithprop-submit' => 'പോകൂ',
+
 'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ',
 'doubleredirectstext' => 'ഈ താളിൽ ഒരു തിരിച്ചുവിടലിൽ നിന്നും മറ്റു തിരിച്ചുവിടൽ താളുകളിലേയ്ക്ക് പോകുന്ന താളുകൾ കൊടുത്തിരിക്കുന്നു. ഓരോ വരിയിലും ഒന്നാമത്തേയും രണ്ടാമത്തേയും തിരിച്ചുവിടൽ താളിലേക്കുള്ള കണ്ണികളും, രണ്ടാമത്തെ തിരിച്ചുവിടൽ താളിൽ നിന്നു ശരിയായ ലക്ഷ്യതാളിലേക്കുള്ള കണ്ണികളും ഉൾക്കൊള്ളുന്നു.
 <del>വെട്ടിക്കൊടുത്തിരിക്കുന്നവ</del> ശരിയാക്കിയവയാണ്.',
@@ -2357,7 +2360,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'enotif_body_intro_restored' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} പുനഃസ്ഥാപിച്ചിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
 'enotif_body_intro_changed' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താളിൽ $PAGEEDITDATE-നു {{gender:$2|$2}} മാറ്റം വരുത്തിയിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
 'enotif_lastvisited' => 'താങ്കളുടെ അവസാന സന്ദർശനത്തിനു ശേഷമുണ്ടായ മാറ്റങ്ങൾ കാണുവാൻ  $1 സന്ദർശിക്കുക.',
-'enotif_lastdiff' => 'à´\88 à´®à´¾à´±àµ\8dà´±à´\82 à´¦àµ¼à´¶à´¿à´\95àµ\8dà´\95ാൻ $1 കാണുക.',
+'enotif_lastdiff' => 'à´\88 à´®à´¾à´±àµ\8dà´±à´\82 à´\95ാണാൻ $1 കാണുക.',
 'enotif_anon_editor' => 'അജ്ഞാത ഉപയോക്താവ് $1',
 'enotif_body' => 'പ്രിയ $WATCHINGUSERNAME,
 
@@ -3963,17 +3966,17 @@ $5
 'sqlite-no-fts' => 'പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയില്ലാത്ത $1',
 
 # New logging system
-'logentry-delete-delete' => '$3 എന്ന താൾ $1  മായ്ച്ചിരിക്കുന്നു',
-'logentry-delete-restore' => '$3 എന്ന താൾ $1  പുനഃസ്ഥാപിച്ചിരിക്കുന്നു',
-'logentry-delete-event' => '$3 എന്ന  {{PLURAL:$5|രേഖയിലെ മാറ്റത്തിന്റെ|രേഖയിലെ $5 മാറ്റങ്ങളുടെ}} ദർശനീയത $1  മാറ്റിയിരിക്കുന്നു: $4',
-'logentry-delete-revision' => '$3 എന്ന താളിലെ  {{PLURAL:$5|നാൾപ്പതിപ്പിന്റെ|$5 നാൾപ്പതിപ്പുകളുടെ}} ദർശനീയത $1  മാറ്റിയിരിക്കുന്നു: $4',
-'logentry-delete-event-legacy' => '$3 എന്ന രേഖയിലെ മാറ്റങ്ങളുടെ ദർശനീയത $1 മാറ്റിയിരിക്കുന്നു',
-'logentry-delete-revision-legacy' => '$3 എന്ന താളിലെ നാൾപ്പതിപ്പുകളുടെ ദർശനീയത $1 മാറ്റിയിരിക്കുന്നു',
-'logentry-suppress-delete' => '$3 എന്ന താൾ $1  ഒതുക്കിയിരിക്കുന്നു',
-'logentry-suppress-event' => '$3 എന്ന  {{PLURAL:$5|രേഖയിലെ മാറ്റത്തിന്റെ|രേഖയിലെ $5 മാറ്റങ്ങളുടെ}} ദർശനീയത $1 രഹസ്യമായി  മാറ്റിയിരിക്കുന്നു: $4',
-'logentry-suppress-revision' => '$3 എന്ന താളിലെ  {{PLURAL:$5|നാൾപ്പതിപ്പിന്റെ|$5 നാൾപ്പതിപ്പുകളുടെ}} ദർശനീയത $1 രഹസ്യമായി  മാറ്റിയിരിക്കുന്നു: $4',
-'logentry-suppress-event-legacy' => '$3 എന്ന രേഖയിലെ മാറ്റങ്ങളുടെ ദർശനീയത $1 രഹസ്യമായി മാറ്റിയിരിക്കുന്നു',
-'logentry-suppress-revision-legacy' => '$3 എന്ന താളിലെ നാൾപ്പതിപ്പുകളുടെ ദർശനീയത $1 രഹസ്യമായി മാറ്റിയിരിക്കുന്നു',
+'logentry-delete-delete' => '$3 എന്ന താൾ $1 {{GENDER:$2|മായ്ച്ചിരിക്കുന്നു}}',
+'logentry-delete-restore' => '$3 എന്ന താൾ $1 {{GENDER:$2|പുനഃസ്ഥാപിച്ചിരിക്കുന്നു}}',
+'logentry-delete-event' => '$3 എന്ന {{PLURAL:$5|രേഖയിലെ മാറ്റത്തിന്റെ|രേഖയിലെ $5 മാറ്റങ്ങളുടെ}} ദർശനീയത $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}: $4',
+'logentry-delete-revision' => '$3 എന്ന താളിലെ {{PLURAL:$5|നാൾപ്പതിപ്പിന്റെ|$5 നാൾപ്പതിപ്പുകളുടെ}} ദർശനീയത $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}: $4',
+'logentry-delete-event-legacy' => '$3 എന്ന രേഖയിലെ മാറ്റങ്ങളുടെ ദർശനീയത $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-delete-revision-legacy' => '$3 എന്ന താളിലെ നാൾപ്പതിപ്പുകളുടെ ദർശനീയത $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-suppress-delete' => '$3 എന്ന താൾ $1 {{GENDER:$2|ഒതുക്കിയിരിക്കുന്നു}}',
+'logentry-suppress-event' => '$3 എന്ന  {{PLURAL:$5|രേഖയിലെ മാറ്റത്തിന്റെ|രേഖയിലെ $5 മാറ്റങ്ങളുടെ}} ദർശനീയത $1 രഹസ്യമായി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}: $4',
+'logentry-suppress-revision' => '$3 എന്ന താളിലെ  {{PLURAL:$5|നാൾപ്പതിപ്പിന്റെ|$5 നാൾപ്പതിപ്പുകളുടെ}} ദർശനീയത $1 രഹസ്യമായി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}: $4',
+'logentry-suppress-event-legacy' => '$3 എന്ന രേഖയിലെ മാറ്റങ്ങളുടെ ദർശനീയത $1 രഹസ്യമായി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-suppress-revision-legacy' => '$3 എന്ന താളിലെ നാൾപ്പതിപ്പുകളുടെ ദർശനീയത $1 രഹസ്യമായി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
 'revdelete-content-hid' => 'ഉള്ളടക്കം മറയ്ക്കപ്പെട്ടിരിക്കുന്നു',
 'revdelete-summary-hid' => 'തിരുത്തലിന്റെ ചുരുക്കം മറയ്ക്കപ്പെട്ടിരിക്കുന്നു',
 'revdelete-uname-hid' => 'ഉപയോക്തൃനാമം മറയ്ക്കപ്പെട്ടിരിക്കുന്നു',
@@ -3982,20 +3985,20 @@ $5
 'revdelete-uname-unhid' => 'ഉപയോക്തൃനാമം മറച്ചത് ഒഴിവാക്കിയിരിക്കുന്നു',
 'revdelete-restricted' => 'കാര്യനിർവാഹകർക്ക് പ്രവർത്തന അതിരുകൾ ഏർപ്പെടുത്തിയിരിക്കുന്നു',
 'revdelete-unrestricted' => 'കാര്യനിർവാഹകർക്ക് ഏർപ്പെടുത്തിയ പ്രവർത്തന അതിരുകൾ നീക്കം ചെയ്തിരിക്കുന്നു',
-'logentry-move-move' => '$1 എന്ന ഉപയോക്താവ് $3 എന്ന താൾ $4 എന്നാക്കി മാറ്റിയിരിക്കുന്നു',
-'logentry-move-move-noredirect' => '$3 എന്ന താൾ $4 എന്ന തലക്കെട്ടിലേയ്ക്ക് തിരിച്ചുവിടലില്ലാതെ $1 മാറ്റി',
-'logentry-move-move_redir' => '$1, $3 എന്ന താൾ $4 എന്ന താളിനു മുകളിലേയ്ക്ക് മാറ്റിയിരിക്കുന്നു',
-'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-byemail' => '$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 സൃഷ്ടിച്ചിരിക്കുന്നു, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു',
-'logentry-newusers-autocreate' => '$1 à´\8eà´¨àµ\8dà´¨ à´\85à´\82à´\97à´¤àµ\8dà´µà´\82 à´¸àµ\8dവയà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
-'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
-'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 മാറ്റിയിരിക്കുന്നു',
-'logentry-rights-autopromote' => '$1 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d $4 à´\8eà´¨àµ\8dനതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 $5 à´\8eà´¨àµ\8dനതിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d à´¸àµ\8dവയà´\82 à´\89യർതàµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
+'logentry-move-move' => '$1 എന്ന ഉപയോക്താവ് $3 എന്ന താൾ $4 എന്നാക്കി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-move-move-noredirect' => '$3 എന്ന താൾ $4 എന്ന തലക്കെട്ടിലേയ്ക്ക് തിരിച്ചുവിടലില്ലാതെ $1 {{GENDER:$2|മാറ്റി}}',
+'logentry-move-move_redir' => '$3 എന്ന താൾ $4 എന്ന താളിനു മുകളിലേയ്ക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-move-move_redir-noredirect' => '$3 എന്ന താൾ $4 എന്ന താളിനുമുകളിലേയ്ക്ക്, $1 തിരിച്ചുവിടൽ ഇല്ലാതെ {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-patrol-patrol' => '$3 എന്ന താളിന്റെ $4 എന്ന നാൾപ്പതിപ്പ് റോന്തുചുറ്റിയതായി $1 {{GENDER:$2|അടയാളപ്പെടുത്തിയിരിക്കുന്നു}}',
+'logentry-patrol-patrol-auto' => '$3 എന്ന താളിന്റെ $4 എന്ന നാൾപ്പതിപ്പ് റോന്തുചുറ്റിയതായി $1 സ്വതേ {{GENDER:$2|അടയാളപ്പെടുത്തിയിരിക്കുന്നു}}',
+'logentry-newusers-newusers' => '$1 എന്ന ഉപയോക്തൃ അംഗത്വം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}',
+'logentry-newusers-create' => '$1 എന്ന ഉപയോക്തൃ അംഗത്വം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}',
+'logentry-newusers-create2' => '$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}',
+'logentry-newusers-byemail' => '$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു',
+'logentry-newusers-autocreate' => '$1 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82 à´¸àµ\8dവയà´\82 {{GENDER:$2|à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81}}',
+'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}',
+'logentry-rights-autopromote' => '$1 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d $4 à´\8eà´¨àµ\8dനതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 $5 à´\8eà´¨àµ\8dനതിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d à´¸àµ\8dവയമàµ\87à´µ {{GENDER:$2|à´\89യർതàµ\8dതപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81}}',
 'rightsnone' => '(ഒന്നുമില്ല)',
 
 # Feedback
@@ -4071,6 +4074,7 @@ $5
 'duration-centuries' => '{{PLURAL:$1|ഒരു നൂറ്റാണ്ട്|$1 നൂറ്റാണ്ട്}}',
 'duration-millennia' => '{{PLURAL:$1|ഒരു സഹസ്രാബ്ദം|$1 സഹസ്രാബ്ദം}}',
 
-# Unknown messages
-'pageswithprop-submit' => 'പോകൂ',
+# Image rotation
+'rotate-comment' => 'ചിത്രം പ്രദക്ഷിണദിശയിൽ {{PLURAL:$1|ഒരു ഡിഗ്രി|$1 ഡിഗ്രി}} തിരിച്ചു',
+
 );
index f863d34..92299dc 100644 (file)
@@ -550,7 +550,7 @@ $2',
 'loginlanguagelabel' => 'Хэл: $1',
 'suspicious-userlogout' => 'Таны гарах хүсэлт нь эвдэрхий хөтөч буюу кэшлэгч проксигоор явуулсан мэт харагдаж байгаа тул зөвшөөрсөнгүй.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "PHP's mail() функцэд үл танигдах алдаа гарлаа.",
 'user-mail-no-addy' => 'Цахин шуудангийн хаягийг оруулалгүйгээр шуудан явуулахыг оролдлоо.',
 
@@ -1224,7 +1224,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'prefs-displaywatchlist' => 'Харагдацийн тохиргоо',
 'prefs-diffs' => 'Ялгаанууд',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Цахим шуудан хүчинтэй байна',
 'email-address-validity-invalid' => 'и-майл хаягаа зөв оруулна уу.',
 
@@ -1989,7 +1989,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'listgrouprights-addgroup-self-all' => 'Бүх бүлгийг өөрийн бүртгэлд нэмэх',
 'listgrouprights-removegroup-self-all' => 'Өөрийн бүртгэлээс бүх бүлгийг хасах',
 
-# E-mail user
+# Email user
 'mailnologin' => 'илгээх хаяг байхгүй',
 'mailnologintext' => 'Та бусад хэрэглэгчдэд мэйл явуулахын тулд өөрийн [[Special:Preferences|хувийн тохируулгадаа]] мэйлээ оруулсан, мөн [[Special:UserLogin|нэвтэрсэн]] байх шаардлагатай.',
 'emailuser' => 'Энэ хэрэглэгчид мэйл илгээх',
@@ -3212,7 +3212,7 @@ $1',
 'monthsall' => 'бүгдийг',
 'limitall' => 'бүгдийг',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Мэйл хаягийг баталгаажуулах',
 'confirmemail_noemail' => 'Та өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоондоо]] хүчинтэй мэйл хаяг оруулаагүй байна.',
 'confirmemail_text' => '{{SITENAME}} нь мэйлийн функцуудыг ашиглахын тулд мэйл хаягаа баталгаажуулахыг хэрэглэгчдээс шаарддаг болно.
index 5a679d7..60fedcc 100644 (file)
@@ -1958,8 +1958,10 @@ Pautan ini sepatutnya ditujukan ke topik yang sepatutnya.<br />
 Sesebuah laman dianggap sebagai laman penyahkekaburan jika ia menggunakan templat yang dipaut dari [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => 'Halaman dengan sifat halaman',
+'pageswithprop-legend' => 'Halaman dengan sifat halaman',
 'pageswithprop-text' => 'Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.',
 'pageswithprop-prop' => 'Nama sifat:',
+'pageswithprop-submit' => 'Pergi',
 
 'doubleredirects' => 'Lencongan berganda',
 'doubleredirectstext' => 'Yang berikut ialah senarai laman yang melencong ke laman lencongan lain. Setiap baris mengandungi pautan ke laman lencongan pertama dan kedua, serta baris pertama bagi teks lencongan kedua, lazimnya merupakan laman sasaran "sebenar", yang sepatutnya ditujui oleh lencongan pertama.
@@ -3949,7 +3951,7 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'duration-centuries' => '$1 abad',
 'duration-millennia' => '$1 alaf',
 
-# Unknown messages
-'pageswithprop-legend' => 'Halaman dengan sifat halaman',
-'pageswithprop-submit' => 'Pergi',
+# Image rotation
+'rotate-comment' => 'Imej diputar sebanyak $1 {{PLURAL:$1|darjah|darjah}} mengikut arah jam',
+
 );
index 448f4d3..e5cc31b 100644 (file)
@@ -752,7 +752,7 @@ Jekk jogħġbok stenna qabel ma terġa' tipprova.",
 'loginlanguagelabel' => 'Lingwa: $1',
 'suspicious-userlogout' => "Ir-rikjesta tiegħek li toħroġ barra mill-kont tiegħek ġiet miċħuda minħabba li jidher li din intbagħtet minn browser li ma jaħdimx jew minn proxy ta' caching.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Żball mhux magħruf fil-funzjoni mail() tal-PHP.',
 'user-mail-no-addy' => 'Pruvajt tibgħat posta elettronika mingħajr indirizz.',
 
@@ -1405,7 +1405,7 @@ Hawnhekk hawn valur iġġenerat b'mod każwali li inti tista' tuża: $1",
 'prefs-displaywatchlist' => "Opzjonijiet ta' viżwalizazzjoni",
 'prefs-diffs' => 'Differenzi',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'L-indirizz elettroniku jidher validu',
 'email-address-validity-invalid' => 'Daħħal indirizz elettroniku validu',
 
@@ -2144,7 +2144,7 @@ Jista' jkun hemm [[{{MediaWiki:Listgrouprights-helppage}}|aktar informazzjoni]]
 'listgrouprights-addgroup-self-all' => "Jista' jżid kull grupp lill-kont tiegħu stess",
 'listgrouprights-removegroup-self-all' => "Jista' jneħħi l-gruppi kollha mill-kont tiegħu stess",
 
-# E-mail user
+# Email user
 'mailnologin' => 'L-Ebda indirizz tal-posta',
 'mailnologintext' => "Sabiex tkun tista' tibgħat posta elettronika 'l utenti oħrajn huwa neċessarju li [[Special:UserLogin|tidħol fis-sit]] bħalha utent reġistrat u jkollhok indirizz validu fil-[[Special:Preferences|preferenzi]] tiegħek.",
 'emailuser' => 'Ikteb lil dan l-utent',
@@ -3476,7 +3476,7 @@ Oħrajn jiġu moħbija kif inhu definit oriġinarjament.
 'monthsall' => 'kollha',
 'limitall' => 'kollha',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Ikkonferma l-indirizz tal-posta elettronika',
 'confirmemail_noemail' => "M'għandekx indirizz tal-posta elettronika validu fil-[[Special:Preferences|preferenzi tal-utent]].",
 'confirmemail_text' => "{{SITENAME}} għandha bżonn li inti tivverifika l-indirizz tal-posta elettronika tiegħek qabel ma tkun tista' tagħmel użu mill-faċilitajiet tal-posta elettronika.
@@ -3805,9 +3805,9 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 'logentry-newusers-create' => 'Il-kont $1 ġie maħluq',
 'logentry-newusers-create2' => 'Il-kont $3 ġie maħluq minn $1',
 'logentry-newusers-autocreate' => 'Il-kont $1 ġie maħluq awtomatikament',
-'logentry-rights-rights' => "$1 biddel is-sħubija ta' $3 minn $4 għal $5",
-'logentry-rights-rights-legacy' => "$1 biddel is-sħubija fil-gruppi ta' $3",
-'logentry-rights-autopromote' => '$1 ġie awtomatikament promoss minn $4 għal $5',
+'logentry-rights-rights' => "$1 {{GENDER:$2|biddel|biddlet}} is-sħubija ta' $3 minn $4 għal $5",
+'logentry-rights-rights-legacy' => "$1 {{GENDER:$2|biddel|biddlet}} is-sħubija fil-gruppi ta' $3",
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|ġie|ġiet}} awtomatikament {{GENDER:$2|promoss|promossa}} minn $4 għal $5',
 'rightsnone' => '(xejn)',
 
 # Feedback
index 34beed5..146a7ee 100644 (file)
@@ -834,7 +834,7 @@ $2، $1',
 # Special:ListGroupRights
 'listgrouprights-members' => '(کارورون لیست)',
 
-# E-mail user
+# Email user
 'mailnologintext' => 'برای برسنی‌ین پوست الکترونیکی به کارورون دیگه ونه [[Special:UserLogin|بورین سامانه دله]] و نشونی پوست الکترونیکی معتبری تو [[Special:Preferences|ترجیحات]] خادت ره داشته بایی.',
 'emailuser' => 'این کارور وسّه ایمیل بَرسِن',
 'emailpage' => 'ئـی-مه‌یـل ای کـارور وه‌سه',
@@ -1054,7 +1054,7 @@ $2، $1',
 'namespacesall' => 'همه',
 'monthsall' => 'همه ماه‌ئون',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail_body_changed' => 'ات نفر، احتمالاً خاد شمِا، از نشونی آی‌پی $1 نشونی پوست ایلکتورونیک حیساب «$2» {{SITENAME}} ره تغییر هدائه.
 
 برای تایید این که این حیساب واقعاً شمه شه و فعال هکردن دبارهٔ ویژگی پوست ایلکتورونیک {{SITENAME}}، پیوند زیر دله ره شه مرورگر دله وا هکنین:
index e464a70..1cd2025 100644 (file)
@@ -394,7 +394,7 @@ Hueliz quimpiya tlahtōl tlein ahmo mohuelītih motequitiltia tōcāpan.',
 'createaccount' => 'Ticchīhuāz cē cuentah',
 'gotaccount' => "¿Ye ticpiya cē cuentah? '''$1'''.",
 'gotaccountlink' => 'Ximocalaqui',
-'createaccountmail' => 'e-mailcopa',
+'createaccountmail' => 'Ticnemītīz ahmo cemihcac zāzoichtacātlahtōlli nō moēhualtīz in maltzinteyōtl netitlanizyeyāntli',
 'createaccountreason' => 'Tlèka:',
 'badretype' => 'Ahneneuhqui motlahtōlichtacāyo.',
 'userexists' => 'In tlatequitiltilīltōcāitl in ōquipehpen ye ia.
@@ -1004,7 +1004,7 @@ Nò mà mỏta in tlèn [[Special:WantedCategories|ìpan kineki tlaìxmatkàtlà
 'listgrouprights-group' => 'Olōlli',
 'listgrouprights-rights' => 'Huelītiliztli',
 
-# E-mail user
+# Email user
 'emailuser' => 'Tiquēhualtlīz maltzinteyōtl netitlaniztli inīn tlatequitiltilīlli',
 'defemailsubject' => '{{SITENAME}} correo tlatequitiltilīlhuīc $1',
 'emailfrom' => 'Īhuīcpa:',
@@ -1410,7 +1410,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'monthsall' => '(mochīntīn)',
 'limitall' => 'mochi',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Ticchicāhuāz e-mail',
 'confirmemail_needlogin' => 'Tihuīquilia $1 ic ticchicāhua mo e-mail.',
 'confirmemail_success' => 'Mocorreo ōmotlahtōlneltilih
index 0e97218..bd01e65 100644 (file)
@@ -437,7 +437,7 @@ Tùi khoàⁿ-māi,  lí phah--ê.',
 'noemailprefs' => 'Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.',
 'emailconfirmlink' => 'Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'Siūⁿ beh kià tiān-chú-phoe, m̄-koh bô siá tē-chí.',
 
 # Change password dialog
@@ -843,7 +843,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch' => 'Chhiau-chhoē chām-goā liân-kiat',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Bô siu-phoe ê chū-chí',
 'mailnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] jī-chhiáⁿ ū 1 ê ū-hāu ê e-mail chū-chí tī lí ê [[Special:Preferences|iōng-chiá siat-tēng]] chiah ē-tàng kià e-mail hō· pa̍t-ūi iōng-chiá.',
 'emailuser' => 'Kià e-mail hō· iōng-chiá',
@@ -1105,7 +1105,7 @@ Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 'monthsall' => 'choân-pō͘',
 'limitall' => '全部',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Khak-jīn e-mail chū-chí',
 'confirmemail_text' => 'Sú-iōng e-mail kong-lêng chìn-chêng tio̍h seng khak-jīn lí ê e-mail chū-chí ū-hāu. Chhi̍h ē-pêng hit-ê liú-á thang kià 1 tiuⁿ khak-jīn phoe hō· lí. Hit tiuⁿ phoe lāi-bīn ū 1 ê te̍k-sû liân-kiat. Chhiáⁿ iōng liû-lám-khì khui lâi khoàⁿ, án-ne tō ē-tit khak-jīn lí ê chū-chí ū-hāu.',
 'confirmemail_send' => 'Kià khak-jīn phoe',
index 0309922..092f063 100644 (file)
@@ -792,8 +792,8 @@ og fortsette å bruke det gamle passordet.',
 Logg inn når du har mottatt det nye passordet.',
 'blocked-mailpassword' => 'IP-adressen din er blokkert fra å redigere, og for å forhindre misbruk kan du heller ikke bruke funksjonen som gir deg nytt passord.',
 'eauthentsent' => 'En bekreftelsesmelding ble sendt til gitte e-postadresse. Før andre e-poster kan sendes til kontoen må du følge instruksjonene i e-posten for å bekrefte at kontoen faktisk er din.',
-'throttled-mailpassword' => 'En passordpåminnelse ble sendt for mindre enn {{PLURAL:$1|en time|$1 timer}} siden.
-For å forhindre misbruk kan kun én passordpåminnelse sendes per {{PLURAL:$1|time|$1 timer}}.',
+'throttled-mailpassword' => 'En passordtilbakestillingsepost har allerede blitt sendt for mindre enn {{PLURAL:$1|en time|$1 timer}} siden.
+For å forhindre misbruk kan kun én passordtilbakestillingsepost sendes per {{PLURAL:$1|time|$1 timer}}.',
 'mailerror' => 'Feil under sending av e-post: $1',
 'acct_creation_throttle_hit' => 'Gjester med samme IP-adresse som deg har opprettet {{PLURAL:$1|én konto|$1 kontoer}} det siste døgnet, og det er ikke tillatt å opprette flere.
 Som et resultat kan det ikke opprettes flere kontoer fra denne IP-adressen.',
@@ -842,7 +842,7 @@ Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.'
 
 # Special:PasswordReset
 'passwordreset' => 'Passordresetting',
-'passwordreset-text' => 'Fyll ut dette skjemaet for å motta en påminnelse om kontoopplysningene dine i en e-post.',
+'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-pretext' => '{{PLURAL:$1||Skriv inn en av datadelene nedenfor}}',
@@ -852,8 +852,7 @@ Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.'
 'passwordreset-capture-help' => 'Hvis du krysser av her, vil du se e-posten (med foreløpig passord) i tillegg til at den blir sendt til brukeren.',
 'passwordreset-email' => 'E-postadresse:',
 'passwordreset-emailtitle' => 'Kontodetaljer på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Noen (sannsynligvis deg fra IP-adressen $1) ba om en påminnelse om dine
-kontodetaljer for {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er
+'passwordreset-emailtext-ip' => 'Noen (sannsynligvis deg fra IP-adressen $1) ba om en tilbakestilling av ditt passord for {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er
 tilknyttet denne e-postadressen:
 
 $2
@@ -863,7 +862,7 @@ Du bør logge på og velge et nytt passord nå. Dersom noen andre kom med denne
 forespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenger
 ønsker å endre det, kan du ignorere denne meldingen og fortsette å bruke ditt gamle
 passord.',
-'passwordreset-emailtext-user' => 'Brukeren $1 på {{SITENAME}} ba om en påminnelse om kontodetaljene dine for {{SITENAME}}
+'passwordreset-emailtext-user' => 'Brukeren $1 på {{SITENAME}} ba om en tilbakestilling av passordet ditt for {{SITENAME}}
 ($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er tilknyttet denne e-postadressen:
 
 $2
@@ -875,9 +874,9 @@ forespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenge
 passord.',
 'passwordreset-emailelement' => 'Brukernavn: $1
 Midlertidig passord: $2',
-'passwordreset-emailsent' => 'En påminnelse har blitt sendt på e-post.',
-'passwordreset-emailsent-capture' => 'E-posten under er sendt ut som en påminnelse.',
-'passwordreset-emailerror-capture' => 'E-posten, som du ser under, ble forsøkt sendt til brukeren, men dette mislyktes: $1',
+'passwordreset-emailsent' => 'En passordtilbakestillingslenke har blitt sendt per e-post.',
+'passwordreset-emailsent-capture' => 'Passordtilbakestillingseposten vist under har blitt sendt ut.',
+'passwordreset-emailerror-capture' => 'En passordtilbakestillingsepost ble laget, men det lyktes ikke å sende denne til brukeren: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Endre e-postadresse',
@@ -1085,7 +1084,7 @@ Du bør vurdere om det er passende å fortsette å redigere denne siden.
 Slette- og flytteloggen for denne siden gjengis her:",
 'moveddeleted-notice' => 'Denne siden har blitt slettet.
 Slette- og flytteloggen vises nedenfor.',
-'log-fulllog' => 'Vil hele loggen',
+'log-fulllog' => 'Vis hele loggen',
 'edit-hook-aborted' => 'Redigering avbrutt av en funksjon, uten forklaring.',
 'edit-gone-missing' => 'Kunne ikke oppdatere siden fordi den har blitt slettet.',
 'edit-conflict' => 'Redigeringskonflikt.',
@@ -2093,6 +2092,7 @@ De burde i stedet lenke til en passende innholdsside.<br />
 En side anses om en pekerside om den inneholder en mal som det lenkes til fra [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Sider med sideverdi',
+'pageswithprop-legend' => 'Sider med en sideverdi',
 
 'doubleredirects' => 'Doble omdirigeringer',
 'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.
@@ -3978,17 +3978,17 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'sqlite-no-fts' => '$1 uten støtte for fulltekstsøk',
 
 # New logging system
-'logentry-delete-delete' => '$1 slettet siden $3',
-'logentry-delete-restore' => '$1 gjenopprettet siden $3',
-'logentry-delete-event' => '$1 endret skjult synligheten av {{PLURAL:$5|en logget hendelse|$5 loggede hendelser}} på $3: $4',
-'logentry-delete-revision' => '$1 endret synlighet av {{PLURAL:$5|en revisjon|$5 revisjoner}} på side $3: $4',
-'logentry-delete-event-legacy' => '$1 endret synlighet av loggede hendelser på $3',
-'logentry-delete-revision-legacy' => '$1 endret synlighet av revisjoner på side $3',
-'logentry-suppress-delete' => '$1 skjult side $3',
-'logentry-suppress-event' => '$1 endret skjult synligheten av {{PLURAL:$5|en logget hendelse|$5 loggede hendelser}} på $3: $4',
-'logentry-suppress-revision' => '$1 endret skjult synligheten av {{PLURAL:$5|en logget hendelse|$5 loggede hendelser}} på $3: $4',
-'logentry-suppress-event-legacy' => '$1 endret skjult synligheten av loggede hendelser på $3',
-'logentry-suppress-revision-legacy' => '$1 endret skjult synligheten av revisjoner på side $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|slettet}} siden $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|gjenopprettet}} siden $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|endret}} synligheten av {{PLURAL:$5|en logghendelse|$5 logghendelser}} på $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|endret}} synligheten av {{PLURAL:$5|en revisjon|$5 revisjoner}} på side $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|endret}} synligheten av logghendelser på $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|endret}} synligheten av revisjoner på siden $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|skjulte}} siden $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|endret}} diskré synligheten av {{PLURAL:$5|en logghendelse|$5 logghendelser}} på $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|endret}} diskré synligheten av {{PLURAL:$5|en logghendelse|$5 logghendelser}} på $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|endret}} diskré synligheten av logghendelser på $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|endret}} diskré synligheten av revisjoner på siden $3',
 'revdelete-content-hid' => 'innhold skjult',
 'revdelete-summary-hid' => 'redigeringsbeskrivelse skjult',
 'revdelete-uname-hid' => 'brukernavn skjult',
@@ -3997,20 +3997,20 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'revdelete-uname-unhid' => 'brukernavn synlig',
 'revdelete-restricted' => 'begrensninger gjelder også administratorer',
 'revdelete-unrestricted' => 'fjernet begrensninger for administratorer',
-'logentry-move-move' => '$1 flyttet siden $3 til $4',
-'logentry-move-move-noredirect' => '$1 flyttet siden $3 til $4 uten å etterlate en omdirigering',
-'logentry-move-move_redir' => '$1 flyttet siden $3 til $4 over en omdirigering',
-'logentry-move-move_redir-noredirect' => '$1 flyttet siden $3 til $4 over en omdirigering uten å etterlate en omdirigering',
-'logentry-patrol-patrol' => '$1 markerte revisjon $4 av siden $3 som patruljert',
-'logentry-patrol-patrol-auto' => '$1 markerte automatisk revisjon $4 av siden $3 som patruljert',
-'logentry-newusers-newusers' => 'Kontoen $1 ble opprettet',
-'logentry-newusers-create' => 'Kontoen $1 ble opprettet',
-'logentry-newusers-create2' => 'Kontoen $3 ble opprettet av $1',
-'logentry-newusers-byemail' => 'Kontoen $3 ble opprettet av $1 og passordet sendt med e-post',
-'logentry-newusers-autocreate' => 'Konto $1 ble opprettet automatisk',
-'logentry-rights-rights' => '$1 endret gruppemedlemskap for $3 fra $4 til $5',
-'logentry-rights-rights-legacy' => '$1 endret gruppemedlemskap for $3',
-'logentry-rights-autopromote' => '$1 ble automatisk forfremmet fra $4 til $5',
+'logentry-move-move' => '$1 {{GENDER:$2|flyttet}} siden $3 til $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|flyttet}} siden $3 til $4 uten å etterlate en omdirigering',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|flyttet}} siden $3 til $4 over en omdirigering',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|flyttet}} siden $3 til $4 over en omdirigering uten å etterlate en omdirigering',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|markerte}} revisjon $4 av siden $3 som patruljert',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|markerte}} automatisk revisjon $4 av siden $3 som patruljert',
+'logentry-newusers-newusers' => 'Brukerkontoen $1 ble {{GENDER:$2|opprettet}}',
+'logentry-newusers-create' => 'Brukerkontoen $1 ble {{GENDER:$2|opprettet}}',
+'logentry-newusers-create2' => 'Brukerkontoen $3 ble {{GENDER:$2|opprettet}} av $1',
+'logentry-newusers-byemail' => 'Brukerkontoen $3 ble {{GENDER:$2|opprettet}} av $1 og passordet ble sendt per e-post',
+'logentry-newusers-autocreate' => 'Brukerkontoen $1 ble automatisk {{GENDER:$2|opprettet}}',
+'logentry-rights-rights' => '$1 {{GENDER:$2|endret}} gruppemedlemskap for $3 fra $4 til $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|endret}} gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 ble automatisk {{GENDER:$2|forfremmet}} fra $4 til $5',
 'rightsnone' => '(ingen)',
 
 # Feedback
@@ -4086,6 +4086,4 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'duration-centuries' => '$1 {{PLURAL:$1|århundre|århundrer}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Sider med en sideverdi',
 );
index e2833ce..d155c76 100644 (file)
@@ -686,7 +686,7 @@ Tööv en Stoot, ehrdat du dat noch wedder versöchst.',
 'loginlanguagelabel' => 'Spraak: $1',
 'suspicious-userlogout' => 'Dien Anfraag, di aftomellen, worr aflehnt, wieldat se vermoodlich vun en Browser oder Cache-Proxy sennt worrn is, de nich mehr funkschoneert.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Unbekennten Fehler in PHP sien mail()-Funkschoon',
 'user-mail-no-addy' => 'Versöch en E-Mail ahn E-Mail-Adress to sennen.',
 
@@ -1237,7 +1237,7 @@ Dat kann nich wedder ungeschehn maakt warrn.',
 'prefs-displaywatchlist' => 'Weddergaav-Instellungen',
 'prefs-diffs' => 'Ünnerscheed',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-Mail-Adress lett good',
 
 # User rights
@@ -1827,7 +1827,7 @@ Mehr Informatschonen över enkelte Rechten staht ünner [[{{MediaWiki:Listgroupr
 'listgrouprights-addgroup-self-all' => 'Kann all Gruppen to’t egen Brukerkonto tofögen',
 'listgrouprights-removegroup-self-all' => 'Kann all Gruppen vun’t egen Brukerkonto wegdoon',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Du büst nich anmellt.',
 'mailnologintext' => 'Du musst [[Special:UserLogin|anmellt wesen]] un in diene [[Special:Preferences|Instellungen]] en güllige E-Mail-Adress hebben, dat du annere Brukers E-Mails tostüren kannst.',
 'emailuser' => 'E-Mail an dissen Bruker',
@@ -2853,7 +2853,7 @@ Wiedere warrt standardmatig nich anwiest:
 'monthsall' => 'alle',
 'limitall' => 'all',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Nettbreefadress bestätigen',
 'confirmemail_noemail' => 'Du hest kene bestätigte Nettbreefadress in diene [[Special:Preferences|Instellen]] angeven.',
 'confirmemail_text' => '{{SITENAME}} verlangt, dat du diene Nettbreefadress bestätigst, ehrder du de Nettbreeffunkschonen bruken kannst. Klick op den Knopp wieder ünnen, dat di en Bestätigungskood tostüürt warrt.',
index 06841f0..031dead 100644 (file)
@@ -806,7 +806,7 @@ Je mutten effen wachten veurda'j t opniej proberen kunnen.",
 'loginlanguagelabel' => 'Taal: $1',
 'suspicious-userlogout' => 'Joew verzeuk um of te melden is aofewezen umdat t dernaor uutziet dat t verstuurd is deur n kepotte webkieker of tussenopslagbuffer',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Der was n onbekende fout mit de mail()-funksie van PHP',
 'user-mail-no-addy' => 'Eprobeerd n berichjen te versturen zonder n netpostadres',
 
@@ -1466,7 +1466,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'prefs-displaywatchlist' => 'Weergave-instellingen',
 'prefs-diffs' => 'Verschillen',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Geldig netpostadres',
 'email-address-validity-invalid' => 'Geef n geldig netpostadres op',
 
@@ -2237,7 +2237,7 @@ Meer informasie over de rechten ku'j [[{{MediaWiki:Listgrouprights-helppage}}|hi
 'listgrouprights-addgroup-self-all' => 'Kan alle groepen bie de eigen gebruker doon',
 'listgrouprights-removegroup-self-all' => 'Kan alle groepen vortdoon van eigen gebruker',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Niet an-emeld.',
 'mailnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween en n geldig e-mailadres in "[[Special:Preferences|mien veurkeuren]]" invoeren um disse funksie te kunnen gebruken.',
 'emailuser' => 'n Bericht sturen',
@@ -3565,7 +3565,7 @@ Aandere velden wörden verbörgen.
 'monthsall' => 'alles',
 'limitall' => 'alles',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Bevestig netpostadres',
 'confirmemail_noemail' => 'Je hebben gien geldig netpostadres in-evoerd in joew [[Special:Preferences|veurkeuren]].',
 'confirmemail_text' => "Bie disse wiki mu'j je netpostadres bevestigen veurda'j de berichtopsies gebruken kunnen. Klik op de onderstaonde knoppe um n bevestigingsbericht te ontvangen. In dit bericht zit n kode mit n verwiezing; um je netpostadres te bevestigen mu'j disse verwiezing openen.",
index ed747db..e9f518f 100644 (file)
@@ -848,7 +848,7 @@ Om misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vra
 'eauthentsent' => 'Er is een bevestigingse-mail naar het opgegeven e-mailadres gezonden.
 Volg de aanwijzingen in de e-mail om aan te geven dat het uw e-mailadres is.
 Tot die tijd kunnen er geen e-mails naar het e-mailadres gezonden worden.',
-'throttled-mailpassword' => 'In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is er al een wachtwoordherinnering verzonden.
+'throttled-mailpassword' => 'In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is al een wachtwoordherinnering verzonden.
 Om misbruik te voorkomen wordt er slechts één wachtwoordherinnering per {{PLURAL:$1|uur|$1 uur}} verzonden.',
 'mailerror' => 'Fout bij het verzenden van e-mail: $1',
 'acct_creation_throttle_hit' => 'Bezoekers van deze wiki met hetzelfde IP-adres als u hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.
@@ -904,7 +904,7 @@ Mogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aan
 
 # Special:PasswordReset
 'passwordreset' => 'Wachtwoord opnieuw instellen',
-'passwordreset-text' => 'Vul dit formulier in zodat we u een e-mail kunnen sturen met uw gebruikersgegevens.',
+'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-pretext' => '{{PLURAL:$1||Voer één van de onderstaande velden in}}',
@@ -914,15 +914,12 @@ Mogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aan
 'passwordreset-capture-help' => 'Als u dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan u weergegeven.',
 'passwordreset-email' => 'E-mailadres:',
 'passwordreset-emailtitle' => 'Gebruikersgegevens op {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 uw gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.
-De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
+'passwordreset-emailtext-ip' => 'Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
 
 $2
 
-{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.
-Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.',
-'passwordreset-emailtext-user' => 'Gebruiker $1 op de site {{SITENAME}} heeft uw gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.
-De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
+{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.',
+'passwordreset-emailtext-user' => 'Gebruiker $1 op de site {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
 
 $2
 
@@ -930,9 +927,9 @@ $2
 Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.',
 'passwordreset-emailelement' => 'Gebruikersnaam: $1
 Tijdelijk wachtwoord: $2',
-'passwordreset-emailsent' => 'Er is per e-mail een herinnering verzonden.',
-'passwordreset-emailsent-capture' => 'Er is een herinneringse-mail verzonden. Deze wordt hieronder weergegeven.',
-'passwordreset-emailerror-capture' => 'Er is een herinneringse-mail aangemaakt. Deze wordt hieronder weergegeven. Het verzonden naar de gebruiker is mislukt om de volgende reden: $1',
+'passwordreset-emailsent' => 'Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden.',
+'passwordreset-emailsent-capture' => 'Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden. Deze wordt hieronder weergegeven.',
+'passwordreset-emailerror-capture' => 'Er is een e-mail voor het opnieuw instellen van een wachtwoord aangemaakt. Deze wordt hieronder weergegeven. Het verzonden naar de gebruiker is mislukt om de volgende reden: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-mailadres wijzigen',
@@ -4131,17 +4128,17 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'sqlite-no-fts' => 'Versie $1 zonder ondersteuning voor "full-text" zoeken',
 
 # New logging system
-'logentry-delete-delete' => '$1 heeft de pagina $3 verwijderd',
-'logentry-delete-restore' => '$1 heeft de pagina $3 teruggeplaatst',
-'logentry-delete-event' => '$1 heeft de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
-'logentry-delete-revision' => '$1 heeft de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
-'logentry-delete-event-legacy' => '$1 heeft de zichtbaarheid van logboekregels van $3 gewijzigd',
-'logentry-delete-revision-legacy' => '$1 heeft de zichtbaarheid van versies van de pagina $3 gewijzigd',
-'logentry-suppress-delete' => '$1 heeft de pagina $3 onderdrukt',
-'logentry-suppress-event' => '$1 heeft heimelijk de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
-'logentry-suppress-revision' => '$1 heeft heimelijk de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
-'logentry-suppress-event-legacy' => '$1 heeft heimelijk de zichtbaarheid van logboekregels van $3 gewijzigd',
-'logentry-suppress-revision-legacy' => '$1 heeft heimelijk de zichtbaarheid van versies van de pagina $3 gewijzigd.',
+'logentry-delete-delete' => '$1 {{GENDER:$2|heeft}} de pagina $3 verwijderd',
+'logentry-delete-restore' => '$1 {{GENDER:$2|heeft}} de pagina $3 teruggeplaatst',
+'logentry-delete-event' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van logboekregels van $3 gewijzigd',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van versies van de pagina $3 gewijzigd',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|heeft}} de pagina $3 onderdrukt',
+'logentry-suppress-event' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van logboekregels van $3 gewijzigd',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van versies van de pagina $3 gewijzigd.',
 'revdelete-content-hid' => 'inhoud verborgen',
 'revdelete-summary-hid' => 'bewerkingssamenvatting verborgen',
 'revdelete-uname-hid' => 'gebruikersnaam verborgen',
@@ -4150,20 +4147,20 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'revdelete-uname-unhid' => 'gebruikersnaam zichtbaar gemaakt',
 'revdelete-restricted' => 'heeft beperkingen aan beheerders opgelegd',
 'revdelete-unrestricted' => 'heeft beperkingen voor beheerders opgeheven',
-'logentry-move-move' => '$1 heeft pagina $3 naar $4 hernoemd',
-'logentry-move-move-noredirect' => '$1 heeft de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten',
-'logentry-move-move_redir' => '$1 heeft pagina $3 hernoemd naar $4 over een doorverwijzing',
-'logentry-move-move_redir-noredirect' => '$1 heeft pagina $3 naar $4 hernoemd over een doorverwijzing zonder een doorverwijzing achter te laten',
-'logentry-patrol-patrol' => '$1 heeft versie $4 van pagina $3 als gecontroleerd gemarkeerd',
-'logentry-patrol-patrol-auto' => '$1 heeft versie $4 van pagina $3 automatisch als gecontroleerd gemarkeerd',
-'logentry-newusers-newusers' => 'Gebruiker $1 is aangemaakt',
-'logentry-newusers-create' => 'Gebruiker $1 is aangemaakt',
-'logentry-newusers-create2' => 'Gebruiker $3 is aangemaakt door $1',
-'logentry-newusers-byemail' => 'Gebruiker $3 is aangemaakt door $1 en het wachtwoord is per e-mail verzonden',
-'logentry-newusers-autocreate' => 'De gebruiker $1 is automatisch aangemaakt',
-'logentry-rights-rights' => '$1 heeft groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
-'logentry-rights-rights-legacy' => '$1 heeft groepslidmaatschap voor $3 gewijzigd',
-'logentry-rights-autopromote' => '$1 is automatisch gepromoveerd van $4 naar $5',
+'logentry-move-move' => '$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|heeft}} de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4 over een doorverwijzing',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|heeft}} pagina $3 naar $4 hernoemd over een doorverwijzing zonder een doorverwijzing achter te laten',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 gemarkeerd als gecontroleerd',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 automatisch gemarkeerd als gecontroleerd',
+'logentry-newusers-newusers' => 'Gebruiker $1 {{GENDER:$2|is}} aangemaakt',
+'logentry-newusers-create' => 'Gebruiker $1 {{GENDER:$2|is}} aangemaakt',
+'logentry-newusers-create2' => 'Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1',
+'logentry-newusers-byemail' => 'Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1 en het wachtwoord is per e-mail verzonden',
+'logentry-newusers-autocreate' => 'De gebruiker $1 {{GENDER:$2|is}} automatisch aangemaakt',
+'logentry-rights-rights' => '$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5',
 'rightsnone' => '(geen)',
 
 # Feedback
@@ -4239,4 +4236,7 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
+# Image rotation
+'rotate-comment' => 'Afbeelding gedraaid, $1 {{PLURAL:$1|graad|graden}} met de klok mee',
+
 );
index 9c73019..eed1ac1 100644 (file)
@@ -869,7 +869,7 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo]
 # Special:ListGroupRights
 'listgrouprights-members' => '(Lenano la ditho)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Romela mošomiši yo molaetša',
 'emailpage' => 'Romela email go mošomiši',
 'noemailtitle' => 'Gago email atrese',
index 13e0a46..9c35059 100644 (file)
@@ -531,7 +531,7 @@ $1',
 'editlink' => 'ସମ୍ପାଦନା',
 'viewsourcelink' => 'ମୂଳାଧାର ଦେଖିବେ',
 'editsectionhint' => '$1 ଭାଗଟିକୁ ବଦଳାଇବେ',
-'toc' => 'ଭିତର à¬\9aିà¬\9c',
+'toc' => 'ବିଷà­\9fସà­\82à¬\9aà­\80',
 'showtoc' => 'ଦେଖାଇବେ',
 'hidetoc' => 'ଲୁଚାନ୍ତୁ',
 'collapsible-collapse' => 'ଚାପିଦେବେ',
index 984a3d7..3a6e545 100644 (file)
@@ -699,7 +699,7 @@ $2',
 'loginlanguagelabel' => 'Æвзаг: $1',
 'suspicious-userlogout' => 'Дæ рахизыны домæн нæ сæххæст ис, уымæн æмæ хæлд браузерæй кæнæ кешгæнæг проксийæ æрвысты хуызæн у.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Нæбæрæг рæдыд PHP-йы mail() функцийы.',
 'user-mail-no-addy' => 'Е-mail æрвыста æнæ e-mail адрисæй.',
 
@@ -1090,7 +1090,7 @@ $2
 'prefs-displaywatchlist' => 'Æвдисыны фадæттæ',
 'prefs-diffs' => 'Иртасæнтæ',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail раст зыны',
 'email-address-validity-invalid' => 'Раст e-mail бацамон',
 
@@ -1366,7 +1366,7 @@ $3',
 'listgrouprights-rights' => 'Бартæ',
 'listgrouprights-members' => '(уæнгты номхыгъд)',
 
-# E-mail user
+# Email user
 'mailnologintext' => 'Фыстæгтæ æрвитынмæ хъуамæ [[Special:UserLogin|системæйæн дæхи бавдисай]] æмæ дæ бæлвырд электронон посты адрис [[Special:Preferences|ныффыссай]].',
 'emailuser' => 'Ацы архайæгæн электронон фыстæг рарвитт',
 'emailpage' => 'Электронон фыстæг йæм барвит',
index b644558..5c5ba09 100644 (file)
@@ -1331,7 +1331,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-helppage' => 'Help:Katulirang pang-grupu',
 'listgrouprights-members' => '(tala da reng kayanib)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Alang piparalan (no send address)',
 'mailnologintext' => 'Kailangan [[Special:UserLogin|maka-login]] ka at maki gaganang e-mail address kareng kekang  [[Special:Preferences|pinili]] ba kang makaparalang e-mail kareng aliwang talagamit.',
 'emailuser' => 'E-mail me ing talagamit a ini',
@@ -2217,7 +2217,7 @@ Detang aliwa tambing (by default) lang makasalikut.
 'namespacesall' => 'ila ngan',
 'monthsall' => 'eganagana',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Patutwan mung keka ya itang e-mail address',
 'confirmemail_noemail' => 'Ala kang ustung e-mail address a makabili ketang kekang [[Special:Preferences|pinili ning talagamit (user preferences)]].',
 'confirmemail_text' => 'Kaylangan king wiking iti ing patutwan me pamu ing kekang e-mail address bayu
index fad29ed..e5e57aa 100644 (file)
@@ -432,6 +432,7 @@ $messages = array(
 'newwindow' => '(otwiera się w nowym oknie)',
 'cancel' => 'Anuluj',
 'moredotdotdot' => 'Więcej...',
+'morenotlisted' => 'I inne...',
 'mypage' => 'Strona',
 'mytalk' => 'Dyskusja',
 'anontalk' => 'Dyskusja tego IP',
@@ -834,7 +835,7 @@ Być może właśnie zmienił{{GENDER:|eś|aś|eś(‐aś)}} swoje hasło lub po
 
 # Special:PasswordReset
 'passwordreset' => 'Wyczyść hasło',
-'passwordreset-text' => 'Wypełnij formularz, aby otrzymać e‐mail z przypomnieniem danych Twojego konta.',
+'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-pretext' => '{{PLURAL:$1||Wprowadź jedną z danych poniżej}}',
@@ -844,13 +845,13 @@ Być może właśnie zmienił{{GENDER:|eś|aś|eś(‐aś)}} swoje hasło lub po
 'passwordreset-capture-help' => 'Jeśli zaznaczysz to pole, zobaczysz treść wiadomości e‐mail z tymczasowym hasłem, w tej samej formie w jakiej jest wysyłana do użytkownika.',
 'passwordreset-email' => 'Adres e‐mail',
 'passwordreset-emailtitle' => 'Dane konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o przypomnienie szczegółów dotyczących Twojego konta w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}
+'passwordreset-emailtext-ip' => 'Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}
 
 $2
 
 {{PLURAL:$3|Tymczasowego hasła|Tymczasowych haseł}} można użyć w ciągu {{PLURAL:$5|jednego dnia|$5 dni}}.
 Powinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inni poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chce go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystał ze swojego starego hasła.',
-'passwordreset-emailtext-user' => 'Użytkownik $1 poprosił o przypomnienie szczegółów dotyczących Twojego konta w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}
+'passwordreset-emailtext-user' => 'Użytkownik $1 poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}
 
 $2
 
@@ -858,9 +859,9 @@ $2
 Powinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inni poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chce go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystał ze swojego starego hasła.',
 'passwordreset-emailelement' => 'Nazwa użytkownika – $1
 Tymczasowe hasło – $2',
-'passwordreset-emailsent' => 'Przypominający e‐mail został wysłany.',
-'passwordreset-emailsent-capture' => 'Poniżej znajdujący się e‐mail z przypomnieniem został wysłany',
-'passwordreset-emailerror-capture' => 'Poniżej wyświetlony e‐mail z przypomnieniem został wygenerowany, ale nie udało się wysłać go do użytkownika: $1',
+'passwordreset-emailsent' => 'E‐mail pozwalający na zresetowanie hasła został wysłany.',
+'passwordreset-emailsent-capture' => 'Wyświetlony poniżej e‐mail pozwalający na zresetowanie hasła został wysłany.',
+'passwordreset-emailerror-capture' => 'Poniżej wyświetlony e‐mail pozwalający na zresetowanie hasła został wygenerowany, ale nie udało się wysłać go do użytkownika: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Zmiana adresu e‐mail',
@@ -1343,7 +1344,7 @@ Zazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powó
 'search-interwiki-default' => 'Wyniki dla $1:',
 'search-interwiki-more' => '(więcej)',
 'search-relatedarticle' => 'Pokrewne',
-'mwsuggest-disable' => 'Wyłącz dynamiczne podpowiedzi',
+'mwsuggest-disable' => 'Wyłącz podpowiedzi wyszukiwania',
 'searcheverything-enable' => 'Szukaj we wszystkich przestrzeniach nazw',
 'searchrelated' => 'pokrewne',
 'searchall' => 'wszystkie',
@@ -2092,6 +2093,10 @@ Sprawdź inne linki do szablonów, zanim usuniesz tę stronę.',
 a powinny odwoływać się bezpośrednio do stron treści.<br />
 Strona uznawana jest za ujednoznaczniającą, jeśli zawiera szablon linkowany przez stronę [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop' => 'Strony z właściwościami',
+'pageswithprop-legend' => 'Strony z właściwościami',
+'pageswithprop-text' => 'Ta strona zawiera listę stron korzystających z właściwości.',
+
 'doubleredirects' => 'Podwójne przekierowania',
 'doubleredirectstext' => 'Lista zawiera strony z przekierowaniami do stron, które przekierowują do innej strony.
 Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, do którego prowadzi drugie przekierowanie. Ostatni link prowadzi zazwyczaj do strony, do której powinna w rzeczywistości przekierowywać pierwsza strona.
index b99fecd..b343e58 100644 (file)
@@ -545,7 +545,7 @@ Për piasì speta prima ëd prové torna.",
 'loginlanguagelabel' => 'Lenga: $1',
 'suspicious-userlogout' => "Soa arcesta ëd seurte dal sistema a l'é stàita arfudà përchè a smija com s'a fussa stàita mandà da 'n navigador scolegà o da l'archiviassion an local d'un proxy.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Eror pa conossù ant la funsion PHP mail()',
 'user-mail-no-addy' => 'Provà a spedì un mëssagi sensa adrëssa ëd pòsta eletrònica.',
 'user-mail-no-body' => 'Preuva a mandé un corel con un còrp veuid o motobin curt.',
@@ -1222,7 +1222,7 @@ Costa anformassion a sarà pùblica.",
 'prefs-displaywatchlist' => 'Opsion ëd visualisassion',
 'prefs-diffs' => 'Diferense',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'A smija bon',
 'email-address-validity-invalid' => "A-i é da manca ëd n'adrëssa bon-a!",
 
@@ -2011,7 +2011,7 @@ A peulo ess-ie d'[[{{MediaWiki:Listgrouprights-helppage}}|anformassion adissiona
 'listgrouprights-addgroup-self-all' => 'Gionté tute le partìe a sò cont',
 'listgrouprights-removegroup-self-all' => 'Gavé tute le partìe da sò cont',
 
-# E-mail user
+# Email user
 'mailnologin' => "A-i é pa l'adrëssa për mandé ël mëssagi",
 'mailnologintext' => "A dev [[Special:UserLogin|rintré ant ël sistema]]
 e avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podèj mandé dij mëssagi ëd pòsta eletrònica a j'àutri Utent.",
@@ -3390,7 +3390,7 @@ J'àutri a saran stërmà coma stàndard.
 'monthsall' => 'tuti',
 'limitall' => 'tùit',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Confermé l'adrëssa postal",
 'confirmemail_noemail' => "A l'ha pa butà gnun-a adrëssa vàlida ëd pòsta eletrònica ant ij [[Special:Preferences|sò gust]].",
 'confirmemail_text' => "Costa wiki a ciama che chiel a convàlida n'adrëssa ëd pòsta eletrònica anans che
index 8e0e7c1..28ae908 100644 (file)
@@ -503,7 +503,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'loginlanguagelabel' => 'بولی: $1',
 'suspicious-userlogout' => 'تھواڈی لاگ آؤٹ ہوں دی کوشش رک گئی اینج لگدا اے  جیویں اے ٹٹے براؤزر یا کیشنگ پراکسی توں پیجیا گیا سی۔',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP میل دے کم چ کوئی انجانی غلطی۔',
 'user-mail-no-addy' => 'ای-میل پتے بنا ای-میل کلن دی کوشش۔',
 
@@ -1150,7 +1150,7 @@ $1",
 'prefs-displaywatchlist' => 'چنوتیاں دسو',
 'prefs-diffs' => 'ڈفز',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ای_میل پتہ ٹھیک لگدا اے۔',
 'email-address-validity-invalid' => 'چلن والا ای-میل پتہ دسو',
 
@@ -1910,7 +1910,7 @@ $1",
 'listgrouprights-addgroup-self-all' => 'ساریاں ٹولیاں کٹھیاں کرو کھاتہ لئی',
 'listgrouprights-removegroup-self-all' => 'ایس کھاتے توں ساریاں ٹولیاں ہٹاؤ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ناں پیح پتہ',
 'mailnologintext' => 'تسیں لازمی [[Special:UserLogin|لاگان]] ہوو تے اک پکا ای-میل پتہ تواڈی [[Special:Preferences|تانگ]] چ ہووے تاں جے دوجے ورتن والے توانوں ای-میل کرسکن۔',
 'emailuser' => 'اس ورتن والے نو ای میل کرو',
@@ -3211,7 +3211,7 @@ $1',
 'monthsall' => 'سارے',
 'limitall' => 'سارے',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ای میل پتہ پکا کرو',
 'confirmemail_noemail' => 'تواڈے کول اک پکا ای-میل پتہ نئیں اے جیہڑا [[Special:Preferences|ورتن تانگاں]]',
 'confirmemail_text' => '{{سائیٹناں}}  دی ایہ لوڑ اے جے تسیں اپنا ای-میل پتہ پکا کرواؤ ای-میل فیچر ورتن توں پہلے۔ تھلے دتے گۓ بٹن تے پکی کرن چٹھی پیجو اپنے پتے تے منگوان لئی کلک کرو۔
index 3819ced..20ec925 100644 (file)
@@ -1544,7 +1544,7 @@ Izbandais pāausan sen [[{{MediaWiki:Listgrouprights-helppage}}|papilniminans in
 'listgrouprights-addgroup-self-all' => 'Preidāis wissans gruppins prei swajjan rekkenan',
 'listgrouprights-removegroup-self-all' => 'Āupausinais wissans gruppins iz swajjan rekkenan',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ni ast adressi',
 'mailnologintext' => 'Tu turri [[Special:UserLogin|enēitwei]] be turītun aktuālin e-mail adressin en twajamans [[Special:Preferences|pirminiskwans]] kāi tengīnlai e-mailins kitēimans tērpautajans.',
 'emailuser' => 'Tenginnais e-mailin šismu tērpautajan',
@@ -2498,7 +2498,7 @@ Kitāi wīrst būwusis kliptan auprestaminai.
 'monthsall' => 'wisāi',
 'limitall' => 'wisāi',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Padrūktinais e-mail adressin',
 'confirmemail_noemail' => 'Tū ni turri tukrōmiskan e-mail adressin ensadīntan en [[Special:Preferences|pirminiskwamans]].',
 'confirmemail_text' => '{{SITENAME}} izkīnina e-mailas adressis izbandāsnan pirzdau e-mailas funkciōnis tērpausnan.
index ce32151..490e4ce 100644 (file)
@@ -491,11 +491,11 @@ $1',
 'filerenameerror' => 'د "$1" په نامه د دوتنې نوم "$2" ته بدل نه شو.',
 'filedeleteerror' => 'د "$1" دوتنه ړنګه نه شوه.',
 'directorycreateerror' => 'د "$1" په نامه ليکلړ جوړ نه شو.',
-'filenotfound' => '"$1" په نوم دوتنه مو و نه شوه موندلای.',
+'filenotfound' => 'د "$1" دوتنه مو و نه موندله.',
 'fileexistserror' => 'د "$1" په نامه دوتنه نه ليکل کېږي: دوتنه د پخوا نه دلته شته',
 'unexpected' => 'نا اټکله شمېره: "$1"="$2".',
 'formerror' => 'ستونزه: فورمه مو و نه سپارل شوه',
-'badarticleerror' => 'دا کړنه پدې مخ نه شي ترسره کېدلای.',
+'badarticleerror' => 'په دې مخ دا کړنه نه شي ترسره کېدلای.',
 'cannotdelete' => 'د "$1" مخ يا دوتنې ړنګېدنه ترسره نه شوه.
 کېدای شي چې وار دمخې دا کوم بل چا ړنګه کړې وي.',
 'cannotdelete-title' => 'د "$1" مخ نشي ړنګېدای',
@@ -733,7 +733,7 @@ $1',
 'nosuchsectiontitle' => 'برخه و نه موندل شوه',
 'nosuchsectiontext' => 'تاسې د يوې داسې برخې د سمون هڅه کړې چې تر اوسه پورې نشته.
 کېدای هغه مهال چې تاسې د دې مخ نه کتنه کوله، همدا برخه کوم بل ځای ته لېږدل شوې او يا هم ړنګه شوې وي.',
-'loginreqtitle' => 'غونډال کې ننوتنه پکار ده',
+'loginreqtitle' => 'لومړی غونډال ته ورننوځۍ',
 'loginreqlink' => 'ننوتل',
 'loginreqpagetext' => 'د نورو مخونو د کتلو لپاره تاسو بايد $1 وکړۍ.',
 'accmailtitle' => 'پټنوم ولېږل شو.',
@@ -967,7 +967,7 @@ $1',
 'search-interwiki-default' => '$1 پايلې:',
 'search-interwiki-more' => '(نور)',
 'search-relatedarticle' => 'اړونده',
-'mwsuggest-disable' => 'د AJAX وړانديزونه ناچارن کول',
+'mwsuggest-disable' => 'د پلټنې وړانديزونه ناچارنول',
 'searcheverything-enable' => 'په ټولو نوم-تشيالونو کې پلټل',
 'searchrelated' => 'اړونده',
 'searchall' => 'ټول',
@@ -1581,7 +1581,7 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'د فعالو کارنانو لړليک',
 'activeusers-intro' => 'دا د هغو کارنانو لړليک دی چې په {{PLURAL:$1|تېرې|تېرو}} $1 {{PLURAL:$1|ورځ|ورځو}} کې يې ونډې ترسره کړي.',
-'activeusers-count' => 'په {{PLURAL:$2|تېرې|تېرو}} {{PLURAL:$3|ورځ|$3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
+'activeusers-count' => 'په {{PLURAL:$3|تېرې ورځ|تېرو $3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
 'activeusers-from' => 'هغه کارنان کتل چې نومونه يې پېلېږي په:',
 'activeusers-hidebots' => 'روباټونه پټول',
 'activeusers-hidesysops' => 'پازوالان پټول',
@@ -1634,7 +1634,7 @@ $1',
 'usermessage-editor' => 'د غونډال پيغام رسونکی',
 
 # Watchlist
-'watchlist' => 'زما کتنلړ',
+'watchlist' => 'کتنلړ',
 'mywatchlist' => 'کتنلړ',
 'watchlistfor2' => 'د $1 لپاره $2',
 'nowatchlist' => 'ستاسې کتنلړ کې څه نه شته.',
@@ -1760,7 +1760,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protect-cascadeon' => 'د اوسمهال لپاره همدا مخ ژغورل شوی دا ځکه چې همدا مخ په {{PLURAL:$1|لانديني مخ|لانديني مخونو}} کې ورګډ دی چې {{PLURAL:$1|ځوړاوبيزه ژغورنه يې چارنه ده|ځوړاوبيزې ژغورنې يې چارنې دي}}.
 تاسې د همدې مخ د ژغورنې په کچه کې بدلون راوستلای شی، خو دا به په ځوړاوبيزه ژغورنه اغېزمنه نه کړي.',
 'protect-default' => 'ټول کارنان پرېښودل',
-'protect-fallback' => 'د "$1" اجازه پکار ده',
+'protect-fallback' => 'يوازې د "$1" اجازې لرونکي کارنان پرېښودل',
 'protect-level-autoconfirmed' => 'پر نوؤ او ناثبته کارنانو بنديز لګول',
 'protect-level-sysop' => 'يواځې پازوالان',
 'protect-summary-cascade' => 'ځوړاوبيز',
index 73b7c2f..21aa249 100644 (file)
@@ -44,6 +44,7 @@
  * @author RmSilva
  * @author Rodrigo Calanca Nishino
  * @author SandroHc
+ * @author Sarilho1
  * @author Sir Lestaty de Lioncourt
  * @author Sérgio Ribeiro
  * @author Teles
@@ -445,6 +446,7 @@ $messages = array(
 'newwindow' => '(abre numa janela nova)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Mais...',
+'morenotlisted' => 'Mais não listadas...',
 'mypage' => 'Página',
 'mytalk' => 'Discussão',
 'anontalk' => 'Discussão para este IP',
@@ -791,8 +793,8 @@ Volte a autenticar-se após recebê-la, por favor.',
 'blocked-mailpassword' => 'O seu endereço IP foi bloqueado e, portanto, não será possível utilizar a função de recuperação da palavra-chave, para prevenir o uso abusivo.',
 'eauthentsent' => 'Foi enviada uma mensagem de confirmação para o endereço de correio electrónico que elegeu.
 Antes que seja enviada qualquer outra mensagem para a conta, terá de seguir as instruções na mensagem enviada, de modo a confirmar que a conta lhe pertence.',
-'throttled-mailpassword' => 'Já foi enviada uma recuperação de palavra-chave {{PLURAL:$1|na última hora|nas últimas $1 horas}}.
-Para prevenir abusos, só uma recuperação pode ser enviada a cada {{PLURAL:$1|hora|$1 horas}}.',
+'throttled-mailpassword' => 'Já foi enviada um email de recuperação de palavra-chave {{PLURAL:$1|na última hora|nas últimas $1 horas}}.
+Para prevenir abusos, só um email de recuperação de palavra-chave pode ser enviado a cada {{PLURAL:$1|hora|$1 horas}}.',
 'mailerror' => 'Erro ao enviar correio: $1',
 'acct_creation_throttle_hit' => 'Visitantes desta wiki com o seu endereço IP criaram $1 {{PLURAL:$1|conta|contas}} no último dia, o que é o máximo permitido neste período de tempo.
 Em resultado, visitantes com este endereço IP não podem criar mais nenhuma conta neste momento.',
@@ -844,7 +846,7 @@ Pode ter já alterado com sucesso a sua palavra-chave ou solicitado uma nova pal
 
 # Special:PasswordReset
 'passwordreset' => 'Repor palavra-chave',
-'passwordreset-text' => 'Preencha este formulário para recuperar os dados da sua conta por correio electrónico.',
+'passwordreset-text' => 'Preencha este formulário para repor a sua palavra-passe.',
 'passwordreset-legend' => 'Reiniciar a palavra-chave',
 'passwordreset-disabled' => 'O reinício da palavra-chave foi impossibilitado nesta wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Introduza um dos dados abaixo}}',
index 802f02b..51107c8 100644 (file)
@@ -1007,7 +1007,7 @@ O registro de bloqueio mais recente é fornecido abaixo, para referência:',
 'userjspreview' => "'''Lembre-se que está apenas testando/prevendo o seu JavaScript particular e que ele ainda não foi salvo!'''",
 'sitecsspreview' => "'''Lembre-se de que você está apenas previsualizando este CSS.'''
 '''Ele ainda não foi salvo!'''",
-'sitejspreview' => "''Lembre-se de que você está apenas previsualizando este código JavaScript.'''
+'sitejspreview' => "'''Lembre-se de que você está apenas previsualizando este código JavaScript.'''
 '''Ele ainda não foi salvo!'''",
 'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"\$1\". Lembre-se que as páginas .css e  .js utilizam um título em minúsculas, exemplo: {{ns:user}}:Alguém/vector.css aposto a {{ns:user}}:Alguém/Vector.css.",
 'updated' => '(Atualizado)',
index b29addc..14f8b25 100644 (file)
@@ -1093,7 +1093,8 @@ It is also used on the top of the page for logged out users, where it appears ne
 'createaccountreason' => '{{Identical|Reason}}',
 'badretype' => 'Used as error message when the new password and its retype do not match.',
 'userexists' => 'Used as error message in creating a user account.',
-'loginerror' => 'Used as title of error message.',
+'loginerror' => 'Used as title of error message.
+{{Identical|Login error}}',
 'createaccounterror' => 'Parameters:
 * $1 is an error message',
 'nocookiesnew' => "This message is displayed when a new account was successfully created, but the browser doesn't accept cookies.",
@@ -1142,7 +1143,7 @@ Parameters:
 'blocked-mailpassword' => 'Used as error message in password recovery.',
 'eauthentsent' => "This message appears after entering an e-mail address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on '{{int:saveprefs}}'.",
 'throttled-mailpassword' => 'Used in [[Special:PasswordReset]].
-* $1 - password reminder resend time (in hours)',
+* $1 - password reset email resend time (in hours)',
 'mailerror' => 'Used as error message in sending confirmation mail to user. Parameters:
 * $1 - new mail address',
 'acct_creation_throttle_hit' => 'Error message at [[Special:CreateAccount]].
@@ -1240,7 +1241,7 @@ Parameters:
 * $2 - message {{msg-mw|passwordreset-emailelement|notext=1}} repeated $3 times
 * $3 - the number of repetitions in $2
 * $4 - base URL of the wiki',
-'passwordreset-emailelement' => "This is a body of a reminder email to allow them into the system with a new password. Parameters:
+'passwordreset-emailelement' => "This is a body of a password reset email to allow them into the system with a new password. Parameters:
 * $1 - the user's login name. This parameter can be used for GENDER.
 * $2 - the temporary password given by the system",
 'passwordreset-emailsent' => 'Used in [[Special:PasswordReset]].
@@ -1254,7 +1255,7 @@ 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:
-* $1 - the name of a user who was supposed to get the e-mail
+* $1 - error message
 See also:
 * {{msg-mw|Passwordreset-emailsent}}
 * {{msg-mw|Passwordreset-emailsent-capture}}',
@@ -4522,7 +4523,7 @@ This message has a tooltip {{msg-mw|tooltip-rollback}}
 Text of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.
 
 Parameters:
-* $1 - the number of edits that will be rollbacked. If $1 is over the value of <code>$wgShowRollbackEditCount</code> (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
+* $1 - the number of edits that will be rolled back. If $1 is over the value of <code>$wgShowRollbackEditCount</code> (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
 
 The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}',
 'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
@@ -4538,8 +4539,8 @@ See also:
 {{Identical|Revert}}
 {{Identical|Rollback}}',
 'alreadyrolled' => "Appear when there's rollback and/or edit collision. Parameters:
-* $1 - the page to be rollbacked
-* $2 - the editor to be rollbacked of that page
+* $1 - the page to be rolled back
+* $2 - the editor to be rolled-back of that page
 * $3 - the editor that cause collision
 {{Identical|Rollback}}",
 'editcomment' => "Only shown if there is an edit ''{{msg-mw|summary}}''",
@@ -6827,12 +6828,11 @@ Parameters:
 'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].
 
 Start with a lowercase letter, unless the first word is "SVG".',
-'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
+'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated.
 * $1 - the width in pixels
 * $2 - the height in pixels
 * $3 - the file size including a unit (for example "10 KB")
-
-Start with a lowercase letter, unless the first word is "SVG".',
+Non-animated images use {{msg-mw|svg-long-desc}}.',
 'svg-long-error' => 'Displayed for invalid SVG file metadata. Parameters:
 * $1 - the error message
 See also:
index ac35dad..17fcdef 100644 (file)
@@ -399,6 +399,7 @@ $messages = array(
 'newwindow' => '(Musuq wintanam kichakun)',
 'cancel' => 'Ama niy',
 'moredotdotdot' => 'Aswan...',
+'morenotlisted' => 'Aswanqa sutisuyupi manam kanchu...',
 'mypage' => "P'anqay",
 'mytalk' => 'Rimachinay',
 'anontalk' => 'Kay IP huchhapaq rimanakuy',
@@ -432,6 +433,7 @@ $messages = array(
 'namespaces' => "Suti k'itikuna",
 'variants' => "Ñawra rikch'akuykuna",
 
+'navigation-heading' => "Wamp'una last'a",
 'errorpagetitle' => 'Pantasqa',
 'returnto' => '$1-man kutimuy.',
 'tagline' => '{{SITENAME}}manta',
@@ -625,6 +627,8 @@ Ama hina kaspa, huk [[Special:ListUsers/sysop|kamachiqman]] willariy, URL nisqa
 'cannotdelete' => 'Manam atinichu "$1" sutiyuq p\'anqata icha willañiqita qulluyta.
 P\'anqaqa pipapas qullusqanñachá.',
 'cannotdelete-title' => 'Manam atinichu "$1" sutiyuq p\'anqata qulluyta',
+'delete-hook-aborted' => "Ch'iwinam qulluyta t'ipirqan.
+Manam nirqanchu imarayku.",
 'badtitle' => "P'anqap sutinqa manam allinchu",
 'badtitletext' => "Kay p'anqap sutinqa manam allinchu, mana allin interwiki t'inkichá icha ch'usaqchá, p'anqa sutipaq mana saqillasqa sananchayuqchá.",
 'perfcached' => "Kay qatiq willakunaqa ''cache'' nisqa pakasqa hallch'apim kachkan, chayrayku manañachá musuqchasqachu. {{PLURAL:$1|Huklla|$1-lla}} taripasqam pakasqa hallch'api aypalla kachkan, manam aswanchu.",
@@ -642,7 +646,7 @@ Tapuna: $2',
 'viewyourtext' => "'''Qampa llamk'apusqayki'''p pukyu qillqantam qhawayta iskaychaytapas atinki:",
 'protectedinterface' => "Kay p'anqapiqa wakichintinpa uyapuranpaq qillqam. Wandalismu nisqamanta amachasqam kachkan.
 Tukuy wikikunapi uyapuraman t'ikrasqakunata yapayta icha hukchayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruray.",
-'editinginterface' => "'''Paqtataq:''' Llamp'u kaqpaq uyapura qillqakuna runanapaq p'anqatam llamk'apuchkanki.
+'editinginterface' => "'''Paqtataq:''' Llamp'u kaqpaq uyapura qillqakuna ruranapaq p'anqatam llamk'apuchkanki.
 Hukchaptiykiqa, chay uyapurap rikch'ayninqa hukyanqa kay wikipi huk ruraqkunapaqpas.
 Uyapuraman t'ikrasqakunata yapayta icha hukchayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruranaykimanta hamut'ariy.",
 'sqlhidden' => '(SQL tapunaqa pakasqam)',
@@ -659,6 +663,7 @@ Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
 'invalidtitle-knownnamespace' => '"$2" sutisuyu, "$3" qillqasqayuq mana allin kaq qillqa suti',
 'invalidtitle-unknownnamespace' => 'Mana riqsisqa $1 kaq sutisuyu yupay, "$2" qillqasqayuq mana allin kaq qillqa suti',
 'exception-nologin' => 'Manam yaykurqankichu',
+'exception-nologin-text' => 'Kay wikipiqa icha kay ruranataqa rakiqunaykiwan yaykuspalla ruraytam atinki.',
 
 # Virus scanner
 'virus-badscanner' => "Manam allintachu churapusqa: mana riqsisqa añaw maskaq: ''$1''",
@@ -670,12 +675,15 @@ Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
 
 Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa, <span class='plainlinks'>[$1 musuqmanta yaykuy]</span> ñawpaq icha huk sutiwan. Huk p'anqakunaqa kaqllam rikch'akunqa, ''cache'' nisqa pakasqa hallch'ata mana ch'usaqchaptiykiqa.",
 'welcomeuser' => 'Allinmi hamusqayki, $1!',
+'welcomecreation-msg' => 'Rakiqunaykiqa kamarisqañam.
+Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] hukchayta.',
 'yourname' => 'Ruraq sutiyki:',
 'yourpassword' => 'Yaykuna rimayki',
 'yourpasswordagain' => 'Yaykuna rimaykita kutipayay',
 'remembermypassword' => "Ruraqpa sutiyta yaykuna rimaytapas yuyaykuy llamk'ay tiyayniypura ({{PLURAL:$1|huk p'unchawkama|$1 p'unchawkama}})",
 'securelogin-stick-https' => "Yaykurquspa HTTPS nisqawan t'inkisqa kakuy",
 'yourdomainname' => 'Duminyuykip sutin',
+'password-change-forbidden' => 'Kay wikipi yaykuna rimataqa manam hukchayta atinkichu.',
 'externaldberror' => 'Hawa yaykuna pantasqam karqan, ichataq manam saqillasunkichu hawa rakiqunaykita musuqchayta.',
 'login' => 'Yaykuy',
 'nav-login-createaccount' => 'Yaykuy',
@@ -691,7 +699,7 @@ Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa
 'gotaccount' => "Rakiqunaykiñachu kachkan? '''$1'''.",
 'gotaccountlink' => 'Rakiqunaykita willaway',
 'userlogin-resetlink' => 'Yaykuna willayniykikunatari qunqarqankichu?',
-'createaccountmail' => 'chaskipaq',
+'createaccountmail' => "Kikinmanta tukusqa mit'alla yaykuna rimata llamk'achispa kay qatiqpi kaq e-chaski imamaytaman kachay",
 'createaccountreason' => 'Kayrayku:',
 'badretype' => 'Qusqayki yaykuna rimakunaqa manam kaqllachu.',
 'userexists' => 'Munasqayki ruraqpa sutiykiqa kachkanñam.
@@ -752,9 +760,10 @@ Kay willay pantasqa kaptinqa, qhawarparillay.',
 'loginlanguagelabel' => 'Rimay: $1',
 'suspicious-userlogout' => "Lluqsiy mañakuyniykiqa mananchasqam karqan, waqllisqa wamp'unamanta icha pakaq proksimanta kachasqa kaspanchá.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Mana riqsisqa pantasqa PHP mail() rurananpi',
 'user-mail-no-addy' => 'Mana chaskiqniyuq e-chaskita kachayta munarqanki.',
+'user-mail-no-body' => 'Mana kurkuyuq icha ancha pisilla kurkuyuq e-chaskita kachayta munarqanki.',
 
 # Change password dialog
 'resetpass' => 'Ruraqpa yaykuna rimanta hukchay',
@@ -820,6 +829,7 @@ Mit'alla yaykuna rima: $2",
 'changeemail-oldemail' => 'Kunan kachkaq e-chaski imamayta:',
 'changeemail-newemail' => 'Musuq e-chaski imamayta:',
 'changeemail-none' => '(mana ima)',
+'changeemail-password' => '{{SITENAME}} yaykuna rimayki:',
 'changeemail-submit' => 'E-chaskita wakinchay',
 'changeemail-cancel' => 'Ama niy',
 
@@ -907,6 +917,10 @@ icha [{{fullurl:{{FULLPAGENAME}}|action=edit}} kay p'anqata llamk'apuy]</span>."
 Kaytam rurayta atinkiman: kay p'anqap sutinta [[Special:Search/{{PAGENAME}}|huk p'anqakunapi maskay]]
 icha payman kapuq <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hallch'akunapi maskay]</span>,
 ichataq kay p'anqata kamariyta manam saqillasunkichu.",
+'missing-revision' => "\"{{PAGENAME}}\" nisqa p'anqapaq #\$1 musuqchasqaqa manam kanchu.
+
+Kayqa tukurqanman qullusqa p'anchaman t'inkimuq mawk'ayasqa wiñay kawsay t'inkiraykuchá.
+Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy hallch'apim] tariykiman.",
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" sutiyuq ruraqpa rakiqunanqa manam kanchu. Ama hina kaspa, llanchikuy kay p\'anqata kamarinaykimanta.',
 'userpage-userdoesnotexist-view' => '"$1" sutiyuq rakiqunaqa manam hallch\'asqachu.',
 'blocked-notice-logextract' => "Kay ruraqqa hark'asqam kachkan.
@@ -962,8 +976,8 @@ Takyachichkankim: Kayqa ñuqap qillqasqaymi icha qispi pukyumanta iskaychamusqay
 Takyachichkankim: Kayqa ñuqap qillqasqaymi, ñuqamanmi kapuwan icha qispi pukyumanta iskaychamusqaymi, nispa ($1 p'anqata qhaway).
 <br />'''Mana saqillasqa kaspaykiqa, ama qillqarimuychu iskaychay hayñi ''(copyright)'' nisqayuq qillqakunata iskaychamuspa!'''",
 'longpageerror' => "'''Pantasqa: Kachasqayki qillqaqa {{PLURAL:$1|huk kB|$1 kB}} hatunmi, {{PLURAL:$2|huk kB|$2 kB}}-manta aswan hatunmi. Manam waqaychasqa kayta atinchu.'''",
-'readonlywarning' => "'''PAQTATAQ: Willañiqintinqa hark'asqam mit'awa kakuchinapaq. Chayrayku kunanqa manam atichkankichu llamk'apusqaykikunata waqaychayta.
-Qillqasqaykita iskaychaspa antañiqiqniykipi willañiqiman llut'amuspa chaypi waqaychariy. Kunanmanta huk pachallapi musuqmanta waqaychaykachay.'''
+'readonlywarning' => "'''Paqtataq: Willañiqintinqa hark'asqam mit'awa kakuchinapaq. Chayrayku kunanqa manam atichkankichu llamk'apusqaykikunata waqaychayta.'''
+Qillqasqaykita iskaychaspa antañiqiqniykipi willañiqiman llut'amuspa chaypi waqaychariykiman, kunanmanta huk pachallapi musuqmanta waqaychaykachaspa.
 
 Hark'aq kamachiqqa kaytam nirqan: $1, kayraykum nispa.",
 'protectedpagewarning' => "'''Paqtataq: Kay p'anqaqa llamk'apuymanta amachasqam kamachiqkunallap hukchananpaq.'''
@@ -1003,6 +1017,7 @@ Qullusqachá.",
 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',
 
 # Content models
 'content-model-wikitext' => 'wiki qillqa',
@@ -1030,6 +1045,7 @@ Chay niykunaqa manam chaninchasqachu.",
 'expansion-depth-exceeded-warning' => "P'anqaqa nisyu mast'ariy ukhu kaqniyuqmi",
 'parser-unstrip-loop-warning' => 'Muyupayaq siqum tarisqa',
 'parser-unstrip-recursion-limit' => 'Nisyu kuti muyupayay siqum ($1)',
+'converter-manual-rule-error' => "Maki rimay t'ikrana kamachinapiqa pantasqam tarisqa",
 
 # "Undo" feature
 'undo-success' => 'Rurasqata kutichiyta atinkim. Manaraq kutichispaykiqa, kay qatiq wakichayta qhawariy rikunaykipaq chiqapta munasqaykichu manallachu, chaymantataq waqaychay kutichinapaq.',
@@ -1215,6 +1231,10 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla.
 'editundo' => 'kutichiy',
 'diff-multi' => "({{PLURAL:$2|Huk ruraqpa|$2 ruraqpa}} {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})",
 'diff-multi-manyusers' => "({{PLURAL:$2|Hukmanta|$2-manta}} aswan ruraqkunap {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})",
+'difference-missing-revision' => "Kay wakin kaymanta ($1) {{PLURAL:$2|huk musuqchasqa|$2 musuqchasqakuna}} manam tarisqachu.
+
+Kayqa tukurqanman qullusqa p'anchaman t'inkimuq mawk'ayasqa wiñay kawsay t'inkiraykuchá.
+Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy hallch'apim] tariykiman.",
 
 # Search results
 'searchresults' => 'Maskaymanta tarisqakuna',
@@ -1258,7 +1278,7 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla.
 'search-interwiki-default' => '$1 taripasqakuna:',
 'search-interwiki-more' => '(aswan)',
 'search-relatedarticle' => 'Apanakuq',
-'mwsuggest-disable' => 'AJAX rimapuykunaman ama niy',
+'mwsuggest-disable' => 'Maskana rimapuykunaman ama niy',
 'searcheverything-enable' => "Tukuy suti k'itikunapi maskay",
 'searchrelated' => 'apanakuq',
 'searchall' => 'tukuy',
@@ -1369,7 +1389,7 @@ Chaytataq manam kutichiyta atinkichu.",
 'prefs-memberingroups' => 'Kay {{PLURAL:$1|huñuman|huñukunaman}} {{GENDER:$2|kapuq}}:',
 'prefs-registration' => "Hallch'ay pacha:",
 'yourrealname' => 'Chiqap sutiyki*',
-'yourlanguage' => 'Rimay',
+'yourlanguage' => 'Rimay:',
 'yourvariant' => "Samiq rimaypa rikch'aynin:",
 'prefs-help-variant' => "Qampa astawan munasqayki allin qillqay kay wikipi samiqniyuq p'anqakunata rikuchinapaq.",
 'yournick' => 'Chutu sutiyki (ruruchinapaq)',
@@ -1402,7 +1422,7 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'prefs-displaywatchlist' => 'Akllanakunata rikuchiy',
 'prefs-diffs' => 'Wakin kaykuna',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-chaski imamaytaqa allinchá',
 'email-address-validity-invalid' => 'Allin e-chaski imamaytata yaykuchiy',
 
@@ -1477,6 +1497,7 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'right-writeapi' => "Ima hina qillqana API-ta llamk'achiy",
 'right-delete' => "P'anqakunata qulluy",
 'right-bigdelete' => "Wiñay kawsaysapa p'anqakunatapas qulluy",
+'right-deletelogentry' => "Sapaq hallch'asqakunata qulluy icha qullusqamanta paqarichiy",
 'right-deleterevision' => "P'anqakunapaq sapaq musuqchasqankunata qulluy paqarichiy ima",
 'right-deletedhistory' => 'Wiñay kawsaymanta qullusqa musuqchasqakunapaq pisichaykunata qhaway, manataq kapuq qillqakunatachu',
 'right-deletedtext' => 'Qullusqa musuqchasqapura qullusqa qillqata hukchasqakunatapas qhaway',
@@ -1734,6 +1755,7 @@ $1',
 'backend-fail-notsame' => '$1 nisqapiqa mana kaqlla willañiqim kachkanña.',
 'backend-fail-invalidpath' => '$1 nisqaqa manam allin pirwa ñanchu.',
 'backend-fail-delete' => 'Manam atinichu $1 sutiyuq willañiqita qulluyta.',
+'backend-fail-describe' => '"$1" sutiyuq p\'anqapaq metadatata manam hukchayta atinichu.',
 'backend-fail-alreadyexists' => '$1 sutiyuq willañiqiqa kachkanñam.',
 'backend-fail-store' => 'Manam atinichu $1 sutiyuq willañiqita $2-pi pirwayta.',
 'backend-fail-copy' => 'Manam atinichu willañiqita $1-manta $2-man iskaychayta.',
@@ -1765,7 +1787,8 @@ $1',
 'lockmanager-fail-releaselock' => 'Manam atinichu "$1" nisqapaq hark\'anata paskayta.',
 'lockmanager-fail-db-bucket' => 'Manam atinichu "$1" sutiyuq p\'uruñapi aypalla hark\'ana willañiqintinkunawan t\'inkinakuyta.',
 'lockmanager-fail-db-release' => 'Manam atinichu "$1" sutiyuq willañiqintinpi hark\'anakunata paskayta.',
-'lockmanager-fail-svr-release' => 'Manam atinichu "$1" sutiyuq sirwiqpi hark\'anakunata paskayta.',
+'lockmanager-fail-svr-acquire' => 'Manam atinichu "$1" sutiyuq sirwiqpi hark\'anakunata chaskiyta.',
+'lockmanager-fail-svr-release' => 'Manam atinichu "$1" sutiyuq sirwiqpi hallch\'asqa hark\'anakunata paskayta.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Willañiqita ZIP-kama llanchispa pantasqatam tarini.',
@@ -1965,6 +1988,12 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun
 Chay rantiqa chiqap, hukchanasqa p'anqamanmi t'inkichun.<br />
 P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam kanqa.",
 
+'pageswithprop' => "Kaqninniyuq p'anqakuna",
+'pageswithprop-legend' => "Kaqninniyuq p'anqakuna",
+'pageswithprop-text' => "Kay p'anqapiqa sapaq kaqninniyuq p'anqakunatam sutisuyupi rikunki.",
+'pageswithprop-prop' => 'Kaqninpa sutin:',
+'pageswithprop-submit' => 'Riy',
+
 'doubleredirects' => 'Iskaylla pusapunakuna',
 'doubleredirectstext' => "Kay p'anqapiqa huk pusapuna p'anqaman pusapuq p'anqakunap sutinkunatam rikunki. Sapa sinrupiqa ñawpaq ñiqin, iskay ñiqinpas pusapunaman t'inkikunam, iskay ñiqin pusapunap taripananpa qallariyninpas, sapsilla \"chiqap\" allin taripana qillqam, maymanchus ñawpaq ñiqin pusapuna p'anqa pusachun.
 <del>Chakapusqa</del> taripasqakunaqa paskasqañam.",
@@ -2154,7 +2183,7 @@ Chay kikinkunap hayñinkunamanta astawan ñawirinaykipaqqa [[{{MediaWiki:Listgro
 'listgrouprights-addgroup-self-all' => 'Tukuy huñukunatam yapayta atin kikinpa raqiqunanman',
 'listgrouprights-removegroup-self-all' => 'Tukuy huñukunatam qichuyta atin kikinpa raqiqunanmanta',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Imamaytataqa ama kachaychu',
 'mailnologintext' => '[[Special:UserLogin|Yaykunaykim]], [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytappas kananmi tiyan huk ruraqkunaman e-chaskita kachanaykipaq.',
 'emailuser' => 'Kay ruraqman e-chaskita kachay',
@@ -2634,16 +2663,13 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will
 # Move page
 'move-page' => '$1-ta astay',
 'move-page-legend' => "P'anqata astay",
-'movepagetext' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas astasqa kanqa. Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. Mawk'a sutiman t'inkimuq p'anqakunaqa manam hukyanqachu. Paqtataq [[Special:DoubleRedirects|iskayllapas]] [[Special:BrokenRedirects|p'akisqapas]] pusapuna p'anqakunata allinchallay. Ama panta t'inkimuqkunata saqiychu.
-
+'movepagetext' => "Kay hunt'ana p'anqawanqa huk p'anqa tukuy wiñay kawsasqanpas astasqam kanqa. Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. Akllaptiykiqa, mawk'a sutiman t'inkimuq pusapuna p'anqakuna kikinmanta allinchasqam kanqa. Mana hinaptiykiqa, paqtataq [[Special:DoubleRedirects|iskayllapas]] [[Special:BrokenRedirects|p'akisqapas]] pusapuna p'anqakunata llanchispa allinchallay. Qammi paqtachiq, t'inkimuqkuna allinraq kana hawam kanki. Ama panta t'inkimuqkunata saqiychu.
 
-Nisqayki musuq sutiyuq wiñay kawsasqayuq p'anqaña kachkaptinqa, kay p'anqa '''manam''' astasqa kanqachu.
-
-Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataq huk mawk'a kachkaqña p'anqamanchu.
+Nisqayki musuq sutiyuq wiñay kawsasqayuq p'anqaña kachkaptinqa, kay p'anqa '''manam''' astasqa kanqachu. Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataqmi huk mawk'a kachkaqña p'anqamanchu.
 
 '''Paqtataq!'''
 Kay astayqa ancha riqsisqa p'anqata hatun mana suyapusqa hukchaymi kayta atinman;
-ama hina kaspa, yuyarillay imachus kay astanaykita saqispa tukunata atinman.",
+ama hina kaspa, yuyarillay imachus kay astanayki saqispa tukunata atinman.",
 'movepagetext-noredirectfixer' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas musuq sutiman astasqa kanqa.
 Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa.
 Paqtataq [[Special:DoubleRedirects|iskaylla]] icha [[Special:BrokenRedirects|p'akisqa]] pusapuna p'anqakunata allinchallay.
@@ -2958,6 +2984,7 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 
 # Info page
 'pageinfo-title' => '"$1" sutiyuq p\'anqamanta willay',
+'pageinfo-not-current' => "Achachaw, manam atinichu mawk'a llamk'apusqakunamanta kay willaykunata qusuyta.",
 'pageinfo-header-basic' => 'Tiksi willaykuna',
 'pageinfo-header-edits' => "Llamk'apusqakunap wiñay kawsaynin",
 'pageinfo-header-restrictions' => "P'anqap amachaynin",
@@ -2972,14 +2999,18 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'pageinfo-robot-noindex' => 'Mana maskana yuyarinapaq',
 'pageinfo-views' => "Hayk'a qhawaykuna",
 'pageinfo-watchers' => "P'anqata hayk'a watiqaqkuna",
+'pageinfo-few-watchers' => '$1-manta aswan pisi {{PLURAL:$1|qhawaq|qhawaqkuna}}',
 'pageinfo-redirects-name' => "Kay p'anqaman pusampuqkuna",
 'pageinfo-subpages-name' => "Kay p'anqap urin p'anqankuna",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|pusapuna|pusapunakuna}}; $3 {{PLURAL:$3|mana pusapuna|mana pusapunakuna}})',
 'pageinfo-firstuser' => "P'anqap kamariqnin",
 'pageinfo-firsttime' => "P'anqa kamariypa p'unchawnin",
 'pageinfo-lastuser' => "Ñaqha llamk'apuqnin",
 'pageinfo-lasttime' => "Ñaqha llamk'apuypa p'unchawnin",
 'pageinfo-edits' => "Tukuymanta hayk'a hukchasqakuna",
 'pageinfo-authors' => "Tukuymanta hayk'a sapaq kaq ruraqkuna",
+'pageinfo-recent-edits' => "Ñaqha llamk'apusqakuna yupay (ñaqha $1-pi)",
+'pageinfo-recent-authors' => "Ñaqha hayk'a sapaq kaq ruraqkuna",
 'pageinfo-magic-words' => 'Layqa {{PLURAL:$1|simi|simikuna}} ($1)',
 'pageinfo-hidden-categories' => 'Pakasqa {{PLURAL:$1|katiguriya|katiguriyakuna}} ($1)',
 'pageinfo-templates' => "Ch'aqtasqa {{PLURAL:$1|plantilla|plantillakuna}} ($1)",
@@ -2989,7 +3020,9 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'pageinfo-redirectsto-info' => 'willachikuy',
 'pageinfo-contentpage' => "Samiqniyuq p'anqa hinam chaninchasqa",
 'pageinfo-contentpage-yes' => 'Arí',
+'pageinfo-protect-cascading' => "Amachaykunaqa kaymanta ch'aqtakunmi",
 'pageinfo-protect-cascading-yes' => 'Arí',
+'pageinfo-protect-cascading-from' => "Amachaykunaqa kaymanta ch'aqtakunmi:",
 'pageinfo-category-info' => 'Katiguriyamanta willaykuna',
 'pageinfo-category-pages' => "Hayk'a p'anqakuna",
 'pageinfo-category-subcats' => "Hayk'a urin katiguriyakuna",
@@ -3050,12 +3083,14 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.",
 'file-info-png-looped' => 'muyupayachisqa',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|kuti|kuti}} pukllasqa',
 'file-info-png-frames' => '$1 {{PLURAL:$1|inchu|inchukuna}}',
+'file-no-thumb-animation' => "'''Paqtataq: Saywachasqa allwiyaraykuqa, kay willañiqimanta rikch'achakuna manam kuyuchisqa kanqachu.'''",
+'file-no-thumb-animation-gif' => "'''Paqtataq: Saywachasqa allwiyaraykuqa, kay rikch'a hina k'awchi huyakuyuq GIF rikch'akunamanta rikch'achakuna manam kuyuchisqa kanqachu.'''",
 
 # Special:NewFiles
 'newimages' => 'Musuq rikchakunap suyu-suyun',
 'imagelisttext' => "Kay qatiqpiqa '''$1''' {{PLURAL:$1|rikchatam|rikchakunatam}} rikunki, $2-kama ñiqichasqa.",
 'newimages-summary' => "Kay sapaq p'anqapiqa ñaqha churkusqa willañiqikunatam rikunki.",
-'newimages-legend' => 'Suysuna',
+'newimages-legend' => "Ch'illchina",
 'newimages-label' => 'Willañiqip sutin (icha sutinpa rakin):',
 'showhidebots' => '($1 rurana antacha)',
 'noimages' => 'Manam ima rikunallapas kanchu.',
@@ -3498,7 +3533,7 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi
 'monthsall' => '(tukuy)',
 'limitall' => 'tukuy',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-chaski imamaytaykita takyachiy',
 'confirmemail_noemail' => 'Manaraq [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytayki kachkanchu.',
 'confirmemail_text' => "{{SITENAME}}piqa e-chaski imamaytaykita takyachinaykim tiyan e-chaskita llamk'achinaykipaq. Urapi butunta ñit'ipay e-chaski imamaytaykiman takyachina chaskita kachamunaykupaq.
@@ -3557,6 +3592,7 @@ Kay takyachina tuyruqa $4 pachapim puchukanqa.',
 # Scary transclusion
 'scarytranscludedisabled' => "[Interwiki ch'aqtayman ama nisqa]",
 'scarytranscludefailed' => '[$1-paq plantillataqa manam chaskiyta atinchu]',
+'scarytranscludefailed-httpstatus' => '[$1-paq plantillataqa manam chaskiyta atinchu: HTTP $2]',
 'scarytranscludetoolong' => '[URL tiyayqa nisyu hatunmi]',
 
 # Delete conflict
@@ -3663,6 +3699,7 @@ Sapsilla ñawpaq qhawariyta tukuykachay.',
 'version-license' => 'Saqillay',
 'version-poweredby-credits' => "Kay wikitaqa '''[//www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'hukkuna',
+'version-credits-summary' => "Kay qatiqpi runakunatam [[Special:Version|MediaWiki]] nisqapaq llamk'apusqankunapaq riqsichiyta munayku.",
 'version-license-info' => "MediaWiki llamp'u kaqqa qispim; mast'ariytam icha wakinchaytam atinki GNU General Public License nisqa saqillaypa kamachisqankama, Free Software Foundation nisqap uyaychasqan; saqillaypa iskay ñiqin musuqchasqan, munaspaykiqa aswan musuq musuqchasqan.
 
 MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIYKUCHU; manapas ch'aqtasqa RURANALLA FIYAKUYTACHU manapas ima SAPAQ TUKUYNINPAQCHU. GNU General Public License nisqa saqillayta qhaway aswan yuyaykunapaq.
@@ -3707,7 +3744,7 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 'specialpages-group-highuse' => "Achka kuti llamk'achisqa p'anqakuna",
 'specialpages-group-pages' => "P'anqa sutisuyukuna",
 'specialpages-group-pagetools' => "P'anqa llamk'anakuna",
-'specialpages-group-wiki' => "Wiki willakuna llamk'anakunapas",
+'specialpages-group-wiki' => "Willakuna llamk'anakunapas",
 'specialpages-group-redirects' => "Pusapunapaq sapaq p'anqakuna",
 'specialpages-group-spam' => "Spam nisqa millay rurayta hark'anapaq llamk'anakuna",
 
@@ -3727,8 +3764,8 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 
 # Special:Tags
 'tags' => 'Waliq unancha hukchay',
-'tag-filter' => '[[Special:Tags|Unancha]] suysuna:',
-'tag-filter-submit' => 'Suysuna',
+'tag-filter' => "[[Special:Tags|Unancha]] ch'illchina:",
+'tag-filter-submit' => "Ch'illchina",
 'tags-title' => 'Unanchakuna',
 'tags-intro' => "Kay p'anqapiqa hukchaykunata llamp'u kaqpa sananchananpaq unanchakunatam rikunki, sut'inkunatapas.",
 'tags-tag' => 'Unanchachap sutin',
@@ -3804,6 +3841,7 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 'logentry-newusers-newusers' => '$1 sutiyuq rakiquna kamarisqañam',
 'logentry-newusers-create' => '$1 sutiyuq rakiquna kamarisqañam',
 'logentry-newusers-create2' => '$1 sutiyuq ruraqqa $3 sutiyuq rakiqunatam kamarirqanñam',
+'logentry-newusers-byemail' => '$3 sutiyuq rakiqunataqa $1 kamarirqañam, yaykuna rimataq kachasqañam.',
 'logentry-newusers-autocreate' => '$1 sutiyuq rakiqunaqa kikinmanta kamarisqam',
 'rightsnone' => '(-)',
 
@@ -3838,6 +3876,8 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'api-error-empty-file' => "Kachasqayki willañiqiqa ch'usaqmi.",
 'api-error-emptypage' => "Musuq ch'usaq p'anqakunata kamariyqa manam saqillasqachu.",
 'api-error-fetchfileerror' => 'Ukhupi pantasqa: Willañiqita chaskiykachachkaptiyki ima mana allin kaqpas tukurqan.',
+'api-error-fileexists-forbidden' => '"$1" sutiyuq willañiqiqa kachkañam, manam huknachayta atinkichu.',
+'api-error-fileexists-shared-forbidden' => '"$1" sutiyuq willañiqiqa rakinakusqa willañiqi churanapi kachkañam, manam huknachayta atinkichu.',
 'api-error-file-too-large' => 'Kachasqayki willañiqiqa nisyu hatunmi.',
 'api-error-filename-tooshort' => 'Kay willañiqi sutiqa nisyu pisillam.',
 'api-error-filetype-banned' => 'Kay willañiqi layaqa manam saqillasqachu.',
@@ -3857,6 +3897,7 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'api-error-ok-but-empty' => 'Ukhupi pantasqa: Sirwiqqa manam kutipanchu.',
 'api-error-overwrite' => 'Kachkaqña willañiqita huknachayqa manam saqillasqachu.',
 'api-error-stashfailed' => "Ukhupi pantasqa: Sirwiqqa mit'alla willañiqita manam hallch'ayta atinchu.",
+'api-error-publishfailed' => "Ukhupi pantasqa: Sirwiqqa mit'alla willañiqita manam uyanchayta atinchu.",
 'api-error-timeout' => "Suyakusqa mit'apiqa sirwiq manam kutiparqanchu.",
 'api-error-unclassified' => 'Mana riqsisqa pantasqam tukurqan.',
 'api-error-unknown-code' => 'Mana riqsisqa pantasqa: "$1".',
@@ -3877,4 +3918,7 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'duration-centuries' => '{{PLURAL:$1|pachakwata|pachakwatakuna}}',
 'duration-millennia' => '{{PLURAL:$1|waranqawata|waranqawatakuna}}',
 
+# Image rotation
+'rotate-comment' => "Rikch'aqa pacha rikuchiqwan $1 {{PLURAL:$1|k'atma}} muyusqam",
+
 );
index 1585ced..0544c24 100644 (file)
@@ -647,7 +647,7 @@ Shuk rurakkunaka kikinpa e-chaski ''dirección''ta mana yachankachu.",
 # Special:ListGroupRights
 'listgrouprights-members' => '(Kay tantanakuypa rurakkunapa shutikuna)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Kay rurakman e-chaskita kachana',
 
 # Watchlist
index efab7a9..8890581 100644 (file)
@@ -549,7 +549,7 @@ Spetga per plaschair avant ch'empruvar anc ina giada.",
 'loginlanguagelabel' => 'Lingua: $1',
 'suspicious-userlogout' => "Tia dumonda per partir è vegnida refusada perquai ch'i para ch'ella è vegnida tramessa d'in navigatur che funcziuna betg correctamain u d'in proxy da cache.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Errur nunenconuschenta en la funcziun mail() da PHP',
 'user-mail-no-addy' => 'Empruvà da trametter in e-mail senza ina adressa dad e-mail.',
 
@@ -1241,7 +1241,7 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'prefs-displaywatchlist' => 'Opziuns da visualisar',
 'prefs-diffs' => 'Cumparegliaziun da versiuns',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'adressa da e-mail para dad esser valida",
 'email-address-validity-invalid' => 'Endatescha ina adressa dad e-mail valida',
 
@@ -2023,7 +2023,7 @@ Infurmaziuns supplementaras davart ils singuls dretgs chattas [[{{MediaWiki:List
 'listgrouprights-addgroup-self-all' => "Agiuntar tut las gruppas a l'agen conto",
 'listgrouprights-removegroup-self-all' => "Allontanar tut las gruppas da l'agen conto",
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nagina adressa per trametter',
 'mailnologintext' => "Ti stos [[Special:UserLogin|t'annunziar]] ed avair ina adressa dad e-mail valida en tias [[Special:Preferences|preferenzas]] per trametter e-mails ad auters utilisaders.",
 'emailuser' => 'Trametter in e-mail a quest utilisader',
@@ -3397,7 +3397,7 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even
 'monthsall' => 'tuts',
 'limitall' => 'tuts',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Confermar l'adressa dad e-mail",
 'confirmemail_noemail' => "Ti n'has betg inditgà ina adressa dad e-mail valida en tias [[Special:Preferences|preferenzas]].",
 'confirmemail_text' => "{{SITENAME}} pretenda che ti confermas tia adressa dad e-mail avant che ti pos utilisar funcziuns dad e-mail. 
index 59c163e..5aacdd2 100644 (file)
@@ -779,7 +779,7 @@ să folosiți vechea parolă.',
 'passwordsent' => 'O nouă parolă a fost trimisă la adresa de e-mail a utilizatorului "$1". Te rugăm să te autentifici pe {{SITENAME}} după ce o primești.',
 'blocked-mailpassword' => 'Această adresă IP este blocată la editare, și deci nu este permisă utilizarea funcției de recuperare a parolei pentru a preveni abuzul.',
 'eauthentsent' => 'Un email de confirmare a fost trimis adresei nominalizate. Înainte de a fi trimis orice alt email acestui cont, trebuie să urmați intrucțiunile din email, pentru a confirma că acest cont este într-adevăr al dvs.',
-'throttled-mailpassword' => 'O parolă a fost deja trimisă în {{PLURAL:$1|ultima oră|ultimele $1 ore|ultimele $1 de ore}}. Pentru a preveni abuzul, se poate trimite doar o parolă la {{PLURAL:$1|o oră|$1 ore|$1 de ore}}.',
+'throttled-mailpassword' => 'Un e-mail pentru resetarea parolei a fost deja trimis în {{PLURAL:$1|ultima oră|ultimele $1 ore|ultimele $1 de ore}}. Pentru a preveni abuzul, se va trimite doar un e-mail de resetare a parolei la un interval de o {{PLURAL:$1|o oră|$1 ore|$1 de ore}}.',
 'mailerror' => 'Eroare la trimitere e-mail: $1',
 'acct_creation_throttle_hit' => 'De la această adresă IP, vizitatorii sitului au creat {{PLURAL:$1|1 cont|$1 conturi|$1 de conturi}} de utilizator în ultimele zile, acest număr de noi conturi fiind maximul admis în această perioadă de timp.
 Prin urmare, vizitatorii care folosesc același IP nu mai pot crea alte conturi pentru moment.',
@@ -829,7 +829,7 @@ Este posibil să fi reușit deja schimbarea parolei sau să fi cerut o parolă t
 
 # Special:PasswordReset
 'passwordreset' => 'Resetare parolă',
-'passwordreset-text' => 'Completați acest formular pentru a primi un e-mail cu datele contului dumneavoastră.',
+'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-pretext' => '{{PLURAL:$1| | Introduceți mai jos o parte din informații}}',
@@ -839,8 +839,8 @@ Este posibil să fi reușit deja schimbarea parolei sau să fi cerut o parolă t
 'passwordreset-capture-help' => 'Dacă bifați această căsuță, e-mailul (conținând parola temperară) vă va fi afișat, dar va fi trimis și utilizatorului.',
 'passwordreset-email' => 'Adresă de e-mail:',
 'passwordreset-emailtitle' => 'Detalii despre cont pe {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Cineva (probabil dumneavoastră, de la adresa IP $1) a cerut reamintirea detaliilor
-contului dumneavoastră pe {{SITENAME}} ($4). {{PLURAL:$3|Următorul cont este asociat|Următoarele conturi sunt asociate}}
+'passwordreset-emailtext-ip' => 'Cineva (probabil dumneavoastră, de la adresa IP $1) a solicitat resetarea parolei 
+pentru {{SITENAME}} ($4). {{PLURAL:$3|Următorul cont este asociat|Următoarele conturi sunt asociate}}
 cu această adresă de e-mail:
 
 $2
@@ -849,7 +849,7 @@ $2
 Ar trebui să vă autentificați și să schimbați parola acum. Dacă altcineva a făcut această cerere 
 sau dacă v-ați reamintit parola inițială și nu mai doriți să o schimbați,
 puteți ignora acest mesaj, continuând să utilizați vechea parolă.',
-'passwordreset-emailtext-user' => 'Utilizatorul $1 de pe {{SITENAME}} a solicitat o reamintire a detaliilor contului dumneavoastră pentru {{SITENAME}} ($4). Următorul utilizator are {{PLURAL:$3|contul asociat|conturile asociate}} cu această adresă de e-mail:
+'passwordreset-emailtext-user' => 'Utilizatorul $1 de pe {{SITENAME}} a solicitat o resetare a parolei dumneavoastră pentru {{SITENAME}} ($4). Următorul utilizator are {{PLURAL:$3|contul asociat|conturile asociate}} cu această adresă de e-mail:
 
 $2
 
@@ -857,9 +857,9 @@ $2
 Ar trebui să vă autentificați și să alegeți acum o nouă parolă. Dacă altcineva a făcut această solicitare, ori dacă v-ați reamintit parola originală și nu mai doriți modificarea ei, puteți ignora acest mesaj, continuând cu vechea parolă.',
 'passwordreset-emailelement' => 'Nume de utilizator: $1
 Parolă temporară: $2',
-'passwordreset-emailsent' => 'A fost trimis un e-mail de reamintire.',
-'passwordreset-emailsent-capture' => 'Un mesaj de reamintire a fost trimis, fiind afișat mai jos.',
-'passwordreset-emailerror-capture' => 'Un mesaj de reamintire a fost generat (fiind afișat mai jos), dar trimiterea sa către utilizator a eșuat: $1',
+'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',
 
 # Special:ChangeEmail
 'changeemail' => 'Modificare adresă de e-mail',
@@ -2522,12 +2522,12 @@ Puteți schimba nivelul de protejare al acestei pagini, dar asta nu va afecta pr
 'restriction-level-all' => 'orice nivel',
 
 # Undelete
-'undelete' => 'Recuperează pagina ștearsă',
-'undeletepage' => 'Vizualizează și recuperează pagini șterse',
+'undelete' => 'Recuperare pagină ștearsă',
+'undeletepage' => 'Vizualizare și recuperare pagini șterse',
 'undeletepagetitle' => "'''Această listă cuprinde versiuni șterse ale paginii [[:$1|$1]].'''",
 'viewdeletedpage' => 'Vezi paginile șterse',
 'undeletepagetext' => '{{PLURAL:$1|Următoarea pagină a fost ștearsă, dar încă se află în arhivă și poate fi recuperată|Următoarele $1 pagini au fost șterse, dar încă se află în arhivă și pot fi recuperate|Următoarele $1 de pagini au fost șterse, dar încă se află în arhivă și pot fi recuperate}}. Arhiva ar putea fi ștearsă periodic.',
-'undelete-fieldset-title' => 'Recuperează versiuni',
+'undelete-fieldset-title' => 'Recuperare versiuni',
 'undeleteextrahelp' => "Pentru a restaura întregul istoric al paginii lăsați toate căsuțele nebifate și apăsați butonul '''''{{int:undeletebtn}}'''''.
 Pentru a realiza o recuperare selectivă bifați versiunile pe care doriți să le recuperați și apăsați butonul '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|versiune arhivată|versiuni arhivate|de versiuni arhivate}}',
@@ -2553,7 +2553,7 @@ $1',
 'undeletedpage' => "'''$1 a fost recuperat'''
 
 Consultați [[Special:Log/delete|jurnalul ștergerilor]] pentru a vedea toate ștergerile și recuperările recente.",
-'undelete-header' => 'Vezi [[Special:Log/delete|logul de ștergere]] pentru paginile șterse recent.',
+'undelete-header' => 'Consultați [[Special:Log/delete|jurnalul de ștergeri]] pentru paginile șterse recent.',
 'undelete-search-title' => 'Căutare pagini șterse',
 'undelete-search-box' => 'Caută pagini șterse',
 'undelete-search-prefix' => 'Arată paginile care încep cu:',
@@ -3958,17 +3958,17 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'sqlite-no-fts' => '$1 fără suport de căutare în tot textul',
 
 # New logging system
-'logentry-delete-delete' => '$1 a șters pagina $3',
-'logentry-delete-restore' => '$1 a restaurat pagina $3',
-'logentry-delete-event' => '$1 a schimbat vizibilitatea {{PLURAL:$5|unui eveniment din jurnal|a $5 evenimente din jurnal|a $5 de evenimente din jurnal}} în $3: $4',
-'logentry-delete-revision' => '$1 a schimbat vizibilitatea {{PLURAL:$5|unei modificări|a $5 modificări|a $5 de modificări}} din pagina $3: $4',
-'logentry-delete-event-legacy' => '$1 a modificat vizibilitatea evenimentelor din jurnal în $3',
-'logentry-delete-revision-legacy' => '$1 a modificat vizibilitatea modificărilor de pe pagina $3',
-'logentry-suppress-delete' => '$1 a suprimat pagina $3',
-'logentry-suppress-event' => '$1 a modificat în mod secret vizibilitatea {{PLURAL:$5|unui eveniment din jurnal|a $5 evenimente din jurnal|a $5 de evenimente din jurnal}} în $3: $4',
-'logentry-suppress-revision' => '$1 a modificat în mod secret vizibilitatea {{PLURAL:$5|unei modificări|a $5 modificări|a $5 de modificări}} din pagina $3: $4',
-'logentry-suppress-event-legacy' => '$1 a modificat în mod secret vizibilitatea evenimentelor din jurnal în $3',
-'logentry-suppress-revision-legacy' => '$1 a modificat în mod secret vizibilitatea modificărilor de pe pagina $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|a șters}} pagina $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|a restaurat}} pagina $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|a schimbat}} vizibilitatea {{PLURAL:$5|unui eveniment din jurnal|a $5 evenimente din jurnal|a $5 de evenimente din jurnal}} pentru $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|a schimbat}} vizibilitatea {{PLURAL:$5|unei versiuni|a $5 versiuni|a $5 de versiuni}} pentru pagina $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|a modificat}} vizibilitatea evenimentelor din jurnal pentru $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|a modificat}} vizibilitatea unor versiuni ale paginii $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|a suprimat}} pagina $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|a modificat}} în mod secret vizibilitatea {{PLURAL:$5|unui eveniment din jurnal|a $5 evenimente din jurnal|a $5 de evenimente din jurnal}} pentru $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|a schimbat}} în mod secret vizibilitatea {{PLURAL:$5|unei versiuni|a $5 versiuni|a $5 de versiuni}} pentru pagina $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|a modificat}} în mod secret vizibilitatea evenimentelor din jurnal pentru $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|a modificat}} în mod secret vizibilitatea versiunilor pentru pagina $3',
 'revdelete-content-hid' => 'conținut ascuns',
 'revdelete-summary-hid' => 'descrierea modificării ascunsă',
 'revdelete-uname-hid' => 'nume de utilizator ascuns',
@@ -3977,20 +3977,20 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'revdelete-uname-unhid' => 'numele de utilizator afișat',
 'revdelete-restricted' => 'restricții aplicate administratorilor',
 'revdelete-unrestricted' => 'restricții eliminate pentru administratori',
-'logentry-move-move' => '$1 a redenumit pagina $3 în $4',
-'logentry-move-move-noredirect' => '$1 a redenumit pagina $3 în $4 fără a lăsa o redirecționare în loc',
-'logentry-move-move_redir' => '$1 a redenumit pagina $3 în $4 înlocuind redirecționarea',
-'logentry-move-move_redir-noredirect' => '$1 a redenumit pagina $3 în $4 înlocuind redirecționarea și fără a lăsa o redirecționare în loc',
-'logentry-patrol-patrol' => '$1 a marcat versiunea $4 a paginii $3 ca patrulată',
-'logentry-patrol-patrol-auto' => '$1 a marcat automat versiunea $4 a paginii $3 ca patrulată',
-'logentry-newusers-newusers' => 'Contul de utilizator $1 a fost creat',
-'logentry-newusers-create' => 'Contul de utilizator $1 a fost creat',
-'logentry-newusers-create2' => 'Contul de utilizator $3 a fost creat de către $1',
-'logentry-newusers-byemail' => 'Contul de utilizator $3 a fost creat de către $1, iar parola a fost trimisă prin e-mail',
-'logentry-newusers-autocreate' => 'Contul $1 a fost creat în mod automat',
-'logentry-rights-rights' => '$1 a schimbat apartenența la grup pentru $3 de la $4 la $5',
-'logentry-rights-rights-legacy' => '$1 a schimbat apartenența la grup pentru $3',
-'logentry-rights-autopromote' => '$1 a fost promovat în mod automat de la $4 la $5',
+'logentry-move-move' => '$1 {{GENDER:$2|a redenumit}} pagina $3 în $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 fără a lăsa o redirecționare în loc',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 înlocuind redirecționarea',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 înlocuind redirecționarea și fără a lăsa o redirecționare în loc',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|a marcat}} versiunea $4 a paginii $3 ca patrulată',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|a marcat}} automat versiunea $4 a paginii $3 ca patrulată',
+'logentry-newusers-newusers' => 'Contul de utilizator $1 a fost {{GENDER:$2|creat}}',
+'logentry-newusers-create' => 'Contul de utilizator $1 a fost {{GENDER:$2|creat}}',
+'logentry-newusers-create2' => 'Contul de utilizator $3 a fost {{GENDER:$2|creat}} de către $1',
+'logentry-newusers-byemail' => 'Contul de utilizator $3 a fost {{GENDER:$2|creat}} de către $1, iar parola a fost trimisă prin e-mail',
+'logentry-newusers-autocreate' => 'Contul de utilizator $1 a fost {{GENDER:$2|creat}} în mod automat',
+'logentry-rights-rights' => '$1 {{GENDER:$2|a schimbat}} apartenența la grup pentru $3 de la $4 la $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|a schimbat}} apartenența la grup pentru $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|a fost promovat|a fost promovată}} în mod automat de la $4 la $5',
 'rightsnone' => '(niciunul)',
 
 # Feedback
index 556ec83..12057d0 100644 (file)
@@ -25,30 +25,30 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Cullegaminde sottolinèete:',
+'tog-underline' => 'Collegaminde sottolinèate:',
 'tog-justify' => 'Giustifeche le paragrafe',
 'tog-hideminor' => "Scunne le cangiaminde stuédeche jndr'à le cangiaminde recende",
-'tog-hidepatrolled' => "Scunne le cangiaminde condrollete jndr'à le cangiaminde recende",
-'tog-newpageshidepatrolled' => "Scunne le pàggene tenute sotte condrolle da 'a liste de le pàggene nuève",
-'tog-extendwatchlist' => "Spanne 'a liste de le pàggene condrollete pe fa vedè tutte le cangiaminde fatte, none sulamende l'urteme",
+'tog-hidepatrolled' => "Scunne le cangiaminde condrollate jndr'à le cangiaminde recende",
+'tog-newpageshidepatrolled' => "Scunne le pàggene tenute sotte condrolle da l'elenghe de le pàggene nuève",
+'tog-extendwatchlist' => "Spanne l'elenghe de le pàggene condrollate pe fa vedè tutte le cangiaminde fatte, none sulamende l'urteme",
 'tog-usenewrc' => "Ause le cangiaminde recende migliorate (vole 'u JavaScript)",
-'tog-numberheadings' => 'Testete auto-numerete',
+'tog-numberheadings' => 'Testate auto-numerate',
 'tog-showtoolbar' => "Fà vedè 'a barra de le cangiaminde (JavaScript)",
 'tog-editondblclick' => "Cange le pàggene cu 'nu doppie clic (JavaScript)",
-'tog-editsection' => 'Abilite le cangiaminde a sezione ausanne [cange]',
-'tog-editsectiononrightclick' => "Abilite le cngiaminde d'a sezione ausanne 'u pulsande destre d'u mouse cazzanne sus a 'u titele (Javascript)",
-'tog-showtoc' => "Fa vedè 'a taggelle de le condenute (pe le pàggene cu cchiù de 3 testete)",
-'tog-rememberpassword' => "Arrencuerdete 'u nome mije sus a stu browser (pe 'nu massime de $1 {{PLURAL:$1|sciurne|sciurne}})",
+'tog-editsection' => "Abbilite le cangiaminde d'a sezione ausanne le collagaminde [cange]",
+'tog-editsectiononrightclick' => "Abbilite le cangiaminde d'a sezione ausanne 'u pulsande destre d'u mouse cazzanne sus a 'u titole (Javascript)",
+'tog-showtoc' => "Fa vedè 'a tabbelle de le condenute (pe le pàggene cu cchiù de 3 testate)",
+'tog-rememberpassword' => "Arrecuèrdete 'u nome mije sus a stu browser (pe 'nu massime de $1 {{PLURAL:$1|sciurne}})",
 'tog-watchcreations' => "Mitte le pàggene ca je agghie ccrejate jndr'à le pàggene condrollate",
 'tog-watchdefault' => "Mitte le pàggene ca je agghie cangiate jndr'à le pàggene condrollate",
-'tog-watchmoves' => "!Mitte le pàggene ca je agghie spustate jndr'à le pàggene condrollate",
+'tog-watchmoves' => "Mitte le pàggene ca je agghie spustate jndr'à le pàggene condrollate",
 'tog-watchdeletion' => "Mitte le pàggene ca je agghie scangellate jndr'à le pàggene condrollate",
-'tog-minordefault' => 'Pe convenzione signe tutte le cangiaminde cumme stuédeche',
-'tog-previewontop' => "Fa vedè l'andeprime apprime de 'a scatole de le cangiaminde",
-'tog-previewonfirst' => "Fà vedè l'andeprime sus a 'u prime cangiaminde",
-'tog-nocache' => "Disabbilete 'u caching d'a pàgene sfogliate",
+'tog-minordefault' => 'Pe convenzione signe tutte le cangiaminde cumme stuédeche',
+'tog-previewontop' => "Fa vedè l'andeprime apprime d'a caselle de le cangiaminde",
+'tog-previewonfirst' => "Fà vedè l'andeprime sus a 'u prime cangiamende",
+'tog-nocache' => "Disabbilite 'u caching d'a pàgene sfogliate",
 'tog-enotifwatchlistpages' => "Manneme 'na mail quanne 'a pàgene ca stoche a condrolle ha cangiate",
-'tog-enotifusertalkpages' => "Manneme 'na mail quanne 'a pàgene de le 'ngazzaminde ha cangete",
+'tog-enotifusertalkpages' => "Manneme 'na mail quanne 'a pàgene de le 'ngazzaminde ha cangiate",
 'tog-enotifminoredits' => "Manneme 'na mail quanne onne state fatte cangiaminde stuèdeche sus a le pàggene",
 'tog-enotifrevealaddr' => "Fa vedè l'indirizze e-mail jndr'à le e-mail de notifiche",
 'tog-shownumberswatching' => "Fa vedè 'u numere de le utinde ca uardene",
@@ -58,15 +58,15 @@ $messages = array(
 [//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 accedere a le collegaminde',
-'tog-uselivepreview' => "Ause l'andeprime da 'u vive (JavaScript) (Sperimendele)",
-'tog-forceeditsummary' => "Ciercheme conferme quanne stoche a 'nzerische 'nu riepighe vianghe",
-'tog-watchlisthideown' => "Scunne le cangiaminde mie da 'a liste de le pàgene condrollete",
-'tog-watchlisthidebots' => "Scunne le cangiaminde de le not da 'a liste de le pàgene condrollete",
-'tog-watchlisthideminor' => "Scunne le cangiaminde stuèdeche da 'a liste de le pàgene condrollete",
-'tog-watchlisthideliu' => "Scunne le cangiaminde de l'utinde canusciute da 'a liste de le pàgene condrollete",
-'tog-watchlisthideanons' => "Scunne le cangiaminde de l'utinde scanusciute da 'a liste de le pàgene condrollete",
-'tog-watchlisthidepatrolled' => "Scunne le cangiaminde condrollete jndr'à liste de le pàggene condrollete",
+'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",
+'tog-watchlisthideown' => "Scunne le cangiaminde mije da l'elenghe de le pàggene condrollate",
+'tog-watchlisthidebots' => "Scunne le cangiaminde de le bot da l'elenghe de le pàggene condrollate",
+'tog-watchlisthideminor' => "Scunne le cangiaminde stuèdeche da l'elenghe de le pàggene condrollate",
+'tog-watchlisthideliu' => "Scunne le cangiaminde de l'utinde canusciute da l'elenghe de le pàggene condrollate",
+'tog-watchlisthideanons' => "Scunne le cangiaminde de l'utinde scanusciute da l'elenghe de le pàggene condrollate",
+'tog-watchlisthidepatrolled' => "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
 'tog-ccmeonemails' => "Manneme 'na copie de le mail ca je manne a l'ôtre utinde",
 'tog-diffonly' => 'No fà vedè le pàggene cu le condenute sotte a le differenze',
 'tog-showhiddencats' => 'Fa vedè le categorije scunnute',
@@ -144,11 +144,11 @@ $messages = array(
 'category-empty' => "''Sta categorije pe mò non ge tène manghe 'na pàgene e manghe 'nu media.''",
 'hidden-categories' => '{{PLURAL:$1|categorije scunnute|categorije scunnute}}',
 'hidden-category-category' => 'Categorije scunnute',
-'category-subcat-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'na sottecategorije.|Sta categorije tène {{PLURAL:$1|'na sottecategorije|$1 sottecategorije}}, sus a 'nu totele de $2.}}",
+'category-subcat-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'na sottecategorije}}. Sta categorije tène {{PLURAL:$1|'na sottecategorije|$1 sottecategorije}}, sus a 'nu totale de $2.",
 'category-subcat-count-limited' => 'Sta categorije tène {{PLURAL:$1|sottecategorije|le seguende $1 sottecategorije}}.',
-'category-article-count' => "{{PLURAL:$2|Sta categorije condiene sulamende 'a seguenda pàgene.|{{PLURAL:$1|'A seguende pàgene jè|le seguende $1 pàggene sonde }} condenute jndr'à sta categorije, sus a $2 totele.}}",
+'category-article-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'a seguenda pàgene.}} {{PLURAL:$1|'A seguende pàgene jè|le seguende $1 pàggene sonde}} condenute jndr'à sta categorije, sus a $2 totale.",
 'category-article-count-limited' => "{{PLURAL:$1|'A pàgene seguente ste|Le $1 pàggene seguende stonne}} jndr'à categorija corrende",
-'category-file-count' => "{{PLURAL:$2|Sta categorije condene sulamende 'u seguende file.|{{PLURAL:$1|'U seguende file stè |le seguende $1 files stonne}} jndr'à sta categorije, sus a $2 totele.}}",
+'category-file-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'u seguende file}}. {{PLURAL:$1|'U seguende file stè |le seguende $1 files stonne}} jndr'à sta categorije, sus a $2 totale.",
 'category-file-count-limited' => "{{PLURAL:$1|'U seguende file jè|$1 Le seguende file sonde}} jndr'à categorije corrende.",
 'listingcontinuesabbrev' => 'cond.',
 'index-category' => 'Pàggene indicizzate',
@@ -208,7 +208,7 @@ $messages = array(
 'searcharticle' => 'Véje',
 'history' => "Storie d'a pàgene",
 'history_short' => 'Cunde',
-'updatedmarker' => "aggiornete da l'urtema visite meje",
+'updatedmarker' => "aggiornate da l'urtema visita meje",
 'printableversion' => 'Versione ca se stambe',
 'permalink' => 'Collegamende ca remane pe sembre',
 'print' => 'Stambe',
@@ -526,8 +526,8 @@ Pe piacere, colleghete n'otra vota quanne l'è ricevute.",
 'blocked-mailpassword' => "L'indirizze IP tue jè blocchete pe le cangiaminde e accussì tu non ge puè ausà 'a funzione de recupere d'a password pe prevenìe l'abbuse.",
 'eauthentsent' => "'N'e-mail de conferme ha state mannete a l'indirizze ca tu è ditte.
 Apprime ca otre e-mail avènene mannete a 'u cunde tue, tu ha seguì le 'struzione ca stonne jndr'à l'e-mail, pe confermà l'iscrizione.",
-'throttled-mailpassword' => "'Nu arrecordatore de password ha stete già mannete jndr'à {{PLURAL:$1|l'urtema ore|l'urteme $1 ore}}.
-Pe prevenì l'abbuse, sulamende 'nu arrecordatore de password avene mannete ogne {{PLURAL:$1|ore|$1 ore}}.",
+'throttled-mailpassword' => "'Nu arrecordatore de passuord ha stete già mannate jndr'à {{PLURAL:$1|l'urtema ore|l'urteme $1 ore}}.
+Pe prevenì l'abbuse, sulamende 'nu arrecordatore de passuord avene mannate ogne {{PLURAL:$1|ore|$1 ore}}.",
 'mailerror' => "Errore mannanne 'a mail: $1",
 'acct_creation_throttle_hit' => "Le visitature de sta Uicchi ca stonne ausene stu indirizze IP onne ccrejete {{PLURAL:$1|'nu cunde utende|$1 cunde utinde}} jndr'à l'urteme giurne, e onne raggiunde 'u numere massime ca se pò fà jndr'à stu periode.
 'U resultete jè ca le visitature ca stonne ausene stu indirizze IP non ge ponne ccrejà otre cunde utinde nuève jndr'à stu mumende.",
@@ -580,7 +580,7 @@ Pò essere ca tu è già cangete 'a password toje o è richieste una temboranea
 
 # Special:PasswordReset
 'passwordreset' => "Azzere 'a passuord",
-'passwordreset-text' => "Comblete stu module pe avè 'na mail pe arrecurdarte le dettaglie d'u cunde tune.",
+'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-pretext' => '{{PLURAL:$1||Mitte une de le stuèzze de le date aqquà sotte}}',
@@ -594,7 +594,7 @@ Pò essere ca tu è già cangete 'a password toje o è richieste una temboranea
 
 $2
 
-{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}}  'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.
+{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}} 'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.
 Tu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
 'passwordreset-emailtext-user' => "L'utende $1 sus a {{SITENAME}} ave richieste 'na mail pe arrecurdarse le dettaglie d'u cunde sue pe {{SITENAME}}
 ($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:
@@ -606,8 +606,8 @@ Tu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta
 'passwordreset-emailelement' => 'Nome utende: $1<br />
 Passuord temboranèe: $2',
 'passwordreset-emailsent' => "'N'e-mail pe arrecurdarte ha state mannate.",
-'passwordreset-emailsent-capture' => "'Na e-mail de promemorie ha state mannate, ca jè fatte vedè aqquà sotte.",
-'passwordreset-emailerror-capture' => "'Na e-mail de promemorie ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a l'utende ha fallite: $1",
+'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",
 
 # Special:ChangeEmail
 'changeemail' => "Cange 'u 'ndirizze e-mail",
@@ -3987,17 +3987,17 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'sqlite-no-fts' => "$1 senze 'u supporte d'a ricerche full-text",
 
 # New logging system
-'logentry-delete-delete' => '$1 pàgena scangellate $3',
-'logentry-delete-restore' => '$1 pàgena repristinate $3',
-'logentry-delete-event' => "$1 cangiate 'a vesibbilità {{PLURAL:$5|de l'archivije de le fatte|$5 de l'archivije de le fatte}} sus 'a $3: $4",
-'logentry-delete-revision' => "$1 cangiate 'a vesibbilità {{PLURAL:$5|d'a revisione|$5 de le revisiune}} sus 'a pàgene $3: $4",
-'logentry-delete-event-legacy' => "$1 cangiate 'a vesibbilità d'u archivije de le fatte sus 'a $3",
-'logentry-delete-revision-legacy' => "$1 cangiate 'a vesibbilità de le revisiune sus 'a pàgene $3",
-'logentry-suppress-delete' => '$1 pàgena soppresse $3',
-'logentry-suppress-event' => "$1 a scunnute cangiate 'a vesibbilità {{PLURAL:$5|de l'archivije de le fatte|$5 de l'archivije de le fatte}} sus 'a $3: $4",
-'logentry-suppress-revision' => "$1 a scunnute cangiate 'a vesibbilità {{PLURAL:$5|d'a revisione|$5 de le revisiune}} sus 'a pàgene $3: $4",
-'logentry-suppress-event-legacy' => "$1 a scunnute cangiate 'a vesibbilità d'u archivije de le fatte sus 'a $3",
-'logentry-suppress-revision-legacy' => "$1 a scunnute cangiate 'a vesibbilità de le revisiune sus 'a pàgene $3",
+'logentry-delete-delete' => '$1 pàgena {{GENDER:$2|scangellate}} $3',
+'logentry-delete-restore' => '$1 pàgena {{GENDER:$2|repristinate}} $3',
+'logentry-delete-event' => "$1 {{GENDER:$2|cangiate}} 'a vesibbilità {{PLURAL:$5|de l'archivije de le fatte|$5 de l'archivije de le fatte}} sus 'a $3: $4",
+'logentry-delete-revision' => "$1 {{GENDER:$2|cangiate}} 'a vesibbilità {{PLURAL:$5|d'a revisione|$5 de le revisiune}} sus 'a pàgene $3: $4",
+'logentry-delete-event-legacy' => "$1 {{GENDER:$2|cangiate}} 'a vesibbilità d'u archivije de le fatte sus 'a $3",
+'logentry-delete-revision-legacy' => "$1 {{GENDER:$2|cangiate}} 'a vesibbilità de le revisiune sus 'a pàgene $3",
+'logentry-suppress-delete' => '$1 pàgena {{GENDER:$2|soppresse}} $3',
+'logentry-suppress-event' => "$1 a scunnute {{GENDER:$2|cangiate}} 'a vesibbilità {{PLURAL:$5|de l'archivije de le fatte|$5 de l'archivije de le fatte}} sus 'a $3: $4",
+'logentry-suppress-revision' => "$1 a scunnute {{GENDER:$2|cangiate}} 'a vesibbilità {{PLURAL:$5|d'a revisione|$5 de le revisiune}} sus 'a pàgene $3: $4",
+'logentry-suppress-event-legacy' => "$1 a scunnute {{GENDER:$2|cangiate}} 'a vesibbilità d'u archivije de le fatte sus 'a $3",
+'logentry-suppress-revision-legacy' => "$1 a scunnute {{GENDER:$2|cangiate}} 'a vesibbilità de le revisiune sus 'a pàgene $3",
 'revdelete-content-hid' => 'condenute scunnute',
 'revdelete-summary-hid' => "riepileghe d'u cangiamende scunnute",
 'revdelete-uname-hid' => "nome de l'utende scunnute",
@@ -4006,20 +4006,20 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'revdelete-uname-unhid' => "nome de l'utende fatte vedè",
 'revdelete-restricted' => 'appliche le restriziune a le SysOps',
 'revdelete-unrestricted' => 'live le restriziune a le SysOps',
-'logentry-move-move' => '$1 pàgena spustate $3 a $4',
-'logentry-move-move-noredirect' => "$1 pàgena spustate $3 a $4 senze lassà 'nu redirezionamende",
-'logentry-move-move_redir' => "$1 pàgena spustate $3 a $4 cu 'u redirezionamende",
-'logentry-move-move_redir-noredirect' => "$1 pàgena spustate $3 a $4 sus a 'nu redirezionamende senze lassà 'nu redirezionamende",
-'logentry-patrol-patrol' => '$1 revisione marcate $4 de pàgene condrollate $3',
-'logentry-patrol-patrol-auto' => '$1 automaticamende revisione marcate $4 de pàgene condrollate $3',
-'logentry-newusers-newusers' => "'U cunde utende $1 ha state ccrejate",
-'logentry-newusers-create' => "'U cunde utende $1 ha state ccrejate",
-'logentry-newusers-create2' => "$1 {{GENDER:$2|ccrejate}} {{GENDER:$4|'nu cunde utende}} $3",
-'logentry-newusers-byemail' => "'U cunde utende $3 ha state ccrejate da $1 e 'a passuord ha state mannate pe e-mail",
-'logentry-newusers-autocreate' => "'U cunde utende $1 ha state ccrejate automaticamende",
-'logentry-rights-rights' => "$1 membre d'u gruppe cangiate pe $3 da $4 a $5",
-'logentry-rights-rights-legacy' => "$1 ave cangiate 'u membre d'u gruppe pe $3",
-'logentry-rights-autopromote' => '$1 ha state promosse automaticamende da $4 a $5',
+'logentry-move-move' => '$1 pàgena {{GENDER:$2|spustate}} $3 a $4',
+'logentry-move-move-noredirect' => "$1 pàgena {{GENDER:$2|spustate}} $3 a $4 senze lassà 'nu redirezionamende",
+'logentry-move-move_redir' => "$1 pàgena {{GENDER:$2|spustate}} $3 a $4 cu 'u redirezionamende",
+'logentry-move-move_redir-noredirect' => "$1 pàgena {{GENDER:$2|spustate}} $3 a $4 sus a 'nu redirezionamende senze lassà 'nu redirezionamende",
+'logentry-patrol-patrol' => '$1 revisione {{GENDER:$2|signate}} $4 de pàgene condrollate $3',
+'logentry-patrol-patrol-auto' => '$1 automaticamende revisione {{GENDER:$2|signate}} $4 de pàgene condrollate $3',
+'logentry-newusers-newusers' => "'U cunde utende $1 ha state {{GENDER:$2|ccrejate}}",
+'logentry-newusers-create' => "'U cunde utende $1 ha state {{GENDER:$2|ccrejate}}",
+'logentry-newusers-create2' => "'U cunde utende $3 ha state {{GENDER:$2|ccrejate}} da $1",
+'logentry-newusers-byemail' => "'U cunde utende $3 ha state {{GENDER:$2|ccrejate}} da $1 e 'a passuord ha state mannate pe e-mail",
+'logentry-newusers-autocreate' => "'U cunde utende $1 ha state {{GENDER:$2|ccrejate}} automaticamende",
+'logentry-rights-rights' => "$1 membre d'u gruppe {{GENDER:$2|cangiate}} pe $3 da $4 a $5",
+'logentry-rights-rights-legacy' => "$1 ave {{GENDER:$2|cangiate}} 'u membre d'u gruppe pe $3",
+'logentry-rights-autopromote' => '$1 ha state {{GENDER:$2|promosse}} automaticamende da $4 a $5',
 'rightsnone' => '(ninde)',
 
 # Feedback
index 5de63cf..95b30c3 100644 (file)
@@ -43,6 +43,7 @@
  * @author Haffman
  * @author HalanTul
  * @author Huuchin
+ * @author Ignatus
  * @author Illusion
  * @author Iltever
  * @author Incnis Mrsi
@@ -522,7 +523,7 @@ $messages = array(
 'hidden-category-category' => 'Скрытые категории',
 'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|Эта категория содержит $1 {{PLURAL:$1|подкатегорию|подкатегории}} из $2 всего.}}',
 'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.',
-'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2.}}',
+'category-article-count' => '{{#ifeq:$2|1|Эта категория содержит только следующую страницу.|Эта категория содержит следующ{{PLURAL:$1|ую $1 страницу|ие $1 страницы|ие $1 страниц}} из $2.}}',
 'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц}}.',
 'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|В этой категории {{PLURAL:$1|показан $1 файл|показано $1 файла|показано $1 файлов}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов}}.',
@@ -2285,8 +2286,8 @@ $1',
 'notargettext' => 'Вы не указали целевую страницу или участника для этого действия.',
 'nopagetitle' => 'Нет такой целевой страницы',
 'nopagetext' => 'Указанной целевой страницы не существует.',
-'pager-newer-n' => '{{PLURAL:$1|более новая|более новые|более новых}} $1',
-'pager-older-n' => '{{PLURAL:$1|более старая|более старые|более старых}} $1',
+'pager-newer-n' => '$1 {{PLURAL:$1|более новая|более новые|более новых}}',
+'pager-older-n' => '$1 {{PLURAL:$1|более старая|более старые|более старых}}',
 'suppress' => 'Сокрытие',
 'querypage-disabled' => 'Эта спецстраница отключена для повышения производительности.',
 
@@ -4212,7 +4213,7 @@ MediaWiki распространяется в надежде, что она бу
 'logentry-newusers-autocreate' => 'Автоматически создана учётная запись $1',
 'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
 'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
-'logentry-rights-autopromote' => 'Учётная запись «$1» была автоматически переведена из $4 в $5',
+'logentry-rights-autopromote' => '$1 был{{GENDER:$2||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5',
 'rightsnone' => '(нет)',
 
 # Feedback
@@ -4288,4 +4289,7 @@ MediaWiki распространяется в надежде, что она бу
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
+# Image rotation
+'rotate-comment' => 'Изображение повернуто на $1 градус{{PLURAL:$1||а|ов}} по часовой стрелке',
+
 );
index fff9084..1f04880 100644 (file)
@@ -618,7 +618,7 @@ $2',
 'loginlanguagelabel' => 'Язык: $1',
 'suspicious-userlogout' => 'Ваша пожадавка на одголошіня была одвергнута, бо вызерає то так, же была послана розбитым переглядачом або кешуючім проксі-сервером.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Незнама хыба у PHP mail() функції',
 'user-mail-no-addy' => 'Проба одослати електронічну пошту без імейловой адресы.',
 
@@ -1285,7 +1285,7 @@ $1",
 'prefs-displaywatchlist' => 'Наставлїня  взгляду',
 'prefs-diffs' => 'Порівнаня верзії',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Адреса ел. пошты вызерать быти правилна',
 'email-address-validity-invalid' => 'Задайте правилну адресу ел. пошты',
 
@@ -2048,7 +2048,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Приданя свого конта до хоцьякой ґрупы',
 'listgrouprights-removegroup-self-all' => 'Одстранїня свого контра з хоцьякой ґрупы',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Без адресы одосланя',
 'mailnologintext' => 'Кідь хочете посылати ел. пошту іншым хоснователям, мусите ся [[Special:UserLogin|приголосити]] і мати платну адресу ел. пошты в своїм [[Special:Preferences|наставлїню]].',
 'emailuser' => 'Послати імейл тому хоснователёви',
@@ -3385,7 +3385,7 @@ $1',
 'monthsall' => 'вшыткы',
 'limitall' => 'вшыткы',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Потверджіня адресы ел. пошты',
 'confirmemail_noemail' => 'Во своїм [[Special:Preferences|хосновательскім наставлїню]] сьте не зазначіли платну адресу ел. пошты.',
 'confirmemail_text' => 'Тота вікі выжадує, жебы сьте перед хоснованым дакотрых функцій потвердили свою адресу електронічной пошты. Кликнутём на клапку ниже одошлете потверджовачій лист на вами зазначену адресу. Тот лист обсягує одказ і код потверджіня; зображінём одказованой сторінкы во своїм інтернетовім переглядачу потвердите, же зазначена адреса є платна.',
index ab74e45..b465a21 100644 (file)
@@ -547,7 +547,7 @@ $2',
 'loginlanguagelabel' => 'Омугун тыла: $1',
 'suspicious-userlogout' => 'Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'mail() PHP-функциятыгар туох эрэ алҕас тахсыбыт',
 'user-mail-no-addy' => 'Сурук аадырыһа суох ыыттылла сатаабыт',
 'user-mail-no-body' => 'Кураанах эбэтэр суолтата суох кылгас тиэкистээх суругу ыыта сатаабыт.',
@@ -1233,7 +1233,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'prefs-displaywatchlist' => 'Көстүүтүн туруоруулара',
 'prefs-diffs' => 'Уратылара',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Сөп курдук көстөр',
 'email-address-validity-invalid' => 'Алҕаһа суох аадырыс ирдэнэр',
 
@@ -2014,7 +2014,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Бары бөлөхтөрү бэйэтин аатыгар холбуон сөп',
 'listgrouprights-removegroup-self-all' => 'Бары бөлөхтөрү бэйэтин аатыттан сотуон сөп',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Аадырыһа суох',
 'mailnologintext' => 'Атын кыттааччылары кытта e-mail көмөтүнэн суруйсуоххун баҕарар буоллаххына бэйэҕин [[Special:UserLogin|билиһиннэриэхтээххин]]  уонна e-mail аадырыскын [[Special:Preferences|туруорууларгар]] суруйуохтааххын.',
 'emailuser' => 'Кыттааччыга сурук',
@@ -3361,7 +3361,7 @@ $1',
 'monthsall' => 'бары',
 'limitall' => 'бары',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Электроннай аадырыһы бигэргэтии',
 'confirmemail_noemail' => '[[Special:Preferences|Бэйэҥ туруорууларгар]] электроннай аадырыскын суруйбатаххын эбэтэр сыыһа суруйбуккун.',
 'confirmemail_text' => '{{SITENAME}} движога үлэлиэҥ иннинэ электроннай аадырыскын бигэргэтэри эрэйэр.
index 11346a6..7060b13 100644 (file)
@@ -471,7 +471,7 @@ Arhõ kurumuṭue lahare dayakate thoṛagan tạṅgiemẽ.',
 'login-abort-generic' => 'Amaḱ bhitri boloḱ do baṅ hoylena - batena.',
 'loginlanguagelabel' => 'katha: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'Jahan e-mail ṭhikana bạgi kate e-mail kul kurumuṭu hoena.',
 
 # Change password dialog
@@ -771,7 +771,7 @@ Unuduḱ: '''({{int:cur}})''' = nahaḱ nãwã aroeko saõte tulạo, '''({{int:
 'prefs-help-email-others' => 'Am são e-mail hotete jogajog dohoy lạgitte mitṭen joṛao se amaḱ katha roṛaḱ sakam bachao jońme.
 Amaḱ e-mail ṭhikạna do bań cabaḱa tinre onko do ko beohara',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail ṭhikạna do jewetge ńamena',
 'email-address-validity-invalid' => 'Amaḱ jewet e-mail ṭhkạna emmẽ',
 
@@ -945,7 +945,7 @@ Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
 'listgrouprights-addgroup-all' => 'Joto gaõtare ko soṅgekom',
 'listgrouprights-removegroup-all' => 'Joto gaõtaren ko ocoḱgiḍikom',
 
-# E-mail user
+# Email user
 'emailuser' => 'Nui beoharić e-mail emayme',
 'emailpage' => 'E-mail beoharić',
 'noemailtitle' => 'E-mail ṭhikạna do banuḱa',
index 7630872..556670b 100644 (file)
@@ -1059,7 +1059,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(leet o members)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nae send address',
 'mailnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] an hae a valid e-mail address in yer [[Special:Preferences|preferences]] tae send e-mail til ither uisers.',
 'emailuser' => 'E-mail this uiser',
@@ -1474,7 +1474,7 @@ If th' file haes bin modified frae tis original state, some details kin nae full
 'monthsall' => 'aw',
 'limitall' => 'aw',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail_noemail' => 'Ye dinna hae a valid email address set in yer [[Special:Preferences|uiser preferences]].',
 'confirmemail_text' => 'This wiki requires ye tae validate yer e-mail address
 afore uisin e-mail featurs. Activate the button ablo tae send a confirmation
index 0c16f3c..e09bb1f 100644 (file)
@@ -1245,7 +1245,7 @@ Also see [[Special:WantedCategories|wanted categories]].",
 # Special:ListGroupRights
 'listgrouprights-members' => '(erencu di li membri)',
 
-# E-mail user
+# Email user
 'mailnologin' => "Nisciun indirizzu a lu quari invià l'imbasciadda.",
 'mailnologintext' => "Pa invià imbasciaddi di postha erettrònica è nezzessàriu [[Special:UserLogin|intrà]] e abé registhraddu un'indirizzu variddu i' li propri [[Special:Preferences|prifirenzi]].",
 'emailuser' => "Ischribì a l'utenti",
@@ -1912,7 +1912,7 @@ So cunsidaraddi soru l'erenchi puntaddi (righi ch'ischumenzani cu' lu caràtteri
 'namespacesall' => 'Tutti',
 'monthsall' => 'tutti',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Cunfèimma indirizzu di postha erettrònica',
 'confirmemail_noemail' => "Nò è isthaddu indicaddu un'indirizzu postha erettrònica vàriddu i' li pròpri [[Special:Preferences|prifirenzi]].",
 'confirmemail_text' => "{{SITENAME}} dumanda la verifigga di l'indirizzu di postha erettrònica primma di pudé l'usà. Incalchà lu buttoni in giossu pa invià una prigonta di cunfèimma a lu propriu indirizzu; i' l'imbasciadda è prisenti un cullegamentu chi cunteni un còdizi. Visità lu cullegamentu cu' lu proprio nabiggadori pa cunfèimmà chi l'indirizzu è vàriddu.",
index 95d0344..d9b0d84 100644 (file)
@@ -988,7 +988,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(listu miellahtuin)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Sáddejeaddji čujuhus váilo',
 'mailnologintext' => 'Don fertet leat [[Special:UserLogin|čálligoahtán sisa]] ja du [[Special:Preferences|ásahusain]] ferte leat gelbbolaš ja <strong>sihkarastojuvvon</strong> e-poastačujuhus, ovdalgo sáhtat sáddet e-poasta eará geavaheddjiide.',
 'emailuser' => 'Čále e-poastta geavaheaddjái',
@@ -1400,7 +1400,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'namespacesall' => 'buot',
 'monthsall' => 'buot',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Sihkaraste e-poastačujuhusa',
 'confirmemail_noemail' => 'Dus ii leat lasihuvvon gelbbolaš e-poastačujuhus [[Special:Preferences|ásahusain]].',
 'confirmemail_success' => 'Du e-poastačujuhus lea dál konfirmerejuvvon. Sáhtát dál logget sisa.',
index 7c4d997..8d3ebd6 100644 (file)
@@ -848,7 +848,7 @@ Informacion: (curt) = quiíxde vercion currentua,
 'listusers-submit' => 'Cohuatlöx',
 'listusers-noresult' => 'Necoccebj caitóm.',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nenadressade iitom',
 'mailnologintext' => 'Zo coccebj Neces [[Special:UserLogin|caápo]]
 ö coccebjöx adressade e-iitom validom [[Special:Preferences|mequáatlaác]]
index 6f981d1..0411b80 100644 (file)
@@ -1231,7 +1231,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-group' => 'Gropė',
 'listgrouprights-members' => '(nariū sārošos)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nier adresa',
 'mailnologintext' => 'Tamstā reik būtė [[Special:UserLogin|prisėjongosiam]]
 ė tor būtė ivests teisings el. pašta adresos Tamstas [[Special:Preferences|nustatīmuos]],
@@ -1816,7 +1816,7 @@ Vėsas kėtas nūoruodas tuo patiuo eilotie īr laikomas ėšėmtim, tas rēšk
 'namespacesall' => 'vėsas',
 'monthsall' => 'vėsė',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Patvirtėnkėt el. pašta adresa',
 'confirmemail_noemail' => 'Tamsta netorėt nuruodės teisėnga el. pašta adresa [[Special:Preferences|sava nustatīmūs]].',
 'confirmemail_text' => 'Šėtom pruojektė īr rēkalėnga patvirtėntė el. pašta adresa prīš nauduojont el. pašta funkcėjės. Spauskėt žemiau esonti mīgtoka,
index 0dbb6f3..1474df1 100644 (file)
@@ -702,7 +702,7 @@ $2',
 'loginlanguagelabel' => 'භාෂාව: $1',
 'suspicious-userlogout' => 'නිෂ්ක්‍රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්‍රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්‍රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්‍රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'php mail() ශ්‍රිතයේ හඳුනානොගත් ගැටළුවකි',
 'user-mail-no-addy' => 'විද්‍යුත් තැපැල් ලිපිනයක් නොමැතිව විද්‍යුත් තැපැල් පණිවුඩයක් යැවීමට උත්සහ දරා ඇත.',
 
@@ -1369,7 +1369,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'prefs-displaywatchlist' => 'විකල්ප පෙන්වන්න',
 'prefs-diffs' => 'වෙනස',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'විද්‍යුත්-තැපැල් ලිපිනය අනීතික බවක් පෙනෙයි.',
 'email-address-validity-invalid' => 'වලංගු විද්‍යුත් ලිපිනයක් ඇතුලත් කරන්න',
 
@@ -2138,7 +2138,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'listgrouprights-addgroup-self-all' => 'සි‍යළු කාණ්ඩයන් ස්වීය ගිණුමට එක්කරන්න',
 'listgrouprights-removegroup-self-all' => 'සියළු කාණ්ඩයන් ස්වීය ගිණුමෙන් ඉවත් කරන්න',
 
-# E-mail user
+# Email user
 'mailnologin' => 'යායුතු ලිපිනය නොමැත',
 'mailnologintext' => 'අනෙකුත් පරිශීලකයන්හට  විද්‍යුත්-තැපැල් යැවුමට පෙරාතුව, ඔබ [[Special:UserLogin|ප්‍රවිෂ්ට වී]], ඔබගේ  [[Special:Preferences|අභිරුචියන්හි]]  නීතික විද්‍යුත්-තැපැල් ලිපිනයක් සඳහන් කර තිබිය යුතුය.',
 'emailuser' => 'මෙම පරිශීලක වෙත විද්‍යුත්-ලිපියක් යවන්න',
@@ -3559,7 +3559,7 @@ Others will be hidden by default.
 'monthsall' => 'සියළු',
 'limitall' => 'සියල්ලම',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'විද්‍යුත්-තැපැල් ලිපිනය තහවුරු කරන්න',
 'confirmemail_noemail' => 'ඔබගේ  [[Special:Preferences|පරිශීලක අභිරුචියන්]] හි නීතික විද්‍යුත්-තැපැල් ලිපිනයක් ඔබ විසින් පිහිටුවා නොමැත.',
 'confirmemail_text' => 'විද්‍යුත්-තැපැල් අංගයන් භාවිතා කිරීමට පෙර  ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය නීතිකරණය කල යුතු බවට {{SITENAME}} අවධාරණය කරයි.
index a09a709..06b5763 100644 (file)
@@ -672,8 +672,8 @@ Ko ga boste prejeli, se ponovno prijavite.',
 'blocked-mailpassword' => 'Urejanje z vašega IP-naslova je blokirano. Da bi preprečili zlorabe, vam ni dovoljeno tudi uporabljati funkcije za povrnitev pozabljenega gesla.',
 'eauthentsent' => 'E-sporočilo je bilo poslano na navedeni e-naslov.
 Če želite tja poslati še katero, sledite navodilom v e-sporočilu, da potrdite lastništvo računa.',
-'throttled-mailpassword' => 'Geselski opomnik je bil v {{PLURAL:$1|zadnji uri|zadnjih $1 urah}} že poslan.
-Za preprečevanje zlorab je lahko na {{PLURAL:$1|uro|$1 uri|$1 ure|$1 ur}} poslano samo eno opozorilo.',
+'throttled-mailpassword' => 'E-pošto za ponastavitev gesla smo v {{PLURAL:$1|zadnji uri|zadnjih $1 urah}} že poslali.
+Za preprečevanje zlorab lahko na {{PLURAL:$1|uro|$1 uri|$1 ure|$1 ur}} pošljemo samo eno sporočilo za ponastavitev gesla.',
 'mailerror' => 'Napaka pri pošiljanju pošte: $1',
 'acct_creation_throttle_hit' => 'Obiskovalci {{GRAMMAR:rodilnik|{{SITENAME}}}} so s tem IP-naslovom v zadnjih 24 urah ustvarili že $1 {{PLURAL:$1|uporabniški račun|uporabniška računa|uporabniške račune|uporabniških računov|uporabniških računov}} in s tem dosegli največje dopustno število v omenjenem časovnem obdobju. Novih računov zato s tem IP-naslovom trenutno žal ne morete več ustvariti.
 
@@ -728,7 +728,7 @@ Morda ste že uspešno spremenili geslo ali pa ste zahtevali novo začasno geslo
 
 # Special:PasswordReset
 'passwordreset' => 'Ponastavitev gesla',
-'passwordreset-text' => 'Izpolnite obrazec, da prejmete e-poštni opomnik s podrobnostmi vašega računa.',
+'passwordreset-text' => 'Izpolnite obrazec, da ponastavite geslo.',
 'passwordreset-legend' => 'Ponastavitev gesla',
 'passwordreset-disabled' => 'Ponastavljanje gesla je na tem wikiju onemogočeno.',
 'passwordreset-pretext' => '{{PLURAL:$1||Vnesite enega od dela podatkov spodaj}}',
@@ -738,8 +738,8 @@ Morda ste že uspešno spremenili geslo ali pa ste zahtevali novo začasno geslo
 'passwordreset-capture-help' => 'Če potrdite to polje, vam bodo e-pošte (z začasnim geslom) pokazane in poslane uporabniku.',
 'passwordreset-email' => 'E-poštni naslov:',
 'passwordreset-emailtitle' => 'Podrobnosti računa na {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Nekdo (verjetno vi, z IP-naslova $1) je zahteval opomnik vaših
-podatkov o računu na {{SITENAME}} ($4). S tem e-poštnim naslovom
+'passwordreset-emailtext-ip' => 'Nekdo (verjetno vi, z IP-naslova $1) je zahteval ponastavitev vašega
+gesla na {{SITENAME}} ($4). S tem e-poštnim naslovom
 {{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:
 
 $2
@@ -749,7 +749,7 @@ Prijavite se in izberite novo geslo sedaj. Če je zahtevo podal
 nekdo drug ali pa ste se spomnili svojega prvotnega gesla in ga več
 ne želite spremeniti, lahko to sporočilo prezrete in nadaljujete z uporabo
 svojega starega gesla.',
-'passwordreset-emailtext-user' => 'Uporabnik $1 na {{SITENAME}} je zahteval opomnik vaših podatkov o računu na {{SITENAME}}
+'passwordreset-emailtext-user' => 'Uporabnik $1 na strani {{SITENAME}} je zahteval ponastavitev vašega gesla na {{SITENAME}}
 ($4). S tem e-poštnim naslovom {{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:
 
 $2
@@ -761,9 +761,9 @@ ne želite spremeniti, lahko to sporočilo prezrete in nadaljujete z uporabo
 svojega starega gesla.',
 'passwordreset-emailelement' => 'Uporabniško ime: $1
 Začasno geslo: $2',
-'passwordreset-emailsent' => 'Opomnilna e-pošta je bila poslana.',
-'passwordreset-emailsent-capture' => 'E-poštni opomnik je bil poslan in je prikazan spodaj.',
-'passwordreset-emailerror-capture' => 'E-poštni opomnik je bil poslan in je prikazan spodaj, vendar pa pošiljanje uporabniku ni uspelo: $1',
+'passwordreset-emailsent' => 'Poslali smo e-pošto za postavitev gesla.',
+'passwordreset-emailsent-capture' => 'Poslali smo e-pošto za ponastavitev gesla, ki je prikazana spodaj.',
+'passwordreset-emailerror-capture' => 'Ustvarili smo e-pošto za ponastavitev gesla, ki je prikazana spodaj, vendar pa pošiljanje uporabniku ni uspelo: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Sprememba e-poštnega naslova',
@@ -3880,17 +3880,17 @@ Ta stran se sooča s tehničnimi težavami.',
 'sqlite-no-fts' => '$1 brez podpore iskanju polnih besedil',
 
 # New logging system
-'logentry-delete-delete' => '$1 je izbrisal(-a) stran $3',
-'logentry-delete-restore' => '$1 je obnovil(-a) stran $3',
-'logentry-delete-event' => '$1 je spremenil(-a) vidljivost $5 {{PLURAL:$5|dnevniškega dogodka|dnevniških dogodkov}} na $3: $4',
-'logentry-delete-revision' => '$1 je spremenil(-a) vidljivost $5 {{PLURAL:$5|redakcije|redakcij}} na strani $3: $4',
-'logentry-delete-event-legacy' => '$1 je spremenil(-a) vidljivost dnevniških dogodkov na $3',
-'logentry-delete-revision-legacy' => '$1 je spremenil(-a) vidljivost redakcij na strani $3',
-'logentry-suppress-delete' => '$1 je zatrl(-a) stran $3',
-'logentry-suppress-event' => '$1 je skrivaj spremenil(-a) vidljivost $5 {{PLURAL:$5|dnevniškega dogodka|dnevniških dogodkov}} na $3: $4',
-'logentry-suppress-revision' => '$1 je skrivaj spremenil(-a) vidljivost $5 {{PLURAL:$5|redakcije|redakcij}} na strani $3: $4',
-'logentry-suppress-event-legacy' => '$1 je skrivaj spremenil(-a) vidljivost dnevniških dogodkov na $3',
-'logentry-suppress-revision-legacy' => '$1 je skrivaj spremenil(-a) vidljivost redakcij na strani $3',
+'logentry-delete-delete' => '$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} stran $3',
+'logentry-delete-restore' => '$1 je {{GENDER:$2|obnovil|obnovila|obnovil(-a)}} stran $3',
+'logentry-delete-event' => '$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost $5 {{PLURAL:$5|dnevniškega dogodka|dnevniških dogodkov}} na $3: $4',
+'logentry-delete-revision' => '$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost $5 {{PLURAL:$5|redakcije|redakcij}} na strani $3: $4',
+'logentry-delete-event-legacy' => '$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost dnevniških dogodkov na $3',
+'logentry-delete-revision-legacy' => '$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost redakcij na strani $3',
+'logentry-suppress-delete' => '$1 je {{GENDER:$2|zatrl|zatrla|zatrl(-a)}} stran $3',
+'logentry-suppress-event' => '$1 je skrivaj {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost $5 {{PLURAL:$5|dnevniškega dogodka|dnevniških dogodkov}} na $3: $4',
+'logentry-suppress-revision' => '$1 je skrivaj {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost $5 {{PLURAL:$5|redakcije|redakcij}} na strani $3: $4',
+'logentry-suppress-event-legacy' => '$1 je skrivaj {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost dnevniških dogodkov na $3',
+'logentry-suppress-revision-legacy' => '$1 je skrivaj {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost redakcij na strani $3',
 'revdelete-content-hid' => 'vsebina je skrita',
 'revdelete-summary-hid' => 'povzetek urejanja je skrit',
 'revdelete-uname-hid' => 'uporabniško ime je skrito',
@@ -3899,20 +3899,20 @@ Ta stran se sooča s tehničnimi težavami.',
 'revdelete-uname-unhid' => 'uporabniško ime je ponovno prikazano',
 'revdelete-restricted' => 'uveljavljene omejitve administratorjev',
 'revdelete-unrestricted' => 'odstranjene omejitve administratorjev',
-'logentry-move-move' => '$1 je premaknil(-a) stran $3 na $4',
-'logentry-move-move-noredirect' => '$1 je premaknil(-a) stran $3 na $4 brez preusmeritve',
-'logentry-move-move_redir' => '$1 je premaknil(-a) stran $3 na $4 prek preusmeritve',
-'logentry-move-move_redir-noredirect' => '$1 je premaknil(-a) stran $3 na $4 prek preusmeritve in brez preusmeritve',
-'logentry-patrol-patrol' => '$1 je označil(-a) redakcijo $4 strani $3 kot nadzorovano',
-'logentry-patrol-patrol-auto' => '$1 je samodejno označil(-a) redakcijo $4 strani $3 kot nadzorovano',
-'logentry-newusers-newusers' => '$1 je ustvaril(-a) uporabniški račun',
-'logentry-newusers-create' => '$1 je ustvaril(-a) uporabniški račun',
-'logentry-newusers-create2' => '$1 je ustvaril(-a) uporabniški račun $3',
+'logentry-move-move' => '$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4',
+'logentry-move-move-noredirect' => '$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4 brez preusmeritve',
+'logentry-move-move_redir' => '$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4 prek preusmeritve',
+'logentry-move-move_redir-noredirect' => '$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4 prek preusmeritve in brez preusmeritve',
+'logentry-patrol-patrol' => '$1 je {{GENDER:$2|označil|označila|označil(-a)}} redakcijo $4 strani $3 kot nadzorovano',
+'logentry-patrol-patrol-auto' => '$1 je samodejno {{GENDER:$2|označil|označila|označil(-a)}} redakcijo $4 strani $3 kot nadzorovano',
+'logentry-newusers-newusers' => '$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun',
+'logentry-newusers-create' => '$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun',
+'logentry-newusers-create2' => '$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun $3',
 'logentry-newusers-byemail' => '$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun $3; geslo je bilo poslano po e-pošti',
-'logentry-newusers-autocreate' => 'Račun $1 je bil samodejno ustvarjen',
-'logentry-rights-rights' => '$1 je spremenil(-a) članstvo skupine $3 z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 je spremenil(-a) članstvo skupine $3',
-'logentry-rights-autopromote' => '$1 je bil(-a) samodejno povišan(-a) z $4 na $5',
+'logentry-newusers-autocreate' => 'Račun $1 je bil samodejno {{GENDER:$2|ustvarjen}}',
+'logentry-rights-rights' => '$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} članstvo skupine $3 z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} članstvo skupine $3',
+'logentry-rights-autopromote' => '$1 je {{GENDER:$2|bil samodejno povišan|bila samodejno povišana|bil(-a) samodejno povišan(-a)}} z $4 na $5',
 'rightsnone' => '(nobeno)',
 
 # Feedback
index 08d25e2..fbcf663 100644 (file)
@@ -1373,7 +1373,7 @@ Zusätzliche Informationen ieber einzelne Rechte kinna [[{{MediaWiki:Listgroupri
 'listgrouprights-addgroup-all' => 'Nutzer zu olla Gruppa hinzufiega',
 'listgrouprights-removegroup-all' => 'Nutzer aus olla Gruppa entferna',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Fahler beim E-Mail-Versand',
 'mailnologintext' => 'Du mußt [[Special:UserLogin|oagemeldet sei]] und anne bestätigte E-Mail-Atresse ei denn [[Special:Preferences|Einstellunga]] eingetraga hoan, im andern Nutzern E-Mails schicka zu kinna.',
 'emailuser' => 'E-Mail oa diesa Benutzer',
@@ -2176,7 +2176,7 @@ Weitere werden standardmäßig nicht angezeigt.
 'monthsall' => 'olle',
 'limitall' => 'olle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-Mail-Atresse bestätiga (Authentifizierung)',
 'confirmemail_noemail' => 'Du host kenne giltige E-Mail-Atresse ei denn [[Special:Preferences|persenlicha Eenstallunga]] eengetraga.',
 'confirmemail_text' => "{{SITENAME}} erfordert, doß du denne E-Mail-Atresse bestätigst (authentifizieren), bevor du de erweiterten E-Mail-Funksjonna benutza koast. Klicke bitte uff de unda stehende, miet „Bestätigungscode zuschicka“ beschriftete Schaltfläche, damit anne automatisch erstellte E-Mail oa de oagegahne Atresse geschickt werd. Diese E-Mail enthält anne Web-Adresse miet a'm Bestätigungscode. Indem du diese Webseyte ei demm Webbrowser effnest, bestätigst du, doß de oagegahne E-Mail-Atresse korrekt und giltig ies.",
index 36e0bb8..1a9216a 100644 (file)
@@ -844,7 +844,7 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 'group-sysop-member' => '{{GENDER:$1|maamulaha}}',
 
 'grouppage-user' => '{{ns:project}}:Isticmaalada',
-'grouppage-autoconfirmed' => '{{ns:project}}:Gude gale la hubiyey si iskeeda ah',
+'grouppage-autoconfirmed' => '{{ns:project}}:Adeegsade la hubiyey',
 'grouppage-sysop' => '{{ns:project}}:Maamulada',
 
 # Rights
index 6e0886f..7be0c36 100644 (file)
@@ -715,7 +715,7 @@ Duhet të hyni brenda dhe të ndërroni fjalëkalimin tani nëse ky person jeni
 'loginlanguagelabel' => 'Gjuha: $1',
 'suspicious-userlogout' => 'Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Gabim i panjohur në funksionin e postës PHP ()',
 'user-mail-no-addy' => 'Provuat të dërgoni një korrespondencë pa adresë elektronike',
 
@@ -1376,7 +1376,7 @@ Kjo informatë është publike.',
 'prefs-displaywatchlist' => 'Shfaq opsionet',
 'prefs-diffs' => 'Ndryshimet',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail adresa është e vlefshme.',
 'email-address-validity-invalid' => 'Futni një e-mali adresë të vlefshme.',
 
@@ -2139,7 +2139,7 @@ Protokolle të mbështetura: <code>$1<code> (mos shtoni ndonjërin nga këta në
 'listgrouprights-addgroup-self-all' => 'Shtoni të gjitha grupet tek llogaria',
 'listgrouprights-removegroup-self-all' => 'Hiq të gjitha grupet nga llogaria',
 
-# E-mail user
+# Email user
 'mailnologin' => "S'ka adresë dërgimi",
 'mailnologintext' => 'Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.',
 'emailuser' => 'Email përdoruesit',
@@ -3461,7 +3461,7 @@ Në qoftë se skeda është ndryshuar nga gjendja origjinale, disa hollësira mu
 'monthsall' => 'të gjitha',
 'limitall' => 'Të gjitha',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Vërtetoni adresën tuaj',
 'confirmemail_noemail' => 'Ju nuk keni dhënë email të sakt te [[Special:Preferences|parapëlqimet e juaja]].',
 'confirmemail_text' => 'Për të marrë email duhet të vërtetoni adresen tuaj. Shtypni butonin e mëposhtëm për të dërguar një email vërtetimi tek adresa juaj. Email-i do të përmbajë një lidhje me kod të shifruar. Duke ndjekur lidhjen nëpërmjet shfletuesit tuaj do të vërtetoni adresën.',
index 4eab336..3b2b042 100644 (file)
@@ -910,7 +910,7 @@ $2',
 'loginlanguagelabel' => 'Језик: $1',
 'suspicious-userlogout' => 'Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Непозната грешка у функцији PHP mail().',
 'user-mail-no-addy' => 'Покушали сте да пошаљете поруку без е-адресе.',
 
@@ -1608,7 +1608,7 @@ $1",
 'prefs-displaywatchlist' => 'Поставке приказа',
 'prefs-diffs' => 'Разлике',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Е-адреса је исправна',
 'email-address-validity-invalid' => 'Унесите исправну е-адресу',
 
@@ -2415,7 +2415,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Додај све групе на сопствени налог',
 'listgrouprights-removegroup-self-all' => 'Уклони све групе са сопственог налога',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Нема адресе за слање',
 'mailnologintext' => 'Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.',
 'emailuser' => 'Пошаљи е-поруку',
@@ -3933,7 +3933,7 @@ $8',
 'monthsall' => 'све',
 'limitall' => 'све',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Потврда е-адресе',
 'confirmemail_noemail' => 'Нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].',
 'confirmemail_text' => '{{SITENAME}} захтева да потврдите е-адресу пре него што почнете да користите могућности е-поште.
index c516bf8..ea2bc20 100644 (file)
@@ -816,7 +816,7 @@ Sačekajte nekoliko minuta i pokušajte ponovo.',
 'loginlanguagelabel' => 'Jezik: $1',
 'suspicious-userlogout' => 'Vaš zahtev za odjavu je odbijen jer je poslat od strane neispravnog pregledača ili posrednika.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nepoznata greška u funkciji PHP mail().',
 'user-mail-no-addy' => 'Pokušali ste da pošaljete poruku bez e-adrese.',
 
@@ -1513,7 +1513,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'prefs-displaywatchlist' => 'Postavke prikaza',
 'prefs-diffs' => 'Razlike',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-adresa je ispravna',
 'email-address-validity-invalid' => 'Unesite ispravnu e-adresu',
 
@@ -2319,7 +2319,7 @@ Pogledajte [[{{MediaWiki:Listgrouprights-helppage}}|više detalja]] o pojedinač
 'listgrouprights-addgroup-self-all' => 'Dodaj sve grupe na sopstveni nalog',
 'listgrouprights-removegroup-self-all' => 'Ukloni sve grupe sa sopstvenog naloga',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.',
 'emailuser' => 'Pošalji e-poruku',
@@ -3827,7 +3827,7 @@ $8',
 'monthsall' => 'sve',
 'limitall' => 'sve',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potvrda e-adrese',
 'confirmemail_noemail' => 'Niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].',
 'confirmemail_text' => '{{SITENAME}} zahteva da potvrdite e-adresu pre nego što počnete da koristite mogućnosti e-pošte.
index f2bd238..6f58e15 100644 (file)
@@ -528,7 +528,7 @@ Täif, eer du fon näien fersäkst.',
 'loginlanguagelabel' => 'Sproake: $1',
 'suspicious-userlogout' => 'Dien Oumälde-Anfroage wuud ferwäigerd, deer ju fermoudelk fon n defekten Browser of n Cache-Proxy soand wuud.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Uunbekoanden Failer mäd ju Funktion mail() fon PHP',
 'user-mail-no-addy' => 'Fersoachte ne E-Mail sunner Angoawe fon ne E-Mail-Adresse tou ferseenden',
 
@@ -1144,7 +1144,7 @@ Ju duur maximoal $1 {{PLURAL:$1|Teeken|Teekene}} loang weese.',
 'prefs-displaywatchlist' => 'Anwies-Optione',
 'prefs-diffs' => 'Versionsfergliek',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Gultige E-Mail-Adrässe',
 'email-address-validity-invalid' => 'Ne gultige E-Mail-Adrässe is nöödich.',
 
@@ -1848,7 +1848,7 @@ Informatione uurhäär uur eenpelde Gjuchte konnen [[{{MediaWiki:Listgrouprights
 'listgrouprights-addgroup-self-all' => 'Kon aal Gruppen tou dät oaine Konto bietouföigje',
 'listgrouprights-removegroup-self-all' => 'Kon aal Gruppen fon dät oaine Konto wächhoalje',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Du bäst nit anmälded.',
 'mailnologintext' => 'Du moast [[Special:UserLogin|anmälded weese]] un sälwen ne [[Special:Preferences|gultige E-Mail-Adrässe]] anroat hääbe, uum uur Benutsere ne E-Mail tou seenden.',
 'emailuser' => 'Seende E-Mail an dissen Benutser',
@@ -3009,7 +3009,7 @@ Wiedere wäide standoardmäitich nit anwiesd.
 'monthsall' => 'aal',
 'limitall' => 'aal',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Email-Adrässe bestäätigje',
 'confirmemail_noemail' => 'Du hääst neen gultige E-Mail-Adresse in dien [[Special:Preferences|persöönelke Ienstaalengen]] iendrain.',
 'confirmemail_text' => '{{SITENAME}} ärfoardert, dät du dien E-Mail-Adresse bestäätigest (authentifizierje), eer du do fergratterde E-Mail-Funktione benutsje koast. Truch n Klik ap ju Skaltfläche unner wäd ne E-Mail an die fersoand. Disse E-Mail änthaalt ne Ferbiendenge mäd n Bestäätigengs-Code. Truch Klikken ap disse Ferbiendenge wäd bestäätiged, dät dien E-Mail-Adresse gultich is.',
index 4e41157..2c8b70a 100644 (file)
@@ -601,7 +601,7 @@ Tungguan heula sakeudeung, laju cobaan deui.',
 'loginlanguagelabel' => 'Basa: $1',
 'suspicious-userlogout' => "Pamundut anjeun pikeun kaluar log ditolak ku sabab sigana dikirim ku pangaprak buntu atawa ''cache'' proxi.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Kasalahan nu teu kanyahoan dina fungsi PHP surélék().',
 'user-mail-no-addy' => 'Nyobaan ngirim surélék tanpa alamat.',
 
@@ -1205,7 +1205,7 @@ Mun geus anggeus teu bisa dibolaykeun.',
 'prefs-displaywatchlist' => 'Pilihan pidangan',
 'prefs-diffs' => 'Béda',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamat surélék sigana bener',
 'email-address-validity-invalid' => 'Asupkeun alamat ratron nu bener',
 
@@ -1835,7 +1835,7 @@ Baca ogé [[Special:WantedCategories|kategori nu dipikabutuh]].',
 'listgrouprights-addgroup-self-all' => 'Tambahkeun sakabéh grup ka akun sorangan',
 'listgrouprights-removegroup-self-all' => 'Piceun sakabéh grup ti akun sorangan',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Euweuh alamat ngirim',
 'mailnologintext' => "Anjeun kudu '''[[Special:UserLogin|asup log]]''' sarta boga alamat surélék nu sah na [[Special:Preferences|préferénsi]] anjeun sangkan bisa nyurélékan pamaké séjén.",
 'emailuser' => 'Surélékan pamaké ieu',
@@ -2841,7 +2841,7 @@ Nu séjénna bakal disumputkeun sakumaha asalna.
 'monthsall' => 'kabéh',
 'limitall' => 'kabéh',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Konfirmasi alamat surélék',
 'confirmemail_noemail' => 'Alamat surélék anu didaptarkeun dina [[Special:Preferences|préferénsi pamaké]] anjeun teu sah.',
 'confirmemail_text' => 'Wiki ieu merlukeun anjeun sangkan méré konfirmasi alamat surélék saméméh migunakeun fitur surélék. Aktifkeun tombol di handap pikeun ngirimkeun surat konfirmasi ka alamat anjeun. Suratna ngandung tumbu nu ngandung sandina; muatkeun tumbuna kana panyungsi anjeun pikeun ngonfirmasi yén alamat surélék anjeun sah.',
index d0aec6b..e6ce2c8 100644 (file)
@@ -30,6 +30,7 @@
  * @author M.M.S.
  * @author MagnusA
  * @author Micke
+ * @author Mikez
  * @author NH
  * @author Najami
  * @author Nghtwlkr
@@ -796,8 +797,8 @@ fortsätta använda ditt gamla lösenord.',
 'blocked-mailpassword' => 'Din IP-adress är blockerad, därför kan den inte användas för att få ett nytt lösenord.',
 'eauthentsent' => 'Ett e-brev för bekräftelse har skickats till den e-postadress som angivits.
 Innan någon annan e-post kan skickas härifrån till kontot, måste du följa instruktionerna i e-brevet för att bekräfta att kontot verkligen är ditt.',
-'throttled-mailpassword' => 'Ett nytt lösenord har redan skickats för mindre än {{PLURAL:$1|en timme|$1 timmar}} sedan.
-För att förhindra missbruk skickas bara ett nytt lösenord per {{PLURAL:$1|timme|$1-timmarsperiod}}.',
+'throttled-mailpassword' => 'En lösenordsåterställning har redan skickats för mindre än {{PLURAL:$1|en timme|$1 timmar}} sedan.
+För att förhindra missbruk skickas bara en lösenordsåterställning per {{PLURAL:$1|timme|$1-timmarsperiod}}.',
 'mailerror' => 'Fel vid skickande av e-post: $1',
 'acct_creation_throttle_hit' => 'Besökare till den här wikin som har använt din IP-adress har skapat {{PLURAL:$1|1 användarkonto|$1 användarkonton}} under det senaste dygnet, vilket är det maximalt tillåtna inom den tidsperioden.
 Som ett resultat kan besökare som använder den här IP-adressen inte skapa några fler användarkonton just nu.',
@@ -847,7 +848,7 @@ Du kanske redan har lyckats ändra ditt lösenord eller begärt ett nytt tillfä
 
 # Special:PasswordReset
 'passwordreset' => 'Lösenordsåterställning',
-'passwordreset-text' => 'Fyll i detta formulär för att få en påminnelse om dina kontouppgifter via e-post.',
+'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-pretext' => '{{PLURAL:$1||Ange en av datadelarna nedan}}',
@@ -857,13 +858,13 @@ Du kanske redan har lyckats ändra ditt lösenord eller begärt ett nytt tillfä
 'passwordreset-capture-help' => 'Om du markerar den här rutan kommer e-postmeddelandet (med det tillfälliga lösenordet) visas för dig och skickas till användaren.',
 'passwordreset-email' => 'E-postadress:',
 'passwordreset-emailtitle' => 'Kontouppgifter på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Någon (förmodligen du, från IP-adressen $1) begärde en påminnelse av dina kontodetaljer för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
+'passwordreset-emailtext-ip' => 'Någon (förmodligen du, från IP-adressen $1) begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
 
 $2
 
 {{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.
 Du bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och du önskar inte att ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.',
-'passwordreset-emailtext-user' => 'Användaren $1 på {{SITENAME}} begärde en påminnelse om dina kontodetaljer för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
+'passwordreset-emailtext-user' => 'Användaren $1 på {{SITENAME}} begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
 
 $2
 
@@ -871,9 +872,9 @@ $2
 Du bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och du önskar inte att ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.',
 'passwordreset-emailelement' => 'Användarnamn: $1
 Tillfälligt lösenord: $2',
-'passwordreset-emailsent' => 'En påminnelse via e-post har skickats.',
-'passwordreset-emailsent-capture' => 'En påminnelse via e-post har skickats, som visas nedan.',
-'passwordreset-emailerror-capture' => 'En påminnelse via e-post har skapats, som visas nedan, men det gick inte att skicka den till användaren: $1',
+'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',
 
 # Special:ChangeEmail
 'changeemail' => 'Ändra e-postadress',
@@ -2892,7 +2893,7 @@ I det senare fallet kan du även använda en länk, exempel [[{{#Special:Export}
 'exportcuronly' => 'Inkludera endast den nuvarande versionen, inte hela historiken',
 'exportnohistory' => "----
 '''OBS:''' export av fullständig sidhistorik med hjälp av detta formulär har stängts av på grund av prestandaskäl.",
-'exportlistauthors' => 'Innehålla en fullständig lista över bidragsgivare för varje sida',
+'exportlistauthors' => 'Inkludera en fullständig lista över bidragsgivare för varje sida',
 'export-submit' => 'Exportera',
 'export-addcattext' => 'Lägg till sidor från kategori:',
 'export-addcat' => 'Lägg till',
@@ -3994,17 +3995,17 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'sqlite-no-fts' => '$1 utan stöd för fulltextsökning',
 
 # New logging system
-'logentry-delete-delete' => '$1 raderade sidan $3',
-'logentry-delete-restore' => '$1 återställde sidan $3',
-'logentry-delete-event' => '$1 ändrade synligheten för {{PLURAL:$5|en logghändelse|$5 logghändelser}} på $3: $4',
-'logentry-delete-revision' => '$1 ändrade synligheten för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4',
-'logentry-delete-event-legacy' => '$1 ändrade synligheten för logghändelser på $3',
-'logentry-delete-revision-legacy' => '$1 ändrade synligheten för versioner på sidan $3',
-'logentry-suppress-delete' => '$1 gömde sidan $3',
-'logentry-suppress-event' => '$1 ändrade i hemlighet synligheten för {{PLURAL:$5|en logghändelse|$5 logghändelser}} på $3: $4',
-'logentry-suppress-revision' => '$1 ändrade synligheten i hemlighet för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4',
-'logentry-suppress-event-legacy' => '$1 ändrade synligheten i hemlighet för logghändelser på $3',
-'logentry-suppress-revision-legacy' => '$1 ändrade synligheten i hemlighet för versioner på sidan $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|raderade}} sidan $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|återställde}} sidan $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|ändrade}} synligheten för {{PLURAL:$5|en logghändelse|$5 logghändelser}} på $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|ändrade}} synligheten för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|ändrade}} synligheten för logghändelser på $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|ändrade}} synligheten för versioner på sidan $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|gömde}} sidan $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|ändrade}} i hemlighet synligheten för {{PLURAL:$5|en logghändelse|$5 logghändelser}} på $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|ändrade}} synligheten i hemlighet för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|ändrade}} synligheten i hemlighet för logghändelser på $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|ändrade}} synligheten i hemlighet för versioner på sidan $3',
 'revdelete-content-hid' => 'innehåll dolt',
 'revdelete-summary-hid' => 'redigeringssammanfattning dold',
 'revdelete-uname-hid' => 'användarnamn dolt',
@@ -4013,20 +4014,20 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'revdelete-uname-unhid' => 'användarnamn synligt',
 'revdelete-restricted' => 'satte begränsningar för administratörer',
 'revdelete-unrestricted' => 'tog bort begränsningar för administratörer',
-'logentry-move-move' => '$1 flyttade sidan $3 till $4',
-'logentry-move-move-noredirect' => '$1 flyttade sidan $3 till $4 utan att lämna en omdirigering',
-'logentry-move-move_redir' => '$1 flyttade sidan $3 till $4 över en omdirigering',
-'logentry-move-move_redir-noredirect' => '$1 flyttade sidan $3 till $4 över en omdirigering utan att lämna en omdirigering',
-'logentry-patrol-patrol' => '$1 markerade versionen $4 av sidan $3 som patrullerad',
-'logentry-patrol-patrol-auto' => '$1 markerade automatiskt versionen $4 av sidan $3 som patrullerad',
-'logentry-newusers-newusers' => 'Användarkonto $1 skapades',
-'logentry-newusers-create' => 'Användarkonto $1 skapades',
-'logentry-newusers-create2' => 'Användarkonto $3 skapades av $1',
-'logentry-newusers-byemail' => 'Användarkontot $3 skapades av $1 och lösenordet skickades via e-post',
-'logentry-newusers-autocreate' => 'Kontot $1 skapades automatiskt',
-'logentry-rights-rights' => '$1 ändrade gruppmedlemskap för $3 från $4 till $5',
-'logentry-rights-rights-legacy' => '$1 ändrade gruppmedlemskap för $3',
-'logentry-rights-autopromote' => '$1 befordrades automatiskt från $4 till $5',
+'logentry-move-move' => '$1 {{GENDER:$2|flyttade}} sidan $3 till $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|flyttade}} sidan $3 till $4 utan att lämna en omdirigering',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|flyttade}} sidan $3 till $4 över en omdirigering',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|flyttade}} sidan $3 till $4 över en omdirigering utan att lämna en omdirigering',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|markerade}} versionen $4 av sidan $3 som patrullerad',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|markerade}} automatiskt versionen $4 av sidan $3 som patrullerad',
+'logentry-newusers-newusers' => 'Användarkonto $1 har {{GENDER:$2|skapats}}',
+'logentry-newusers-create' => 'Användarkonto $1 har {{GENDER:$2|skapats}}',
+'logentry-newusers-create2' => 'Användarkonto $3 har {{GENDER:$2|skapats}} av $1',
+'logentry-newusers-byemail' => 'Användarkontot $3 har {{GENDER:$2|skapats}} av $1 och lösenordet skickades via e-post',
+'logentry-newusers-autocreate' => 'Användarkontot $1 {{GENDER:$2|skapades}} automatiskt',
+'logentry-rights-rights' => '$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3 från $4 till $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5',
 'rightsnone' => '(inga)',
 
 # Feedback
index f2ead23..2a7c956 100644 (file)
@@ -625,7 +625,7 @@ Tafadhali subiri kwanza kabla ya kujaribu tena.',
 'loginlanguagelabel' => 'Lugha: $1',
 'suspicious-userlogout' => 'Ombi lako la kutoka kwenye akaunti yako limehiniwa, kwa sababu inaonekana kwamba ombi lilitumwa na kivinjari kilichoharibika au seva ya kuwakilisha yenye kache.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Hitilafu isiyojulikana katika ufanyajikazi wa barua za PHP ().',
 'user-mail-no-addy' => 'Umejaribu kutuma barua pepe bila anwani ya barua pepe.',
 
@@ -1247,7 +1247,7 @@ Taarifa hii itakuwa wazi.',
 'prefs-displaywatchlist' => 'Mapendekezo ya kuzinza',
 'prefs-diffs' => 'Tofauti',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Anwani ya barua pepe inaonekana kuwa sawa',
 'email-address-validity-invalid' => 'Ingiza anwani halisi ya barua pepe',
 
@@ -1943,7 +1943,7 @@ Labda patakuwa na [[{{MediaWiki:Listgrouprights-helppage}}|maelezo mengine]] kuh
 'listgrouprights-addgroup-self-all' => 'Kuongeza makundi yote katika akaunti ya binafsi',
 'listgrouprights-removegroup-self-all' => 'Kuondoa makundi yote kutoka akaunti ya binafsi',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Hakuna anwani wa kutuma',
 'mailnologintext' => 'Ukitaka kutuma barua pepe kwa watumiaji wengine inabidi uwe [[Special:UserLogin|umeshaingia kwenye akaunti yako]] na pia uwe na anwani ya barua pepe sahihi pale [[Special:Preferences|mapendekezo yako]].',
 'emailuser' => 'Mtumie mtumiaji huyu barua pepe',
@@ -2870,7 +2870,7 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi.
 'monthsall' => 'yote',
 'limitall' => 'zote',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Kuyakinisha anwani ya barua pepe',
 'confirmemail_noemail' => 'Hakuna anwani ya barua pepe halali kwenye [[Special:Preferences|mapendekezo yako]].',
 'confirmemail_text' => '{{SITENAME}} inakutakia uyakinishe anwani yako ya barua pepe kabla kutumia zana zinazohusika barua pepe.
index 4cbd8eb..03d6c19 100644 (file)
@@ -533,7 +533,7 @@ Coby powstřimać nadužyća, možliwość wysyuańa připůmńeń naštalowano
 'loginlanguagelabel' => 'Godka: $1',
 'suspicious-userlogout' => 'Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Ńyznany feler we funkcyji mail()',
 'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
 
@@ -1645,7 +1645,7 @@ Sprowdź zajta [[{{MediaWiki:Listgrouprights-helppage}}|s dodatkowymi informacja
 'listgrouprights-removegroup-all' => 'Idźe wyćepać s wszyjstkich grup',
 'listgrouprights-addgroup-self' => 'Je mogebny dać swe konto do {{PLURAL:$2|grupy|grup:}} $1',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Brak adresu',
 'mailnologintext' => 'Muśyš śe [[Special:UserLogin|zalůgować]] i mjeć wpisany aktualny adres e-brif w swojich [[Special:Preferences|preferyncyjach]], coby můc wysuać e-brif do inkšygo užytkowńika.',
 'emailuser' => 'Poślij tymu używoczowi e-brif',
@@ -2646,7 +2646,7 @@ Eli plik był modyfikowany, dane mogům w tajli ńy być we zgodźe ze parametr
 'namespacesall' => 'wszyjske',
 'monthsall' => 'wšyskie',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potwjerdź adres e-brif',
 'confirmemail_noemail' => 'Ńy podoužeś prawiduowygo adresa e-brifa we [[Special:Preferences|preferencyjach]].',
 'confirmemail_text' => 'Projekt {{SITENAME}} wymago weryfikacyji adresa e-brif před užyćym fůnkcyji kořistajůncych s počty.
index dbd54c4..2fae26a 100644 (file)
@@ -10,6 +10,7 @@
  * @author Aswn
  * @author Balajijagadesh
  * @author Caliberoviv
+ * @author ElangoRamanujam
  * @author Kaganer
  * @author Kanags
  * @author Karthi.dr
@@ -571,9 +572,10 @@ MySQL returned error "$3: $4".',
 'loginlanguagelabel' => 'மொழி: $1',
 'suspicious-userlogout' => 'உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "PHP 's mail() செயல்பாட்டில் அறியப்படாத பிழை.",
 'user-mail-no-addy' => 'மின்னஞ்சல் முகவரி இல்லாமல் மின்னஞ்சல் அனுப்ப முயற்சித்தது.',
+'user-mail-no-body' => 'வெற்று அல்லது மிகவும் சிறிய அளவுள்ள மின்னஞ்சலை அனுப்ப முயற்சித்துள்ளீர்.',
 
 # Change password dialog
 'resetpass' => 'கடவுச்சொல்லை மாற்றியமை',
@@ -594,7 +596,7 @@ MySQL returned error "$3: $4".',
 
 # Special:PasswordReset
 'passwordreset' => 'கடவுச்சொல்லை மீட்டமை',
-'passwordreset-text' => ' à®\89à®\99à¯\8dà®\95ளà¯\8d à®\95ணà®\95à¯\8dà®\95à¯\81 à®µà®¿à®µà®°à®\99à¯\8dà®\95ளà¯\88 à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®¨à®¿à®©à¯\88வà¯\81பà®\9fà¯\81தà¯\8dதி à®®à¯\82லமாà®\95 à®ªà¯\86à®± à®\87நà¯\8dத படிவத்தை பூர்த்தி செய்யவும்.',
+'passwordreset-text' => ' à®\89à®\99à¯\8dà®\95ளà¯\8d à®\95à®\9fவà¯\81à®\9aà¯\8dà®\9aà¯\8aலà¯\8dலà¯\88 à®®à¯\80à®\9fà¯\8dà®\9fà®®à¯\88à®\95à¯\8dà®\95 à®\87பà¯\8dபடிவத்தை பூர்த்தி செய்யவும்.',
 'passwordreset-legend' => 'கடவுச்சொல்லை மீட்டமை',
 'passwordreset-disabled' => 'கடவுச்சொல் மீட்டமைப்பு இந்த விக்கியில் செயலிழக்க செய்யப்பட்டுள்ளது.',
 'passwordreset-pretext' => '{{PLURAL:$1|| தரவு பகுதி ஒன்றை கீழே உள்ளிடு}}',
@@ -620,9 +622,9 @@ $2
 அல்லது உங்கள் மூல கடவுச்சொல் நினைவில் இருந்தாலோ இதை மாற்ற வேண்டிய அவசியம் இல்லை,நீங்கள் இந்த தகவலை புறக்கணித்துவிட்டுஉங்கள் பழைய கடவுச்சொல்லையே பயன்படுத்திக்கொள்ளலாம்.',
 'passwordreset-emailelement' => 'பயனர் பெயர்:  $1
 தற்காலிகக் கடவுச்சொல்: $2',
-'passwordreset-emailsent' => 'நினà¯\88வà¯\82à®\9fà¯\8dà®\9fும் மின்னஞ்சல் அனுப்பப்பட்டது.',
-'passwordreset-emailsent-capture' => 'à®\95à¯\80à®´à¯\87 à®\95ாணà¯\8dபிà®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளதà¯\81 à®ªà¯\8bலà¯\8d à®¨à®¿à®©à¯\88வà¯\81பà®\9fà¯\81தà¯\8dதி மின்னஞ்சல் அனுப்பப்பட்டது.',
-'passwordreset-emailerror-capture' => 'நினà¯\88வà¯\81பà®\9fà¯\81தà¯\8dதி à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d  à®\89à®°à¯\81வாà®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81விà®\9fà¯\8dà®\9fதà¯\81,அது கீழே காட்டப்பட்டுள்ளது, ஆனால் பயனீட்டாளருக்கு அனுப்புவது தோல்வியடைந்தது:$1',
+'passwordreset-emailsent' => 'à®\95à®\9fவà¯\81à®\9aà¯\8dà®\9aà¯\8aலà¯\8d à®®à¯\80à®\9fà¯\8dà®\9fà®®à¯\88à®\95à¯\8dà®\95ும் மின்னஞ்சல் அனுப்பப்பட்டது.',
+'passwordreset-emailsent-capture' => 'à®\95à¯\80à®´à¯\87 à®\95ாணà¯\8dபிà®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளதà¯\81 à®ªà¯\8bலà¯\8d à®\95à®\9fவà¯\81à®\9aà¯\8dà®\9aà¯\8aலà¯\8d à®®à¯\80à®\9fà¯\8dà®\9fà®®à¯\88à®\95à¯\8dà®\95à¯\81à®®à¯\8d மின்னஞ்சல் அனுப்பப்பட்டது.',
+'passwordreset-emailerror-capture' => 'à®\95à®\9fவà¯\81à®\9aà¯\8dà®\9aà¯\8aலà¯\8d à®®à¯\80à®\9fà¯\8dà®\9fà®®à¯\88à®\95à¯\8dà®\95à¯\81à®®à¯\8d à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d  à®\89à®°à¯\81வாà®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81விà®\9fà¯\8dà®\9fதà¯\81அது கீழே காட்டப்பட்டுள்ளது, ஆனால் பயனீட்டாளருக்கு அனுப்புவது தோல்வியடைந்தது:$1',
 
 # Special:ChangeEmail
 'changeemail' => 'மின்னஞ்சல் முகவரியை மாற்று',
@@ -1174,7 +1176,7 @@ $1",
 'timezoneregion-indian' => 'இந்தியப் பெருங்கடல்',
 'timezoneregion-pacific' => 'பசிபிக் பெருங்கடல்',
 'allowemail' => 'ஏனைய பயனர்களிடம் இருந்தான மின்னஞ்சல்களை அனுமதி',
-'prefs-searchoptions' => 'தà¯\87à®\9fலà¯\8d à®µà®¿à®°à¯\81பà¯\8dபதà¯\8d à®¤à¯\87à®°à¯\8dவà¯\81à®\95ளà¯\8d',
+'prefs-searchoptions' => 'தà¯\87à®\9fà¯\81à®\95',
 'prefs-namespaces' => 'பெயர்வெளிகள்',
 'defaultns' => 'அப்படியில்லையென்றால் இந்த பொயர்வெளிகளில் தேடவும்:',
 'default' => 'பொதுவானது',
@@ -1188,8 +1190,8 @@ $1",
 'prefs-textboxsize' => 'தொகுக்கும் சாளரத்தின் அளவு',
 'youremail' => 'மின்னஞ்சல்:',
 'username' => '{{GENDER:$1|பயனர் பெயர்}}:',
-'uid' => 'பயனர்:',
-'prefs-memberingroups' => 'பின்வரும் {{PLURAL:$1|குழு|குழுக்களில்}} உறுப்பினர்:',
+'uid' => '{{பாலினம்:$1|பயனர்}}:',
+'prefs-memberingroups' => 'பின்வரும் {{பன்மை:$1|குழு|குழுக்களில்}} {{பாலினம்:$2|உறுப்பினர்}}:',
 'prefs-registration' => 'பதிவு செய்யும் நேரம்:',
 'yourrealname' => 'உண்மைப் பெயர்:',
 'yourlanguage' => 'மொழி:',
@@ -1226,7 +1228,7 @@ $1",
 'prefs-displaywatchlist' => 'விருப்பத்தேர்வுகளைக் காட்டு',
 'prefs-diffs' => 'வித்தியாசங்கள்',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'மின்னஞ்சல் முகவரி முறையானதாகத் தோன்றுகிறது',
 'email-address-validity-invalid' => 'முறையான மின்னஞ்சல் முகவரியை உள்ளிடுக',
 
@@ -1574,7 +1576,7 @@ $1',
 'backend-fail-writetemp' => 'தற்காலிக கோப்பில் எழுத இயலவில்லை.',
 'backend-fail-closetemp' => 'தற்காலிக கோப்பை மூட முடியவில்லை.',
 'backend-fail-read' => '$1 கோப்பை படிக்க இயலவில்லை .',
-'backend-fail-create' => '$1 கோப்பை உருவாக்க இயலவில்லை .',
+'backend-fail-create' => '"$1" கோப்பை எழுத இயலவில்லை .',
 'backend-fail-connect' => '"$1" பின்புல சேமிப்புக்கு தொடர்பு கொள்ள இயலவில்லை.',
 'backend-fail-internal' => '"$1" பின்புல சேமிப்பில் அறியாப் பிழை ஒன்று நேர்ந்துள்ளது',
 'backend-fail-contenttype' => '"$1" இல் சேமிக்க கோப்பின் உள்ளடக்க வகையை உறுதிசெய்ய முடியவில்லை',
@@ -1781,6 +1783,8 @@ $1',
 'disambiguationspage' => 'Template:பக்கவழி நெறிப்படுத்தல்',
 'disambiguations-text' => "பின்வரும் பக்கங்கள் '''பக்கவழி நெறிப்படுத்தல் பக்கத்துக்கு''' இணைக்கப்பட்டுள்ளன. மாறாக இவை பொருத்தமன தலைப்பிற்கு இணைக்கப்பட வேண்டும். <br />[[MediaWiki:Disambiguationspage|பக்கவழி நெறிப்படுத்தல் பக்கங்கத்தில்]] உள்ள வார்ப்புரு இணைக்கப்பட்ட பக்கங்கள்  பக்கவழி நெறிப்படுத்தல் பக்கங்கள் என் கருதப்படும்.",
 
+'pageswithprop-submit' => 'செல்க',
+
 'doubleredirects' => 'இரட்டை வழிமாற்றுகள்',
 'doubleredirectstext' => 'இந்தப் பட்டியல் போலியான நேர்மதிப்புக்களைக் கொண்டிருக்கக்கூடும். இது வழக்கமாக, இணைப்புடன் கூடிய மேலதிக உரை முதலாவது #வழிமாற்றுக்குக் கீழ் இருப்பதைக் குறிக்கும்.ஒவ்வொரு வரியும், முதலாம் இரண்டாம் வழிமாற்றுகளுக்கு இணைப்புகளைக் கொண்டிருப்பதுடன், இரண்டாவது வழிமாற்று உரையின் முதல் வரிக்கும் இணைப்பைக் கொண்டிருக்கும், இது வழக்கமாக முதலாவது வழிமாற்று குறித்துக் காட்ட வேண்டிய "உண்மையான" இலக்குக் கட்டுரையைக் கொடுக்கும்.',
 'double-redirect-fixed-move' => '[[$1]] நகர்த்தப்பட்டுவிட்டது. இப்பொழுது [[$2]] உக்கு வழிமாற்று தருகின்றது.',
@@ -1958,7 +1962,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'எல்லா குழுவையும் சொந்த கணக்கில் சேர்',
 'listgrouprights-removegroup-self-all' => 'எல்லா குழுவையும் சொந்த கணக்கில் இருந்து  நீக்கு',
 
-# E-mail user
+# Email user
 'mailnologin' => 'அனுப்பும் முகவரி இல்லை',
 'mailnologintext' => 'நீங்கள்[[Special:UserLogin|புகுபதிகை செய்திருப்பதுடன்]]
 ஏனைய பயனர்களுக்கு மின்னஞ்சல் அனுப்பக்கூடியத்தாக செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியொன்றும் உங்களுடைய  [[Special:Preferences|விருப்பத் தெரிவுகளில்]] கொடுபட்டிருக்கவேண்டும்.',
@@ -2611,6 +2615,8 @@ $1',
 'import-invalid-interwiki' => 'குறிப்பிட்ட விக்கியில் இருந்து இறக்குமதி செய்யமுடியாது .',
 'import-error-edit' => 'பக்கம் "$1" ஆனது இறக்குமதி செய்யப்படவில்லை ,ஏனெனில் அதை நீங்கள் திருத்த அனுமதிக்கப்படவில்லை.',
 'import-error-create' => 'பக்கம் "$1" ஆனது இறக்குமதி செய்யப்படவில்லை ,ஏனெனில் அதை நீங்கள் உருவாக்க  அனுமதிக்கப்படவில்லை.',
+'import-error-invalid' => 'பக்கம் "$1" பதிவிறக்கம் செய்யப்படவில்லை, ஏனெனில் அதன் பெயர் செல்லாது.',
+'import-rootpage-invalid' => 'கொடுக்கப்பட்ட மூலப்பக்கம் செல்லாத தலைப்பாகும்.',
 
 # Import log
 'importlogpage' => 'இறக்குமதி பதிகை',
@@ -2729,8 +2735,11 @@ $1',
 'pageinfo-article-id' => 'பக்க அடையாள இலக்கம்',
 'pageinfo-language' => 'பக்க உள்ளடக்க மொழி',
 'pageinfo-robot-policy' => 'தேடற்பொறி நிலைமை',
+'pageinfo-robot-index' => 'வகைப்படக்கூடியது',
+'pageinfo-robot-noindex' => 'வகைப்படாதது.',
 'pageinfo-views' => 'காட்சிகள் எண்ணிக்கை',
-'pageinfo-watchers' => 'பார்வையாளர்கள் எண்ணிக்கை',
+'pageinfo-watchers' => 'பக்கப் பார்வையாளர்கள் எண்ணிக்கை',
+'pageinfo-few-watchers' => 'விட குறைவானது $1 {{PLURAL:$1|watcher|watchers}}',
 'pageinfo-redirects-name' => 'இந்தப் பக்கத்திற்கான வழிமாற்றுகள்',
 'pageinfo-subpages-name' => 'இந்தப் பக்கத்தின் துணைப் பக்கங்கள்',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|வழிமாற்று|வழிமாற்றுகள்}}; $3 {{PLURAL:$3|வழிமாற்றில்லாதது|வழிமாற்றில்லாதவை}})',
@@ -2830,6 +2839,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1மணி| $1  மணிகள்}}',
 'days' => '{{PLURAL:$1|$1நாள்|$1 நாட்கள்}}',
 'ago' => '$1 முன்பு',
+'just-now' => 'சடுதியில்.',
 
 # Bad image list
 'bad_image_list' => 'முறை பின்வருமாறு:
@@ -3253,7 +3263,7 @@ $1',
 'monthsall' => 'அனைத்து மாதங்களும்',
 'limitall' => 'அனைத்து',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'மின்னஞ்சல் முகவரியை உறுதிப்படுத்துக',
 'confirmemail_noemail' => 'உங்கள் [[Special:Preferences|பயனர் விருப்பத்தேர்வுகளில்]] செல்லுபடியான மின்னஞ்சல் முகவரியைக் குறிப்பிடவில்லை.',
 'confirmemail_text' => 'மின்னஞ்சல் சிறப்பியல்புகளைப் பயன்படுத்துவதற்கு {{SITENAME}} தளம் உங்களது மின்னஞ்சல் உறுதிப்படுத்தப்பட வேண்டும் மென எதிர்பார்க்கின்றது. உறுதிப்படுத்தல் மின்னஞ்சல் ஒன்றை அனுப்ப கீழுள்ள விசையை முடுக்கவும். மின்னஞ்சல் ஒரு இணைப்பைக் கொண்டிருக்கும்; உங்கள் மின்னஞ்சலை உறுதிப்படுத்த இவ்விணைப்பை உங்கள் உலாவியில் திறக்கவும்.',
index 5c28ebd..7dbcac1 100644 (file)
@@ -642,7 +642,7 @@ $2',
 'loginlanguagelabel' => 'భాష: $1',
 'suspicious-userlogout' => 'సరిగా పనిచేయని విహారిణి లేదా కాషింగ్ ప్రాక్సీ వల్ల పంపబడడం చేత, నిష్క్రమించాలనే మీ అభ్యర్థనని నిరాకరించారు.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP యొక్క mail() ఫంక్షన్‍లో ఏదో తెలియని లోపం దొర్లింది',
 'user-mail-no-addy' => 'ఈ-మెయిలు చిరునామాని ఇవ్వకుండానే ఈ-మెయిలు పంపడానికి ప్రయత్నించారు.',
 
@@ -1281,7 +1281,7 @@ $1",
 'prefs-displaywatchlist' => 'ప్రదర్శన ఎంపికలు',
 'prefs-diffs' => 'తేడాలు',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ఈ-మెయిలు చిరునామా సరిగానే ఉన్నట్టుంది',
 'email-address-validity-invalid' => 'దయచేసి సరైన ఈమెయిలు చిరునామాని ఇవ్వండి',
 
@@ -1990,7 +1990,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'listgrouprights-addgroup-self-all' => 'అన్ని సమూహాలని స్వంత ఖాతాకి చేర్చుకోలగడటం',
 'listgrouprights-removegroup-self-all' => 'స్వంత ఖాతా నుండి అన్ని సమూహాలనూ తొలగించుకోగలగడం',
 
-# E-mail user
+# Email user
 'mailnologin' => 'పంపించవలసిన చిరునామా లేదు',
 'mailnologintext' => 'ఇతరులకు ఈ-మెయిలు పంపించాలంటే, మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిలు చిరునామా ఇచ్చి ఉండాలి.',
 'emailuser' => 'ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి',
@@ -3236,7 +3236,7 @@ $1',
 'monthsall' => 'అన్నీ',
 'limitall' => 'అన్నీ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ఈ-మెయిలు చిరునామా ధృవీకరించండి',
 'confirmemail_noemail' => '[[Special:Preferences|మీ అభిరుచులలో]] ఈమెయిలు అడ్రసు పెట్టి లేదు.',
 'confirmemail_text' => '{{SITENAME}}లో ఈ-మెయిలు అంశాల్ని వాడుకునే ముందు మీ ఈ-మెయిలు చిరునామాను నిర్ధారించవలసిన అవసరం ఉంది.
index c15263a..4104810 100644 (file)
@@ -743,14 +743,22 @@ Ita-nia mudansa la armazenadu seidauk!",
 'whatlinkshere-hidelinks' => '$1 ligasaun',
 
 # Block/unblock
+'block' => "Blokeiu uza-na'in",
 'blockip' => "Blokeiu uza-na'in",
 'blockip-legend' => "Blokeiu uza-na'in",
+'ipadressorusername' => "Diresaun IP ka naran uza-na'in:",
+'ipbexpiry' => 'Tempu:',
 'ipbreason' => 'Motivu:',
 'ipbreasonotherlist' => 'Motivu seluk',
+'ipbcreateaccount' => 'La bele kria konta foun',
+'ipbemailban' => 'La bele haruka korreiu eletróniku',
 'ipbsubmit' => "Blokeiu uza-na'in ne'e",
 'ipbother' => 'Tempu seluk:',
 'ipboptions' => '2 hours:2 hours,1 loron:1 day,3 Loron:3 days,1 semana:1 week,2 semana:2 weeks,1 fulan:1 month,3 fulan:3 months,6 fulan:6 months,1 tinan:1 year,infinite:infinite',
 'ipbotheroption' => 'seluk',
+'ipbhidename' => "Subar naran uza-na'in (iha kontribuisaun no lista seluk)",
+'ipbwatchuser' => "Hateke pájina uza-na'in nian (hamutuk ho pájina diskusaun)",
+'ipb-disableusertalk' => 'La bele edita ninia pájina diskusaun',
 'ipblocklist' => "Uza-na'in sira-ne'ebé la bele edita",
 'blocklist-reason' => 'Razaun',
 'ipblocklist-submit' => 'Buka',
index 6d8f1d3..61887af 100644 (file)
@@ -1236,7 +1236,7 @@ Jak klik kardani rūi unvoni sutunho boisi taƣjiri tartibi namoişi parvandaho
 'listgrouprights-helppage' => 'Help:Dastrasihoi gurūhī',
 'listgrouprights-members' => "(fehristi a'zojon)",
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nişonae az firistanda vuçud nadorad',
 'mailnologintext' => "Baroi firistodani poctai elektronī baroi korbaroni digar bojad [[Special:UserLogin|ba sistem vorid şaved]] va nişonai poctai elektroniji mū'tabar dar [[Special:Preferences|tarçihoti]] xud doşta boşed.",
 'emailuser' => 'Firistodani email ba in korbar',
@@ -2126,7 +2126,7 @@ Faqat satrhoe, ki bo * şurū' şavand ba nazar girifta meşavand. Avvalin pajva
 'monthsall' => 'hama',
 'limitall' => 'hama',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Tasdiqi nişonai poctai elektronī',
 'confirmemail_noemail' => "Şumo dar sahifai [[Special:Preferences|tarçihoti korbarii]] xud nişonai poctai elektroniji mū'tabarero vorid nakardaed.",
 'confirmemail_text' => "{{SITENAME}} ta'jidi e'tiboi poctai elektroniji şumoro peş az istifoda xidmati elektronī talab mekunad. Tugmai zerinro fa'ol kuned to nomai ta'jidī ba poctai elektroniji şumo firistoda şavad. In noma pajvandero dar bar megirad, ki kode dorad; pajvandro dar mururgar boz kuned, to ki poctai elektroniaton  dar haqiqat ta'jid şavad.",
index fd59e98..dd7fd4a 100644 (file)
@@ -2470,7 +2470,7 @@ $1',
 'unblockip' => 'ปลดบล็อกผู้ใช้',
 'unblockiptext' => 'ใช้แบบด้านล่างเพื่อคืนสิทธิการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก',
 'ipusubmit' => 'ยกเลิกการบล็อกนี้',
-'unblocked' => '[[User:$1|$1]] à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81',
+'unblocked' => '[[User:$1|$1]] à¸\96ูà¸\81à¸\9bลà¸\94à¸\9aลà¹\87อà¸\81à¹\81ลà¹\89ว',
 'unblocked-range' => '$1 ถูกปลดบล็อกแล้ว',
 'unblocked-id' => 'เลิกบล็อก $1',
 'blocklist' => 'ผู้ใช้ที่ถูกบล็อก',
index d07b794..84c3abc 100644 (file)
@@ -1808,7 +1808,7 @@ Goldanylýan protokollar: <code>$1</code>',
 'listgrouprights-addgroup-self-all' => 'Ähli toparlary öz hasabyňa goş',
 'listgrouprights-removegroup-self-all' => 'Ähli toparlary öz hasabyňdan aýyr',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Iberer ýaly adres ýok',
 'mailnologintext' => 'Başga ulanyjylara e-poçta ibermek üçin [[Special:UserLogin|sessiýaňyz açyk bolmaly]] hem-de [[Special:Preferences|ileri tutmalarda]] dogry bir e-poçta adresiňiz bolmalydyr.',
 'emailuser' => 'Bu ulanyja e-poçta iber',
@@ -2885,7 +2885,7 @@ Ondan soňraky çykgyt(lar) kadadan çykma hökmünde kabul edilýär, meselem:
 'monthsall' => 'ählisi',
 'limitall' => 'ählisi',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-poçta adresini tassykla',
 'confirmemail_noemail' => '[[Special:Preferences|Ulanyjy sazlamalaryňyzda]] bellenilen dogry bir e-poçta adresiňiz ýok.',
 'confirmemail_text' => '{{SITENAME}} saýtynyň e-poçta amallaryny ulanmak üçin, ilki bilen e-poçta adresiňiziň tassyklanmagy zerurdyr.
index 27ded0f..f8c609a 100644 (file)
@@ -672,7 +672,7 @@ Maghintay po muna bago subukan uli.',
 'loginlanguagelabel' => 'Wika: $1',
 'suspicious-userlogout' => "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Hindi malamang kamalian sa tungkulin ng liham ng PHP ()',
 'user-mail-no-addy' => 'Sinubukang magpadala ng e-liham na walang tirahan na para sa e-liham.',
 
@@ -1358,7 +1358,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'prefs-displaywatchlist' => 'Ipakita ang mga pagpipilian',
 'prefs-diffs' => 'Mga pagkakaiba',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Mukhang katanggap-tanggap ang direkisyong e-liham',
 'email-address-validity-invalid' => 'Magpasok ng isang tanggap na direksiyong e-liham',
 
@@ -2148,7 +2148,7 @@ Maaaring may mga [[{{MediaWiki:Listgrouprights-helppage}}|karagdagang kabatiran]
 'listgrouprights-addgroup-self-all' => 'Idagdag ang lahat ng mga pangkat sa sariling akawnt',
 'listgrouprights-removegroup-self-all' => 'Alisin ang lahat ng mga pangkat mula sa sariling akawnt',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Walang adres na mapagpapadalahan',
 'mailnologintext' => 'Kailangan mong [[Special:UserLogin|lumagda]] at magkaroon ng tanggap na e-liham sa iyong [[Special:Preferences|mga kagustuhan]] para makapagpadala ng e-liham sa ibang mga tagagamit.',
 'emailuser' => 'Padalhan ng e-liham ang tagagamit',
@@ -3631,7 +3631,7 @@ $8',
 'monthsall' => 'lahat',
 'limitall' => 'lahat',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Patotohanan ang adres ng e-liham',
 'confirmemail_noemail' => 'Wala kang nakatakdang tanggap na adres ng e-liham sa iyong [[Special:Preferences|mga kagustuhan ng tagagamit]].',
 'confirmemail_text' => "Pinagagawa ng {{SITENAME}} na patotohanan mo ang iyong adres ng e-liham bago gamitin ang mga kasangkapang-katangian ng e-liham.  Pindutin at buhayin ang pindutan sa ibaba para makapagpadala ng isang makapagpapatotoong e-liham (kompirmasyon) patungo sa iyong adres.
index 7a249ab..78b8008 100644 (file)
@@ -1975,6 +1975,8 @@ Sıradaki liste sadece bu dosyaya bağlantı veren {{PLURAL:$1|ilk dosyayı|ilk
 'sharedupload-desc-there' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir. Daha fazla bilgi için lütfen [$2 dosya açıklama sayfasına] bakın.',
 'sharedupload-desc-here' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir.
 Aşağıda [$2 dosya açıklama sayfasındaki] açıklama gösteriliyor.',
+'sharedupload-desc-create' => 'Bu dosya, $1 ve diğer projeler tarafından kullanılıyor olabilir. 
+Dosya açıklamasını düzenlemek isterseniz, [$2 dosya açıklama sayfası] bulunmaktadır.',
 'filepage-nofile' => 'Bu isimde bir dosya yok.',
 'filepage-nofile-link' => 'Bu isimde bir dosya yok, ama siz [$1 yükleyebilirsiniz].',
 'uploadnewversion-linktext' => 'Dosyanın yenisini yükleyin',
@@ -2061,6 +2063,8 @@ Aşağıda [$2 dosya açıklama sayfasındaki] açıklama gösteriliyor.',
 'disambiguationspage' => 'Template:Anlam ayrımı',
 'disambiguations-text' => 'İlk satırda yer alan sayfalar bir anlam ayrım sayfasına iç bağlantı olduğunu gösterir. İkinci sırada yer alan sayfalar anlam ayrım sayfalarını gösterir. <br />Burada [[MediaWiki:Disambiguationspage]] tüm anlam ayrım şablonlarına bağlantılar verilmesi gerekmektedir.',
 
+'pageswithprop-submit' => 'Git',
+
 'doubleredirects' => 'Çift yönlendirmeler',
 'doubleredirectstext' => 'Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler.
 Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca ikinci yönlendirmenin hedefi, ki bu genelde birinci yönlendirmenin göstermesi gereken "gerçek" hedef sayfasıdır.
index 3dca5c6..e308178 100644 (file)
@@ -224,15 +224,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү бите ачылсын (JavaScript кирәк)',
 'tog-showtoc' => 'Эчтәлек күрсәтелсен (3 тән күбрәк башламлы битләрдә)',
 'tog-rememberpassword' => 'Хисап язмамны бу браузерда саклансын (иң күп $1 {{PLURAL:$1|көн|көн|көн}}гә кадәр)',
-'tog-watchcreations' => 'ТөзегÓ\99н Ð±Ð¸Ñ\82лÓ\99Ñ\80ем күзәтү исемлегемә өстәлсен',
-'tog-watchdefault' => 'Үзгәрткән битләрем күзәтү исемлегемә өстәлсен',
-'tog-watchmoves' => 'Ð\9aÒ¯Ñ\87еÑ\80гÓ\99н Ð±Ð¸Ñ\82лÓ\99Ñ\80ем күзәтү исемлегемә өстәлсен',
-'tog-watchdeletion' => 'Ð\91еÑ\82еÑ\80елгÓ\99н Ð±Ð¸Ñ\82лÓ\99Ñ\80емне ÐºÒ¯Ð·Ó\99Ñ\82Ò¯ Ð¸Ñ\81емлегемгÓ\99 Ó©Ñ\81Ñ\82Ó\99Ò¯',
+'tog-watchcreations' => 'Ð\9cин Ñ\82өзегÓ\99н Ð±Ð¸Ñ\82лÓ\99Ñ\80 Ò»Ó\99м Ð¹Ó©ÐºÐ»Ó\99гÓ\99н Ñ\84айллаÑ\80 күзәтү исемлегемә өстәлсен',
+'tog-watchdefault' => 'Мин үзгәрткән битләр һәм файллар күзәтү исемлегемә өстәлсен',
+'tog-watchmoves' => 'Ð\9cин ÐºÒ¯Ñ\87еÑ\80гÓ\99н Ð±Ð¸Ñ\82лÓ\99Ñ\80 Ò»Ó\99м Ñ\84айллаÑ\80 күзәтү исемлегемә өстәлсен',
+'tog-watchdeletion' => 'Ð\9cин Ð±ÐµÑ\82еÑ\80гÓ\99н Ð±Ð¸Ñ\82лÓ\99Ñ\80 Ò»Ó\99м Ñ\84айллаÑ\80нÑ\8b ÐºÒ¯Ð·Ó\99Ñ\82Ò¯ Ð¸Ñ\81емлегемгÓ\99 Ó©Ñ\81Ñ\82Ó\99лÑ\81ен',
 'tog-minordefault' => 'Барлык үзгәртүләрне килешү буенча кече дип билгеләнсен',
 'tog-previewontop' => 'Үзгәртү тәрәзәсеннән өстәрәк битне алдан карау өлкәсен күрсәтелсен',
 'tog-previewonfirst' => 'Үзгәртү битенә күчкәндә башта алдан карау бите күрсәтелсен',
 'tog-nocache' => 'Битләр кэшлауны тыелсын',
-'tog-enotifwatchlistpages' => 'Күзәтү исемлегемдәге бит үзгәртелү турында электрон почтага хәбәр җибәрелсен',
+'tog-enotifwatchlistpages' => 'Күзәтү исемлегемдәге бит яки файл үзгәртелү турында электрон почтага хәбәр җибәрелсен',
 'tog-enotifusertalkpages' => 'Бәхәс битем үзгәртелү турында электрон почтага хәбәр җибәрелсен',
 'tog-enotifminoredits' => 'Кече үзгәртүләр турында да электрон почтага хәбәр җибәрелсен',
 'tog-enotifrevealaddr' => 'Хәбәрләрдә e-mail адресым күрсәтелсен',
@@ -1742,7 +1742,7 @@ PICT # төрле
 'emailsenttext' => 'E-mail хатыгыз җиберелде.',
 
 # Watchlist
-'watchlist' => 'Күзәтү исемлегем',
+'watchlist' => 'Күзәтү исемлеге',
 'mywatchlist' => 'Күзәтү исемлеге',
 'watchlistfor2' => '$1 $2 өчен',
 'nowatchlist' => 'Күзәтү исемлегегездә битләр юк.',
@@ -1911,7 +1911,7 @@ $1',
 'blanknamespace' => '(Төп)',
 
 # Contributions
-'contributions' => 'Кулланучының кертеме',
+'contributions' => '{{GENDER:$1|Кулланучының} кертеме',
 'contributions-title' => '$1 исемле кулланучының кертеме',
 'mycontris' => 'Кертем',
 'contribsub2' => '$1 ($2) өчен',
index 167a008..826d833 100644 (file)
@@ -1472,7 +1472,7 @@ Asta [[Special:UnusedCategories|qullanılmağan törkemnär]] kärsätelgän.
 'listgrouprights-helppage' => 'Help:Törkemnärneñ xoquqları',
 'listgrouprights-members' => '(törkem isemlege)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Bu qullanuçığa xat',
 'emailpage' => 'Qullanuçığa xat cibärü',
 'defemailsubject' => '{{SITENAME}}: xat',
index 152b92d..ec55bcb 100644 (file)
@@ -586,7 +586,7 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 'loginlanguagelabel' => 'تىل: $1',
 'suspicious-userlogout' => 'تىزىمدىن چىقىش ئىلتىماسىڭىز رەت قىلىندى، چۈنكى ئۇ بەلكىم بۇزۇلغان توركۆرگۈ ياكى غەملەك ۋاكالەتچىسى يوللىغان بولۇشى مۇمكىن.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق',
 'user-mail-no-addy' => 'ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.',
 'user-mail-no-body' => 'بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.',
@@ -1290,7 +1290,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'prefs-displaywatchlist' => 'كۆرسىتىش تاللانما',
 'prefs-diffs' => 'پەرقلەر',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ئېلخەت ئادرېسى ئىناۋەتلىك',
 'email-address-validity-invalid' => 'ئىناۋەتلىك ئېلخەت ئادرېسىدىن بىرنى كىرگۈزۈڭ',
 
@@ -2079,7 +2079,7 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'listgrouprights-addgroup-self-all' => 'شەخسىي ھېساباتىمغا ھەممە گۇرۇپپىنى قوش',
 'listgrouprights-removegroup-self-all' => 'شەخسىي ھېساباتىمدىن ھەممە گۇرۇپپىنى چىقىرىۋەت',
 
-# E-mail user
+# Email user
 'mailnologin' => 'يوللايدىغان ئادرېس يوق',
 'mailnologintext' => 'سىز ئالدى بىلەن [[Special:UserLogin|تىزىمغا كىر]]ىپ، [[Special:Preferences|مايىللىق]] تەڭشىكىدە ئىناۋەتلىك ئېلخەت ئادرېسىڭىزدىن بىرسى بولغاندا ئاندىن باشقا ئىشلەتكۈچىلەرگە ئېلخەت يوللىيالايسىز.',
 'emailuser' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا',
@@ -3548,7 +3548,7 @@ Variants for Chinese language
 'monthsall' => 'ھەممىسى',
 'limitall' => 'ھەممىسى',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'جەزملەش ئېلخەت ئادرېسى',
 'confirmemail_noemail' => 'سىز ئۆزىڭىزنىڭ [[Special:Preferences|user مايىللىق]] تەڭشىكىڭىزگە ئىناۋەتلىك ئېلخەت ئادرېسى كىرگۈزمەپسىز.',
 'confirmemail_text' => '{{SITENAME}} ئېلخەت ئىقتىدارى ئىشلىتىشتىن ئىلگىرى ئېلخەت ئادرېسىڭىزنى دەلىللەشنى تەلەپ قىلىدۇ.
index 52c5226..9084776 100644 (file)
@@ -895,7 +895,7 @@ $1',
 
 # Special:PasswordReset
 'passwordreset' => 'Скинути пароль',
-'passwordreset-text' => 'Ð\97аповнÑ\96Ñ\82Ñ\8c Ñ\84оÑ\80мÑ\83, Ñ\89об Ð¾Ñ\82Ñ\80имаÑ\82и Ð¿Ð¾ ÐµÐ». Ð¿Ð¾Ñ\88Ñ\82Ñ\96 Ð½Ð°Ð³Ð°Ð´Ñ\83ваннÑ\8f Ð¿Ñ\80о Ð´Ð°Ð½Ñ\96 Ð\92аÑ\88ого Ð¾Ð±Ð»Ñ\96кового Ð·Ð°Ð¿Ð¸Ñ\81Ñ\83.',
+'passwordreset-text' => 'Ð\97аповнÑ\96Ñ\82Ñ\8c Ñ\86Ñ\8e Ñ\84оÑ\80мÑ\83 Ð´Ð»Ñ\8f Ð²Ñ\96дновленнÑ\8f Ð¿Ð°Ñ\80олÑ\8f.',
 'passwordreset-legend' => 'Перевстановити пароль',
 'passwordreset-disabled' => 'У цій вікі вимкнена можливість скидання пароля.',
 'passwordreset-pretext' => '{{PLURAL:$1||Введіть одну з частин даних}}',
@@ -919,9 +919,9 @@ $2
 Ви маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший, або Ви пам'ятаєте свій старий пароль і не бажаєте його змінювати, можете просто проігнорувати це повідомлення та продовжувати використовувати старий пароль.",
 'passwordreset-emailelement' => "Ім'я користувача: $1
 Тимчасовий пароль: $2",
-'passwordreset-emailsent' => 'Ð\9dагадÑ\83валÑ\8cний ÐµÐ»ÐµÐºÑ\82Ñ\80онний Ð»Ð¸Ñ\81Ñ\82 відправлений.',
+'passwordreset-emailsent' => 'Ð\95лекÑ\82Ñ\80онний Ð»Ð¸Ñ\81Ñ\82 Ð´Ð»Ñ\8f Ð²Ñ\96дновленнÑ\8f Ð¿Ð°Ñ\80олÑ\8f відправлений.',
 'passwordreset-emailsent-capture' => 'Електронний лист-нагадування був надісланий, як показано нижче.',
-'passwordreset-emailerror-capture' => 'Електронний лист-нагадування мав бути надісланий, як показано нижче, але його вдправка не вдалась через причину: $1',
+'passwordreset-emailerror-capture' => 'Електронний лист для відновлення пароля мав бути надісланий, як показано нижче, але його надсилання користувачеві $1 не вдалося.',
 
 # Special:ChangeEmail
 'changeemail' => 'Змінити адресу електронної пошти',
index aff7c2d..b7d12c0 100644 (file)
@@ -628,7 +628,7 @@ Warning: Page may not contain recent updates.',
 دوبارہ کوشش کرنے سے پہلے انتظار فرمائیے.',
 'loginlanguagelabel' => 'زبان: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ',
 
 # Change password dialog
@@ -1296,7 +1296,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(اراکین کی فہرست)',
 
-# E-mail user
+# Email user
 'mailnologintext' => 'دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔',
 'emailuser' => 'صارف کو برقی خط لکھیں',
 'defemailsubject' => '{{SITENAME}} سے برقی خط',
index 9dd6a75..668fca2 100644 (file)
@@ -133,8 +133,8 @@ $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 More 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 More batafsil])',
+'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',
@@ -414,23 +414,23 @@ $1',
 'nstab-category' => 'Turkum',
 
 # Main script and global functions
-'nosuchaction' => "Bunday amal yo'q",
-'nosuchspecialpage' => "Bunday maxsus sahifa yo'q",
+'nosuchaction' => 'Bunday amal yoʻq',
+'nosuchspecialpage' => 'Bunday maxsus sahifa yoʻq',
 
 # General errors
 'error' => 'Xato',
-'laggedslavemode' => "'''Diqqat:''' sahifa oxirgi yangilashlarga ega bo'lmasligi mumkin.",
-'readonly' => "Ma'lumotlar bazasiga yozish to'sildi",
+'laggedslavemode' => "'''Diqqat:''' sahifada oxirgi yangilanishlar koʻrsatilmagan boʻlishi mumkin.",
+'readonly' => 'Maʼlumotlar bazasiga yozish toʻsilgan',
 'missingarticle-rev' => '(versiya №: $1)',
 'missingarticle-diff' => '(Farq: $1, $2)',
 'internalerror' => 'Ichki xato',
 'internalerror_info' => 'Ichki xato: $1',
 'badtitle' => 'Notoʻgʻri sarlavha',
-'viewsource' => "Manbasini ko'rish",
+'viewsource' => 'Manbasini koʻrish',
 'viewsource-title' => "$1 sahifasining manbasini ko'rish",
 'actionthrottled' => "Tezlik bo'yicha cheklov",
 'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
-'viewsourcetext' => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
+'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.
 Ushbu xabar tarjimasini qo'shish yoki o'zgartirish uchun, iltimos, MediaWikining [//translatewiki.net/ translatewiki.net] lokalizatsiya saytidan foydalaning.",
@@ -457,7 +457,7 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning
 'remembermypassword' => 'Hisob ma’lumotlarim ushbu brauzerda eslab qolinsin (ko‘pi bilan $1 {{PLURAL:$1|kunga|kunga}})',
 'securelogin-stick-https' => "Kirgandan keyin HTTPS bo'yicha ulanishni davom ettirish",
 'yourdomainname' => 'Sizning domeningiz:',
-'password-change-forbidden' => "Siz bu vikida maxfiy so'zni o'zgartira olmaysiz.",
+'password-change-forbidden' => 'Siz bu vikida maxfiy soʻzni oʻzgartira olmaysiz.',
 'login' => 'Kirish',
 'nav-login-createaccount' => 'Kirish / Hisob yaratish',
 'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
@@ -479,8 +479,8 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning
 'createaccounterror' => "Hisob yozuvini yaratishning iloji yo'q: $1",
 'loginsuccesstitle' => 'Kirish muvaffaqiyatli amalga oshdi',
 'loginsuccess' => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
-'nosuchusershort' => '"$1" ismli ishtirokchi yoʻq.
-Xatosiz yozishga urinib koʻring.',
+'nosuchusershort' => '"$1" ismli foydalanuvchi yoʻq.
+Ism yozilishini tekshirib koʻring.',
 'nouserspecified' => "Siz foydalanuvchining ismini ko'rsatishingiz lozim.",
 'login-userblocked' => "Bu foydalanuvchi muhosara qilingan. Tizimga kirishga ruxsat yo'q.",
 'wrongpassword' => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
@@ -507,7 +507,7 @@ Xatosiz yozishga urinib koʻring.',
 
 # Special:PasswordReset
 'passwordreset-legend' => "Maxfiy so'zni yo'q qilish",
-'passwordreset-username' => 'Ishtirokchi nomi:',
+'passwordreset-username' => 'Foydalanuvchi nomi:',
 'passwordreset-domain' => 'Domen:',
 'passwordreset-email' => 'Elektron pochta manzili:',
 'passwordreset-emailelement' => "Foydalanuvchi ismi: $1
@@ -667,7 +667,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 
 # Revision deletion
 'rev-deleted-comment' => "(tahrir izohi o'chirildi)",
-'rev-deleted-user' => "(ishtirokchi ismi o'chirildi)",
+'rev-deleted-user' => '(muallif nomi oʻchirilgan)',
 'rev-deleted-event' => "(qayd yozuvi o'chirildi)",
 'rev-delundel' => 'koʻrsatish/yashirish',
 'rev-showdeleted' => 'koʻrsatish',
@@ -899,8 +899,8 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'group-suppress' => 'Tekshiruvchilar',
 'group-all' => '(hamma)',
 
-'group-user-member' => '{{GENDER:$1|ishtirokchi}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|avtotasdiqlangan ishtirokchi}}',
+'group-user-member' => '{{GENDER:$1|foydalanuvchi}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|avtotasdiqlangan foydalanuvchi}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => '{{GENDER:$1|administrator}}',
 'group-bureaucrat-member' => '{{GENDER:$1|rasmiyatchi}}',
@@ -918,11 +918,11 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'right-edit' => 'Sahifalarni tahrirlash',
 
 # Special:Log/newusers
-'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
+'newuserlogpage' => 'Foydalanuvchilarni roʻyxatga olish qaydlari',
 'newuserlogpagetext' => 'Yaqinda roʻyxatdan oʻtgan foydalanuvchilar roʻyxati',
 
 # User rights log
-'rightslog' => "Ishtirokchi huquqlari bo'yicha qaydlar",
+'rightslog' => 'Foydalanuvchi huquqlari koʻrsatilgan qaydlar',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ushbu sahifani tahrirlash',
@@ -934,22 +934,22 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'nchanges' => "$1 {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
 'recentchanges' => 'Yangi oʻzgarishlar',
 'recentchanges-legend' => 'Yangi tahrirlar moslamalari',
-'recentchanges-summary' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
+'recentchanges-summary' => 'Bu sahifada siz oxirgi oʻzgarishlarni koʻrishingiz mumkin.',
 'recentchanges-feed-description' => "Vikida mazkur oqimdagi oxirgi o'zgarishlarni kuzatish",
 'recentchanges-label-newpage' => 'Bu tahrir orqali yangi sahifa yaratildi',
 'recentchanges-label-minor' => 'Bu kichik tahrir',
 'recentchanges-label-bot' => 'Bu tahrirni bot bajardi',
 'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
-'rcnote' => "Quyida $5, $4ga koʻra oxirgi {{PLURAL:$2|kun|'''$2''' kun}} davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgartirish|'''$1''' oʻzgartirishlar}} koʻrsatilgan.",
+'rcnote' => "Quyida $4 soat $5 ga koʻra oxirgi '''$2''' kun davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgarish|'''$1''' oʻzgarishlar}} koʻrsatilgan.",
 'rcnotefrom' => "Quyida <strong>$2</strong> dan (<strong>$1</strong> gacha) bo'lgan o'zgarishlar keltirilgan.",
-'rclistfrom' => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
+'rclistfrom' => '$1 dan boshlab yangi oʻzgarishlarni koʻrsat.',
 'rcshowhideminor' => 'Kichik tahrirlarni $1',
 'rcshowhidebots' => '$1 ta bot',
 'rcshowhideliu' => 'Ro‘yxatdan o‘tgan foydalanuvchilar: $1 ta',
 'rcshowhideanons' => 'Anonim foydalanuvchilar: $1 ta',
 'rcshowhidepatr' => 'Tekshirilgan tahrirlarni $1',
 'rcshowhidemine' => "O'z tahrirlarimni $1",
-'rclinks' => "Oxirgi $2 kun davomida sodir bo'lgan $1 o'zgartirishlarni ko'rsat.<br />$3",
+'rclinks' => 'Oxirgi $2 kun ichida sodir boʻlgan $1 oʻzgarishlar koʻrsatildi.<br />$3',
 'diff' => 'farq',
 'hist' => 'tarix',
 'hide' => 'Yashirish',
@@ -1079,7 +1079,7 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 
 # Special:Log
 'specialloguserlabel' => 'Ijrochi:',
-'speciallogtitlelabel' => "Mo'ljal (nom yoki ishtirokchi):",
+'speciallogtitlelabel' => 'Moʻljal (nom yoki foydalanuvchi):',
 'log' => 'Qaydlar',
 'all-logs-page' => 'Barcha ochiq qaydlar',
 'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
@@ -1154,7 +1154,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'noemailtext' => 'Bu foydalanuvchi e-mail manzil koʻrsatgani yoʻq.',
 'nowikiemailtitle' => 'Maktub joʻnatishga ruxsat yoʻq',
 'emailtarget' => 'Oluvchi ishtirokchining ismini kiriting',
-'emailusername' => 'Ishtirokchi nomi:',
+'emailusername' => 'Foydalanuvchi nomi:',
 'emailusernamesubmit' => "Jo'natish",
 'email-legend' => "Boshqa {{SITENAME}} ishtirokchisiga xat jo'natish",
 'emailfrom' => 'Kimdan:',
@@ -1212,7 +1212,7 @@ Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmasl
 'enotif_body_intro_changed' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan o‘zgartirildi, joriy variantini ko‘rish uchun $3 ga qarang.',
 'enotif_lastvisited' => "Oxirgi tashrifingizdan buyon sodir bo'lgan barcha o'zgarishlarni ko'rish uchun $1 ga qarang.",
 'enotif_lastdiff' => "O'zgarishlar bilan tanishish uchun $1 ga qarang.",
-'enotif_anon_editor' => 'anonim ishtirokchi $1',
+'enotif_anon_editor' => 'anonim foydalanuvchi $1',
 'enotif_body' => 'Hurmatli $WATCHINGUSERNAME,
 
 $PAGEINTRO $NEWPAGE
@@ -1541,7 +1541,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 '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",
+'tooltip-save' => 'Oʻzgarishlarni saqlash',
 'tooltip-preview' => "O'zgarishlarni saqlash. Iltimos saqlashdan oldin uni ishlating!",
 'tooltip-diff' => "Matnga qanday o'zgarishlar kiritganligingizni ko'rish.",
 'tooltip-compareselectedversions' => "Bu sahifaning ikki tanlangan versiyalari o'rtasidagi farqni ko'rish.",
@@ -1555,8 +1555,8 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 # Info page
 'pageinfo-title' => '"$1" sahifasi haqida maʼlumot',
 'pageinfo-header-basic' => 'Asosiy maʼlumot',
-'pageinfo-header-edits' => "O'zgarishlar tarixi",
-'pageinfo-display-title' => "Ko'rsatiladigan sarlavha",
+'pageinfo-header-edits' => 'Oʻzgarishlar tarixi',
+'pageinfo-display-title' => 'Koʻrsatiladigan sarlavha',
 'pageinfo-article-id' => 'Sahifa identifikatori',
 'pageinfo-watchers' => 'Sahifa kuzatuvchilari soni',
 'pageinfo-edits' => 'Jami tahrirlar soni',
@@ -1587,7 +1587,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'file-info-size' => '$1 × $2 piksel, fayl hajmi: $3, MIME tipi: $4',
 'file-nohires' => 'Bundan kattaroq tasvir yoʻq.',
 'svg-long-desc' => 'SVG fayl, asl oʻlchamlari $1 × $2 piksel, fayl hajmi: $3',
-'show-big-image' => "To'liq hajmdagi tasvir",
+'show-big-image' => 'Toʻliq hajmdagi tasvir',
 
 # Special:NewFiles
 'noimages' => 'Tasvir mavjud emas.',
@@ -1595,7 +1595,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 
 # Metadata
 'metadata' => 'Metama’lumot',
-'metadata-expand' => 'Batafsil axborot koʻrsatisg',
+'metadata-expand' => 'Batafsil axborotni koʻrsatish',
 'metadata-collapse' => 'Batafsil axborotni yashirish',
 
 # EXIF tags
index 58208a8..1b20b2f 100644 (file)
@@ -652,7 +652,7 @@ Spèta un tocheto prima de proàr da novo.',
 'loginlanguagelabel' => 'Lengua: $1',
 'suspicious-userlogout' => 'Ła to richiesta de disconesion xè sta negà parché e a senbra invià da on browser non funsionante o on proxy de caching.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
 'user-mail-no-addy' => 'Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.',
 'user-mail-no-body' => 'Tentà de inviar na e-mail có un testo vodo o masa curto.',
@@ -1317,7 +1317,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'prefs-displaywatchlist' => 'Opzioni de visualixassion',
 'prefs-diffs' => 'Difarense',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'indiriso de posta eletronega pararìa vałido",
 'email-address-validity-invalid' => 'Inserisi un indiriso de posta eletronega vałido',
 
@@ -2082,7 +2082,7 @@ Se pol consultar anca dele altre [[{{MediaWiki:Listgrouprights-helppage}}|inform
 'listgrouprights-addgroup-self-all' => 'Pol xontarse a tuti i grupi',
 'listgrouprights-removegroup-self-all' => 'Pol cavarse da tuti i grupi',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nissun indirizo a cui mandarghe el messagio',
 'mailnologintext' => 'Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].',
 'emailuser' => 'Scrìveghe a sto utente',
@@ -3427,7 +3427,7 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'monthsall' => 'tuti',
 'limitall' => 'tuti quanti',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Conferma indirisso e-mail',
 'confirmemail_noemail' => 'No te ghè indicà un indirizo e-mail valido ne le to [[Special:Preferences|preferense]].',
 'confirmemail_text' => "{{SITENAME}} el richiede la verifica de l'indirizo e-mail prima che te possi doparar le funzion ligà a l'e-mail.
index d5a2d69..6647ce6 100644 (file)
@@ -546,7 +546,7 @@ Olgat hüväd, varastagat pordon aigad edel ut naprindad.',
 'login-abort-generic' => 'Teiden naprind tulda sistemha om satusetoi - Azotadud',
 'loginlanguagelabel' => 'Kel’: $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Tundmatoi petuz PHP:n mail()-funkcijas',
 
 # Change password dialog
@@ -1094,7 +1094,7 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'prefs-displaywatchlist' => 'Nägun opcijad',
 'prefs-diffs' => 'Erod',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Verkpočtan adres nägub korrektižeks.',
 'email-address-validity-invalid' => 'Antkat verkpočtan korrektine adres',
 
@@ -1704,7 +1704,7 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].',
 'listgrouprights-addgroup-self-all' => 'Sab ližata kaik gruppad ičeze sistemkirjutandha',
 'listgrouprights-removegroup-self-all' => 'Sab heitta poiš kaik gruppad ičeze sistemkirjutandaspäi',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ei ole adresan oigendamižen täht',
 'emailuser' => 'Oigeta e-kirjeine necile kävutajale',
 'emailpage' => 'Kirjeine kävutajale',
@@ -2807,7 +2807,7 @@ Ku fail redaktiruidihe sändan polhe, erased parametrad voidas erineda nügüdl
 'monthsall' => 'kaik',
 'limitall' => 'kaik',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Vahvištoitta e-počtan adres',
 'confirmemail_send' => 'Oigekat vahvištoitandkod',
 'confirmemail_sent' => 'E-počtan adresan vahvištoitandkod om oigetud.',
index c90b0a5..2847cfe 100644 (file)
@@ -816,7 +816,7 @@ Có thể bạn đã thay đổi thành công mật khẩu của mình hoặc đ
 
 # Special:PasswordReset
 'passwordreset' => 'Tái tạo mật khẩu',
-'passwordreset-text' => 'Hãy điền mẫu đơn này để nhận thư điện tử nhắc nhở về thông tin tài khoản của bạn.',
+'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-pretext' => '{{PLURAL:$1||Nhập một trong những thông tin được yêu cầu ở dưới}}',
@@ -826,34 +826,31 @@ Có thể bạn đã thay đổi thành công mật khẩu của mình hoặc đ
 'passwordreset-capture-help' => 'Nếu bạn kiểm hộp này, bạn sẽ xem thư điện tử có mật khẩu tạm lúc khi nó được gửi cho người dùng.',
 'passwordreset-email' => 'Địa chỉ thư điện tử:',
 'passwordreset-emailtitle' => 'Thông tin tài khoản tại {{SITENAM}}',
-'passwordreset-emailtext-ip' => 'Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu một lời
-nhắc nhở các thông tin tài khoản của bạn tại {{SITENAME}} ($4).
-{{PLURAL:$3|Tài khoản|Các tài khoản}} ở dưới có đặt địa chỉ thư điện tử này:
+'passwordreset-emailtext-ip' => 'Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu tái tạo mật khẩu của bạn 
+tại {{SITENAME}} ($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền 
+với địa chỉ thư điện tử này:
 
 $2
 
 {{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập
 ngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu
-đặt lại mật khẩu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
-muốn thay đổi nó, xin vui lòng kệ thông điệp này và tiếp tục sử dụng
+hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
+muốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng
 mật khẩu cũ.',
-'passwordreset-emailtext-user' => 'Thành viên $1 tại {{SITENAME}} đã yêu cầu một lời nhắc nhở
-các thông tin tài khoản của bạn tại {{SITENAME}} ($4). {{PLURAL:$3|Tài
-khoản|Các
-tài khoản}} ở dưới có đặt địa chỉ thư điện tử này:
+'passwordreset-emailtext-user' => 'Thành viên $1 tại {{SITENAME}} đã yêu cầu tái tạo mật khẩu tại {{SITENAME}} 
+($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền với địa chỉ thư điện tử này:
 
 $2
 
 {{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập
-ngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu
-đặt lại mật khẩu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
-muốn thay đổi nó, xin vui lòng kệ thông điệp này và tiếp tục sử dụng
+ngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
+muốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng
 mật khẩu cũ.',
 'passwordreset-emailelement' => 'Tên người dùng: $1
 Mật khẩu tạm: $2',
-'passwordreset-emailsent' => 'Đã gửi thư điện tử nhắc nhở.',
-'passwordreset-emailsent-capture' => 'Thư điện tử nhắc nhở ở dưới đã được gửi:',
-'passwordreset-emailerror-capture' => 'Không thể gửi thư điện tử nhắc nhở ở dưới cho người dùng: $1',
+'passwordreset-emailsent' => 'Đã gửi thư điện tử để tái tạo mật khẩu.',
+'passwordreset-emailsent-capture' => 'Thư điện tử để tái tạo mật khẩu đã được gửi, nội dung như sau.',
+'passwordreset-emailerror-capture' => 'Chúng tôi đã tạo thư tái tạo mật khẩu dưới đây, nhưng không thể gửi đến người dùng: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Đổi địa chỉ thư điện tử',
@@ -4077,17 +4074,17 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'sqlite-no-fts' => '$1 không có hỗ trợ tìm kiếm toàn văn',
 
 # New logging system
-'logentry-delete-delete' => '$1 đã xóa trang “$3”',
-'logentry-delete-restore' => '$1 đã phục hồi trang “$3”',
-'logentry-delete-event' => '$1 đã thay đổi mức hiển thị của {{PLURAL:$5|một mục nhật trình|$5 mục nhật trình}} về $3: $4',
-'logentry-delete-revision' => '$1 đã thay đổi mức hiển thị của {{PLURAL:$5|một phiên bản|$5 phiên bản}} trang $3: $4',
-'logentry-delete-event-legacy' => '$1 đã thay đổi mức hiển thị của các mục nhật trình về $3',
-'logentry-delete-revision-legacy' => '$1 đã thay đổi mức hiển thị của các phiên bản trang $3',
-'logentry-suppress-delete' => '$1 đã ẩn trang $3',
-'logentry-suppress-event' => '$1 đã thay đổi mức hiển thị của {{PLURAL:$5|một mục nhật trình|$5 mục nhật trình}} về $3 một cách kín đáo: $4',
-'logentry-suppress-revision' => '$1 đã thay đổi mức hiển thị của {{PLURAL:$5|một phiên bản|$5 phiên bản}} trang $3 một cách kín đáo: $4',
-'logentry-suppress-event-legacy' => '$1 đã thay đổi mức hiển thị các mục nhật trình về $3 một cách kín đáo',
-'logentry-suppress-revision-legacy' => '$1 đã thay đổi mức hiển thị của các phiên bản trang $3 một cách kín đáo',
+'logentry-delete-delete' => '$1 {{GENDER:$2}}đã xóa trang “$3”',
+'logentry-delete-restore' => '$1 {{GENDER:$2}}đã phục hồi trang “$3”',
+'logentry-delete-event' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một mục nhật trình|$5 mục nhật trình}} về $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một phiên bản|$5 phiên bản}} trang $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của các mục nhật trình về $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của các phiên bản trang $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2}}đã ẩn trang $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một mục nhật trình|$5 mục nhật trình}} về $3 một cách kín đáo: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một phiên bản|$5 phiên bản}} trang $3 một cách kín đáo: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị các mục nhật trình về $3 một cách kín đáo',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2}}đã thay đổi mức hiển thị của các phiên bản trang $3 một cách kín đáo',
 'revdelete-content-hid' => 'đã ẩn nội dung',
 'revdelete-summary-hid' => 'đã ẩn tóm lược sửa đổi',
 'revdelete-uname-hid' => 'đã ẩn tên người dùng',
@@ -4096,20 +4093,20 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'revdelete-uname-unhid' => 'đã hiện tên người dùng',
 'revdelete-restricted' => 'đã áp dụng hạn chế cho bảo quản viên',
 'revdelete-unrestricted' => 'đã gỡ bỏ hạn chế cho bảo quản viên',
-'logentry-move-move' => '$1 đã đổi $3 thành $4',
-'logentry-move-move-noredirect' => '$1 đã đổi $3 thành $4 (đã tắt đổi hướng)',
-'logentry-move-move_redir' => '$1 đã đổi $3 thành $4 qua đổi hướng',
-'logentry-move-move_redir-noredirect' => '$1 đã đổi $3 thành $4 qua đổi hướng (đã tắt đổi hướng)',
-'logentry-patrol-patrol' => '$1 đã đánh dấu tuần tra phiên bản $4 của trang $3',
-'logentry-patrol-patrol-auto' => '$1 đã tự động đánh dấu tuần tra phiên bản $4 của trang $3',
-'logentry-newusers-newusers' => 'Đã mở tài khoản người dùng $1',
-'logentry-newusers-create' => 'Đã mở tài khoản người dùng $1',
-'logentry-newusers-create2' => '$1 đã mở tài khoản người dùng $3',
-'logentry-newusers-byemail' => '$1 đã mở tài khoản người dùng $3 và nhận mật khẩu qua thư điện tử',
-'logentry-newusers-autocreate' => 'Tài khoản $1 đã được mở tự động',
-'logentry-rights-rights' => '$1 đã đổi các nhóm liên kết của $3 từ $4 đến $5',
-'logentry-rights-rights-legacy' => '$1 đã đổi các nhóm liên kết của $3',
-'logentry-rights-autopromote' => '$1 đã được tự động phong cấp từ $4 đến $5',
+'logentry-move-move' => '$1 {{GENDER:$2}}đã đổi $3 thành $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2}}đã đổi $3 thành $4 (đã tắt đổi hướng)',
+'logentry-move-move_redir' => '$1 {{GENDER:$2}}đã đổi $3 thành $4 qua đổi hướng',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2}}đã đổi $3 thành $4 qua đổi hướng (đã tắt đổi hướng)',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2}}đã đánh dấu tuần tra phiên bản $4 của trang $3',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2}}đã tự động đánh dấu tuần tra phiên bản $4 của trang $3',
+'logentry-newusers-newusers' => '{{GENDER:$2}}Đã mở tài khoản người dùng $1',
+'logentry-newusers-create' => '{{GENDER:$2}}Đã mở tài khoản người dùng $1',
+'logentry-newusers-create2' => '$1 {{GENDER:$2}}đã mở tài khoản người dùng $3',
+'logentry-newusers-byemail' => '$1 {{GENDER:$2}}đã mở tài khoản người dùng $3 và nhận mật khẩu qua thư điện tử',
+'logentry-newusers-autocreate' => 'Tài khoản $1 {{GENDER:$2}}đã được mở tự động',
+'logentry-rights-rights' => '$1 {{GENDER:$2}}đã đổi các nhóm bao gồm $3 từ $4 đến $5',
+'logentry-rights-rights-legacy' => '{{GENDER:$2}}$1 đã đổi các nhóm bao gồm $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2}}đã được tự động phong cấp từ $4 đến $5',
 'rightsnone' => '(không có)',
 
 # Feedback
index fcc9b8b..ec4deeb 100644 (file)
@@ -1624,7 +1624,7 @@ Ba dabinons [[{{MediaWiki:Listgrouprights-helppage}}|nüns pluik]] tefü gebanag
 'listgrouprights-addgroup-all' => 'Kanon läükön grupis valik',
 'listgrouprights-removegroup-all' => 'Kanon moükön grupis valik',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ladet nonik ad sedön',
 'mailnologintext' => 'Mutol [[Special:UserLogin|nunädön oli]] e labön ladeti leäktronik lonöföl pö [[Special:Preferences|buükams olik]] ad dalön sedön poti leäktronik gebanes votik.',
 'emailuser' => 'Penön gebane at',
@@ -2620,7 +2620,7 @@ Nünabinets votik poklänedons.
 'monthsall' => 'valik',
 'limitall' => 'valikis',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Fümedolös ladeti leäktronik',
 'confirmemail_noemail' => 'No labol ladeti leäktronik lonöföl in [[Special:Preferences|gebanabuükams olik]].',
 'confirmemail_text' => 'Vük at flagon, das ofümedol ladeti leäktronik ola büä odälon ole ad gebön poti leäktronik.
index f02e1ba..de0cfbf 100644 (file)
@@ -1292,7 +1292,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights' => 'Pruukjarühmi õigusõq',
 'listgrouprights-members' => '(liikmidõ nimekiri)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Olõ-i saatja aadrõssit',
 'mailnologintext' => 'Sa piät olõma [[Special:UserLogin|nimega sisse lännüq]]
 ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et sa saasiq tõisilõ pruukjilõ e-kirjo saataq.',
@@ -2147,7 +2147,7 @@ Kokkovõttõria pääle või kirotaq tagasivõtmisõ põhjusõ.',
 'namespacesall' => 'kõik',
 'monthsall' => 'kõik',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Kinnüdäq e-postiaadrõssit',
 'confirmemail_noemail' => 'Sul olõ-i [[Special:Preferences|ummi säädmiisihe]] pant kõlbolist e-postiaadrõssit.',
 'confirmemail_text' => 'Taa viki nõud e-postiaadrõsi kinnütämist, inne ku e-posti pruukiq võit. Saadaq alanolõva nupi pääle vaotõn uma aadrõsi pääle kinnütüse küsümise kiri. Säält lövvät lingi, mink vaotamisõga kinnütät uma e-postiaadrõsi.',
index c1a3c61..d6b8740 100644 (file)
@@ -971,7 +971,7 @@ Ciste infôrmacion serè publike po tertos.",
 'prefs-displaywatchlist' => 'Tchuzes di håynaedje',
 'prefs-diffs' => 'Diferinces',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L' adresse emile a l' air d' esse valide",
 'email-address-validity-invalid' => 'Dinez ene adresse emile valide',
 
@@ -1427,7 +1427,7 @@ Protocoles ricnoxhous: <code>$1</code> (nelzès metoz nén dins vosse tchinne di
 # Special:ListGroupRights
 'listgrouprights-members' => '(djivêye des mimbes)',
 
-# E-mail user
+# Email user
 'mailnologin' => "Nole adresse d' evoyeu",
 'mailnologintext' => "Po-z evoyî èn emile a èn ôte uzeu i vs fåt esse [[Special:UserLogin|elodjî]] eyet aveur ene adresse emile d' evoyeu ki soeye valide dins vos [[Special:Preferences|preferinces]].",
 'emailuser' => "Emiler a l' uzeu",
@@ -2168,7 +2168,7 @@ est raptiti. Les ôtes seront catchîs.
 'namespacesall' => 'tos',
 'monthsall' => 'tos',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Acertinaedje di l' adresse emile",
 'confirmemail_text' => "Ci wiki chal a mezåjhe ki vos acertinîz voste adresse emile
 divant d' poleur eployî les fonccions d' emilaedje. Clitchîz sol boton
index 5d81dd2..c52243f 100644 (file)
@@ -631,7 +631,11 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli]</span>.',
 'noarticletext-nopermission' => 'Waray yana nahasurat hini nga pakli
 Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan]</span>, kundi diri ka gintutugotan hin paghímò hini nga pakli.',
+'userpage-userdoesnotexist' => 'Diri nakarehistro an akawnt han gumaramit nga "$1".
+Alayon pagpamuruotbuot kun karuyag mo maghimo/mag-edit hini nga pakli.',
 'userpage-userdoesnotexist-view' => "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
+'blocked-notice-logextract' => 'Ini nga gumaramit in nakapugong yana.
+An pinakaurhi nga log entry han mga pinugong in ginhatag ha ubos para hit reperensya:',
 'updated' => '(Ginbag-ohan)',
 'note' => "'''Pahibaro:'''",
 'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
@@ -850,6 +854,7 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'prefs-user-pages' => 'Mga pakli hin gumaramit',
 'prefs-personal' => 'Pangilal-an han nagamit',
 'prefs-rc' => 'Kalalabay la nga mga pagbabag-o',
+'prefs-watchlist' => 'Listahan hit binabantayan',
 'prefs-watchlist-days' => 'Mga adlaw nga makikita ha barantayan:',
 'prefs-watchlist-days-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
 'prefs-watchlist-edits-max' => 'Pinakadako nga ihap: 1000',
@@ -889,8 +894,8 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'default' => 'aada-nga-daan',
 'prefs-files' => 'Mga paypay',
 'youremail' => 'E-mail:',
-'username' => 'Agnay hiton gumaramit:',
-'uid' => 'ID han gumaramit:',
+'username' => '{{HENERO:$1|Agnay hit gumaramit}}:',
+'uid' => 'ID hit {{HENERO:$1|Gumaramit}}:',
 'prefs-memberingroups' => 'Api han {{PLURAL:$1| nga hugpo|nga mga hugpo}}:',
 'prefs-registration' => 'Oras han pagrehistro:',
 'yourrealname' => 'Tinuod nga ngaran:',
@@ -956,6 +961,7 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
 
 'grouppage-user' => '{{ns:project}}:Mga gumaramit',
+'grouppage-autoconfirmed' => '{{ns:project}}:Mga gumaramit nga naka-awtokompirmado',
 'grouppage-bot' => '{{ns:project}}:Mga bot',
 'grouppage-sysop' => '{{ns:project}}:Mga magdudumara',
 'grouppage-bureaucrat' => '{{ns:project}}:Mga burokrata',
@@ -974,7 +980,9 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'right-movefile' => 'Balhina an mga paypay',
 'right-upload' => 'Igkarga paigbaw an mga paypay',
 'right-reupload' => 'Sapawa an mga aada nga mga paypay',
+'right-reupload-own' => 'Igsapaw an aada yana nga mga paypay nga ginkarga-pasaka nimo mismo',
 'right-upload_by_url' => 'Igkarga paigbaw an mga paypay tikang ha uska URL',
+'right-autoconfirmed' => 'Igliwat an mga semi-pinanpasaliporan nga pakli',
 'right-bot' => 'Igtrato komo uska naglulugaring nga proseso',
 'right-delete' => 'Igpara an mga pakli',
 'right-bigdelete' => 'Igpara an mga pakli nga may-ada dagko nga mga kaagi',
@@ -1026,6 +1034,7 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'action-protect' => 'igsaliwan an katupngan han pananalipod para hini nga pakli',
 'action-import' => 'ig-angbit ini nga pakli tikang ha iba nga wiki',
 'action-importupload' => 'ig-angbit ini nga pakli tikang ha uska ginkarga-pasaka nga paypay',
+'action-patrol' => 'markahi an kanan iba pagliwat komo nakapatrolya',
 'action-mergehistory' => 'Igtampo an kaagi hini nga pakli',
 'action-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
 'action-sendemail' => 'Padara hin mga e-mail',
@@ -1084,6 +1093,7 @@ Mga pakli ha [[Special:Watchlist|imo angay timan-an]] in naka-'''bold'''.",
 
 An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para han imo kamurayaw:",
 'upload-permitted' => 'Gintutugotan nga mga klase han paypay: $1.',
+'upload-preferred' => 'Mas karugag nga mga tipo hin paypay: %1.',
 'upload-prohibited' => 'Gindidire nga mga klase han paypay: $1.',
 'uploadlog' => 'Talaan hin ginkarga-pasaka',
 'uploadlogpage' => 'Talaan han mga ginkarga-paigbaw',
@@ -1091,11 +1101,15 @@ An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para ha
 'filedesc' => 'Dalikyat nga pulong',
 'fileuploadsummary' => 'Dalikyat nga pulong:',
 'filereuploadsummary' => 'Mga pagbal-iw ha fayl:',
+'filestatus' => 'Kahimtang han copyright:',
 'filesource' => 'Tinikangan:',
+'uploadedfiles' => 'Mga paypay nga ginkarga-pasaka',
 'ignorewarning' => 'Pabay-i an pahimatngon ngan igtipig la ngahaw',
 'ignorewarnings' => 'Pasagdi an bisan ano nga mga pahimatngon',
+'minlength1' => 'Iton ngaran-han-paypay in kinahanglan may-ada bisan usa la nga letra.',
 'filename-toolong' => 'Iton ngaran hin paypay in diri puyde na mas lapos pa ha 240 ka mga byte.',
 'badfilename' => 'An ngaran-han-paypay in ginliwat ngada ha "$1".',
+'empty-file' => 'An paypay nga imo ginsumite in waray sulod.',
 'filename-tooshort' => 'An ngaran han fayl in halipot hin duro.',
 'filetype-banned' => 'Ini nga klase nga paypay in gindidire.',
 'illegal-filename' => 'An ngaran han fayl in diri gintutugutan.',
@@ -1105,6 +1119,7 @@ An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para ha
 'large-file' => 'Ginrerekomenda nga it mga paypay in diri malapos hin $1;
 ini nga paypay in $2.',
 'largefileserver' => 'Ini nga paypay in durudako kaysa ha ginpapakarawat han serbidor.',
+'windows-nonascii-filename' => 'Ini nga wiki in diri nakasuportado han mga ngaran-han-paypay nga may-ada pinaurog nga mga karakter.',
 'uploadwarning' => 'Pahimatngon han pagkarga paigbaw',
 'savefile' => 'Igtipig an paypay',
 'uploadedimage' => 'ginkarga-paigbaw "[[$1]]"',
@@ -1153,6 +1168,21 @@ $1',
 'backend-fail-create' => 'Diri nasusuratan an paypay nga "$1".',
 'backend-fail-maxsize' => 'Diri nasusuratan an paypay nga "$1" tungod nga mas dako ini kaysa hin {{PLURAL:"$2|usa nga byte|$2 nga mga byte}}.',
 'backend-fail-readonly' => 'An panluyo nga tiripigan nga "$1" in ha pagkayana in panbasa-la.  An rason nga ginhatag in: "\'\'$2\'\'"',
+'backend-fail-connect' => 'Diri nakakasumpay ha storage backend "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Waray ka rangka an "$1"; diri ini nakatrangka.',
+'lockmanager-fail-closelock' => 'Diri nakakasera han nakatrangka nga paypay para han "$1".',
+'lockmanager-fail-deletelock' => 'Diri nakakapara han nakatrangka nga paypay para hit "$1".',
+'lockmanager-fail-acquirelock' => 'Diri nakakakarawat hin trangka para hit "$1".',
+'lockmanager-fail-openlock' => 'Diri nakakaabre han nakatrangka nga paypay para hit "$1".',
+'lockmanager-fail-releaselock' => 'Diri nakakabul-iw han trangka para hit "$1".',
+
+# ZipDirectoryReader
+'zip-wrong-format' => 'An espisipikado nga paypay in diri naka ZIP nga paypay.',
+
+# Special:UploadStash
+'uploadstash-errclear' => 'An paghawan han mga paypay in diri malinamposon.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Diri gintutugutan makasulod',
@@ -1207,7 +1237,11 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'upload-disallowed-here' => 'Diri nimo masasapaw ini nga paypay.',
 
 # File reversion
+'filerevert' => 'Igbalik $1',
+'filerevert-legend' => 'Igbalik an paypay',
 'filerevert-comment' => 'Rason:',
+'filerevert-defaultcomment' => 'Ginbalik nga bersyon han $2, $1',
+'filerevert-submit' => 'Igbalik',
 
 # File deletion
 'filedelete' => 'Igpara $1',
@@ -1225,6 +1259,9 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'mimetype' => 'MIME nga klase:',
 'download' => 'pagkarga paubos',
 
+# Unwatched pages
+'unwatchedpages' => 'Mga paypay nga gintanggal an pagbantay',
+
 # List redirects
 'listredirects' => 'Talaan hin mga redirect',
 
@@ -1258,6 +1295,11 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'disambiguations' => 'Mga pakli nga nasumpay ha mga pansayod nga pakli',
 'disambiguationspage' => 'Template:pansayod',
 
+'pageswithprop-submit' => 'Kadto-a',
+
+'doubleredirects' => 'Mga doble nga redirekta',
+'double-redirect-fixer' => 'Mangangayad hin redirekta',
+
 'brokenredirects' => 'Mga redirect nga utod',
 'brokenredirects-edit' => 'igliwat',
 'brokenredirects-delete' => 'paraa',
@@ -1289,12 +1331,18 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'mostlinked' => 'Pinakadamo nga mga ginsumpayan nga pakli',
 'mostlinkedcategories' => 'Pinakadamo nga mga ginsumpayan nga kaarangay',
 'mostlinkedtemplates' => 'Pinakadamo nga mga ginsumpayan nga batakan',
+'mostcategories' => 'Mga paypay nga may-ada pinakadamo nga mga kaarangay',
+'mostimages' => 'Pinakadamo nga nahisumpayan nga mga paypay',
+'mostinterwikis' => 'Mga pakli nga may-ada pinakadamo nga mga interwiki',
+'mostrevisions' => 'Mga pakli nga may-ada pinakadamo nga mga rebisyon',
 'prefixindex' => 'Ngatanan nga pakli nga may-ada pahiuna-nga-sumpay',
 'shortpages' => 'Haglipot nga mga pakli',
 'longpages' => 'Haglaba nga mga pakli',
 'deadendpages' => 'Waray na kakadtoan nga mga pakli',
 'protectedpages' => 'Pinapasaliporan nga mga pakli',
+'protectedtitles' => 'Pinapasaliporan nga mga titulo',
 'listusers' => 'Lista han mga gumaramit',
+'listusers-editsonly' => 'Igpakita la an mga gumaramit nga may-ada ginliwat',
 'listusers-creationsort' => 'Ginsusunodsunod pinaagi han paghimo nga petsa',
 'usereditcount' => '$1 {{PLURAL:$1|ka pagliwat|ka mga pagliwat}}',
 'usercreated' => '{{GENDER:$3|Ginhimo}} han $1 ha $2',
@@ -1333,6 +1381,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'allpagesnext' => 'Sunod',
 'allpagessubmit' => 'Kadto-a',
 'allpages-bad-ns' => '{{SITENAME}} in waray ngaran-lat\'ang nga "$1".',
+'allpages-hide-redirects' => 'Igtago an mga redirekta',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'Igkita an pinakaurhi.',
@@ -1387,6 +1436,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'noemailtitle' => 'Waray e-mail address',
 'nowikiemailtitle' => 'Waray gintutugutan nga e-mail',
 'emailusername' => 'Agnay hiton gumaramit:',
+'emailusernamesubmit' => 'Igsumite',
 'emailfrom' => 'Tikang kan:',
 'emailto' => 'Para kan:',
 'emailsubject' => 'Himangrawon:',
@@ -1404,13 +1454,20 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'mywatchlist' => 'Mga angay timan-an nakon',
 'watchlistfor2' => 'Para ha $1 $2',
 'watchnologin' => 'Diri nakalog-in',
+'addwatch' => 'Igdugang an listahan hit binabantayan',
 'watch' => 'Bantayi',
 'watchthispage' => 'Bantayi ini nga pakli',
 'unwatch' => 'Pabay-i an pagbantay',
+'unwatchthispage' => 'Undangi pagbantay',
 'watchlist-details' => '{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri lakip an mga hiruhimangraw-nga-pakli.',
 'wlshowlast' => 'Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3',
 'watchlist-options' => 'Mga pirilian han talaan han binabantayan',
 
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'Ginbabantay...',
+'unwatching' => 'Diri na ginbabantay...',
+
+'enotif_reset' => 'Markahi an ngatanan nga mga pakli nga ginbisita na',
 'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
 'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
 'created' => 'nahimo',
@@ -1421,6 +1478,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'confirm' => 'Kompirma',
 'excontent' => "An sulod in: ''$1''",
 'excontentauthor' => 'an sulod in: \'\'$1\'\' (ngan hi "[[Special:Contributions/$2|$2]]" la an nag-amot)',
+'exbeforeblank' => 'sulod san-o paghawan in: "$1"',
 'exblank' => 'waray sulod an pakli',
 'delete-confirm' => 'Igpara "$1"',
 'delete-legend' => 'Igpara',
@@ -1452,7 +1510,7 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'prot_1movedto2' => '[[$1]] in ginbalhin ngadto ha [[$2]]',
 'protectcomment' => 'Katadongan:',
 'protect-default' => 'Togota an ngatanan nga mga gumaramit',
-'protect-level-sysop' => 'Mga magdudumara la',
+'protect-level-sysop' => 'Tuguti la an mga magdudumara',
 'protect-othertime' => 'Lain nga oras:',
 'protect-othertime-op' => 'lain nga oras',
 'protect-otherreason' => 'Lain/dugang nga katadongan:',
@@ -1855,6 +1913,7 @@ $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'ago' => '$1 an nakalabay',
+'just-now' => 'yana pala',
 
 # Bad image list
 'bad_image_list' => 'An kabutangan in masunod:
index a4b0680..3ab6639 100644 (file)
@@ -1565,7 +1565,7 @@ Man ngaa fee gis itam [[{{MediaWiki:Listgrouprights-helppage}}|yeneen xibaar]] 
 'listgrouprights-addgroup-self-all' => 'Man ngaa yokk mbooloo yépp ci sa sàq',
 'listgrouprights-removegroup-self-all' => 'Man ngaa far mbooloo yépp ci sa sàq',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Amul benn mákkaan boo man a yónne bataaxal bi',
 'mailnologintext' => 'Ngir man a yónney bataaxal laaj na nga [[Special:UserLogin|dugg]] te it am ab màkkaanub m-bataaxal bu baax ci say [[Special:Preferences|tànneef]].',
 'emailuser' => 'Bind bii jëfandikukat',
@@ -2152,7 +2152,7 @@ Lëkkalekaay yiy toftal, ci wenn rëdd wi, dees leen di jàppee nikiy sette, maa
 'namespacesall' => 'Yépp',
 'monthsall' => 'Yépp',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Dëggalal sa m-bataaxal',
 'confirmemail_noemail' => 'Jooxewoo ab m-bataaxal bu baax ci say [[Special:Preferences|tànneef]].',
 
index 0dfb48e..2da4ece 100644 (file)
@@ -1192,7 +1192,7 @@ $1",
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员列表)',
 
-# E-mail user
+# Email user
 'emailuser' => '发E-mail拨该个用户',
 'emailfrom' => '从',
 'emailto' => '发拨',
@@ -1534,7 +1534,7 @@ Variants for Chinese language
 'namespacesall' => '全部',
 'monthsall' => '全',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '确认电子邮件地址',
 'confirmemail_text' => '该只wiki要求倷来拉用电子邮件服务之前验证电子邮件地址个有效性。揿底下只揿钮来发封确认信到倷电子邮箱。个封信里会有加密个链接。登倷个浏览器里向打开该只链接,确认倷个电子邮箱地址是有效个。',
 'confirmemail_send' => '发送确认码',
index c102940..b039767 100644 (file)
@@ -46,6 +46,10 @@ $namespaceAliases = array(
        'באזונדער' => NS_SPECIAL,
        'באנוצער' => NS_USER,
        'באנוצער_רעדן' => NS_USER_TALK,
+       'משתמש' => NS_USER,
+       'שיחת_משתמש' => NS_USER_TALK,
+       'משתמשת' => NS_USER,
+       'שיחת_משתמשת' => NS_USER_TALK,
        'בילד' => NS_FILE,
        'בילד_רעדן' => NS_FILE_TALK,
        'מעדיעוויקי' => NS_MEDIAWIKI,
@@ -55,6 +59,10 @@ $namespaceAliases = array(
        'באניצער' => NS_USER,
        'באניצער_רעדן' => NS_USER_TALK,
 );
+$namespaceGenderAliases = array(
+       NS_USER      => array( 'male' => 'באַניצער', 'female' => 'באַניצערין' ),
+       NS_USER_TALK => array( 'male' => 'באַניצער_רעדן', 'female' => 'באַניצערין_רעדן' ),
+);
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'טעטיגע_באניצער' ),
@@ -322,6 +330,7 @@ $messages = array(
 'newwindow' => '(עפֿנט זיך אין א נײַעם פענסטער)',
 'cancel' => 'אַנולירן',
 'moredotdotdot' => 'נאך…',
+'morenotlisted' => 'ווייטער, נאך נישט אין דער ליסטע…',
 'mypage' => 'מײַן בלאט',
 'mytalk' => 'שמועס',
 'anontalk' => 'דאס רעדן פון דעם IP',
@@ -629,16 +638,16 @@ $2',
 'createaccountmail' => 'ניצן א פראוויזאריש פאסווארט און שיקן צום ע-פאסט אדרעס געצייכנט אונטן',
 'createaccountreason' => 'אורזאַך:',
 'badretype' => 'די פאסווערטער וואס איר האט אריינגעלייגט זענען נישט אייניג.',
-'userexists' => 'דער באַניצער נאָמען איז שוין געניצט. 
+'userexists' => 'דער באַניצער נאָמען איז שוין געניצט.
 ביטע קלײַבט אױס אַן אַנדער נאָמען.',
 'loginerror' => 'לאגירן פֿעלער',
 'createaccounterror' => 'האט נישט געקענט שאַפֿן קאנטע: $1',
 'nocookiesnew' => 'די באניצער קאנטע איז באשאפן, אבער איר זענט נישט אריינלאגירט.
 {{SITENAME}} ניצט קיכלעך אריינצולאגירן באניצער.
-איר האט קיכלעך נישט-ערמעגלעכט. 
+איר האט קיכלעך נישט-ערמעגלעכט.
 ביטע ערמעגלעכט זיי, דאן טוט אריינלאגירן מיט אייערע נייע באניצער נאמען און פאסווארט.',
-'nocookieslogin' => '{{SITENAME}} נוצט קיכלעך כדי אַרײַנלאגירן באַניצער. 
-בײַ אײַך זענען קיכלעך אומדערמעגלעכט. 
+'nocookieslogin' => '{{SITENAME}} נוצט קיכלעך כדי אַרײַנלאגירן באַניצער.
+בײַ אײַך זענען קיכלעך אומדערמעגלעכט.
 ביטע אַקטיווירט זיי און פרובירט נאכאַמאָל.',
 'nocookiesfornew' => 'מען האט נישט געשאַפֿן די באַניצער קאנטע, ווײַל מען האט נישט געקענט באַשטעטיקן איר מקור.
 טוט פֿעסטשטעלן אָז קיכלעך זענען אַקטיווירט, לאָדט אָן נאכאַמאל דעם בלאַט און פרואווט ווידער.',
@@ -648,7 +657,7 @@ $2',
 'nosuchuser' => 'נישטא קיין באניצער מיטן נאמען  "$1".
 
 קוקט איבער אײַער אויסלייג, אדער [[Special:UserLogin/signup|שאַפֿט א נײַע קאנטע]].',
-'nosuchusershort' => 'נישטאָ קיין באַניצער מיטן נאָמען "$1". 
+'nosuchusershort' => 'נישטאָ קיין באַניצער מיטן נאָמען "$1".
 ביטע באַשטעטיקט דעם אויסלייג.',
 'nouserspecified' => 'איר ברויכט ספעציפֿיצירן א באַניצער-נאָמען.',
 'login-userblocked' => 'דער באַניצער איז בלאקירט. ארײַנלאגירן נישט ערלויבט.',
@@ -674,7 +683,7 @@ $2',
 ביטע ווידער אריינלאגירן נאך דעם וואס איר באקומט עס.',
 'blocked-mailpassword' => 'אייער איי פי אדרעס איז בלאקירט צו רעדאקטירן, דערוועגן זענט איר נישט ערלויבט צו באניצן מיטן פאסווארט ווידעראויפלעבונג פֿונקציע כדי צו פארמיידן סיסטעם קרומבאניץ.',
 'eauthentsent' => 'א באשטעטיגונג ע-בריוו איז געשיקט געווארן צו דעם באשטימטן ע-פאסט אדרעס. איידער סיי וואס אנדערע ע-פאסט וועט ווערן געשיקט צו דער קאנטע, וועט איר דארפן פאלגן די אנווייזונגען אין דער מעלדונג כדי צו זיין זיכער אז די קאנטע איז טאקע אייערס.',
-'throttled-mailpassword' => "×\90 ×¤×\90ס×\95×\95×\90ר×\98 ×\93ער×\9e×\90× ×\95× ×\92 ×\90×\99×\96 ×©×\95×\99×\9f ×\92עש×\99ק×\98 ×\92×¢×\95×\95×\90ר×\9f, ×\90×\99×\9f {{PLURAL:$1|×\93ער ×\9cעצ×\98ער ×©×¢×\94\93×\99 ×\9cעצ×\98×¢ $1 ×©×¢×\94\9f}}. ×\9b×\93×\99 ×¦×\95 ×¤×\90ר×\9eײַ×\93×\9f ×©×\9c×¢×\9b×\98 ×\91×\90× ×\99צ×\9f, × ×\90ר ×\90×\99×\99×\9f ×¤×\90ס×\95×\95×\90ר×\98 ×\93ער×\9e×\90× ×\95× ×\92 וועט געשיקט ווערן אין {{PLURAL:$1|א שעה |$1 שעה'ן}}.",
+'throttled-mailpassword' => "×\9e\94×\90×\98 ×©×\95×\99×\9f ×\92עש×\99ק×\98 ×\90 ×\91×\9c×\99צ×\91ר×\99×\95×\95 ×¦×\95ר×\99קצ×\95ש×\98×¢×\9c×\9f ×\93×\90ס ×¤×\90ס×\95×\95×\90ר×\98, ×\90×\99×\9f {{PLURAL:$1|×\93ער ×\9cעצ×\98ער ×©×¢×\94\93×\99 ×\9cעצ×\98×¢ $1 ×©×¢×\94\9f}}. ×\9b×\93×\99 ×¦×\95 ×¤×\90ר×\9eײַ×\93×\9f ×©×\9c×¢×\9b×\98 ×\91×\90× ×\99צ×\9f, × ×\90ר ×\90×\99×\99×\9f ×¤×\90ס×\95×\95×\90ר×\98 ×¦×\95ר×\99קש×\98×¢×\9c×\9f ×\91×\9c×\99צ×\91ר×\99×\95×\95 וועט געשיקט ווערן אין {{PLURAL:$1|א שעה |$1 שעה'ן}}.",
 'mailerror' => 'פֿעלער שיקנדיג פאסט: $1',
 'acct_creation_throttle_hit' => 'באַזוכער צו דער וויקי וואס באַניצן אייער IP אַדרעס האָבן שױן באַשאַפֿן {{PLURAL:$1|1 קאנטע|$1 קאנטעס}} במשך דעם לעצטן טאָג, דעם מאַקסימום וואָס מען ערלויבט אין דעם פעריאד.
 
@@ -725,7 +734,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'צוריקשטעלן פאַסווארט',
-'passwordreset-text' => '×\93ער×\92×\90Ö·× ×\98 ×\93×\99 ×¤×\90ָרע×\9d ×¦×\95 ×\91×\90ַק×\95×\9e×¢×\9f ×\90Ö·×\9f ×¢-פּ×\90ָס×\98 ×\93ער×\9e×\90ָנ×\95× ×\92 ×¤×\95×\9f ×\93×\99 ×¤×¨×\98×\99×\9d ×¤Ö¿×\95×\9f ×\90ײַער ×§×\90× ×\98×¢.',
+'passwordreset-text' => '×\93ער×\92×\90ַנצ×\98 ×\93×\99 ×¤×\90ָרע×\9d ×¦×\95ר×\99קצ×\95ש×\98×¢×\9c×\9f ×\90ײַער ×¤×\90ַס×\95×\95×\90ר×\98.',
 'passwordreset-legend' => 'צוריקשטעלן פאַסווארט',
 'passwordreset-disabled' => 'מען האט אומאַקטיוויטר צוריקשטעלן פאַסווערטער אויף דער וויקי.',
 'passwordreset-pretext' => '{{PLURAL:$1| | קלאַפט אַרײַן איינע פֿון די דאַטן אונטן}}',
@@ -735,30 +744,29 @@ $2',
 'passwordreset-capture-help' => 'אַז איר צייכנט דאס קעסטל, וועט מען ווײַזן דעם ע־בריוו (מיטן פראוויזארישן פאַסווארט) צו אײַך ווי אויך ווערן געשיקט צום באַניצער.',
 'passwordreset-email' => 'בליצפּאָסט אַדרעס:',
 'passwordreset-emailtitle' => 'קאנטע פרטים אין {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'עמעצער (מסתמא איר, פון IP אדרעס $1) האט געבעטן א דערמאנונג פון אייערע
-קאנטע פרטים פאר {{SITENAME}} ($4). די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}}
+'passwordreset-emailtext-ip' => 'עמעצער (מסתמא איר, פון IP אדרעס $1) האט געבעטן צוריקצושטעלן אייער פאסווארט פאר {{SITENAME}} ($4). די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}}
 פארבונדן מיט דעם ע־פאסט אדרעס:
 
 $2
 
 {{PLURAL:$3|דאס פראוויזארישע פאסווארט|די פראוויזארישע פאסווערטער}} וועלן אויסגיין נאך {{PLURAL:$5|איין טאג|$5 טעג}}.
-איר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה, 
+איר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה,
 אדער ווען איר געדענקט יא אייער פריעריקע פאסווארט, און וויל עס נישט ענדערן,
  קענט איר איגנארירן דעם אנזאג און ניצן ווייטער דאס אלטע פאסווארט.',
-'passwordreset-emailtext-user' => '×\91×\90× ×\99צער $1 ×\90×\95×\99×£  {{SITENAME}} ×\94×\90×\98 ×\92×¢×\91×¢×\98×\9f ×\90 ×\93ער×\9e×\90× ×\95× ×\92 ×¤×\95×\9f ×\90×\99×\99ערע ×§×\90× ×\98×¢ ×¤×¨×\98×\99×\9d ×¤×\90ר {{SITENAME}} ($4). 
+'passwordreset-emailtext-user' => '×\91×\90× ×\99צער $1 ×\90×\95×\99×£  {{SITENAME}} ×\94×\90×\98 ×\92×¢×\91×¢×\98×\9f ×¦×\95ר×\99קצ×\95ש×\98×¢×\9c×\9f ×\90×\99×\99ער ×¤×\90ס×\95×\95×\90ר×\98 ×¤×\90ר {{SITENAME}} ($4).
 די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}} פארבונדן מיט דעם ע־פאסט אדרעס:
 
 $2
 
 {{PLURAL:$3|דאס פראוויזארישע פאסווארט|די פראוויזארישע פאסווערטער}} וועלן אויסגיין נאך {{PLURAL:$5|איין טאג|$5 טעג}}.
-איר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה, 
+איר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה,
 אדער ווען איר געדענקט יא אייער פריעריקע פאסווארט, און וויל עס נישט ענדערן,
  קענט איר איגנארירן דעם אנזאג און ניצן ווייטער דאס אלטע פאסווארט.',
-'passwordreset-emailelement' => 'באַניצער נאָמען: $1 
+'passwordreset-emailelement' => 'באַניצער נאָמען: $1
 פראוויזארישער פּאַראָל: $2',
-'passwordreset-emailsent' => "×\9e\94×\90×\98 ×\92עש×\99ק×\98 ×\90 ×\93ער×\9e×\90ָנ×\95× ×\92 ע-פּאָסט.",
-'passwordreset-emailsent-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\99ק×\98 ×\90 ×\93ער×\9e×\90× ×\95× ×\92 בליצבריוו, וואס ווערט געוויזן אונטן.',
-'passwordreset-emailerror-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\90פ×\9f ×\90 ×\93ער×\9e×\90× ×\95× ×\92 בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום באניצער איז דורכגעפאלן: $1',
+'passwordreset-emailsent' => "×\9e\94×\90×\98 ×\92עש×\99ק×\98 ×\90 ×¤×\90ס×\95×\95×\90ר×\98 ×¦×\95ר×\99קש×\98×¢×\9c×\9f ע-פּאָסט.",
+'passwordreset-emailsent-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\99ק×\98 ×\90 ×¤×\90ס×\95×\95×\90ר×\98 ×¦×\95ר×\99קש×\98×¢×\9c×\9f בליצבריוו, וואס ווערט געוויזן אונטן.',
+'passwordreset-emailerror-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\90פ×\9f ×\90 ×¤×\90ס×\95×\95×\90ר×\98 ×¦×\95ר×\99קש×\98×¢×\9c×\9f בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום באניצער איז דורכגעפאלן: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ענדערן ע-פּאָסט אַדרעס',
@@ -868,7 +876,7 @@ $2
 
 דאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.
 פרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].',
-'userpage-userdoesnotexist' => 'באניצער קאנטע "$1" איז נישט אײַנגעשריבן. 
+'userpage-userdoesnotexist' => 'באניצער קאנטע "$1" איז נישט אײַנגעשריבן.
 קוקט איבער צי איר ווילט שאפֿן/רעדאקטירן דעם בלאט.',
 'userpage-userdoesnotexist-view' => 'באניצער קאנטע "$1" איז נישט איינגעשריבן.',
 'blocked-notice-logextract' => 'דער באַניצער איז דערווייַל פֿאַרשפאַרט.
@@ -932,7 +940,7 @@ $2
 
 אזוי אויך, זאגט איר צו אז איר האט דאס געשריבן אליין, אדער דאס איבערקאפירט פון א מקור מיט פולן רשות דאס מפקיר זיין (זעט $1 פאר מער פרטים).
 '''זיכט נישט באניצן מיט שטאף וואס איז באשיצט מיט קאפירעכטן!'''",
-'longpageerror' => "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}. 
+'longpageerror' => "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}.
 ער קען נישט ווערן אפגעהיטן.'''",
 'readonlywarning' => "'''ווארענונג: די דאטנבאזע איז געווארן פארשלאסן פאר אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. '''
 איר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן אויף שפעטער.
@@ -1158,6 +1166,8 @@ $1",
 'mergehistory-from' => 'מקור בלאַט:',
 'mergehistory-into' => 'פֿארציל בלאַט:',
 'mergehistory-list' => 'צוזאשמעלצונג ענדערונג היסטאריע',
+'mergehistory-merge' => 'די פאלגנדע ווערסיעס פון [[:$1]] קענען ווערן צונויפגעגאסן אין [[:$2]].
+באניצט די ראדיא קנעפלעך כדי צונויפגיסן נאר די ווערסיעס געשאפן ביז א געוויסער צייט. גיט אכט אז ניצן די נאוויגאציע לינקען וועלן צוריקשטעלן דעם עמוד.',
 'mergehistory-go' => 'צייג צוזאמשמעלצונג ענדערונגן',
 'mergehistory-submit' => 'צונויפֿגיסן רעוויזיעס',
 'mergehistory-empty' => 'קיין רעוויזיעס קען נישט ווערן צונויפֿגעגאסן.',
@@ -1189,6 +1199,10 @@ $1",
 'editundo' => 'אַנולירן',
 'diff-multi' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)',
 'diff-multi-manyusers' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון מער ווי {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)',
+'difference-missing-revision' => '{{PLURAL:$2|איין ווערסיע|$2 ווערסיעס}} פון דעם דיפערענץ ($1) {{PLURAL:$2|האט}} מען נישט געטראפן.
+
+דאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.
+פרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].',
 
 # Search results
 'searchresults' => 'זוכן רעזולטאטן',
@@ -1359,7 +1373,7 @@ $1",
 'email' => 'ע-פאסט',
 'prefs-help-realname' => '* עכטער נאמען (אפציאנאל): אויב וועט איר אויסוועלן צוצישטעלן דאס, וועט גענוצט ווערן צו געבן אטריביאציע צו אייער ארבייט.',
 'prefs-help-email' => 'ע-פאסט אַדרעס איז ברירהדיק, אבער עס דערמעגליכט אז מען קען אייך שיקן א ניי פאסווארט טאמער איר פֿארגעסט דאָס אַלטע.',
-'prefs-help-email-others' => 'איר קענט אויך אויסקלייבן צו לאזן אנדערע פֿארבינדן מיט אייך דורך ע־פאסט דורך א לינק אויף אייער באניצער אדער שמועס בלאט. 
+'prefs-help-email-others' => 'איר קענט אויך אויסקלייבן צו לאזן אנדערע פֿארבינדן מיט אייך דורך ע־פאסט דורך א לינק אויף אייער באניצער אדער שמועס בלאט.
 מען וועט נישט אנטפלעקן אייער ע־פאסט אדרעס ווען אנדערע פֿארבינדן זיך מיט אייך.',
 'prefs-help-email-required' => 'בליצפאסט אדרעס באדארפט.',
 'prefs-info' => 'גרונטלעכע אינפֿארמאַציע',
@@ -1657,11 +1671,11 @@ $1",
 'file-thumbnail-no' => "דער טעקע־נאמען הייבט אן מיט <strong>$1</strong>.
 זי זעט אויס ווי א פארקלענערט בילד ''(מיניאטור)''.
 טאמער האט איר דאס בילד אין פולער רעזאלוציע טוט עס ארויפלאדן, אנדערשט זייט אזוי גוט און ענדערט דעם טעקע־נאמען.",
-'fileexists-forbidden' => 'א טעקע מיט דעם נאָמען עקזיסטירט שוין, און מען קען זי נישט אַריבערשרײַבן. 
-אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען. 
+'fileexists-forbidden' => 'א טעקע מיט דעם נאָמען עקזיסטירט שוין, און מען קען זי נישט אַריבערשרײַבן.
+אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען.
 [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'א טעקע מיט דעם נאָמען עקזיסטירט שוין אינעם צענטראַלן אַרכיוו.
-אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען. 
+אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען.
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'די טעקע איז א דופליקאַט פון די פֿאלגנדע {{PLURAL:$1|טעקע|טעקעס}}:',
 'file-deleted-duplicate' => "א טעקע אידענטיש מיט דער טעקע ([[:$1]]) האט מען שוין אויסגעמעקט.
@@ -1740,6 +1754,7 @@ $1",
 'uploadstash' => 'אַרויפֿלאָד רעזערוו',
 'uploadstash-clear' => 'אויסמעקן טעקעס פון זאפאס',
 'uploadstash-nofiles' => 'איר האט נישט קיין טעקעס אין זאפאס.',
+'uploadstash-errclear' => 'אוועקנעמען די טעקעס דורכגעפאלן.',
 'uploadstash-refresh' => 'דערפֿרישן די רשימה פון טעקעס',
 
 # img_auth script messages
@@ -1909,6 +1924,9 @@ $1",
 'disambiguationspage' => 'Template:באדייטן',
 'disambiguations-text' => "די קומענדיגע בלעטער פארבינדן צו א '''באדייטן בלאט'''. זיי ברויכן ענדערשט פֿארבינדן צו דעם רעלעוואנטן טעמע בלאט.<br />א בלאט ווערט פאררעכענט פאר א באדײַטן בלאט אויב ער באניצט זיך מיט א מוסטער וואס איז פארבינדען פון [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop-prop' => 'אייגנשאפט נאמען:',
+'pageswithprop-submit' => 'גייט',
+
 'doubleredirects' => 'געטאפלטע ווײַטערפֿירונגען',
 'doubleredirectstext' => 'דער בלאט רעכנט אויס בלעטער וואס פירן ווייטער צו אנדערע ווייטערפירן בלעטער.
 יעדע שורה אנטהאלט א לינק צום ערשטן און צווייטן ווייטערפירונג, ווי אויך די ציל פון דער צווייטער ווייטערפירונג, וואס רוב מאל געפינט זיך די ריכטיגע ציל וואו די ערשטע ווייטערפירונג זאל ווייזן.
@@ -2078,7 +2096,7 @@ $1",
 'listgrouprights' => 'באַניצער גרופע רעכטן',
 'listgrouprights-summary' => "פֿאלגנד איז א רשימה פֿון באַניצער גרופעס דעפֿינירט אויף דער דאָזיקער וויקי, מיט זײַערע אַסאציאירטע צוטריט רעכטן.
 ס'קען זײַן  [[{{MediaWiki:Listgrouprights-helppage}}|מער אינפֿארמאַציע]] וועגן איינציקע רעכטן.",
-'listgrouprights-key' => '* <span class="listgrouprights-granted">נאָכגעגעבן רעכט</span> 
+'listgrouprights-key' => '* <span class="listgrouprights-granted">נאָכגעגעבן רעכט</span>
  * <span class="listgrouprights-revoked">אָפגערופֿן רעכט</span>',
 'listgrouprights-group' => 'גרופע',
 'listgrouprights-rights' => 'רעכטן',
@@ -2196,7 +2214,7 @@ $PAGEINTRO $NEWPAGE
 
 עס וועט מער נישט זיין קיין מעלדונגען אין פאל פון נאך ענדערונגען נאר אויב איר וועט באזוכן דעם בלאט.
 איר קענט אויך צוריקשטעלן די מעלדונגען פאנען פון אלע אייערע אויפֿגעפאסטע בלעטער אין אייער אויפפאסונג ליסטע.
-             
+
 אייער פֿריינטליכע  {{SITENAME}} מעלדונגען סיסטעם
 
 --
@@ -2347,8 +2365,8 @@ $UNWATCHURL
 'undeleterevisions' => '{{PLURAL:$1|איין ווערסיע|$1 ווערסיעס}} אַרכיווירט',
 'undeletehistory' => 'אויב איר שטעלט צוריק דעם בלאַט, וועלן אַלע רעוויזיעס ווערן צוריקגעשטעלט אין דער היסטאריע.
 אויב מען האט באַשאַפֿן א בלאַט מיטן זעלבן נאָמען זײַטן אויסמעקן, וועלן די צוריקגעשטעלטע רעוויזיעס זיך באַווײַזן אין דער פֿריערדיקער היסטאריע.',
-'undeletehistorynoadmin' => 'דער בלאַט איז געווארן אויסגעמעקט. 
- די סיבה פֿאַרן אויסמעקן ווערט געוויזן אין דער רעזומע אונטן, צוזאמען מיט פרטים פון די באַניצער וואס האבן רעדאַקטירט דעם בלאַט פֿאַרן אויסמעקן. 
+'undeletehistorynoadmin' => 'דער בלאַט איז געווארן אויסגעמעקט.
+ די סיבה פֿאַרן אויסמעקן ווערט געוויזן אין דער רעזומע אונטן, צוזאמען מיט פרטים פון די באַניצער וואס האבן רעדאַקטירט דעם בלאַט פֿאַרן אויסמעקן.
  דער טעקסט פון די אויסגעמעקטע ווערסיעס איז דערגרײַכלעך בלויז צו סיסאפן.',
 'undelete-revision' => 'אויסגעמעקטע ווערסיע פֿון $1 (פֿון $4, אום $5) פֿון $3:',
 'undeleterevision-missing' => 'אומגילטיקע אדער פֿעלנדיקע ווערסיע.
@@ -2535,7 +2553,7 @@ $1',
 דער פֿאַרשטיקונג לאג איז צוגעשטעלט אונטן:',
 'blocklogentry' => 'בלאקירט "[[$1]]" אויף אַ תקופה פון $2 $3',
 'reblock-logentry' => 'גענדערט די בלאקירונג דעפיניציעס פון [[$1]] מיטן צייט אפלויף פון $2 $3',
-'blocklogtext' => 'דאס איז א לאג בוך פון אלע בלאקירונגען און באפרייונגען פֿון באניצער. 
+'blocklogtext' => 'דאס איז א לאג בוך פון אלע בלאקירונגען און באפרייונגען פֿון באניצער.
 איי פי אדרעסן וואס זענען בלאקירט אויטאמאטיש ווערן נישט אויסגערעכענט דא.
 זעט די איצטיקע [[Special:BlockList|ליסטע פון בלאקירטע באניצער]].',
 'unblocklogentry' => 'אומבלאקירט $1',
@@ -2554,7 +2572,7 @@ $1',
 'ipb-needreblock' => '$1 איז שוין בלאקירט. צי ווילט איר טוישן די באַצייכנונגען?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|אנדער בלאקירונג|אנדערע בלאקירונגען}}',
 'unblock-hideuser' => 'איר קענט נישט אומבלאקירן דעם באניצער, ווײַל זײַן באַניצער נאָמען איז פֿאַרבארגן.',
-'ipb_cant_unblock' => "גרײַז: בלאק ID $1 נישט געפֿונען. 
+'ipb_cant_unblock' => "גרײַז: בלאק ID $1 נישט געפֿונען.
 ס'מעגליך שוין געווארן באַפֿרייט.",
 'ipb_blocked_as_range' => "טעות: דער IP אַדרעס $1 איז נישט בלאקירט גראָד און מען קען אים נישט אויפֿבלאקירן.
 דאך איז ער בלאקירט אַלס א טייל פֿון דעם אָפשטאַנד $2, וואָס מ'קען יא אויפֿבלאקירן.",
@@ -2597,11 +2615,11 @@ $1',
 
 איר זענט פֿאראנטווארטלעך זיכער מאכן אז אלע פֿארבינדונגען ווערן געריכטעט צום געהעריגן ציל.
 
-דער בלאט וועט '''נישט''' ווערן אריבערגעפֿירט אויב עס איז שוין דא א בלאט אונטער דעם נייעם נאמען, אחוץ ווען ער איז א ווייטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען. 
+דער בלאט וועט '''נישט''' ווערן אריבערגעפֿירט אויב עס איז שוין דא א בלאט אונטער דעם נייעם נאמען, אחוץ ווען ער איז א ווייטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען.
 פשט דערפֿון, אז איר קענט איבערקערן א ווייטערפֿירונג וואס איר האט אט געמאכט בטעות, און איר קענט נישט אריבערשרייבן אן עקסיסטירנדן בלאט.
 
 '''ווארענונג!'''
- אזא ענדערונג קען זיין דראסטיש און נישט געווינטשען פאר א פאפולערן בלאט; 
+ אזא ענדערונג קען זיין דראסטיש און נישט געווינטשען פאר א פאפולערן בלאט;
 ביטע פֿארזיכערט אז איר פֿארשטייט די ווייטגרייכנדע קאנסקווענסן צו דער אקציע בעפֿאר איר פֿירט דאס אויס.",
 'movepagetext-noredirectfixer' => "זיך באניצן מיט דעם פֿארעם אונטן וועט פֿארענדערן דעם נאמען פֿון דעם בלאט, און וועט אריבערפֿירן זיין געשיכטע צום נייעם נאמען.
 
@@ -2611,7 +2629,7 @@ $1',
 
 איר זענט פֿאראנטווארטלעך זיכער מאכן אז אלע פֿארבינדונגען ווערן געריכטעט צו דער געהעריגער ריכטונג.
 
-אַכטונג: דער בלאַט וועט '''נישט''' ווערן אַריבערגעפֿירט אויב עס איז שוין דאָ א בלאט אונטער דעם נײַעם נאמען, אחוץ ווען ער איז ליידיג. אדער ער איז א ווײַטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען. 
+אַכטונג: דער בלאַט וועט '''נישט''' ווערן אַריבערגעפֿירט אויב עס איז שוין דאָ א בלאט אונטער דעם נײַעם נאמען, אחוץ ווען ער איז ליידיג. אדער ער איז א ווײַטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען.
 פשט דערפֿון, אז איר קענט איבערקערן א ווייטערפֿירונג וואס איר האט אט געמאכט בטעות, און איר קענט נישט אריבערשרײַבן אַן עקסיסטירנדן בלאט.
 
 '''ווארענונג:''' אזא ענדערונג קען זיין דראַסטיש און נישט געוואונטשן פֿאַר א פאפולערן בלאַט; ביטע פֿאַזיכערט אז איר פֿאַרשטייט די ווײַטגרייכנדע קאנסעקווענסן צו דער אַקציע בעפֿאַר איר גייט ווײַטער.",
@@ -2772,7 +2790,7 @@ $1',
 'import-nonewrevisions' => 'אַלע רעוויזיעס שוין אימפארטירט.',
 'xml-error-string' => '$1 בײַ שורה $2, זייל $3 (בייט $4): $5',
 'import-upload' => 'אַרויפֿלאָדן XML דאַטן',
-'import-token-mismatch' => 'אָנווער פון סעסיע דאַטן. 
+'import-token-mismatch' => 'אָנווער פון סעסיע דאַטן.
  ביטע פרובירט נאכאמאל.',
 'import-invalid-interwiki' => 'נישט מעגלעך צו אימפארטירן פון ספעציפֿירטער וויקי.',
 'import-error-edit' => 'דעם בלאט "$1" קען מען נישט אימפארטירן ווייל איר האט נישט די רעכט אים צו רעדאקטירן.',
@@ -3444,7 +3462,7 @@ $3
 $5
 
 דער באשטעטיגונג קאד גייט אויס $4.',
-'confirmemail_body_set' => 'עמעצער, ווארשיינליך איר, פֿון IP אַדרעס $1, 
+'confirmemail_body_set' => 'עמעצער, ווארשיינליך איר, פֿון IP אַדרעס $1,
 האט געענדערט דעם ע־פאסט אַדרעס פֿון דער קאנטע "$2" צו דעם אדרעס אויף {{SITENAME}}.
 
 צו באַשטעטיקן אַז די קאנטע געהערט טאקע צו אייך און ווידער אַקטיווירן ע־פאסט דינסטן אויף {{SITENAME}}, ביטע טוט עפֿענען דעם לינק אין אייער בלעטערער:
@@ -3707,17 +3725,17 @@ $5
 '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 רעוויזיעס}} אויף בלאט $3: $4',
-'logentry-delete-event-legacy' => '$1 האט געענדערט די זעבארקייט פון לאגבוך אקטיוויטעטן אויף $3',
-'logentry-delete-revision-legacy' => '$1 האט געענדערט די זעבארקייט פון רעוויזיעס אויף בלאט $3',
-'logentry-suppress-delete' => '$1 האט אונטערדריקט בלאט $3',
-'logentry-suppress-event' => '$1 האט געהיימלעך געענדערט די זעבארקייט פון {{PLURAL:$5|א לאגבוך אקטיוויטעט|$5 לאגבוך אקטיוויטעטן}} אויף $3: $4',
-'logentry-suppress-revision' => '$1 האט געהיימלעך געענדערט די זעבארקייט פון  {{PLURAL:$5|א רעוויזיע|$5 רעוויזיעס}} אויף בלאט $3: $4',
-'logentry-suppress-event-legacy' => '$1 האט געהיימלעך געענדערט די זעבארקייט פון לאגבוך אקטיוויטעטן אויף $3',
-'logentry-suppress-revision-legacy' => '$1 האט געהיימלעך געענדערט די זעבארקייט פון רעוויזיעס אויף בלאט $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|האט אויסגעמעקט}} בלאט $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|האט צוריקגעשטעלט }} בלאט $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|האט געענדערט}} די זעבארקייט פון {{PLURAL:$5|א לאגבוך אקטיוויטעט|$5 לאגבוך אקטיוויטעטן}} אויף $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|האט געענדערט}} די זעבארקייט פון  {{PLURAL:$5|א רעוויזיע|$5 רעוויזיעס}} אויף בלאט $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|האט געענדערט}} די זעבארקייט פון לאגבוך אקטיוויטעטן אויף $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|האט געענדערט}} די זעבארקייט פון רעוויזיעס אויף בלאט $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|האט אונטערדריקט}} בלאט $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|האט געהיימלעך געענדערט}} די זעבארקייט פון {{PLURAL:$5|א לאגבוך אקטיוויטעט|$5 לאגבוך אקטיוויטעטן}} אויף $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|האט געהיימלעך געענדערט}}  די זעבארקייט פון  {{PLURAL:$5|א רעוויזיע|$5 רעוויזיעס}} אויף בלאט $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|האט געהיימלעך געענדערט}}  די זעבארקייט פון לאגבוך אקטיוויטעטן אויף $3',
+'logentry-suppress-revision-legacy' => '!$1 {{GENDER:$2|האט געהיימלעך געענדערט}}  די זעבארקייט פון רעוויזיעס אויף בלאט $3',
 'revdelete-content-hid' => 'אינהאלט פארהוילן',
 'revdelete-summary-hid' => 'רעדאקטירונג קאנספעקט פארהוילן',
 'revdelete-uname-hid' => 'באניצער־נאמען פארהוילן',
@@ -3726,19 +3744,20 @@ $5
 'revdelete-uname-unhid' => 'באַניצער נאָמען ארויסגעגעבן',
 'revdelete-restricted' => 'צוגעלייגט באגרעניצונגען פאר סיסאפן',
 'revdelete-unrestricted' => 'אוועקגענומען באגרעניצונגען פאר סיסאפן',
-'logentry-move-move' => '$1 האט באוועגט בלאט $3 צו $4',
-'logentry-move-move-noredirect' => '$1 האט באוועגט בלאט $3 צו $4 אן לאזן א ווייטערפירונג',
-'logentry-move-move_redir' => '$1 האט באוועגט $3 צו $4 אריבער ווייטערפירונג',
-'logentry-move-move_redir-noredirect' => '$1 האט באוועגט $3 צו $4 אריבער א ווייטערפירונג אן לאזן א  ווייטערפירונג',
-'logentry-patrol-patrol' => '$1 האט מארקירט רעוויזיע $4 פון בלאט $3 ווי קאנטראלירט',
-'logentry-patrol-patrol-auto' => '$1 האט אויטאמאטיש מארקירט רעוויזיע $4 פון בלאט $3 ווי קאנטראלירט',
-'logentry-newusers-newusers' => 'באניצער קאנטע $1 געשאפן געווארן',
-'logentry-newusers-create' => 'באניצער קאנטע $1 געשאפן געווארן',
-'logentry-newusers-create2' => 'באניצער קאנטע $1 געשאפן געווארן דורך $3',
-'logentry-newusers-autocreate' => 'קאנטע $1 באשאפן אויטאמאטיש',
-'logentry-rights-rights' => '$1 האט געביטן גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5',
-'logentry-rights-rights-legacy' => '$1 האט געביטן גרופע מיטגלידערשאפט פאר $3',
-'logentry-rights-autopromote' => '$1 אויטאמאטיש פראמאווירט פון $4 צו $5',
+'logentry-move-move' => '$1 {{GENDER:$2|האט באוועגט}} בלאט $3 צו $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|האט באוועגט}} בלאט $3 צו $4 אן לאזן א ווייטערפירונג',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|האט באוועגט}} $3 צו $4 אריבער ווייטערפירונג',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|האט באוועגט}} $3 צו $4 אריבער א ווייטערפירונג אן לאזן א  ווייטערפירונג',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|האט מארקירט}} רעוויזיע $4 פון בלאט $3 ווי קאנטראלירט',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|האט אויטאמאטיש מארקירט}} רעוויזיע $4 פון בלאט $3 ווי קאנטראלירט',
+'logentry-newusers-newusers' => 'באניצער קאנטע $1 איז {{GENDER:$2|געשאפן געווארן}}',
+'logentry-newusers-create' => 'באניצער קאנטע $1 איז {{GENDER:$2|געשאפן געווארן}}',
+'logentry-newusers-create2' => 'באניצער קאנטע $1 איז {{GENDER:$2|געשאפן געווארן}} דורך $3',
+'logentry-newusers-byemail' => 'באניצער קאנטע $3 איז {{GENDER:$2|געשאפן געווארן}} דורך $1 און דאס פאסווארט איז געשיקט געווארט דורך ע־פאסט',
+'logentry-newusers-autocreate' => 'באַניצער קאנטע $1 {{GENDER:$2|געשאפן}} אויטאמאטיש',
+'logentry-rights-rights' => '$1 האט {{GENDER:$2|געביטן}} גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|האט געביטן}} גרופע מיטגלידערשאפט פאר $3',
+'logentry-rights-autopromote' => '$1 אויטאמאטיש  {{GENDER:$2|פראמאווירט}} פון $4 צו $5',
 'rightsnone' => '(גארנישט)',
 
 # Feedback
@@ -3793,6 +3812,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 "',
@@ -3813,4 +3833,7 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|יארהונדערט|יארהונדערטער}}',
 'duration-millennia' => '$1 {{PLURAL:$1|יארטויזנט|יארטויזנטער}}',
 
+# Image rotation
+'rotate-comment' => 'בילד געדרייט דורך $1 {{PLURAL:$1|גראד}} זייגערווייז',
+
 );
index 88383e9..a376d9d 100644 (file)
@@ -695,7 +695,7 @@ $1',
 'loginlanguagelabel' => '語言:$1',
 'suspicious-userlogout' => '你去登出嘅要求已經拒絕咗,因為佢可能由壞咗嘅瀏覽器或者快取代理傳送。',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => '響 PHP 嘅 mail() 參數度出現咗未知嘅錯誤',
 
 # Change password dialog
@@ -1282,7 +1282,7 @@ $1",
 'prefs-displaywatchlist' => '顯示選項',
 'prefs-diffs' => '差異',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => '電郵地址睇嚟有效',
 'email-address-validity-invalid' => '請打一個有效嘅電郵地址',
 
@@ -1967,7 +1967,7 @@ Template:搞清楚',
 'listgrouprights-addgroup-self-all' => '加入全部組到自己嘅戶口度',
 'listgrouprights-removegroup-self-all' => '響自己嘅戶口度可以拎走全部組',
 
-# E-mail user
+# Email user
 'mailnologin' => '冇傳送地址',
 'mailnologintext' => '你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。',
 'emailuser' => '發電郵畀呢位用戶',
@@ -3092,7 +3092,7 @@ Variants for Chinese language
 'monthsall' => '全部',
 'limitall' => '全部',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '確認電郵地址',
 'confirmemail_noemail' => '你唔需要響你嘅[[Special:Preferences|用戶喜好設定]]度設定一個有效嘅電郵地址。',
 'confirmemail_text' => '{{SITENAME}}需要你喺使用電郵功能之前驗證吓你嘅電郵地址。啟用下邊個掣嚟發封確認信去你個地址度。封信入面會附帶一條包含代碼嘅連結;喺你個瀏覽器度打開條連結嚟確認你嘅電郵地址係有效嘅。',
index 78f4279..2715b8f 100644 (file)
@@ -1119,7 +1119,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListGroupRights
 'listgrouprights-members' => '(ledenlieste)',
 
-# E-mail user
+# Email user
 'emailuser' => 'E-mail deêze gebruker',
 'emailpage' => 'E-mail gebruker',
 
index faf797b..be84b22 100644 (file)
@@ -597,7 +597,7 @@ $1',
 'policy-url' => 'Project:方针',
 'portal' => '社区专页',
 'portal-url' => 'Project:社区专页',
-'privacy' => 'é\9a\90ç§\81æ\9d\83æ\94¿ç­\96',
+'privacy' => '隐私政策',
 'privacypage' => 'Project:隐私权政策',
 
 'badaccess' => '权限错误',
@@ -881,7 +881,7 @@ $2
 {{PLURAL:$3|这个|这个}}临时密码将会在{{PLURAL:$5|一天|$5 天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。',
 'passwordreset-emailelement' => '用户名:$1
 临时密码:$2',
-'passwordreset-emailsent' => 'å·²å\8f\91é\80\81æ\8f\90é\86\92ç\94µå­\90é\82®ä»¶。',
+'passwordreset-emailsent' => 'å¯\86ç \81é\87\8dç½®é\82®ä»¶å·²å\8f\91é\80\81。',
 'passwordreset-emailsent-capture' => '提醒电子邮件已发送,并在下面显示。',
 'passwordreset-emailerror-capture' => '生成的提醒电子邮件如下所示,但发送失败:$1',
 
@@ -1345,7 +1345,7 @@ $1",
 'qbsettings-directionality' => '根据您的语言文本方向固定位置',
 
 # Preferences page
-'preferences' => '系统设置',
+'preferences' => '参数设置',
 'mypreferences' => '系统设置',
 'prefs-edits' => '编辑数量:',
 'prefsnologin' => '未登录',
@@ -2020,6 +2020,9 @@ $1',
 'disambiguationspage' => 'Template:消歧义',
 'disambiguations-text' => "以下的页面都有到'''消歧义页'''的链接,但它们可能可以链接到更适当的页面。<br />一个页面如果使用了[[MediaWiki:Disambiguationspage]]内的模板,则会被视为消歧义页。",
 
+'pageswithprop' => '有某页面属性的页面',
+'pageswithprop-legend' => '有某页面属性的页面',
+'pageswithprop-text' => '此页面列出了使用特定页面属性的页面名单。',
 'pageswithprop-prop' => '属性名称:',
 'pageswithprop-submit' => '提交',
 
@@ -3934,10 +3937,10 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'logentry-patrol-patrol' => '$1标记页面$3的版本$4为已巡查',
 'logentry-patrol-patrol-auto' => '$1自动标记页面$3的版本$4为已巡查',
 'logentry-newusers-newusers' => '已创建用户帐户 $1',
-'logentry-newusers-create' => '创建用户帐户$1',
+'logentry-newusers-create' => '创建用户帐户 $1',
 'logentry-newusers-create2' => '创建用户帐户 $3 由 $1',
-'logentry-newusers-byemail' => '$1创建用户$3并将密码用电子邮件发送',
-'logentry-newusers-autocreate' => '账户$1被自动创建',
+'logentry-newusers-byemail' => '$1创建用户$3,并且密码已通过电子邮件发送',
+'logentry-newusers-autocreate' => '帐户$1已被自动地创建',
 'logentry-rights-rights' => '$1将$3的用户组从$4改为$5',
 'logentry-rights-rights-legacy' => '$1更改$3的用户组',
 'logentry-rights-autopromote' => '$1的用户组已自动从$4改为$5',
@@ -4015,4 +4018,7 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'duration-centuries' => '$1个世纪',
 'duration-millennia' => '$1千年',
 
+# Image rotation
+'rotate-comment' => '图像已顺时针方向旋转了 $1 {{PLURAL:$1|度|度}}',
+
 );
index d863b82..45ec98c 100644 (file)
@@ -729,7 +729,8 @@ $2',
 請在收到後再登入。',
 'blocked-mailpassword' => '您的IP地址處於查封狀態而不允許編輯,為了安全起見,密碼恢復功能已被禁用。',
 'eauthentsent' => '一封確認信已經發送到所示的地址。在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
-'throttled-mailpassword' => '密碼提醒已經在前$1小時內發送。為防止濫用,限定在$1小時內僅發送一次密碼提醒。',
+'throttled-mailpassword' => '密碼提醒已經在前$1小時內發送。
+為防止濫用,限定在$1小時內僅發送一次密碼提醒。',
 'mailerror' => '發送郵件錯誤: $1',
 'acct_creation_throttle_hit' => '在這個wiki上的訪客利用您的IP地址在昨天創建了$1個賬戶,是在這段時間中的上限。
 結果利用這個IP地址的訪客在這段時間中不能創建更多的賬戶。',
@@ -779,7 +780,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => '重新設定密碼',
-'passwordreset-text' => '完成此表格以接收一個電郵以提示你的帳戶詳情。',
+'passwordreset-text' => '完成此表格以重置您的密碼。',
 'passwordreset-legend' => '重設密碼',
 'passwordreset-disabled' => '此維基上已禁止了重設密碼。',
 'passwordreset-pretext' => '{{PLURAL:$1||輸入下列其中一個}}',
@@ -789,15 +790,14 @@ $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' => '用戶$1要求發出一個在{{SITENAME}}($4)的帳戶信息提示。該用戶{{PLURAL:$3|是|是}}與以下
+'passwordreset-emailtext-user' => '用戶$1要求重置在{{SITENAME}}($4)的密碼。該用戶{{PLURAL:$3|是|是}}與以下
 電郵地址有關:
 
 $2
@@ -807,9 +807,9 @@ $2
 起你原來的密碼,你可以忽略本信息並使用你原來的密碼。',
 'passwordreset-emailelement' => '用戶名:$1
 臨時密碼:$2',
-'passwordreset-emailsent' => '已發送提示電郵。',
-'passwordreset-emailsent-capture' => '提醒電子郵件已發送,並在下面顯示。',
-'passwordreset-emailerror-capture' => '生成的提醒電子郵件如下所示,但發送失敗:$1',
+'passwordreset-emailsent' => '已發送重置密碼電郵。',
+'passwordreset-emailsent-capture' => '重置密碼電子郵件已發送,並在下面顯示。',
+'passwordreset-emailerror-capture' => '生成的重置密碼電子郵件如下所示,但發送失敗:$1',
 
 # Special:ChangeEmail
 'changeemail' => '更改電郵地址',
@@ -3892,14 +3892,14 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'logentry-delete-delete' => '$1刪除頁面$3',
 'logentry-delete-restore' => '$1恢復頁面$3',
 'logentry-delete-event' => '$1已更改$3中$5項日誌的可見性:$4',
-'logentry-delete-revision' => '$1已更改$3中{{PLURAL:$5|$5個歷史版本|$5個歷史版本}}的可見性:$4',
-'logentry-delete-event-legacy' => '$1已更改$3中日誌的可見性',
-'logentry-delete-revision-legacy' => '$1已更改$3中歷史版本的可見性',
-'logentry-suppress-delete' => '$1已隱藏頁面$3',
-'logentry-suppress-event' => '$1已不可見地更改$3中{{PLURAL:$5|$5項日誌|$5項日誌}}的可見性:$4',
-'logentry-suppress-revision' => '$1已不可見地更改$3中{{PLURAL:$5|$5個歷史版本|$5個歷史版本}}的可見性:$4',
-'logentry-suppress-event-legacy' => '$1已不可見地更改$3中日誌的可見性',
-'logentry-suppress-revision-legacy' => '$1已不可見地更改$3中歷史版本的可見性',
+'logentry-delete-revision' => '$1已{{GENDER:$2|更改}}$3中{{PLURAL:$5|$5個歷史版本|$5個歷史版本}}的可見性:$4',
+'logentry-delete-event-legacy' => '$1{{GENDER:$2|已更改}}$3中日誌的可見性',
+'logentry-delete-revision-legacy' => '$1{{GENDER:$2|已更改}}$3中歷史版本的可見性',
+'logentry-suppress-delete' => '$1{{GENDER:$2|已隱藏}}頁面$3',
+'logentry-suppress-event' => '$1已不可見地{{GENDER:$2|更改}}$3中{{PLURAL:$5|$5項日誌|$5項日誌}}的可見性:$4',
+'logentry-suppress-revision' => '$1已不可見地{{GENDER:$2|更改}}$3中{{PLURAL:$5|$5個歷史版本|$5個歷史版本}}的可見性:$4',
+'logentry-suppress-event-legacy' => '$1已不可見地{{GENDER:$2|更改}}$3中日誌的可見性',
+'logentry-suppress-revision-legacy' => '$1已不可見地{{GENDER:$2|更改}}$3中歷史版本的可見性',
 'revdelete-content-hid' => '隱藏內容',
 'revdelete-summary-hid' => '隱藏編輯摘要',
 'revdelete-uname-hid' => '隱藏用戶名',
@@ -3912,13 +3912,13 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'logentry-move-move-noredirect' => '$1移動$3頁面至$4,不留重定向',
 'logentry-move-move_redir' => '$1通過重定向移動$3頁面至$4',
 'logentry-move-move_redir-noredirect' => '$1通過重定向移動$3頁面至$4,不留重定向',
-'logentry-patrol-patrol' => '$1標記頁面$3的版本$4為已巡查',
-'logentry-patrol-patrol-auto' => '$1自動標記頁面$3的版本$4為已巡查',
-'logentry-newusers-newusers' => '已建立用戶「$1」',
-'logentry-newusers-create' => '已建立用戶「$1」',
+'logentry-patrol-patrol' => '$1{{GENDER:$2|標記}}頁面$3的版本$4為已巡查',
+'logentry-patrol-patrol-auto' => '$1自動{{GENDER:$2|標記}}頁面$3的版本$4為已巡查',
+'logentry-newusers-newusers' => '已{{GENDER:$2|建立}}用戶「$1」',
+'logentry-newusers-create' => '已{{GENDER:$2|建立}}用戶「$1」',
 'logentry-newusers-create2' => '用戶「$1」建立用戶「$3」',
 'logentry-newusers-byemail' => '$1建立用戶$3並電郵密碼給他',
-'logentry-newusers-autocreate' => '帳戶$1被自動創建',
+'logentry-newusers-autocreate' => '用戶$1被自動{{GENDER:$2|建立}}',
 'logentry-rights-rights' => '$1將$3的權限從$4改為$5',
 'logentry-rights-rights-legacy' => '$1更改$3的權限',
 'logentry-rights-autopromote' => '$1的權限自動從$4改為$5',
index c198e0f..98b35b5 100644 (file)
@@ -75,7 +75,7 @@ abstract class Benchmarker extends Maintenance {
                }
        }
 
-       public function getFormattedResults( ) {
+       public function getFormattedResults() {
                $ret = '';
                foreach( $this->results as $res ) {
                        // show function with args
index ad2577a..66f9e87 100644 (file)
@@ -114,7 +114,7 @@ class TitleCleanup extends TableCleanup {
        protected function moveInconsistentPage( $row, $title ) {
                if ( $title->exists() || $title->getInterwiki() || !$title->canExist() ) {
                        if ( $title->getInterwiki() || !$title->canExist() ) {
-                               $prior = $title->getPrefixedDbKey();
+                               $prior = $title->getPrefixedDBkey();
                        } else {
                                $prior = $title->getDBkey();
                        }
diff --git a/maintenance/dictionary/mediawiki.dic b/maintenance/dictionary/mediawiki.dic
new file mode 100644 (file)
index 0000000..59ea18f
--- /dev/null
@@ -0,0 +1,4550 @@
+ænglisc
+ævar
+&add
+&amp
+&bar
+&sim
+&url
+ABNF
+API
+Aacute
+Aborted
+Abuse
+Account
+Accum
+Acirc
+Action
+Activity
+Agrave
+All
+Allocations
+Ancientpages
+Anim
+Api
+Apitestsysop
+Apitestuser
+Aring
+Article
+As
+Atilde
+Auml
+Autopromote
+BACKCOMPAT
+Backlinks
+Blacklist
+Block
+Blocked
+Blocks
+Bodytext
+Broken
+COMPUTERNAME
+CRLF
+CURLOPT
+Campaign
+Capture
+Categories
+Category
+Ccedil
+Central
+Changes
+Check
+Click
+Client
+Clientfor
+Colorer
+Compare
+Config
+Console
+Continue
+Contribs
+Contributions
+Conversiontable
+Coordinates
+Create
+Creation
+Cview
+DDLMODE
+DWIM
+DWIMD
+Daily
+Dbkeyform
+Deadendpages
+Debugtext
+Delete
+Deletedrevs
+Denied
+Dfile
+Disambiguations
+Double
+Duplicate
+EAGAIN
+EBML
+ECMA
+EDITFILTERMERGED
+EINPROGRESS
+EINTR
+EOCDR
+ETAG
+Eacute
+Ecirc
+Edit
+Editor
+Education
+Egrave
+Ehcache
+Elig
+Email
+Empty
+End
+English
+Enlist
+Euml
+Eval
+Events
+Exists
+Expand
+Expression
+Ext
+External
+Extracts
+Extraneous
+FFFD
+FOLLOWLOCATION
+Failure
+Featured
+Feed
+Feedback
+Feedbackv
+Feeds
+Fewestrevisions
+Ffile
+File
+Filearchive
+Filedelete
+Files
+Filter
+Filters
+Flag
+Flagged
+GI
+GRAPHEME
+Gadget
+Gadgets
+Geo
+Get
+Global
+Groups
+HEA
+HTM
+Hardblock
+Help
+Helpful
+ID
+IPTC
+IWBacklinks
+IWLinks
+Iacute
+Icirc
+Igrave
+Illegal
+Image
+Images
+Implict
+Import
+Info
+Invalidateemail
+Isarticle
+Item
+Iuml
+LOCALISATIONCACHE
+Lang
+Lastmod
+Links
+Linktags
+List
+Listredirects
+Living
+Log
+Login
+Logout
+Logs
+Lonelypages
+Longpages
+Love
+Ltitle
+MSVC
+Mark
+Match
+Matrix
+Members
+Mesg
+Messages
+Metatags
+Mobile
+Mostcategories
+Mostimages
+Mostinterwikis
+Mostlinked
+Mostlinkedcategories
+Mostlinkedtemplates
+Mostrevisions
+Move
+Mssql
+Mwstore
+Myuploads
+NEWPAGE
+NOTIC
+Name
+Need
+No
+Noscript
+Not
+Notalk
+Notice
+Notification
+Ntilde
+Oacute
+Ocirc
+Ograve
+Oldreviewedpages
+Open
+Options
+Oslash
+Otilde
+Ouml
+PAGEEDITDATE
+PAGEEDITOR
+PAGEEDITTIME
+PAGEINTRO
+PAGEMINOREDIT
+PAGESUMMARY
+PARSEHUGE
+PARSERFIRSTCALLINIT
+PHPTAL
+PMID
+Page
+Pages
+Param
+Parse
+Parsers
+Pass
+Passpass
+Patrol
+People
+Plugin
+Possible
+Program
+Props
+Protect
+Protected
+Protectexpiry
+Protectother
+Protectreason
+Protectreasonother
+Purge
+Query
+Queued
+Random
+Rapid
+Ratings
+Raw
+Recent
+Redirects
+Redis
+Referer
+Refresh
+Regexlike
+Replacer
+Reset
+Resursive
+Revert
+Review
+Revisions
+Rollback
+Rsd
+SEGSIZE
+STDERR
+SYSDBA
+Scaron
+Scribunto
+Search
+Section
+Set
+Shortpages
+Site
+Siteinfo
+Solr
+Stabilize
+Stash
+Stats
+Status
+Success
+Syntax
+TMPDIR
+TOOLBOXEND
+TRANSLIT
+Tagging
+Tags
+Template
+Templates
+Textform
+Tfile
+Throttled
+Timestamp
+Title
+Titles
+Token
+Tokens
+Tracking
+Transcode
+Triage
+UNWATCHURL
+Uacute
+Ucirc
+Ugrave
+Unblock
+Uncategorizedcategories
+Uncategorizedimages
+Uncategorizedpages
+Uncategorizedtemplates
+Undelete
+Unusedcategories
+Unusedimages
+Unusedtemplates
+Unwatchedpages
+Upload
+Urlform
+Usage
+User
+Usercreate
+Userdir
+Userlang
+Userrights
+Users
+Useruser
+Ustart
+Uuml
+Value
+Video
+View
+Visual
+WATCHINGUSERNAME
+WEBPVP
+Wantedcategories
+Wantedfiles
+Wantedpages
+Wantedtemplates
+Warning
+Watch
+Watchingusers
+Watchlist
+Wiki
+Wikibase
+Withoutinterwiki
+Wrong
+XX
+Xml
+YYYY
+YYYYMMDDHHMMSS
+Yacute
+Yuml
+\
+a
+aa
+aacute
+abbrv
+abcdefghijklmnopqrstuvwxyz
+abf
+aboutpage
+aboutsite
+abusefilter
+abusefiltercheckmatch
+abusefilterchecksyntax
+abusefilterevalexpression
+abusefilters
+abusefilterunblockautopromote
+abuselog
+abusive
+ac
+acad
+accel
+acceptlang
+accessdenied
+accesskey
+accesskeycache
+accesskeys
+accessors
+acchits
+account
+accountcreator
+accum
+acirc
+aclimit
+acprefix
+action
+actioncomplete
+actionhidden
+actions
+actiontext
+actionthrottled
+actionthrottledtext
+actiontoken
+activeusers
+activity
+acuxvalidate
+add
+addablegroups
+addbegin
+addedline
+addedwatchtext
+addergroup
+addergroups
+addin
+adding
+additional
+addr
+address
+addresses
+addsection
+addstudent
+admin
+administrator
+adnum
+adrelid
+adsrc
+advancedediting
+advancedrc
+advancedrendering
+advancedsearchoptions
+advancedwatchlist
+aelig
+af
+afl
+aft
+afttest
+afvf
+age
+aggregators
+agrave
+ahandler
+ahttp
+ai
+aifc
+aiff
+aiprop
+ajaxwatch
+al
+alefsym
+algo
+algos
+all
+all's
+allcategories
+alldata
+alle
+allexamples
+allhidden
+allimages
+allimit
+alllinks
+alllogstext
+allmessages
+allmonths
+allowedctypes
+allowedonly
+allowemail
+allowsduplicates
+allowusertalk
+allpages
+allpagesbadtitle
+allpagesprefix
+allpagesredirect
+allpagessubmit
+allrev
+alltitles
+alltransclusions
+allusers
+aloption
+alprefix
+alreadyblocked
+alreadydone
+alreadyexists
+alreadyrolled
+alunique
+am
+anchor
+anchorclose
+anchorencode
+and
+andconvert
+andtitle
+anon
+anoneditwarning
+anonlogin
+anonnotice
+anononly
+anonpreviewwarning
+anontalk
+anontalkpagetext
+anontoken
+anonuserpage
+anonymous
+anti
+antispoof
+antivirus
+anymap
+ap
+apcond
+apdir
+api
+api's
+apibase
+apihelp
+apihighlimits
+apis
+aplimit
+apnamespace
+apng
+apos
+appendnotsupported
+appendtext
+apprefix
+approve
+aprops
+aqbt
+aqct
+archivename
+aren
+args
+argsarams
+aring
+arnfjörð
+article
+articleexists
+articlefeedbackv
+articleid
+articlelink
+articlepage
+articlepath
+articles
+aryeh
+asc
+ascending
+asctime
+asdf
+aspx
+assert
+astriks
+asymp
+async
+asynccopyuploaddisabled
+asyncdownload
+at
+atend
+atext
+atid
+atilde
+atime
+atlimit
+atoi
+atom
+atprefix
+atthasdef
+attibs
+attibute
+attlen
+attname
+attnum
+attrdef
+attrelid
+attrib
+attribs
+attributename
+attrs
+atttypid
+atunique
+au
+auml
+authplugins
+autoaccount
+autobiography
+autoblock
+autoblocked
+autoblockedtext
+autoblocker
+autoblockid
+autoblocking
+autoblockip
+autoblocks
+autocad
+autocomment
+autocomments
+autocomplete
+autoconfirm
+autoconfirmed
+autocreate
+autocreated
+autocreation
+autodetection
+autoflag
+autofocus
+autogen
+autogenerated
+autohide
+autoload
+autoloader
+autoloaders
+autoloading
+automagically
+automatic
+autonym
+autopatrol
+autoplay
+autopromote
+autopromoted
+autopromotion
+autoreview
+autoreviewer
+autoreviewrestore
+autosumm
+autosummaries
+autosummary
+axto
+azərbaycanca
+backends
+backlink
+backlinks
+backlinksubtitle
+backported
+backslashed
+backtraces
+bad
+badaccess
+badarticleerror
+badcontinue
+baddiff
+bademail
+badfilename
+badformat
+badgenerator
+badhookmsg
+badinterwiki
+badip
+badipaddress
+badkey
+badmd
+badmime
+badminpassword
+badminuser
+badnamespace
+badoption
+badparams
+badport
+badretype
+badrevids
+badsig
+badsiglength
+badsyntax
+badtag
+badtimestamp
+badtitle
+badtitletext
+badtoken
+badtype
+badupload
+baduser
+badversion
+balancer
+balancers
+banjar
+barstein
+base
+basefont
+basename
+basepagename
+basepagenamee
+basetimestamp
+bashkir
+bashpid
+bcancel
+bceffd
+bcmath
+bcompress
+bcpio
+bdop
+bdquo
+becampus
+beinstructor
+belarusian
+beonline
+bereviewer
+berror
+bestq
+besttype
+bg
+bgcolor
+bgzip
+bidi
+bigdelete
+binhex
+bitdepth
+bitfield
+bitfields
+bitmask
+bjarmason
+bk
+bkey
+bkinvalidparammix
+bkmissingparam
+bkusers
+bl
+blanking
+blanknamespace
+blankpage
+blegh
+bleh
+blinvalidparammix
+blksize
+blmissingparam
+block
+blockable
+blocked
+blockedasrange
+blockedby
+blockedbyid
+blockedemailuser
+blockedexpiry
+blockedfrommail
+blockednoreason
+blockedreason
+blockedtext
+blockedtitle
+blockemail
+blockexpiry
+blockid
+blockinfo
+blockip
+blocklink
+blocklogentry
+blocklogpage
+blocklogtext
+blockme
+blockquote
+blockreason
+blocks
+blocktoken
+bloggs
+blogs
+blogspot
+bltitle
+bluelink
+bluelinks
+bmwschema
+bmysql
+bname
+bodycontent
+boldening
+bolding
+booksources
+bool
+boolean
+borderhack
+bot
+botedit
+boteditletter
+bots
+bottom
+bottomscripts
+bpassword
+bpatch
+bpchar
+bport
+bprefix
+broeck
+brokenlibxml
+brokenredirects
+brokenredirectstext
+browsearchive
+brvbar
+bserver
+bservers
+bssl
+btestpassword
+btestuser
+btype
+bucket
+bucketcount
+bugfix
+bugfixes
+buglist
+bugzilla
+buildpath
+buildpathentry
+bulgakov
+bulkdelcourses
+bulkdelorgs
+bureaucrat
+buser
+by
+byemail
+byid
+bytea
+bytesleft
+bytesread
+bytevalue
+cacheable
+cached
+cachedcount
+cachedsidebar
+cachedspecial
+cachedtimestamp
+calimit
+callargs
+campaign
+campus
+cancelto
+cannotdelete
+cannotundelete
+canonicalised
+canonicalization
+canonicalize
+canonicalizes
+canonicalizing
+canremember
+canreset
+cansecurelogin
+cantblock
+cantcreate
+cantdelete
+cantedit
+cantexecute
+canthide
+cantimport
+cantmove
+cantmovefile
+cantopenfile
+cantoverwrite
+cantrollback
+cantsend
+cantunblock
+cantundelete
+capitalizeallnouns
+captchaid
+captchas
+captchaword
+cascade
+cascadeable
+cascadeon
+cascadeprotected
+cascadeprotectedwarning
+cascading
+cascadingness
+categories
+categories's
+categorieshtml
+category
+categoryfinder
+categoryinfo
+categorylinks
+categorymembers
+categorypage
+categoryviewer
+catids
+catlinks
+catpage
+catrope
+cattitles
+ccedil
+ccme
+ccmeonemails
+cdab
+cdel
+cdlink
+cedil
+ceebc
+cellpadding
+cellspacing
+central
+centralauth
+centralnotice
+centralnoticeallocations
+centralnoticelogs
+centralnoticequerycampaign
+cgroup
+cgroups
+change
+change's
+changeablegroups
+changed
+changedby
+changedorcreated
+changeemail
+changelog
+changeslist
+changing
+characters
+chardiff
+charoff
+chars
+checkfreq
+checkmatrix
+checkstatus
+checkuser
+checkuserlog
+chgrp
+childs
+chillu
+chmoding
+choicesstring
+chrs
+chunk
+chunked
+chunking
+ci
+cidr
+cidrtoobroad
+circ
+citeseer
+ckers
+ckey
+cl
+clamav
+clamscan
+classname
+clcategorie
+cldir
+cldr
+clear
+clearable
+clearyourcache
+clfrom
+clickjacking
+clicktracking
+clientfor
+clientpool
+cllimit
+clober
+closed
+clto
+cm
+cminvalidparammix
+cmmissingparam
+cmnamespace
+cmtitle
+co
+code
+codemap
+codepoint
+codestr
+coi
+colgroup
+collapsable
+collectionsaveascommunitypage
+collectionsaveasuserpage
+colname
+cologneblue
+colonseparator
+colorer
+colspan
+commafy
+commafying
+comment
+commentedit
+commenthidden
+comments
+commitdiff
+commoncssjs
+compactpro
+compare
+compat
+complete
+cond
+condcomment
+condeferrable
+condeferred
+conds
+config
+confirmdeletetext
+confirmed
+confirmedittext
+confirmemail
+confirmrecreate
+conflimit
+confstr
+conkey
+conname
+conrelid
+console
+content
+contentformat
+contenthandler
+contentlanguage
+contentless
+contentmodel
+contenttoobig
+continue
+contribs
+contribslink
+conttitle
+contype
+conv
+converttitles
+convmv
+cookieprefix
+cooltalk
+coord
+coordinates
+copyrightico
+copyrightpage
+copyrightwarning
+copyuploadbaddomain
+copyuploaddisabled
+copyvio
+copywarn
+cors
+couldn
+counter
+countmsg
+country
+course
+courseid
+cpio
+cprefs
+cprotected
+crarr
+crashbug
+create
+createaccount
+createonly
+createpage
+createtalk
+creationsort
+creativecommons
+creditspage
+crocker
+cryptrand
+csize
+csrf
+css
+cssclass
+csslinks
+cssprefs
+cta
+ctime
+ctor
+ctype
+cu
+cul
+curation
+curdiff
+curid
+curlink
+curren
+currentarticle
+currentbrowser
+currentday
+currentdayname
+currentdow
+currenthour
+currentmonth
+currentmonthabbrev
+currentmonthname
+currentmonthnamegen
+currentrev
+currentrevisionlink
+currenttime
+currenttimestamp
+currentversion
+currentweek
+currentyear
+customcssprotected
+customised
+customjsprotected
+cut
+cyber
+cygwin
+cyrl
+d'oh
+dadedad
+dairiki
+danga
+danielc
+darr
+datalen
+dataset
+datasets
+datasize
+datatable
+datatype
+datedefault
+dateformat
+dateheader
+dateopts
+daysago
+dbcnt
+dbconnect
+dberrortext
+dbg
+dbgfm
+dbkey
+dbkeys
+dbks
+dbname
+dbrepllag
+dbsettings
+dbtype
+dbversion
+ddjvu
+de
+deadend
+deadendpagestext
+deadenpages
+dealies
+debughtml
+decline
+declined
+decls
+decr
+decrease
+default
+defaultcontentmodel
+defaultmessagetext
+defaultmissing
+defaultns
+defaultsort
+defaultval
+deferr
+definite
+deflimit
+defs
+deja
+delete
+deleteall
+deletecomment
+deleteconfirm
+deleted
+deletedhistory
+deletedline
+deletedonly
+deletedrevision
+deletedrevs
+deletedtext
+deletedwhileediting
+deleteeducation
+deleteglobalaccount
+deletelogentry
+deleteone
+deleteotherreason
+deletepage
+deletereason
+deletereasonotherlist
+deleterevision
+deleteset
+deletethispage
+deletetoken
+deletion
+deletionlog
+delim
+dellogpage
+dellogpagetext
+delundel
+deprecated
+deps
+depth
+dequeue
+dequeued
+dequeueing
+dequeues
+derivatives
+desc
+descending
+description
+descriptionmsg
+descriptionmsgparams
+descriptionurl
+deserialization
+deserialize
+dest
+detail
+details
+devangari
+devel
+df
+dflt
+dhtml
+diams
+didn
+diff
+diff's
+diffchange
+diffhist
+difflink
+diffonly
+difftext
+diffto
+difftocontent
+difftotext
+dim
+dimensions
+dir
+direction
+directionmark
+directorycreateerror
+directorynotreadableerror
+directoryreadonlyerror
+dirmark
+dirname
+disabled
+disabledtranscode
+disablemail
+disablepp
+disablesuggest
+disclaimerpage
+diskussion
+displayname
+displayrc
+displaysearchoptions
+displaytitle
+displaytitles
+displaywatchlist
+distclean
+distro
+djava
+djob
+djvu
+djvudump
+djvulibre
+djvutoxml
+djvutxt
+djvuxml
+djvuzone
+dkjsagfjsgashfajsh
+dlen
+dltk
+dmoz
+dnsbl
+dnsblacklist
+dnumber
+docm
+docroot
+doctype
+doctypes
+docx
+dodiff
+doesn
+domain
+domainnames
+domainpart
+domainparts
+domas
+doms
+dotdotcount
+dotm
+dotsc
+dotsi
+dotsm
+dotso
+dotwise
+dotx
+doubleclick
+doublequote
+doxygen
+dpos
+dr
+dropdown
+dump
+dumpfm
+dupfunc
+duplicatefiles
+duplicatesoffile
+dvips
+dwfx
+dwhitelist
+e
+eacute
+earth
+eauth
+ecirc
+ecmascript
+edit
+editbutton
+editconflict
+editconflicts
+editcount
+editfont
+editform
+edithelp
+edithelppage
+edithelpurl
+editingcomment
+editinginterface
+editingold
+editingsection
+editinterface
+editintro
+edititis
+editlink
+editnotice
+editnotsupported
+editondblclick
+editor
+editownusertalk
+editpage
+editprotected
+editreasons
+editredlink
+editrestriction
+edits
+editsection
+editsectionhint
+editsectiononrightclick
+editsonly
+editthispage
+edittime
+edittoken
+edittools
+editurl
+editusercss
+editusercssjs
+edituserjs
+edoe
+egrave
+ehcache
+ei
+eich
+eiinvalidparammix
+eimissingparam
+eititle
+el
+elapsedreal
+elemname
+elink
+eltitle
+email
+emailable
+emailaddress
+emailauthenticated
+emailauthentication
+emailauthenticationclass
+emailcapture
+emailconfirm
+emailconfirmed
+emailconfirmlink
+emaildisabled
+emailling
+emaillink
+emailnotauthenticated
+emailtoken
+emailuser
+embeddedin
+empty
+emptyfile
+emptynewsection
+emptypage
+emsenhuber
+emsp
+en
+enabled
+enabledonly
+enableparser
+encapsed
+enctype
+end
+endcode
+endcond
+endian
+endid
+endl
+endsortkey
+endsortkeyprefix
+endtime
+endverbatim
+enhancedchanges
+enlist
+enotif
+enotifminoredits
+enotifrevealaddr
+enotifusertalkpages
+enotifwatchlistpages
+enqueueing
+enroll
+ensp
+entirewatchlist
+entityid
+envcmd
+enwiki
+eocdr
+ep
+eparticle
+epcampus
+epcoordinator
+epinstructor
+eponline
+erevoke
+errno
+error
+errorbox
+errormessage
+errorpagetitle
+errors
+errorstr
+errortext
+errorunknown
+errstr
+es
+escapenoentities
+escapeshellarg
+esearch
+español
+española
+etag
+eu
+euml
+event
+eventid
+ex
+exampleextension
+examples
+excludegroup
+excludepage
+excludeuser
+executables
+exempt
+existingwiki
+exists
+exiv
+expandtab
+expandtemplates
+expandurl
+experiment
+expertise
+expiry
+expiryarray
+explainconflict
+export
+exportnowrap
+exportxml
+expression
+exptime
+extauth
+extendwatchlist
+extensionname
+extensions
+extensiontags
+external
+externaldberror
+externaldiff
+externaledit
+externaleditor
+externallinks
+externalstore
+extet
+extiw
+extlink
+extlinks
+extracts
+extradata
+extrafields
+extraq
+extratags
+exturlusage
+extuser
+exxaammppllee
+fa
+facto
+failback
+failover
+failsafe
+fallbacks
+false
+falsy
+fancysig
+fastcgi
+faux
+favicon
+fclose
+fdef
+fdff
+feature
+featured
+featuredfeed
+feed
+feed's
+feedback
+feedbackid
+feedcontributions
+feedformat
+feeditems
+feedlink
+feedlinks
+feedurl
+feedwatchlist
+feff
+female
+fetchfileerror
+fffe
+ffff
+fffff
+ffffff
+fieldname
+fieldset
+fieldsets
+file
+filearchive
+filebackend
+filecache
+filecopyerror
+filedelete
+filedeleteerror
+fileexists
+fileextensions
+filehidden
+filehist
+filehistory
+fileinfo
+filejournal
+filekey
+filelinks
+filemissing
+filemover
+filemtime
+filename
+filenames
+filenotfound
+filepage
+filepath
+filerenameerror
+filerepo
+filerevert
+filerevisions
+files
+filesize
+filesort
+filesorts
+filesystem's
+filesystems
+filetoc
+filetoobig
+filetype
+filetypemismatch
+fileversions
+filter
+filterbots
+filteriw
+filterlanglinks
+filterlocal
+filterredir
+filterwatched
+findnext
+finfo
+firefox
+firstname
+firstrev
+firsttime
+fishbowl
+fixme
+fixup
+flac
+flag
+flagconfig
+flagged
+flags
+flagtype
+flatlist
+flds
+float
+fmttime
+fname
+fnof
+foldmarker
+foldmethod
+followpolicy
+footericon
+footericons
+footerlinks
+fopen
+for
+forall
+forbidden
+forcearticlepath
+forcebot
+forceditsummary
+forceeditsummary
+forcelinkupdate
+forcetoc
+forcontent
+formaction
+format
+formatmodules
+formatted
+formatters
+formatting
+formedness
+formenctype
+formnovalidate
+formtype
+forupdate
+found
+founder
+fr
+frac
+frameless
+framesets
+frasl
+fread
+freedomdefined
+freeform
+freenode
+frickin
+from
+fromdb
+fromdbmaster
+fromid
+fromrev
+fromrevid
+fromtitle
+frontends
+fseek
+fsockopen
+fsync
+ftp
+fullhistory
+fullpagename
+fullpagenamee
+fulluri
+fullurl
+funcname
+functionhooks
+functionname
+futuresplash
+fvalue
+ga
+gack
+gadgetcategories
+gadgets
+gaid
+gaifilterredir
+gallerybox
+gallerycaption
+gallerytext
+gapdir
+gapfilterredir
+gaplimit
+gapprefix
+garber
+gblblock
+gblock
+gblrights
+gc
+gcldir
+gcllimit
+gender
+general
+generatexml
+generator
+geocoordinate
+geosearch
+gerrit
+getcookie
+getenv
+getheader
+getimagesize
+getlink
+getmac
+getmarkashelpfulitem
+getmypid
+getrusage
+gettimeofday
+gettingstarted
+gettoken
+getuid
+gfdl
+ggp
+ghostscript
+gimpbaseenums
+git
+gitdir
+github
+gitweb
+global
+globalauth
+globalblock
+globalblocks
+globalgroupmembership
+globalgrouppermissions
+globalgroups
+globalsettings
+globalunblock
+globalusage
+globaluserinfo
+globe
+gmail
+gmdate
+goodtitle
+gopher
+graymap
+grayscale
+greant
+greymap
+group
+groupcounts
+groupless
+groupmember
+grouppage
+groupperms
+groupprms
+groups
+growinglink
+grxml
+gs
+gtar
+gu
+guesstimezone
+gui
+guid
+gunblock
+guser
+gwicke
+gzcompress
+gzdeflate
+gzencode
+gzhandler
+gzip
+gzipped
+gzipping
+hacky
+hansm
+hant
+hardblocks
+hardcode
+hardcoding
+harr
+hash
+hashar
+hashcheckfailed
+hashsearchdisabled
+hashtable
+hashtables
+hasmatch
+hasmsg
+hasn
+hasrelated
+headelement
+headerpos
+headhtml
+headitems
+headlinks
+headscripts
+height
+hellip
+help
+helpful
+helppage
+helptext
+helpurl
+helpurls
+helpwindow
+hexdump
+hexstring
+hidden
+hiddencat
+hiddencategories
+hiddencats
+hide
+hideanons
+hidebots
+hidediff
+hideliu
+hideminor
+hidemyself
+hidename
+hidepatrolled
+hideredirects
+hiderevision
+hideuser
+hidpi
+highlimit
+highmax
+highuse
+hilfe
+hiphop
+histfirst
+histlast
+historyempty
+historysubmit
+historywarning
+hit
+hitcount
+hitcounter
+hits
+hmac
+hmtl
+hobby
+homelink
+hookaborted
+horohoe
+hostnames
+hours
+hphp
+hplist
+hpos
+hreflang
+hslots
+htaccess
+htcp
+html
+htmlelements
+htmlescaped
+htmlform
+htmlish
+htmllist
+htmlnest
+htmlpair
+htmlpairs
+htmlsingle
+htmlsingleallowed
+htmlsingleonly
+htmlspecialchars
+htmltidy
+http
+httpaccept
+httpbl
+https
+i
+ia
+iabn
+iacute
+icirc
+icononly
+iconv
+icubench
+icutest
+id
+idanduser
+ids
+ie's
+ieinternals
+ietf
+iexcl
+ifconfig
+iframe
+igbinary
+iges
+ignorewarnings
+igrave
+ii
+iicontinue
+iiprop
+iiurlparam
+iiurlwidth
+iker
+ilfrom
+ilto
+im
+image
+imagegetsize
+imageinfo
+imageinvalidfilename
+imagelinks
+imagemagick
+imagemaxsize
+imagenocrossnamespace
+imagepage
+imagerepository
+imagerotate
+images
+imagesize
+imagetype
+imagetypemismatch
+imageusage
+imagick
+imgmultigo
+imgmultigoto
+imgmultipagenext
+imgmultipageprev
+imgs
+imgserv
+immobilenamespace
+implicitgroups
+import
+importbadinterwiki
+importcantopen
+importlogpage
+importlogpagetext
+importnofile
+importtoken
+importupload
+importuploaderrorpartial
+importuploaderrorsize
+importuploaderrortemp
+in
+iname
+inbound
+includable
+include
+includecomments
+includelocal
+includeonly
+includexmlnamespace
+incr
+increase
+indefinite
+index
+indexfield
+indexpageids
+indexpolicy
+indstr
+infin
+infinite
+infiniteblock
+info
+infoaction
+infobox
+infoline
+infomsg
+ingroups
+injectjs
+inkscape
+inlanguagecode
+inlined
+inno
+inputneeded
+insb
+inser
+instantcommons
+institution
+instructor
+int
+integer
+integeroutofrange
+intentionallyblankpage
+interlang
+interlangs
+interlanguage
+internal
+internaledit
+internalerror
+interwiki
+interwikimap
+interwikipage
+interwikis
+interwikisource
+intnull
+intoken
+intra
+intro
+intrw
+ints
+intval
+invalid
+invalidaction
+invalidations
+invalidcategory
+invaliddomain
+invalidemail
+invalidemailaddress
+invalidexpiry
+invalidip
+invalidlang
+invalidlevel
+invalidmode
+invalidoldimage
+invalidpage
+invalidpageid
+invalidparameter
+invalidparammix
+invalidpath
+invalidrange
+invalidsection
+invalidsessiondata
+invalidsha
+invalidspecialpage
+invalidtags
+invalidtime
+invalidtitle
+invalidtoken
+invaliduser
+invalue
+iorm
+ip
+ipbblocked
+ipblock
+ipblocks
+ipbnounblockself
+ipchain
+ipedits
+iphash
+ipinrange
+ipusers
+iquest
+irc
+ircs
+isam
+isapi
+isbot
+isconnected
+iscur
+isin
+isip
+ismap
+isminor
+ismodsince
+ismulti
+isnew
+ispermalink
+isself
+isset
+istainted
+istalk
+iswatch
+it
+item
+itemid
+itemprop
+itemref
+itemscope
+itemtype
+iter
+iu
+iuinvalidparammix
+iumissingparam
+iuml
+iw
+iwbacklinks
+iwbl
+iwlfrom
+iwlinks
+iwlprefix
+iwltitle
+iwprefix
+iwtitle
+iwurl
+javascript
+javascripttest
+jbartsh
+jconds
+jdk's
+jhtml
+jimbo
+joaat
+jobqueue
+jointype
+jorsch
+journaling
+jpeg
+jpegtran
+jslint
+jsmimetype
+jsminplus
+json
+jsonfm
+jsparse
+jstext
+jsvarurl
+justthis
+kabardian
+kangxi
+kashubia
+kattouw
+kblength
+kernowek
+key
+keygen
+keylen
+keyname
+keynames
+keytype
+khash
+kludgy
+knownnamespace
+konqueror
+kpos
+kuza
+labarga
+labelmsg
+laggedslavemode
+laggy
+lang
+langbacklinks
+langcode
+langcodes
+langconversion
+langlinks
+langprop
+langs
+language
+languagelinks
+languages
+languageshtml
+laquo
+large
+larr
+last
+lastdiff
+lastdot
+lastedit
+lasteditor
+lastedittime
+lastlink
+lastmod
+lastmodifiedat
+lastname
+lastrevid
+lastvisited
+latgalian
+laxström
+lbase
+lbl
+lcattrib
+lceil
+lcomments
+lcount
+lcrocker
+ldquo
+le
+leavemessage
+len
+length
+leprop
+lesque
+lettercase
+level
+lfloor
+lg
+lgname
+lgpassword
+lgpl
+lgtoken
+lguserid
+lgusername
+libcurl
+libel
+libgimpbase
+libketama
+libmemcached
+libre
+libtidy
+ligabue
+lighttpd
+limit
+limitable
+line
+linenumber
+linestart
+link
+linkarr
+linkcolour
+linkprefix
+links
+linkstoimage
+linktbl
+linktext
+linktodiffs
+linktrail
+linktype
+linkupdate
+list
+listable
+listadmins
+listbots
+listfiles
+listgrouprights
+listinfo
+listingcontinuesabbrev
+listoutput
+listresult
+lists
+listtags
+listuser
+listusers
+listusersfrom
+livepreview
+ll
+llfrom
+lllang
+lltitle
+lnumber
+local
+localday
+localdayname
+localdow
+locale
+localhour
+localmonth
+localmonthabbrev
+localmonthname
+localmonthnamegen
+localname
+localonly
+localsettings
+localtimezone
+localweek
+localyear
+lock
+lockandhid
+lockdb
+lockdir
+locked
+lockmanager
+log
+logaction
+logentry
+logevent
+logevents
+logextract
+loggedin
+logid
+login
+loginend
+loginerror
+loginfo
+loginlanguagelinks
+loginlink
+loginprompt
+loginreqlink
+loginreqpagetext
+loginreqtitle
+logins
+loginstart
+logitem
+loglink
+loglist
+logname
+logonly
+logopath
+logourl
+logout
+logpage
+logtext
+logtitle
+logtype
+longpage
+longpageerror
+lookie
+lookups
+loopback
+lossless
+lossy
+lowast
+lowercaps
+lowercased
+lowlimit
+lsaquo
+lsquo
+ltags
+ltitle
+ltrimmed
+lurl
+lysator
+möller
+macr
+magicarr
+magicfile
+magick
+magicword
+magicwordkey
+magicwords
+magnus
+mahaction
+mailerror
+mailmypassword
+mailnologin
+mailparts
+mailpassword
+mailtext
+mailto
+mainmodule
+mainpage
+maintainership
+makesafe
+male
+malloc
+manske
+manualthumb
+mark
+markashelpful
+markaspatrolledlink
+markaspatrolledtext
+markbot
+markbotedits
+markedaspatrollederror
+markpatrolled
+masse
+match
+matchcount
+mathml
+mathtt
+matrixes
+matroska
+max
+maxage
+maxdim
+maxlag
+maxlength
+maxlifetime
+maxqueue
+maxresults
+maxsize
+maxuploadsize
+maxwidth
+mazeland
+mbresponse
+mbstring
+mckey
+mcklmqw
+mcrypt
+mcvalue
+md
+mdash
+medialink
+mediaqueries
+mediatype
+mediawarning
+mediawiki's
+mediawikipage
+megapixels
+member
+memberingroups
+members
+memc
+memcache
+memcached
+memlimit
+memoryp
+memsw
+merge
+mergeable
+merged
+mergehistory
+mergelog
+mergelogpagetext
+message
+messagekey
+messagename
+messagepattern
+messages
+messagetype
+meta
+metacharacters
+metachars
+metadata
+metadataversion
+metafile
+mhash
+mhtml
+micrblogging
+microdata
+microsyntaxes
+microtime
+middot
+migurski
+millitime
+mime
+mimer
+mimesearchdisabled
+mimetype
+min
+minangkabau
+minh
+minification
+minified
+minifier
+minifies
+minify
+minifying
+minimal
+minor
+minordefault
+minoredit
+minoreditletter
+minsize
+misconfigured
+misermode
+mismatch
+misresolved
+missing
+missingcommentheader
+missingcommenttext
+missingdata
+missingparam
+missingpermission
+missingresult
+missingrev
+missingsummary
+missingtext
+missingtitle
+missinguser
+mituzas
+mixedapproval
+mkdir
+mms
+mobile
+mobileformat
+mobileview
+modified
+modifiedarticleprotection
+modify
+modsecurity
+modsince
+module
+moduledisabled
+modulename
+modules
+monitor
+monobook
+monospace
+monospaced
+month
+monthsall
+moodbar
+moredotdotdot
+morelinkstoimage
+morethan
+move
+movedarticleprotection
+moveddeleted
+movedto
+movefile
+movelogpage
+movelogpagetext
+movenologintext
+movenotallowed
+movenotallowedfile
+moveonly
+moveoverredirect
+movepage
+moves
+movestable
+movesubpages
+movetalk
+movethispage
+movetoken
+mozilla
+mpeg
+mpegurl
+mpga
+mplink
+mptitle
+msdn
+msdownload
+msec
+msexcel
+msgid
+msgkey
+msgs
+msgsize
+msgsmall
+msgtext
+msie
+msmetafile
+mssql
+msvideo
+msword
+mtime
+mtype
+mullane
+multi
+multibyte
+multicast
+multipage
+multipageimage
+multipageimagenavbox
+multipart
+multiselect
+multisource
+multithreaded
+multival
+multivalue
+multpages
+munge
+musso
+mustbeloggedin
+mustbeposted
+mutator
+mutators
+muxers
+mwdumper
+mwfile
+mwstore
+mwsuggest
+mwuser
+mxircecho
+mycontributions
+mycontris
+myext
+myextension
+myisam
+mykey
+mypage
+mypreferences
+mysqldump
+mytalk
+mytext
+mywatchlist
+nabla
+name
+namehidden
+nameinlowercase
+names
+namespace
+namespacealiases
+namespacebanner
+namespacee
+namespacenotice
+namespacenumber
+namespaceoptions
+namespaceprotected
+namespaces
+namespacesall
+namespaceselector
+namespacing
+nassert
+nbase
+nbsp
+nbytes
+nchanges
+ncount
+ndash
+nearmatch
+nedersaksies
+nedersaksisch
+needreblock
+needservers
+needtoken
+netcdf
+netware
+never
+new
+newaddr
+newarticletext
+newarticletextanon
+newer
+newerthanrevid
+newgroups
+newheader
+newid
+newimages
+newlen
+newmessagesdifflink
+newmessagesdifflinkplural
+newmessageslink
+newmessageslinkplural
+newname
+newnames
+newnamespace
+newpage
+newpageletter
+newpages
+newpageshidepatrolled
+newparams
+newpass
+newpassword
+newpos
+newquery
+newrevid
+news
+newsectionlink
+newsectionsummary
+newset
+newsfeed
+newsize
+newtalk
+newtalks
+newtalkseparator
+newtext
+newtimestamp
+newtitle
+newuser
+newuserlogpage
+newuserlogpagetext
+newusers
+newwidth
+newwindow
+nextdiff
+nextid
+nextlink
+nextn
+nextpage
+nextredirect
+nextrevision
+nextval
+nfkc
+nginx
+nheight
+niklas
+nlink
+nlinks
+nmime
+nnnn
+nntp
+no
+noanimatethumb
+noanontoken
+noapiwrite
+noarchivename
+noarticle
+noarticletext
+noarticletextanon
+noautopatrol
+noblock
+nobots
+nobucket
+nobuffer
+nochange
+nochanges
+noclasses
+nocode
+nocomment
+nocomplete
+nocontent
+nocontentconvert
+nocontinue
+noconvertlink
+nocookiesfornew
+nocopyright
+nocourseid
+nocreate
+nocreatetext
+nocredits
+nocta
+nodata
+nodatabase
+nodb
+nodefault
+nodeid
+nodeleteablefile
+nodeletion
+nodelist
+nodename
+nodirection
+nodotdot
+noedit
+noeditsection
+noemail
+noemailprefs
+noemailtitle
+noeventid
+noexec
+noexpertise
+noexpression
+nofeed
+nofeedbackid
+nofile
+nofilekey
+nofilename
+nofilter
+noflagtype
+noflip
+nofollow
+nofound
+nogallery
+nogomatch
+nogroup
+noheader
+noheadings
+nohires
+noids
+noimage
+noimageredirect
+noimages
+noinclude
+noindex
+noindexing
+nointerwikipage
+nointerwikiuserrights
+noitem
+nojs
+nolabel
+nolang
+nolicense
+nolimit
+nolink
+nolinkstoimage
+nologging
+nologin
+nomahaction
+nominornewtalk
+nomodule
+non
+noname
+nonamespacenumber
+nonascii
+noncascading
+nondefaults
+none
+nonewsectionlink
+nonexistent
+nonfile
+nonfilenamespace
+nonincludable
+noninfringement
+noninitial
+nonlocal
+nonote
+nonredirects
+nonsense
+nonunicodebrowser
+noobjective
+noofexpiries
+noofprotections
+noop
+nooptions
+nooverride
+nopaction
+nopage
+nopageid
+nopagetext
+nopagetitle
+noparser
+nopathinfo
+nopermission
+noport
+noprefix
+noproject
+noprop
+noprotections
+noquestion
+noradius
+noratelimit
+norating
+norcid
+noread
+noreason
+noredir
+noredirect
+norequest
+norestrictiontypes
+noresult
+noreturnto
+norev
+norevid
+noreviewed
+normalizedtitle
+norole
+norollbackdiff
+noscale
+noschema
+noscript
+nosearch
+nosectiontitle
+nosession
+noshade
+noskipnotif
+noslash
+nosniff
+nosort
+nosortdirection
+nosource
+nospecialpagetext
+nost
+nosubaction
+nosubject
+nosubpage
+nosubpages
+nosuccess
+nosuchaction
+nosuchactiontext
+nosuchdatabase
+nosuchlogid
+nosuchpageid
+nosuchrcid
+nosuchrevid
+nosuchsection
+nosuchsectiontext
+nosuchsectiontitle
+nosuchspecialpage
+nosuchuser
+nosuchusershort
+nosummary
+notacceptable
+notag
+notaglist
+notalk
+notallowed
+notanarticle
+notarget
+notcached
+notdeleted
+note
+notempdir
+notemplate
+notext
+nothumb
+notif
+notificationtimestamp
+notificationtimestamps
+notin
+notitle
+notitleconvert
+notloggedin
+notminor
+noto
+notoc
+notoggle
+notoken
+notransform
+notreviewable
+notrustworthy
+notspecialpage
+notsuspended
+notvisiblerev
+notwatched
+notwikitext
+notype
+noudp
+noupdates
+nouploadmodule
+nouser
+nouserid
+nousername
+nouserspecified
+novalues
+noview
+nowatchlist
+nowellwritten
+nowiki
+nowlocal
+nowserver
+nparsing
+ns
+nsassociated
+nsfrom
+nsinvert
+nslinks
+nslist
+nsname
+nsnum
+nspname
+nsselect
+nstab
+nsub
+ntfs
+ntilde
+ntitle
+nuke
+null
+nullable
+numauthors
+number
+numberheadings
+numberingroup
+numberof
+numberofactiveusers
+numberofadmins
+numberofarticles
+numberofedits
+numberoffiles
+numberofpages
+numberofusers
+numberofviews
+numberofwatchingusers
+numedits
+numentries
+numericized
+numgroups
+numtalkauthors
+numtalkedits
+numwatchers
+nwidth
+oacute
+objectcache
+objective
+ocirc
+ocount
+oelig
+of
+officedocument
+offset
+offsite
+ofname
+ogevents
+ogghandler
+ograve
+old
+oldaddr
+oldcountable
+older
+olderror
+oldfile
+oldgroups
+oldid
+oldimage
+oldlen
+oldnamespace
+oldquery
+oldrev
+oldrevid
+oldreviewedpages
+oldshared
+oldsig
+oldsize
+oldtext
+oldtitle
+oldtitlemsg
+oline
+oname
+onkeyup
+online
+onload
+onlyauthor
+onlyinclude
+onlypst
+onlyquery
+onsubmit
+onthisday
+ontop
+openbasedir
+opendoc
+opendocument
+opensearch
+opensearchdescription
+openssl's
+openxml
+openxmlformats
+oplus
+oppositedm
+optgroup
+optgroups
+optionname
+options
+optionstoken
+optionvalue
+optstack
+or
+ordertype
+ordf
+ordm
+org
+origcategory
+ortime
+oslash
+other
+otherlanguages
+otherlist
+otheroption
+otherreason
+othertime
+otilde
+otimes
+otitle
+ouml
+outparam
+outputter
+outputtype
+outreachwiki
+over
+overridable
+override
+oversight
+oversighted
+oversighter
+overwrite
+overwroteimage
+own
+owner
+paction
+page
+pagecannotexist
+pagecategories
+pagecategorieslink
+pageclass
+pagecontent
+pagecount
+pagecss
+pagedeleted
+pagedlinks
+pageid
+pageids
+pageimages
+pageinfo
+pagelink
+pagelinks
+pagemerge
+pagename
+pagenamee
+pagenames
+pagenum
+pageoffset
+pagepropnames
+pageprops
+pagerestrictions
+pages
+pageselector
+pageset
+pagesetmodule
+pagesincategory
+pagesinnamespace
+pageswithprop
+pagetextmsg
+pagetitle
+pagetools
+pagetriage
+pagetriageaction
+pagetriagelist
+pagetriagestats
+pagetriagetagging
+pagetriagetemplate
+pageurl
+pageview
+param
+parameters
+paraminfo
+paramlist
+paramname
+params
+paren
+parens
+parentid
+parenttree
+parms
+parse
+parsedcomment
+parseddescription
+parsedsummary
+parseerror
+parseinline
+parsemag
+parser
+parsercache
+parserfuncs
+parserfunctions
+parserhook
+parserrender
+parsetree
+parsevalue
+parsoid
+partialupload
+partname
+pass's
+passthru
+password
+passwordfor
+passwordreset
+passwordtooshort
+paste
+pastexpiry
+pathchar
+pathinfo
+pathname
+patrol
+patroldisabled
+patrolled
+patrollink
+patrolmarks
+patroltoken
+pattern
+pcache
+pcntl
+pcomment
+pdbk
+pdf's
+pendingdelta
+perc
+perfcached
+perfcachedts
+perm
+perma
+permalink
+permdenied
+permil
+permissiondenied
+permissionerror
+permissionserrors
+permissionserrorstext
+permissiontype
+perp
+perrow
+pgsql
+photoshop
+php
+php's
+phpfm
+phps
+phpsapi
+phpunit
+phpversion
+phpwiki
+phrasewise
+phtml
+pi
+pipermail
+pixmap
+pkey
+pkuk
+pl
+plain
+plainlink
+plainlinks
+plaintext
+plfrom
+plink
+pllimit
+plns
+plpgsql
+pltitle
+pltitles
+plusminus
+plusmn
+pname
+pnmtojpeg
+pnmtopng
+poolcounter
+popts
+popularpages
+portlet
+portlets
+posplus
+possible
+postcomment
+postgre
+postsep
+potd
+potm
+potx
+poweredby
+poweredbyico
+powersearch
+pp
+ppam
+ppsm
+ppsx
+pptm
+pptx
+precaching
+precompiled
+preferences
+preferencestoken
+prefill
+prefilled
+prefix
+prefixindex
+prefixsearchdisabled
+prefs
+prefsection
+prefsnologin
+prefsnologintext
+prefsubmit
+preload
+preloads
+preloadtitle
+prepending
+prependtext
+preprocess
+preprocessing
+preprocessors
+presentationml
+presep
+prevchar
+prevdiff
+previd
+previewconflict
+previewhead
+previewheader
+previewnote
+previewonfirst
+previewontop
+previewtext
+previousrevision
+prevlink
+prevn
+prexpiry
+prfiltercascade
+prfx
+primary
+printableversion
+printfooter
+printurl
+privacypage
+private
+privs
+prlevel
+probabalistically
+probs
+proc
+processings
+procs
+prodromou
+profession
+profileinfo
+programmatically
+project
+projectpage
+promotion
+prop
+properties
+property
+propname
+props
+prot
+protect
+protectcomment
+protectedarticle
+protectedinterface
+protectednamespace
+protectedpage
+protectedpages
+protectedpagetext
+protectedpagewarning
+protectedtitle
+protectedtitles
+protection
+protections
+protectlevel
+protectlogpage
+protectlogtext
+protectthispage
+protecttoken
+proto
+protocol
+protocols
+protos
+proxied
+proxyblocker
+proxyblockreason
+proxyunbannable
+prtype
+psir
+pst
+psttext
+psychedelix
+pt
+ptext
+ptool
+pubdate
+publicsuffix
+publishfailed
+punycode
+purge
+purged
+qabardjajəbza
+qbar
+qbsettings
+qmoicj
+qp
+quasit
+query
+querycache
+querycachetwo
+querycur
+querydiff
+querykey
+querymodule
+querymodules
+querypage
+querypages
+querystring
+querytype
+question
+queuefull
+quickbar
+quicktemplate
+quicktime
+qunit
+quux
+qvalues
+rabdiff
+radic
+radius
+raggett
+raii
+raimond
+random
+randompage
+randomredirect
+randstr
+range
+rangeblock
+rangeblocks
+rangedisabled
+rangeend
+rangestart
+raquo
+rarr
+rarticle
+rasterizations
+rasterize
+rasterized
+rasterizer
+ratelimited
+ratelimits
+rating
+ratings
+raw
+rawfm
+rawrow
+rbspan
+rc
+rcdays
+rceil
+rcfeed
+rcid
+rcids
+rclimit
+rcoptions
+rcpatroldisabled
+rctitle
+rctoken
+rdev
+rdfa
+rdfrom
+rdftype
+rdquo
+read
+readable
+readapidenied
+readarray
+reader
+readline
+readonlyreason
+readonlytext
+readonlywarning
+readrequired
+readrights
+realaudio
+realllly
+realname
+realpath
+reason
+reasonlist
+reasonstr
+reblock
+rebuildtextindex
+recache
+recached
+recaching
+recalc
+recentchange
+recentchanges
+recentchangescount
+recentchangesdays
+recentchangeslinked
+recentchangestext
+recenteditcount
+recentedits
+recip
+recips
+recreate
+recurse
+recurses
+redir
+redirect
+redirectable
+redirectcreated
+redirectedfrom
+redirections
+redirectpagesub
+redirectparams
+redirects
+redirectsnippet
+redirectstofile
+redirecttitle
+redirectto
+redirid
+redirlinks
+redirs
+redis
+redlink
+redlinks
+redocument
+reedyboy
+reenables
+reencode
+reference
+refetch
+refresheducation
+refreshlinks
+regexes
+regexlike
+region
+registered
+registration
+registrationdate
+reimport
+reindexation
+reindexed
+releasenotes
+relevance
+relevant
+relicense
+relimit
+relkind
+relname
+relnamespace
+remarticle
+remembermypassword
+rememberpassword
+removablegroups
+removal
+remove
+removed
+removedwatchtext
+removetags
+remreviewer
+remstudent
+renameuser
+renaming
+renderable
+renormalized
+repeating
+repl
+replaceafter
+replacer
+replacers
+replag
+replyto
+reporttime
+repos
+request
+requested
+requestid
+requeue
+required
+rerender
+rerendered
+rescnt
+researcher
+resends
+reset
+resetkinds
+resetlink
+resetpass
+resized
+resolutioninfo
+resolutionunit
+resolve
+resolved
+resourceloader
+responsecode
+restore
+restorelink
+restoreprefs
+restricted
+result
+resultset
+resultsperpage
+retrievedfrom
+returnto
+returntoquery
+retval
+reupload
+revalidate
+revalidation
+revdel
+revdelete
+revdelete'd
+revdelundel
+revert
+reverting
+revertpage
+reverts
+revid
+revids
+review
+reviewactivity
+reviewed
+reviewer
+reviewing
+revision
+revisionasof
+revisionday
+revisiondelete
+revisionid
+revisionmonth
+revisions
+revisiontext
+revisiontimestamp
+revisionuser
+revisionyear
+revlink
+revwrongpage
+rfloor
+rgba
+richtext
+rights
+rightscode
+rightsinfo
+rightslog
+rightslogtext
+rked
+rmdir
+rn
+rnlimit
+robotstxt
+roff
+role
+rollback
+rollbacker
+rollbacklink
+rollbacklinkcount
+rollbacktoken
+rootpage
+rootuserpages
+rowcount
+rown
+rownum
+rowsarr
+rowset
+rowspan
+rowspans
+rsaquo
+rsargs
+rsd
+rsdf
+rsquo
+rss
+rsvg
+ruleset
+rulesets
+rusyn
+rv
+rvcontinue
+rvdiffto
+rvlimit
+rvparse
+rvprop
+rvstart
+rvstartid
+rvtoken
+sabino
+safemode
+safesubst
+sais
+sameorigin
+samp
+sansserif
+save
+savearticle
+savedprefs
+saveprefs
+saveusergroups
+sawfish
+sbin
+sbquo
+scaler
+scalers
+scaron
+score
+screensize
+scribunto
+scriptable
+scriptbuilder
+scriptpath
+scrolltop
+sdot
+search
+search's
+searchaction
+searcharticle
+searchboxes
+searchbutton
+searcheverything
+searchform
+searchindex
+searchinfo
+searchlimit
+searchmenu
+searchnamespaces
+searchoptions
+searchresulttext
+searchstring
+searchtitle
+secondary
+section
+sectionanchor
+sectionedit
+sectioneditnotsupported
+sectionformat
+sectionnumber
+sectionprop
+sections
+sectionsnippet
+sectionsnotsupported
+sectiontitle
+securelogin
+seiten
+selectandother
+selectorother
+self
+selflink
+selfmove
+semiglobal
+semiprotected
+semiprotectedpagewarning
+sendemail
+sendmail
+sentences
+serialize
+servedby
+servername
+servertime
+serverurl
+sess
+session
+sessionfailure
+sessionid
+sessionkey
+setchange
+setcookie
+setemail
+setext
+setglobalaccountstatus
+setnewtype
+setnotificationtimestamp
+setopt
+setrename
+setrlimit
+setstatus
+sha
+shar
+sharding
+shared
+shareddescriptionfollows
+sharedfile
+sharedrepo
+sharedupload
+shellscript
+shiftwidth
+shockwave
+short
+shorturl
+shouldn
+shouting
+show
+showalldb
+showbots
+showdeleted
+showdiff
+showdifflinks
+showfilename
+showhiddencats
+showhideminor
+showhooks
+showingresults
+showinitializer
+showjumplinks
+showlinkedto
+showme
+showmeta
+shownavigation
+shownumberswatching
+showpreview
+showredirs
+showreviewed
+showsizediff
+showtoc
+showtoolbar
+showunreviewed
+shtml
+si
+siebrand
+sighhhh
+sigkill
+sigmaf
+signup
+sigsegv
+sigterm
+sii
+siit
+siiurlwidth
+simplesearch
+singlegroup
+singularthey
+sinumberingroup
+siprop
+site
+siteadmin
+sitecsspreview
+sitedir
+siteinfo
+sitejspreview
+sitemap
+sitemaps
+sitematrix
+sitename
+sitenotice
+siteprop
+sitesearch
+sitestats
+sitestatsupdate
+siteuser
+sitewide
+size
+sizediff
+sizediffdisabled
+sizes
+skey
+skinclass
+skinkey
+skinname
+skinnameclass
+skins
+skipcache
+skipcaptcha
+skipnotif
+skname
+sktemplate
+slideshow
+sm
+smaxage
+smil
+smtp
+snippet
+sodipodi
+softtabstop
+solaris
+somecontent
+somefeed
+someuser
+sorani
+sorbs
+sorbsreason
+sort
+sortdirection
+sortkey
+sortkeyprefix
+sortkeys
+source
+soxred
+spam
+spamdetected
+spamprotected
+spamprotectionmatch
+spamprotectiontext
+spamprotectiontitle
+spcontent
+special
+specialpage
+specialpagealiases
+specialpageattributes
+specialpagegroup
+specialpages
+specialprotected
+speedtip
+speedy
+speex
+spekking
+spellcheck
+spezial
+spoofable
+spreadsheetml
+sprefs
+sprintf
+sprotected
+sql's
+sqlite
+sqltotal
+sr
+srchres
+srcset
+srgs
+srprop
+srwhat
+stabilize
+stable
+stablesettings
+stansvik
+start
+startid
+startime
+startsortkey
+startsortkeyprefix
+starttime
+starttimestamp
+stash
+stashfailed
+stashimageinfo
+state
+staticredirect
+statistics
+statline
+status
+statuskey
+stdclass
+stdout
+steward
+stopwords
+storedversion
+strcasecmp
+strcmp
+string
+stripos
+stripslashes
+strlen
+strpos
+strrpos
+strtime
+strtok
+strtolower
+strtotime
+strtr
+struct
+strval
+stubthreshold
+student
+studies
+stuffit
+stxt
+stylename
+stylepath
+styleversion
+subaction
+subarray
+subcat
+subcats
+subclassing
+subcond
+subconds
+subdir
+subdomain
+subdomains
+sube
+subelement
+subelements
+subfunction
+subfunctions
+subimages
+subitem
+subitems
+subject
+subjectid
+subjectids
+subjectpagename
+subjectpagenamee
+subjectspace
+subjectspacee
+subkey
+subkeys
+sublevels
+submatch
+submodule
+submodule's
+submodules
+subnet
+subpage
+subpagename
+subpagenamee
+subpages
+subpagestr
+subparents
+subprocesses
+subsql
+substr
+succ
+success
+successbox
+suckage
+suggest
+suggestion
+suhosin
+suhosin's
+summ
+summary
+summarymissed
+summaryrequired
+supe
+superdomain
+superglobals
+superset
+suppress
+suppressed
+suppressedredirect
+suppressionlog
+suppressionlogtext
+suppressredirect
+suppressrevision
+svgs
+svn
+svnroot
+sybase
+symlinked
+syms
+sysinfo
+sysop
+system
+systemnachrichten
+szdiff
+szlig
+szymon
+t
+tabindex
+tablealign
+tablecell
+tablename
+tablesorter
+tablestack
+tabletags
+tabletype
+tabstop
+tag
+tagfilter
+tagline
+taglist
+tags
+tagset
+tagstack
+tailorings
+talk
+talkable
+talkfrom
+talkid
+talkids
+talkmove
+talkmoveoverredirect
+talkpage
+talkpageheader
+talkpagelinktext
+talkpagename
+talkpagenamee
+talkpagetext
+talkspace
+talkspacee
+talkto
+taraškievica
+tarask
+target
+tb
+tbase
+tbody
+tboverride
+tcount
+tcsh
+tddate
+tdtime
+teardown
+telnet
+temp
+tempdir
+template
+templatelinks
+templatepage
+templates
+templatesused
+templatesusedpreview
+templatesusedsection
+tempname
+tempout
+test
+testclean
+testdata
+testmailuser
+testpass
+testrunner
+testswarm
+testuser
+testutf
+texi
+texinfo
+text
+textarea
+textareas
+textares
+textbox
+textboxsize
+texthidden
+textid
+textlink
+textmissing
+textoverride
+textsf
+textsize
+textvector
+texvc
+tfoot
+tful
+tg
+that'll
+thead
+thelink
+theora
+thetasym
+thinsp
+thisisdeleted
+thispage
+thumbborder
+thumbcaption
+thumberror
+thumbheight
+thumbhtml
+thumbimage
+thumbinner
+thumbmime
+thumbnail
+thumbnailing
+thumbnailsize
+thumbname
+thumbsize
+thumbtext
+thumburl
+thumbwidth
+timeago
+timeanddate
+timecond
+timecorrection
+timeframe
+timekey
+timeoffset
+timep
+timespans
+timestamp
+timestamps
+timestamptz
+timezonelegend
+timezoneregion
+timezoneuseoffset
+timezoneuseserverdefault
+tino
+title
+titleblacklist
+titleconversion
+titleexists
+titlemsg
+titleprefixeddbkey
+titleprotected
+titleprotectedwarning
+titles
+titlesnippet
+titletext
+titlevector
+tl
+tllimit
+tltemplates
+tmpfile
+to
+toclevel
+tocline
+tocnumber
+tocsection
+toctext
+toctitle
+tofragment
+toggle
+toid
+token
+tokenname
+tokens
+tolang
+tongminh
+toobig
+toofewexpiries
+toohigh
+toolarray
+toolbarparent
+toolboxend
+toolboxlink
+toolong
+toolow
+tooltiponly
+tooshort
+top
+toparse
+topbar
+toplevel
+toplinks
+toponly
+torev
+torevid
+tornevall
+torunblocked
+totalcnt
+totalcount
+totalhits
+totalmemory
+totaltime
+totitle
+touched
+tplarg
+transcludable
+transclude
+transcluded
+transcluding
+transclusion
+transclusions
+transcode
+transcodekey
+transcoder
+transcodereset
+transcodestatus
+transcoding
+translatewiki
+transstat
+transwiki
+troff
+true
+truespeed
+trustworthy
+truthy
+tsearch
+tsquery
+tuple
+tweakblogs
+tweakers
+txt
+txtfm
+type
+typemustmatch
+typeof
+typname
+tzstring
+uacute
+uarr
+uc
+ucfirst
+ucirc
+udpprofile
+ufffd
+ugrave
+ui
+uint
+ulimit
+ulink
+ulinks
+uname
+unanchored
+unapprove
+unary
+unattached
+unauthenticate
+unavailable
+unblock
+unblocklogentry
+unblockself
+unblocktoken
+unbuffered
+uncacheable
+uncached
+uncategorized
+unclosable
+uncompress
+undel
+undelete
+undeleted
+undeletion
+undo
+undoafter
+undofailure
+undorev
+unescape
+unescaped
+unfeature
+unfeatured
+unflag
+ungrouped
+unhelpful
+unhidden
+unhide
+unidata
+unindent
+unindexed
+uniq
+unique
+universaleditbutton
+unixtime
+unknown
+unknownerror
+unknownnamespace
+unlock
+unlockdb
+unlogged
+unmakesafe
+unmark
+unmerge
+unmodified
+unoversight
+unoversighted
+unpadded
+unpatrolled
+unpatrolledletter
+unprefixed
+unprintables
+unprotect
+unprotectedarticle
+unprotection
+unprotectthispage
+unredacted
+unrequest
+unrequested
+unresolve
+unresolved
+unreviewed
+unreviewedpages
+unsanitized
+unseed
+unserialization
+unserialize
+unserialized
+unserializing
+unsetting
+unstub
+unstubbed
+unstubbing
+unstubs
+unsupportednamespace
+unsupportedrepo
+untaint
+untracked
+untrustworthiness
+unused
+unusual
+unversioned
+unviewable
+unviewed
+unwatch
+unwatched
+unwatchedpages
+unwatching
+unwatchthispage
+unwikified
+unwritable
+upconvert
+updateddate
+updatedtime
+updatelog
+upgradedoc
+upgrader
+upload
+upload's
+uploaddisabled
+uploadedimage
+uploadjava
+uploadlogpage
+uploadlogpagetext
+uploadnewversion
+uploadnologintext
+uploadpage
+uploadscripted
+uploadsource
+uploadstash
+uploadvirus
+uppercased
+upsih
+urandom
+url
+url's
+urlaction
+urldecode
+urldecoded
+urlencode
+urlencoded
+urlheight
+urlparam
+urlparm
+urlpath
+urlvar
+urlwidth
+ursh
+us
+usedomain
+useemail
+uselang
+uselivepreview
+usemod
+usemsgcache
+usenewrc
+user
+useragent
+useragents
+userblock
+usercan
+usercontribs
+usercreate
+usercreated
+usercss
+usercsspreview
+usercssyoucanpreview
+userdailycontribs
+userdir
+userdoesnotexist
+usereditcount
+useredits
+useremail
+userexists
+usergroup
+usergroups
+userhidden
+userid
+userinfo
+userinvalidcssjstitle
+userips
+userjs
+userjsprev
+userjspreview
+userjsyoucanpreview
+userlang
+userlangattributes
+userlink
+userlinks
+userlogin
+userloginlink
+userloginprompt
+userlogout
+usermaildisabled
+usermessage
+username
+usernameless
+usernames
+userpage
+userpages
+userpageurl
+userprefix
+userrights
+userrightstoken
+users
+usersbody
+userspace
+usertalk
+usertalklink
+usertext
+usertoollinks
+useskin
+useto
+usort
+ustar
+ustoken
+utfnormal
+uuml
+validate
+validationbuilder
+valign
+vals
+value
+values
+vandal
+vandalism
+variables
+variant
+variantarticlepath
+varlang
+varname
+vars
+varval
+vasiliev
+vasilvv
+vbase
+vbscript
+vcount
+vcsize
+venema's
+verbosify
+version
+versioning
+versionlink
+versionlog
+versionrequired
+versionrequiredtext
+very
+vhost
+vi
+vibber
+videoinfo
+view
+viewcount
+viewdeleted
+viewhelppage
+viewprevnext
+viewsource
+viewsourcelink
+viewsourcetext
+viewvc
+viewyourtext
+visible
+visualeditor
+viurlwidth
+voff
+vofp
+voicexml
+vorbis
+vpad
+vrml
+vslow
+vvcv
+vxml
+wais
+wait
+wakeup
+walltime
+warmup
+warning
+wasdeleted
+wasn
+watch
+watchcreations
+watchdefault
+watchdeletion
+watched
+watchlist
+watchlistdays
+watchlisthideanons
+watchlisthidebots
+watchlisthideliu
+watchlisthideminor
+watchlisthideown
+watchlisthidepatrolled
+watchlistraw
+watchlists
+watchlisttoken
+watchmoves
+watchthis
+watchthispage
+watchtoken
+watchuser
+wb
+wbmp
+wbxml
+wddx
+wddxfm
+weblog
+webm
+webp
+webrequest
+webserver
+weeks
+weierp
+weight
+wellwritten
+werdna
+wget
+what
+whatlinkshere
+whatwg
+wheely
+wheter
+whitelist
+whitelisted
+whitelistedittext
+whitelisting
+whois
+wicke
+width
+widthx
+wierkosz
+wietse
+wiki
+wiki'd
+wiki's
+wikia
+wikiadmin
+wikibase
+wikibits
+wikibooks
+wikidb
+wikifarm
+wikiid
+wikilink
+wikilinks
+wikilove
+wikiloveimagelog
+wikimedia
+wikimediacommons
+wikipage
+wikipedia
+wikipedian
+wikipedias
+wikiprintable
+wikis
+wikisyntax
+wikitable
+wikitables
+wikitech
+wikitext
+wikiuser
+wiktionary
+wincache
+wininet
+withaccess
+withaction
+witheditsonly
+withlanglinks
+withoutlanglinks
+wl
+wlallrev
+wldir
+wlend
+wlexcludeuser
+wllimit
+wlowner
+wlprop
+wltoken
+wmf's
+wml
+wmlc
+wmls
+wmlsc
+wmlscript
+wmlscriptc
+wordcount
+wordprocessingml
+wordwg
+workalike
+worldwind
+wouldn
+wr
+writeapi
+writeapidenied
+writedisabled
+writerequired
+writerights
+wrongpassword
+x
+xbitmap
+xcache
+xcancel
+xdebug
+xdiff
+xdomain
+xdomains
+xff
+xhtmldefaultnamespace
+xhtmlnamespaces
+xiff
+xlam
+xlsb
+xlsm
+xlsx
+xltm
+xltx
+xml
+xmldoublequote
+xmlfm
+xmlimport
+xmlns
+xmlsafe
+xmlselect
+xor
+xpinstall
+xpixmap
+xpsdocument
+xtended
+xwindowdump
+xxxx
+xxxxx
+yacute
+yaml
+yamlfm
+year
+yes
+youhavenewmessages
+youhavenewmessagesfromusers
+youhavenewmessagesmanyusers
+youhavenewmessagesmulti
+yourdiff
+yourdomainname
+youremail
+yourgender
+yourinternal
+yourlanguage
+yourname
+yournick
+yourpassword
+yourrealname
+yourtext
+yourvariant
+yourwiki
+yuml
+yyyymmddhhiiss
+zhdaemon
+zhengzhu
+zhtable
+zijdel
+zlib
+zoffset
+zwnj
index 9ad4df4..778da5a 100644 (file)
@@ -115,7 +115,7 @@ class FindHooks extends Maintenance {
         */
        private function getHooksFromDoc( $doc ) {
                if ( $this->hasOption( 'online' ) ) {
-                       return $this->getHooksFromOnlineDoc( );
+                       return $this->getHooksFromOnlineDoc();
                } else {
                        return $this->getHooksFromLocalDoc( $doc );
                }
@@ -137,7 +137,7 @@ class FindHooks extends Maintenance {
         * Get hooks from www.mediawiki.org using the API
         * @return array of documented hooks
         */
-       private function getHooksFromOnlineDoc( ) {
+       private function getHooksFromOnlineDoc() {
                        // All hooks
                        $allhookdata = Http::get( 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:MediaWiki_hooks&cmlimit=500&format=php' );
                        $allhookdata = unserialize( $allhookdata );
index 6bb44a1..4c03980 100644 (file)
@@ -1490,7 +1490,7 @@ class specialBlockmeTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Blockme";
 
-               $this->params = array ( );
+               $this->params = array ();
 
                // sometimes we specify "ip", and sometimes we don't.
                if ( wikiFuzz::randnum( 1 ) == 0 ) {
index 39e613f..935a296 100644 (file)
@@ -22,9 +22,8 @@
  */
 
 if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
-       echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" .
-       "Check if you have a newer php executable with a different name, such as php5.\n";
-       die( 1 );
+       require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
+       wfPHPVersionError( 'cli' );
 }
 
 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
index 420e842..dcd9b9b 100644 (file)
@@ -739,9 +739,8 @@ class extensionLanguages extends languages {
        function __construct( MessageGroup $group ) {
                $this->mMessageGroup = $group;
 
-               $bools = $this->mMessageGroup->getBools();
-               $this->mIgnoredMessages = $bools['ignored'];
-               $this->mOptionalMessages = $bools['optional'];
+               $this->mIgnoredMessages = $this->mMessageGroup->getIgnored();
+               $this->mOptionalMessages = $this->mMessageGroup->getOptional();
        }
 
        /**
index 4e0f291..6ff8a17 100644 (file)
 /** */
 require_once( __DIR__ . '/commandLine.inc' );
 
-$debug = in_array( '--debug', $argv );
-$help = in_array( '--help', $argv );
+$options = getopt( '', array( 'debug', 'help', 'cache:' ) );
 
-if( $help ) {
+$debug = isset( $options['debug'] );
+$help = isset( $options['help'] );
+$cache = isset( $options['cache'] ) ? $options['cache'] : null;
+
+if ( $help ) {
        mccShowUsage();
        exit( 0 );
 }
@@ -37,9 +40,15 @@ $mcc = new MWMemcached( array(
        'debug' => $debug,
 ) );
 
-if ( $wgMainCacheType === CACHE_MEMCACHED ) {
+if ( $cache ) {
+       if ( !isset( $wgObjectCaches[$cache] ) ) {
+               print "MediaWiki isn't configured with a cache named '$cache'";
+               exit( 1 );
+       }
+       $servers = $wgObjectCaches[$cache]['servers'];
+} elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
        $mcc->set_servers( $wgMemCachedServers );
-} elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+} elseif( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
        $mcc->set_servers( $wgObjectCaches[$wgMainCacheType]['servers'] );
 } else {
        print "MediaWiki isn't configured for Memcached usage\n";
index 42461c5..469feca 100644 (file)
@@ -36,19 +36,26 @@ class mcTest extends Maintenance {
                $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
                                                          . " 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 );
        }
 
        public function execute() {
                global $wgMainCacheType, $wgMemCachedTimeout, $wgObjectCaches;
 
+               $cache = $this->getOption( 'cache' );
                $iterations = $this->getOption( 'i', 100 );
-               if ( $this->hasArg() ) {
+               if ( $cache ) {
+                       if ( !isset( $wgObjectCaches[$cache] ) ) {
+                               $this->error( "MediaWiki isn't configured with a cache named '$cache'", 1 );
+                       }
+                       $servers = $wgObjectCaches[$cache]['servers'];
+               } elseif ( $this->hasArg() ) {
                        $servers = array( $this->getArg() );
                } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
                        global $wgMemCachedServers;
                        $servers = $wgMemCachedServers ;
-               } elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+               } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
                        $servers = $wgObjectCaches[$wgMainCacheType]['servers'];
                } else {
                        $this->error( "MediaWiki isn't configured for Memcached usage", 1 );
index 5e505eb..4fad7a7 100644 (file)
@@ -63,6 +63,8 @@ $doxygenInputFilter = "php {$mwPath}maintenance/mwdoc-filter.php";
 /** where Phpdoc should output documentation */
 $doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR ;
 
+$doxyVersion = 'master';
+
 /** MediaWiki subpaths */
 $mwPathI = $mwPath . 'includes/';
 $mwPathL = $mwPath . 'languages/';
@@ -164,6 +166,12 @@ if ( is_array( $argv ) ) {
                                $doxyOutput = realpath( $argv[$i] );
                        }
                        break;
+               case '--version':
+                       $i++;
+                       if ( isset( $argv[$i] ) ) {
+                               $doxyVersion = $argv[$i];
+                       }
+                       break;
                case '--generate-man':
                        $doxyGenerateMan = true;
                        break;
@@ -183,8 +191,9 @@ Commands:
 If no command is given, you will be prompted.
 
 Other options:
-    --output <dir>  Set output directory (default $doxyOutput)
+    --output <dir>  Set output directory (default: $doxyOutput)
     --generate-man  Generates man page documentation
+    --version       Project version to display in the outut (default: $doxyVersion)
     --help          Show this help and exit.
 
 
@@ -234,14 +243,11 @@ case 6:
        $excludePatterns = 'extensions';
 }
 
-// @todo FIXME to work on git
-$version = 'master';
-
 // Generate path exclusions
 $excludedPaths = $mwPath . join( " $mwPath", $mwExcludePaths );
 print "EXCLUDE: $excludedPaths\n\n";
 
-$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $version, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan, $doxygenInputFilter );
+$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $doxyVersion, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan, $doxygenInputFilter );
 $command = $doxygenBin . ' ' . $generatedConf;
 
 echo <<<TEXT
@@ -254,7 +260,8 @@ $command
 
 TEXT;
 
-passthru( $command );
+$exitcode = 1;
+passthru( $command, $exitcode );
 
 echo <<<TEXT
 ---------------------------------------------------
@@ -264,3 +271,5 @@ Check above for possible errors.
 You might want to delete the temporary file $generatedConf
 
 TEXT;
+
+exit( $exitcode );
index b0ab624..58e76b0 100644 (file)
@@ -109,7 +109,7 @@ class CLIParser extends Maintenance {
         *
         * @return Title object
         */
-       protected function getTitle( ) {
+       protected function getTitle() {
                $title =
                        $this->getOption( 'title' )
                        ? $this->getOption( 'title' )
index 4827642..1572869 100644 (file)
@@ -48,8 +48,8 @@ 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_sha1', __METHOD__ ) ) {
-                       $this->output( "rev_sha1 column does not exist\n\n", true );
+               } else if ( !$db->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) {
+                       $this->output( "rev_len column does not exist\n\n", true );
                        return false;
                }
 
@@ -67,10 +67,11 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                $blockEnd = intval( $start ) + $this->mBatchSize - 1;
                $count = 0;
                $missing = 0;
+               $fields = Revision::selectFields();
                while ( $blockStart <= $end ) {
                        $this->output( "...doing rev_id from $blockStart to $blockEnd\n" );
                        $res = $db->select( 'revision',
-                                               Revision::selectFields(),
+                                               $fields,
                                                array( "rev_id >= $blockStart",
                                                   "rev_id <= $blockEnd",
                                                   "rev_len IS NULL" ),
index 714bb84..b1be714 100644 (file)
@@ -73,7 +73,7 @@ class RunJobs extends Maintenance {
                $type = $this->getOption( 'type', false );
                $wgTitle = Title::newFromText( 'RunJobs.php' );
                $dbw = wfGetDB( DB_MASTER );
-               $n = 0;
+               $jobsRun = 0; // counter
 
                $group = JobQueueGroup::singleton();
                // Handle any required periodic queue maintenance
@@ -88,6 +88,7 @@ class RunJobs extends Maintenance {
                                ? $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE )
                                : $group->pop( $type ); // job from a single queue
                        if ( $job ) { // found a job
+                               ++$jobsRun;
                                $this->runJobsLog( $job->toString() . " STARTING" );
 
                                // Run the job...
@@ -113,19 +114,21 @@ class RunJobs extends Maintenance {
                                }
 
                                // Break out if we hit the job count or wall time limits...
-                               if ( $maxJobs && ++$n >= $maxJobs ) {
+                               if ( $maxJobs && $jobsRun >= $maxJobs ) {
                                        break;
                                } elseif ( $maxTime && ( time() - $startTime ) > $maxTime ) {
                                        break;
                                }
 
-                               // Don't let any queue slaves/backups fall behind
-                               $group->get( $job->getType() )->waitForBackups();
                                // Don't let any of the main DB slaves get backed up
                                $timePassed = time() - $lastTime;
                                if ( $timePassed >= 5 || $timePassed < 0 ) {
                                        wfWaitForSlaves();
                                }
+                               // Don't let any queue slaves/backups fall behind
+                               if ( $jobsRun > 0 && ( $jobsRun % 100 ) == 0 ) {
+                                       $group->waitForBackups();
+                               }
                        }
                } while ( $job ); // stop when there are no jobs
        }
index 8f6e419..158019b 100644 (file)
@@ -96,8 +96,15 @@ class SyncFileBackend extends Maintenance {
                        $this->output( "Ending journal position is $end.\n" );
                }
 
+               // Periodically update the position file
+               $callback = function( $pos ) use ( $startFromPosFile, $posFile, $start ) {
+                       if ( $startFromPosFile && $pos >= $start ) { // successfully advanced
+                               file_put_contents( $posFile, $pos, LOCK_EX );
+                       }
+               };
+
                // Actually sync the dest backend with the reference backend
-               $lastOKPos = $this->syncBackends( $src, $dst, $start, $end );
+               $lastOKPos = $this->syncBackends( $src, $dst, $start, $end, $callback );
 
                // Update the sync position file
                if ( $startFromPosFile && $lastOKPos >= $start ) { // successfully advanced
@@ -131,9 +138,12 @@ class SyncFileBackend extends Maintenance {
         * @param $dst FileBackend
         * @param $start integer Starting journal position
         * @param $end integer Starting journal position
+        * @param $callback Closure Callback to update any position file
         * @return integer|false Journal entry ID or false if there are none
         */
-       protected function syncBackends( FileBackend $src, FileBackend $dst, $start, $end ) {
+       protected function syncBackends(
+               FileBackend $src, FileBackend $dst, $start, $end, Closure $callback
+       ) {
                $lastOKPos = 0; // failed
                $first = true; // first batch
 
@@ -164,6 +174,7 @@ class SyncFileBackend extends Maintenance {
                        $status = $this->syncFileBatch( array_keys( $pathsInBatch ), $src, $dst );
                        if ( $status->isOK() ) {
                                $lastOKPos = max( $lastOKPos, $lastPosInBatch );
+                               $callback( $lastOKPos ); // update position file
                        } else {
                                $this->error( print_r( $status->getErrorsArray(), true ) );
                                break; // no gaps; everything up to $lastPos must be OK
index 97d6ff2..4307c0c 100644 (file)
@@ -86,10 +86,12 @@ CREATE TABLE /*_*/user (
   -- Same with passwords.
   user_email tinytext NOT NULL,
 
-  -- This is a timestamp which is updated when a user
-  -- logs in, logs out, changes preferences, or performs
-  -- some other action requiring HTML cache invalidation
-  -- to ensure that the UI is updated.
+  -- If the browser sends an If-Modified-Since header, a 304 response is
+  -- suppressed if the value in this field for the current user is later than
+  -- the value in the IMS header. That is, this field is an invalidation timestamp
+  -- for the browser cache of logged-in users. Among other things, it is used
+  -- to prevent pages generated for a previously logged in user from being
+  -- displayed after a session expiry followed by a fresh login.
   user_touched binary(14) NOT NULL default '',
 
   -- A pseudorandomly generated value that is stored in
@@ -560,10 +562,10 @@ CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
 -- callers won't be using an index: fix this?
 CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
 
--- Not really used?
+-- Used by the API (and some extensions)
 CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
 
--- For finding rows with outdated collation
+-- FIXME: Not used, delete this
 CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
 
 --
index 159b6b7..f69a9b0 100644 (file)
@@ -26,9 +26,8 @@
  */
 
 if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
-       echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" .
-       "Check if you have a newer php executable with a different name, such as php5.\n";
-       die( 1 );
+       require( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
+       wfPHPVersionError( 'cli' );
 }
 
 $wgUseMasterForMaintenance = true;
index 04a2d47..a76a1ee 100644 (file)
@@ -35,7 +35,7 @@ require_once( __DIR__ . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class UpdateCollation extends Maintenance {
-       const BATCH_SIZE = 50; // Number of rows to process in one batch
+       const BATCH_SIZE = 10000; // Number of rows to process in one batch
        const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
 
        public $sizeHistogram = array();
@@ -68,7 +68,7 @@ TEXT;
        }
 
        public function execute() {
-               global $wgCategoryCollation, $wgMiserMode;
+               global $wgCategoryCollation;
 
                $dbw = $this->getDB( DB_MASTER );
                $force = $this->getOption( 'force' );
@@ -82,10 +82,13 @@ TEXT;
                        $collation = Collation::singleton();
                }
 
-               $options = array( 'LIMIT' => self::BATCH_SIZE, 'STRAIGHT_JOIN' );
+               $options = array(
+                       'LIMIT' => self::BATCH_SIZE,
+                       'ORDER BY' => 'cl_to, cl_type, cl_from',
+                       'STRAIGHT_JOIN',
+               );
 
                if ( $force || $dryRun ) {
-                       $options['ORDER BY'] = 'cl_from, cl_to';
                        $collationConds = array();
                } else {
                        if ( $this->hasOption( 'previous-collation' ) ) {
@@ -96,20 +99,20 @@ TEXT;
                                );
                        }
 
-                       if ( !$wgMiserMode ) {
+                       $count = $dbw->estimateRowCount(
+                               'categorylinks',
+                               '*',
+                               $collationConds,
+                               __METHOD__
+                       );
+                       // Improve estimate if feasible
+                       if ( $count < 1000000 ) {
                                $count = $dbw->selectField(
                                        'categorylinks',
                                        'COUNT(*)',
                                        $collationConds,
                                        __METHOD__
                                );
-                       } else {
-                               $count = $dbw->estimateRowCount(
-                                       'categorylinks',
-                                       '*',
-                                       $collationConds,
-                                       __METHOD__
-                               );
                        }
                        if ( $count == 0 ) {
                                $this->output( "Collations up-to-date.\n" );
@@ -126,7 +129,7 @@ TEXT;
                        $res = $dbw->select(
                                array( 'categorylinks', 'page' ),
                                array( 'cl_from', 'cl_to', 'cl_sortkey_prefix', 'cl_collation',
-                                       'cl_sortkey', 'page_namespace', 'page_title'
+                                       'cl_sortkey', 'cl_type', 'page_namespace', 'page_title'
                                ),
                                array_merge( $collationConds, $batchConds, array( 'cl_from = page_id' ) ),
                                __METHOD__,
@@ -186,12 +189,8 @@ TEXT;
                                $dbw->commit( __METHOD__ );
                        }
 
-                       if ( ( $force || $dryRun ) && $row ) {
-                               $encFrom = $dbw->addQuotes( $row->cl_from );
-                               $encTo = $dbw->addQuotes( $row->cl_to );
-                               $batchConds = array(
-                                       "(cl_from = $encFrom AND cl_to > $encTo) " .
-                                       " OR cl_from > $encFrom" );
+                       if ( $row ) {
+                               $batchConds = array( $this->getBatchCondition( $row ) );
                        }
 
                        $count += $res->numRows();
@@ -212,6 +211,32 @@ TEXT;
                }
        }
 
+       /**
+        * Return an SQL expression selecting rows which sort above the given row,
+        * assuming an ordering of cl_to, cl_type, cl_from
+        */
+       function getBatchCondition( $row ) {
+               $dbw = $this->getDB( DB_MASTER );
+               $fields = array( 'cl_to', 'cl_type', 'cl_from' );
+               $first = true;
+               $cond = false;
+               $prefix = false;
+               foreach ( $fields as $field ) {
+                       $encValue = $dbw->addQuotes( $row->$field );
+                       $inequality = "$field > $encValue";
+                       $equality = "$field = $encValue";
+                       if ( $first ) {
+                               $cond = $inequality;
+                               $prefix = $equality;
+                               $first = false;
+                       } else {
+                               $cond .= " OR ($prefix AND $inequality)";
+                               $prefix .= " AND $equality";
+                       }
+               }
+               return $cond;
+       }
+
        function updateSortKeySizeHistogram( $key ) {
                $length = strlen( $key );
                if ( !isset( $this->sizeHistogram[$length] ) ) {
index 2a06657..cbe6b05 100644 (file)
@@ -108,7 +108,7 @@ class userOptions {
                        return false;
                }
 
-               $this->{ $this->mMode } ( );
+               $this->{ $this->mMode } ();
                return true;
        }
 
@@ -117,7 +117,7 @@ class userOptions {
        #
 
        /** List default options and their value */
-       private function LISTER( ) {
+       private function LISTER() {
                $def = User::getDefaultOptions();
                ksort( $def );
                $maxOpt = 0;
@@ -130,7 +130,7 @@ class userOptions {
        }
 
        /** List options usage */
-       private function USAGER( ) {
+       private function USAGER() {
                $ret = array();
                $defaultOptions = User::getDefaultOptions();
 
@@ -181,7 +181,7 @@ class userOptions {
 
 
        /** Change our users options */
-       private function CHANGER( ) {
+       private function CHANGER() {
                $this->warn();
 
                // We list user by user_id from one of the slave database
index 10689cd..4374b09 100644 (file)
@@ -149,6 +149,7 @@ return array(
        'jquery.badge' => array(
                'scripts' => 'resources/jquery/jquery.badge.js',
                'styles' => 'resources/jquery/jquery.badge.css',
+               'dependencies' => 'mediawiki.language',
        ),
        'jquery.byteLength' => array(
                'scripts' => 'resources/jquery/jquery.byteLength.js',
@@ -159,6 +160,7 @@ return array(
        ),
        'jquery.checkboxShiftClick' => array(
                'scripts' => 'resources/jquery/jquery.checkboxShiftClick.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.client' => array(
                'scripts' => 'resources/jquery/jquery.client.js',
@@ -196,6 +198,7 @@ return array(
        ),
        'jquery.getAttrs' => array(
                'scripts' => 'resources/jquery/jquery.getAttrs.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.hidpi' => array(
                'scripts' => 'resources/jquery/jquery.hidpi.js',
@@ -219,12 +222,14 @@ return array(
                'scripts' => 'resources/jquery/jquery.makeCollapsible.js',
                'styles' => 'resources/jquery/jquery.makeCollapsible.css',
                'messages' => array( 'collapsible-expand', 'collapsible-collapse' ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.mockjax' => array(
                'scripts' => 'resources/jquery/jquery.mockjax.js',
        ),
        'jquery.mw-jump' => array(
                'scripts' => 'resources/jquery/jquery.mw-jump.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.mwExtension' => array(
                'scripts' => 'resources/jquery/jquery.mwExtension.js',
@@ -232,15 +237,18 @@ return array(
        ),
        'jquery.placeholder' => array(
                'scripts' => 'resources/jquery/jquery.placeholder.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.qunit' => array(
                'scripts' => 'resources/jquery/jquery.qunit.js',
                'styles' => 'resources/jquery/jquery.qunit.css',
                'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.qunit.completenessTest' => array(
                'scripts' => 'resources/jquery/jquery.qunit.completenessTest.js',
                'dependencies' => 'jquery.qunit',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.spinner' => array(
                'scripts' => 'resources/jquery/jquery.spinner.js',
@@ -828,6 +836,7 @@ return array(
                        'jquery.mw-jump',
                        'mediawiki.util',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.page.startup' => array(
                'scripts' => 'resources/mediawiki.page/mediawiki.page.startup.js',
@@ -836,6 +845,7 @@ return array(
                        'mediawiki.util',
                ),
                'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.page.patrol.ajax' => array(
                'scripts' => 'resources/mediawiki.page/mediawiki.page.patrol.ajax.js',
@@ -950,6 +960,7 @@ return array(
                ) ),
                'dependencies' => array( 'jquery.qunit' ),
                'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki Tests */
@@ -957,12 +968,14 @@ return array(
        'mediawiki.tests.qunit.testrunner' => array(
                'scripts' => 'tests/qunit/data/testrunner.js',
                'dependencies' => array(
+                       'jquery.getAttrs',
                        'jquery.qunit',
                        'jquery.qunit.completenessTest',
                        'mediawiki.page.startup',
                        'mediawiki.page.ready',
                ),
                'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki Legacy */
index 0dc9857..cd2dbb6 100644 (file)
  *
  * http://docs.jquery.com/UI/Button#theming
  */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
+
+.ui-button {
+       display: inline-block;
+       position: relative;
+       padding: 0;
+       margin-right: .1em;
+       text-decoration: none !important;
+       cursor: pointer;
+       text-align: center;
+       zoom: 1;
+       overflow: visible; /* the overflow property removes extra width in IE */
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+       width: 2.2em;
+}
+
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+       width: 2.4em;
+}
+.ui-button-icons-only {
+       width: 3.4em;
+}
+button.ui-button-icons-only {
+       width: 3.7em;
+}
 
 /*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+.ui-button .ui-button-text {
+       display: block;
+       line-height: 1.4;
+}
+.ui-button-text-only .ui-button-text {
+       padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+       padding: .4em;
+       text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+       padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+       padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+       padding-left: 2.1em;
+       padding-right: 2.1em;
+}
 /* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
+       input.ui-button {
+       padding: .4em 1em;
+}
 
 /*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+       position: absolute;
+       top: 50%;
+       margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+       left: 50%;
+       margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+       left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+       right: .5em;
+}
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+       right: .5em;
+}
 
 /*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+.ui-buttonset {
+       margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+       margin-left: 0;
+       margin-right: -.3em;
+}
 
 /* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+button.ui-button::-moz-focus-inner {
+       border: 0;
+       padding: 0; /* reset extra padding in Firefox */
+}
index 006bbea..a6a1b54 100644 (file)
 /* Button
 ----------------------------------*/
 
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
+.ui-button {
+       display: inline-block;
+       position: relative;
+       padding: 0;
+       margin-right: .1em;
+       text-decoration: none !important;
+       cursor: pointer;
+       text-align: center;
+       zoom: 1;
+       overflow: visible; /* the overflow property removes extra width in IE */
+}
+.ui-button-icon-only {
+       width: 2.2em; /* to make room for the icon, a width needs to be set here */
+}
+button.ui-button-icon-only {
+       width: 2.4em; /* button elements seem to need a little more width */
+}
+.ui-button-icons-only {
+       width: 3.4em;
+}
+button.ui-button-icons-only {
+       width: 3.7em;
+}
 
 /*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: 0.3em 1em 0.25em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: 0.3em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.3em 1em 0.25em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.3em 2.1em 0.25em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+.ui-button .ui-button-text {
+       display: block;
+       line-height: 1.4;
+}
+.ui-button-text-only .ui-button-text {
+       padding: 0.3em 1em 0.25em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+       padding: 0.3em;
+       text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+       padding: 0.3em 1em 0.25em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+       padding: 0.3em 2.1em 0.25em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+       padding-left: 2.1em;
+       padding-right: 2.1em;
+}
 
 /* no icon support for input elements, provide padding by default */
-input.ui-button { padding: 0.3em 1em; }
+input.ui-button {
+       padding: 0.3em 1em;
+}
 
 /*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: 0.5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icon .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: 0.5em; }
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-text-icon .ui-icon,
+.ui-button-icons-only .ui-icon {
+       position: absolute;
+       top: 50%;
+       margin-top: -9px;
+}
+.ui-button-icon-only .ui-icon {
+       left: 50%;
+       margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icon .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+       left: 0.5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icon .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+       right: 0.5em;
+}
 
 /*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+.ui-buttonset {
+       margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+       margin-left: 0;
+       margin-right: -.3em;
+}
 
 /* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+button.ui-button::-moz-focus-inner {
+       border: 0;
+       padding: 0; /* reset extra padding in Firefox */
+}
 
 body .ui-button {
        margin: 0.5em 0 0.5em 0.4em;
@@ -46,10 +114,38 @@ body .ui-button {
 /* Corner radius */
 /* This is normally handled in jquery.ui.theme.css, but in our case, the corner
    styling of our buttons doesn't match our default widget corner styling */
-.ui-button.ui-corner-all, .ui-button.ui-corner-top, .ui-button.ui-corner-left, .ui-button.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-button.ui-corner-all, .ui-button.ui-corner-top, .ui-button.ui-corner-right, .ui-button.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-button.ui-corner-all, .ui-button.ui-corner-bottom, .ui-button.ui-corner-left, .ui-button.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-button.ui-corner-all, .ui-button.ui-corner-bottom, .ui-button.ui-corner-right, .ui-button.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-top,
+.ui-button.ui-corner-left,
+.ui-button.ui-corner-tl {
+       -moz-border-radius-topleft: 4px;
+       -webkit-border-top-left-radius: 4px;
+       border-top-left-radius: 4px;
+}
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-top,
+.ui-button.ui-corner-right,
+.ui-button.ui-corner-tr {
+       -moz-border-radius-topright: 4px;
+       -webkit-border-top-right-radius: 4px;
+       border-top-right-radius: 4px;
+}
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-bottom,
+.ui-button.ui-corner-left,
+.ui-button.ui-corner-bl {
+       -moz-border-radius-bottomleft: 4px;
+       -webkit-border-bottom-left-radius: 4px;
+       border-bottom-left-radius: 4px;
+}
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-bottom,
+.ui-button.ui-corner-right,
+.ui-button.ui-corner-br {
+       -moz-border-radius-bottomright: 4px;
+       -webkit-border-bottom-right-radius: 4px;
+       border-bottom-right-radius: 4px;
+}
 
 body .ui-button:hover {
        border-color: #6e7273;
@@ -66,11 +162,11 @@ body .ui-button.disabled {
        color: #7f7f7f;
        border-color: #cccccc;
        /* @embed */
-       background: #f2f2f2 url(images/button-disabled.png) repeat-x scroll 50% 100% !important;        
+       background: #f2f2f2 url(images/button-disabled.png) repeat-x scroll 50% 100% !important;
 }
 /* Disables the annoying dashed border Firefox puts on active buttons */
-body button.ui-button::-moz-focus-inner { 
-       border: 0; 
+body button.ui-button::-moz-focus-inner {
+       border: 0;
 }
 /* Give large buttons some extra padding */
 body .ui-button-large {
index cc8553c..d961bf3 100644 (file)
@@ -3,7 +3,7 @@
        -moz-border-radius: 2px;
        -webkit-border-radius: 2px;
        border-radius: 2px;
-       padding: 0 3px;
+       padding: 1px 4px;
        text-align: center;
        font-size: 12px;
        line-height: 12px;
index 16e7196..9404e81 100644 (file)
  *
  * This program is distributed WITHOUT ANY WARRANTY.
  */
-( function ( $ ) {
+( function ( $, mw ) {
        /**
         * Allows you to put a "badge" on an item on the page. The badge container
         * will be appended to the selected element(s).
         * See mediawiki.org/wiki/ResourceLoader/Default_modules#jQuery.badge
         *
         * @param {number|string} text The value to display in the badge. If the value is falsey (0,
-        *   null, false, '', etc.), any existing badge will be removed.
+        *  null, false, '', etc.), any existing badge will be removed.
         * @param {boolean} inline True if the badge should be displayed inline, false
-        *   if the badge should overlay the parent element (default is inline)
+        *  if the badge should overlay the parent element (default is inline)
         * @param {boolean} displayZero True if the number zero should be displayed,
-        *   false if the number zero should result in the badge being hidden
-        *   (default is zero will result in the badge being hidden)
+        *  false if the number zero should result in the badge being hidden
+        *  (default is zero will result in the badge being hidden)
         */
        $.fn.badge = function ( text, inline, displayZero ) {
                var $badge = this.find( '.mw-badge' ),
                        badgeStyleClass = 'mw-badge-' + ( inline ? 'inline' : 'overlay' ),
-                       isImportant = true;
+                       isImportant = true, displayBadge = true;
 
                // If we're displaying zero, ensure style to be non-important
-               if ( text === 0 && displayZero ) {
+               if ( mw.language.convertNumber( text, true ) === 0 ) {
                        isImportant = false;
-                       text = '0';
+                       if ( !displayZero ) {
+                               displayBadge = false;
+                       }
+               // If text is falsey (besides 0), hide the badge
+               } else if ( !text ) {
+                       displayBadge = false;
                }
 
-               if ( text ) {
+               if ( displayBadge ) {
                        // If a badge already exists, reuse it
                        if ( $badge.length ) {
                                $badge
@@ -59,7 +64,7 @@
                                        .addClass( badgeStyleClass )
                                        .toggleClass( 'mw-badge-important', isImportant )
                                        .append(
-                                               $( '<span class="mw-badge-content"></span>' ).text ( text )
+                                               $( '<span class="mw-badge-content"></span>' ).text( text )
                                        )
                                        .appendTo( this );
                        }
@@ -68,4 +73,4 @@
                }
                return this;
        };
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
index ace4a55..630002d 100644 (file)
  * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
  */
 ( function ( $, mw ) {
+       var lpx = 'jquery.makeCollapsible> ';
+
+       /**
+        * @param {jQuery} $collapsible
+        * @param {string} action The action this function will take ('expand' or 'collapse').
+        * @param {jQuery|null} [optional] $defaultToggle
+        * @param {Object|undefined} options
+        */
+       function toggleElement( $collapsible, action, $defaultToggle, options ) {
+               var $collapsibleContent, $containers;
+               options = options || {};
+
+               // Validate parameters
+
+               // $collapsible must be an instance of jQuery
+               if ( !$collapsible.jquery ) {
+                       return;
+               }
+               if ( action !== 'expand' && action !== 'collapse' ) {
+                       // action must be string with 'expand' or 'collapse'
+                       return;
+               }
+               if ( $defaultToggle === undefined ) {
+                       $defaultToggle = null;
+               }
+               if ( $defaultToggle !== null && !$defaultToggle.jquery ) {
+                       // is optional (may be undefined), but if defined it must be an instance of jQuery.
+                       // If it's not, abort right away.
+                       // After this $defaultToggle is either null or a valid jQuery instance.
+                       return;
+               }
 
-$.fn.makeCollapsible = function () {
+               // Handle different kinds of elements
 
-       return this.each(function () {
+               if ( !options.plainMode && $collapsible.is( 'table' ) ) {
+                       // Tables
+                       $containers = $collapsible.find( '> tbody > tr' );
+                       if ( $defaultToggle ) {
+                               // Exclude table row containing togglelink
+                               $containers = $containers.not( $defaultToggle.closest( 'tr' ) );
+                       }
 
-               // Define reused variables and functions
-               var lpx = 'jquery.makeCollapsible> ',
-                       collapsible = this,
-                       // Ensure class "mw-collapsible" is present in case .makeCollapsible()
-                       // is called on element(s) that don't have it yet.
-                       $collapsible = $(collapsible).addClass( 'mw-collapsible' ),
-                       collapsetext = $collapsible.attr( 'data-collapsetext' ),
-                       expandtext = $collapsible.attr( 'data-expandtext' ),
-                       $toggle,
-                       $toggleLink,
-                       $firstItem,
-                       collapsibleId,
-                       $customTogglers,
-                       firstval,
-                       /**
-                        * @param {jQuery} $collapsible
-                        * @param {string} action The action this function will take ('expand' or 'collapse').
-                        * @param {jQuery|null} [optional] $defaultToggle
-                        * @param {Object|undefined} options
-                        */
-                       toggleElement = function ( $collapsible, action, $defaultToggle, options ) {
-                               var $collapsibleContent, $containers;
-                               options = options || {};
-
-                               // Validate parameters
-
-                               // $collapsible must be an instance of jQuery
-                               if ( !$collapsible.jquery ) {
-                                       return;
-                               }
-                               if ( action !== 'expand' && action !== 'collapse' ) {
-                                       // action must be string with 'expand' or 'collapse'
-                                       return;
-                               }
-                               if ( $defaultToggle === undefined ) {
-                                       $defaultToggle = null;
-                               }
-                               if ( $defaultToggle !== null && !$defaultToggle.jquery ) {
-                                       // is optional (may be undefined), but if defined it must be an instance of jQuery.
-                                       // If it's not, abort right away.
-                                       // After this $defaultToggle is either null or a valid jQuery instance.
-                                       return;
+                       if ( action === 'collapse' ) {
+                               // Hide all table rows of this table
+                               // Slide doesn't work with tables, but fade does as of jQuery 1.1.3
+                               // http://stackoverflow.com/questions/467336#920480
+                               if ( options.instantHide ) {
+                                       $containers.hide();
+                               } else {
+                                       $containers.stop( true, true ).fadeOut();
                                }
+                       } else {
+                               $containers.stop( true, true ).fadeIn();
+                       }
 
-                               if ( action === 'collapse' ) {
-
-                                       // Collapse the element
-                                       if ( $collapsible.is( 'table' ) ) {
-                                               // Hide all table rows of this table
-                                               // Slide doens't work with tables, but fade does as of jQuery 1.1.3
-                                               // http://stackoverflow.com/questions/467336#920480
-                                               $containers = $collapsible.find( '> tbody > tr' );
-                                               if ( $defaultToggle ) {
-                                                       // Exclude tablerow containing togglelink
-                                                       $containers = $containers.not( $defaultToggle.closest( 'tr' ) );
-                                               }
-
-                                               if ( options.instantHide ) {
-                                                       $containers.hide();
-                                               } else {
-                                                       $containers.stop( true, true ).fadeOut();
-                                               }
+               } else if ( !options.plainMode && ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) ) {
+                       // Lists
+                       $containers = $collapsible.find( '> li' );
+                       if ( $defaultToggle ) {
+                               // Exclude list-item containing togglelink
+                               $containers = $containers.not( $defaultToggle.parent() );
+                       }
 
-                                       } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
-                                               $containers = $collapsible.find( '> li' );
-                                               if ( $defaultToggle ) {
-                                                       // Exclude list-item containing togglelink
-                                                       $containers = $containers.not( $defaultToggle.parent() );
-                                               }
+                       if ( action === 'collapse' ) {
+                               if ( options.instantHide ) {
+                                       $containers.hide();
+                               } else {
+                                       $containers.stop( true, true ).slideUp();
+                               }
+                       } else {
+                               $containers.stop( true, true ).slideDown();
+                       }
 
-                                               if ( options.instantHide ) {
-                                                       $containers.hide();
-                                               } else {
-                                                       $containers.stop( true, true ).slideUp();
-                                               }
+               } else {
+                       // Everything else: <div>, <p> etc.
+                       $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
 
+                       // If a collapsible-content is defined, act on it
+                       if ( !options.plainMode && $collapsibleContent.length ) {
+                               if ( action === 'collapse' ) {
+                                       if ( options.instantHide ) {
+                                               $collapsibleContent.hide();
                                        } else {
-                                               // <div>, <p> etc.
-                                               $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
-
-                                               // If a collapsible-content is defined, collapse it
-                                               if ( $collapsibleContent.length ) {
-                                                       if ( options.instantHide ) {
-                                                               $collapsibleContent.hide();
-                                                       } else {
-                                                               $collapsibleContent.slideUp();
-                                                       }
-
-                                               // Otherwise assume this is a customcollapse with a remote toggle
-                                               // .. and there is no collapsible-content because the entire element should be toggled
-                                               } else {
-                                                       if ( options.instantHide ) {
-                                                               $collapsible.hide();
-                                                       } else {
-                                                               if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                                                       $collapsible.fadeOut();
-                                                               } else {
-                                                                       $collapsible.slideUp();
-                                                               }
-                                                       }
-                                               }
+                                               $collapsibleContent.slideUp();
                                        }
-
                                } else {
+                                       $collapsibleContent.slideDown();
+                               }
 
-                                       // Expand the element
-                                       if ( $collapsible.is( 'table' ) ) {
-                                               $containers = $collapsible.find( '>tbody>tr' );
-                                               if ( $defaultToggle ) {
-                                                       // Exclude tablerow containing togglelink
-                                                       $containers.not( $defaultToggle.parent().parent() ).stop(true, true).fadeIn();
-                                               } else {
-                                                       $containers.stop( true, true ).fadeIn();
-                                               }
-
-                                       } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
-                                               $containers = $collapsible.find( '> li' );
-                                               if ( $defaultToggle ) {
-                                                       // Exclude list-item containing togglelink
-                                                       $containers.not( $defaultToggle.parent() ).stop( true, true ).slideDown();
-                                               } else {
-                                                       $containers.stop( true, true ).slideDown();
-                                               }
-
+                       // Otherwise assume this is a customcollapse with a remote toggle
+                       // .. and there is no collapsible-content because the entire element should be toggled
+                       } else {
+                               if ( action === 'collapse' ) {
+                                       if ( options.instantHide ) {
+                                               $collapsible.hide();
                                        } else {
-                                               // <div>, <p> etc.
-                                               $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
-
-                                               // If a collapsible-content is defined, collapse it
-                                               if ( $collapsibleContent.length ) {
-                                                       $collapsibleContent.slideDown();
-
-                                               // Otherwise assume this is a customcollapse with a remote toggle
-                                               // .. and there is no collapsible-content because the entire element should be toggled
+                                               if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+                                                       $collapsible.fadeOut();
                                                } else {
-                                                       if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                                               $collapsible.fadeIn();
-                                                       } else {
-                                                               $collapsible.slideDown();
-                                                       }
+                                                       $collapsible.slideUp();
                                                }
                                        }
-                               }
-                       },
-                       /**
-                        * Toggles collapsible and togglelink class and updates text label.
-                        *
-                        * @param {jQuery} $that
-                        * @param {jQuery.Event} e
-                        * @param {Object|undefined} options
-                        */
-                       toggleLinkDefault = function ( $that, e, options ) {
-                               var $collapsible = $that.closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
-                               e.preventDefault();
-                               e.stopPropagation();
-
-                               // It's expanded right now
-                               if ( !$that.hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
-                                       // Change link to "Show"
-                                       $that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
-                                       if ( $that.find( '> a' ).length ) {
-                                               $that.find( '> a' ).text( expandtext );
-                                       } else {
-                                               $that.text( expandtext );
-                                       }
-                                       // Collapse element
-                                       toggleElement( $collapsible, 'collapse', $that, options );
-
-                               // It's collapsed right now
                                } else {
-                                       // Change link to "Hide"
-                                       $that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
-                                       if ( $that.find( '> a' ).length ) {
-                                               $that.find( '> a' ).text( collapsetext );
+                                       if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+                                               $collapsible.fadeIn();
                                        } else {
-                                               $that.text( collapsetext );
+                                               $collapsible.slideDown();
                                        }
-                                       // Expand element
-                                       toggleElement( $collapsible, 'expand', $that, options );
                                }
-                               return;
-                       },
-                       /**
-                        * Toggles collapsible and togglelink class.
-                        *
-                        * @param {jQuery} $that
-                        * @param {jQuery.Event} e
-                        * @param {Object|undefined} options
-                        */
-                       toggleLinkPremade = function ( $that, e, options ) {
-                               var $collapsible = $that.eq( 0 ).closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
-                               if ( $.nodeName( e.target, 'a' ) ) {
-                                       return true;
-                               }
-                               e.preventDefault();
-                               e.stopPropagation();
-
-                               // It's expanded right now
-                               if ( !$that.hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
-                                       // Change toggle to collapsed
-                                       $that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
-                                       // Collapse element
-                                       toggleElement( $collapsible, 'collapse', $that, options );
+                       }
+               }
+       }
+
+       /**
+        * Handles clicking on the collapsible element toggle and other
+        * situations where a collapsible element is toggled (e.g. the initial
+        * toggle for collapsed ones).
+        *
+        * @param {jQuery} $toggle the clickable toggle itself
+        * @param {jQuery} $collapsible the collapsible element
+        * @param {jQuery.Event|null} e either the event or null if unavailable
+        * @param {Object|undefined} options
+        */
+       function togglingHandler( $toggle, $collapsible, event, options ) {
+               var wasCollapsed, $textContainer, collapseText, expandText;
+
+               if ( event ) {
+                       // Don't fire if a link was clicked, if requested  (for premade togglers by default)
+                       if ( options.linksPassthru && $.nodeName( event.target, 'a' ) ) {
+                               return true;
+                       } else {
+                               event.preventDefault();
+                               event.stopPropagation();
+                       }
+               }
 
-                               // It's collapsed right now
-                               } else {
-                                       // Change toggle to expanded
-                                       $that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
-                                       // Expand element
-                                       toggleElement( $collapsible, 'expand', $that, options );
-                               }
-                               return;
-                       },
-                       /**
-                        * Toggles customcollapsible.
-                        *
-                        * @param {jQuery} $that
-                        * @param {jQuery.Event} e
-                        * @param {Object|undefined} options
-                        * @param {jQuery} $collapsible
-                        */
-                       toggleLinkCustom = function ( $that, e, options, $collapsible ) {
-                               // For the initial state call of customtogglers there is no event passed
-                               if ( e ) {
-                                       e.preventDefault();
-                                       e.stopPropagation();
-                               }
-                               // Get current state and toggle to the opposite
-                               var action = $collapsible.hasClass( 'mw-collapsed' ) ? 'expand' : 'collapse';
-                               $collapsible.toggleClass( 'mw-collapsed' );
-                               toggleElement( $collapsible, action, $that, options );
+               wasCollapsed = $collapsible.hasClass( 'mw-collapsed' );
 
-                       };
+               // Toggle the state of the collapsible element (that is, expand or collapse)
+               $collapsible.toggleClass( 'mw-collapsed', !wasCollapsed );
 
-               // Return if it has been enabled already.
-               if ( $collapsible.data( 'mw-made-collapsible' ) ) {
-                       return;
-               } else {
-                       $collapsible.data( 'mw-made-collapsible', true );
+               // Toggle the mw-collapsible-toggle classes, if requested (for default and premade togglers by default)
+               if ( options.toggleClasses ) {
+                       $toggle
+                               .toggleClass( 'mw-collapsible-toggle-collapsed', !wasCollapsed )
+                               .toggleClass( 'mw-collapsible-toggle-expanded', wasCollapsed );
                }
 
-               // Use custom text or default ?
-               if ( !collapsetext ) {
-                       collapsetext = mw.msg( 'collapsible-collapse' );
-               }
-               if ( !expandtext ) {
-                       expandtext = mw.msg( 'collapsible-expand' );
+               // Toggle the text ("Show"/"Hide"), if requested (for default togglers by default)
+               if ( options.toggleText ) {
+                       collapseText = options.toggleText.collapseText;
+                       expandText = options.toggleText.expandText;
+
+                       $textContainer = $toggle.find( '> a' );
+                       if ( !$textContainer.length ) {
+                               $textContainer = $toggle;
+                       }
+                       $textContainer.text( wasCollapsed ? collapseText : expandText );
                }
 
-               // Create toggle link with a space around the brackets (&nbsp;[text]&nbsp;)
-               $toggleLink =
-                       $( '<a href="#"></a>' )
-                               .text( collapsetext )
-                               .wrap( '<span class="mw-collapsible-toggle"></span>' )
-                                       .parent()
-                                       .prepend( '&nbsp;[' )
-                                       .append( ']&nbsp;' )
-                                       .on( 'click.mw-collapse', function ( e, options ) {
-                                               toggleLinkDefault( $(this), e, options );
-                                       } );
-
-               // Check if this element has a custom position for the toggle link
-               // (ie. outside the container or deeper inside the tree)
-               // Then: Locate the custom toggle link(s) and bind them
-               if ( ( $collapsible.attr( 'id' ) || '' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
-
-                       collapsibleId = $collapsible.attr( 'id' );
-                       $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
-                       mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
-
-                       // Double check that there is actually a customtoggle link
-                       if ( $customTogglers.length ) {
-                               $customTogglers.on( 'click.mw-collapse', function ( e, options ) {
-                                       toggleLinkCustom( $(this), e, options, $collapsible );
-                               } );
-                       } else {
-                               mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
+               // And finally toggle the element state itself
+               toggleElement( $collapsible, wasCollapsed ? 'expand' : 'collapse', $toggle, options );
+       }
+
+       /**
+        * Toggles collapsible and togglelink class and updates text label.
+        *
+        * @param {jQuery} $that
+        * @param {jQuery.Event} e
+        * @param {Object|undefined} options
+        */
+       function toggleLinkDefault( $that, e, options ) {
+               var $collapsible = $that.closest( '.mw-collapsible' );
+               options = $.extend( { toggleClasses: true }, options );
+               togglingHandler( $that, $collapsible, e, options );
+       }
+
+       /**
+        * Toggles collapsible and togglelink class.
+        *
+        * @param {jQuery} $that
+        * @param {jQuery.Event} e
+        * @param {Object|undefined} options
+        */
+       function toggleLinkPremade( $that, e, options ) {
+               var $collapsible = $that.eq( 0 ).closest( '.mw-collapsible' );
+               options = $.extend( { toggleClasses: true }, options );
+               togglingHandler( $that, $collapsible, e, options );
+       }
+
+       /**
+        * Toggles customcollapsible.
+        *
+        * @param {jQuery} $that
+        * @param {jQuery.Event} e
+        * @param {Object|undefined} options
+        * @param {jQuery} $collapsible
+        */
+       function toggleLinkCustom( $that, e, options, $collapsible ) {
+               options = $.extend( { linksPassthru: true }, options );
+               togglingHandler( $that, $collapsible, e, options );
+       }
+
+       /**
+        * Make any element collapsible.
+        *
+        * Supported options:
+        * - collapseText: text to be used for the toggler when clicking it would
+        *   collapse the element. Default: the 'data-collapsetext' attribute of
+        *   the collapsible element or the content of 'collapsible-collapse'
+        *   message.
+        * - expandText: text to be used for the toggler when clicking it would
+        *   expand the element. Default: the 'data-expandtext' attribute of
+        *   the collapsible element or the content of 'collapsible-expand'
+        *   message.
+        * - collapsed: boolean, whether to collapse immediately. By default
+        *   collapse only if the elements has the 'mw-collapsible' class.
+        * - $customTogglers: jQuerified list of elements to be used as togglers
+        *   for this collapsible element. By default, if the collapsible element
+        *   has an id attribute like 'mw-customcollapsible-XXX', elements with a
+        *   *class* of 'mw-customtoggle-XXX' are made togglers for it.
+        * - plainMode: boolean, whether to use a "plain mode" when making the
+        *   element collapsible - that is, hide entire tables and lists (instead
+        *   of hiding only all rows but first of tables, and hiding each list
+        *   item separately for lists) and don't wrap other elements in
+        *   div.mw-collapsible-content. May only be used with custom togglers.
+        */
+       $.fn.makeCollapsible = function ( options ) {
+               return this.each(function () {
+                       var $collapsible, collapsetext, expandtext, $toggle, $toggleLink, $firstItem, collapsibleId,
+                               $customTogglers, firstval;
+
+                       if ( options === undefined ) {
+                               options = {};
                        }
 
-                       // Initial state
-                       if ( $collapsible.hasClass( 'mw-collapsed' ) ) {
-                               // Remove here so that the toggler goes in the right direction,
-                               // It re-adds the class.
-                               $collapsible.removeClass( 'mw-collapsed' );
-                               toggleLinkCustom( $customTogglers, null, { instantHide: true }, $collapsible );
+                       // Ensure class "mw-collapsible" is present in case .makeCollapsible()
+                       // is called on element(s) that don't have it yet.
+                       $collapsible = $(this).addClass( 'mw-collapsible' );
+
+                       // Return if it has been enabled already.
+                       if ( $collapsible.data( 'mw-made-collapsible' ) ) {
+                               return;
+                       } else {
+                               $collapsible.data( 'mw-made-collapsible', true );
                        }
 
-               // If this is not a custom case, do the default:
-               // Wrap the contents add the toggle link
-               } else {
+                       // Use custom text or default?
+                       collapsetext = options.collapseText || $collapsible.attr( 'data-collapsetext' ) || mw.msg( 'collapsible-collapse' );
+                       expandtext = options.expandText || $collapsible.attr( 'data-expandtext' ) || mw.msg( 'collapsible-expand' );
+
+                       // Create toggle link with a space around the brackets (&nbsp;[text]&nbsp;)
+                       $toggleLink =
+                               $( '<a href="#"></a>' )
+                                       .text( collapsetext )
+                                       .wrap( '<span class="mw-collapsible-toggle"></span>' )
+                                               .parent()
+                                               .prepend( '&nbsp;[' )
+                                               .append( ']&nbsp;' )
+                                               .on( 'click.mw-collapse', function ( e, opts ) {
+                                                       opts = $.extend( { toggleText: { collapseText: collapsetext, expandText: expandtext } }, options, opts );
+                                                       toggleLinkDefault( $(this), e, opts );
+                                               } );
+
+                       // Check if this element has a custom position for the toggle link
+                       // (ie. outside the container or deeper inside the tree)
+                       if ( options.$customTogglers ) {
+                               $customTogglers = $( options.$customTogglers );
+                       } else {
+                               collapsibleId = $collapsible.attr( 'id' ) || '';
+                               if ( collapsibleId.indexOf( 'mw-customcollapsible-' ) === 0 ) {
+                                       mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
+                                       $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
+
+                                       // Double check that there is actually a customtoggle link
+                                       if ( !$customTogglers.length ) {
+                                               mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
+                                       }
+                               }
+                       }
 
-                       // Elements are treated differently
-                       if ( $collapsible.is( 'table' ) ) {
-                               // The toggle-link will be in one the the cells (td or th) of the first row
-                               $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
-                               $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+                       // Bind the custom togglers
+                       if ( $customTogglers && $customTogglers.length ) {
+                               $customTogglers.on( 'click.mw-collapse', function ( e, opts ) {
+                                       opts = $.extend( {}, options, opts );
+                                       toggleLinkCustom( $(this), e, opts, $collapsible );
+                               } );
 
-                               // If theres no toggle link, add it to the last cell
-                               if ( !$toggle.length ) {
-                                       $firstItem.eq(-1).prepend( $toggleLink );
-                               } else {
-                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
-                                               toggleLinkPremade( $toggle, e, options );
-                                       } );
+                               // Initial state
+                               if ( options.collapsed || $collapsible.hasClass( 'mw-collapsed' ) ) {
+                                       // Remove here so that the toggler goes in the right direction,
+                                       // It re-adds the class.
+                                       $collapsible.removeClass( 'mw-collapsed' );
+                                       toggleLinkCustom( $customTogglers, null, $.extend( { instantHide: true }, options ), $collapsible );
                                }
 
-                       } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
-                               // The toggle-link will be in the first list-item
-                               $firstItem = $collapsible.find( 'li:first' );
-                               $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
-
-                               // If theres no toggle link, add it
-                               if ( !$toggle.length ) {
-                                       // Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
-                                       // to be "1". Except if the value-attribute is already used.
-                                       // If no value was set WebKit returns "", Mozilla returns '-1', others return null or undefined.
-                                       firstval = $firstItem.attr( 'value' );
-                                       if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
-                                               $firstItem.attr( 'value', '1' );
+                       // If this is not a custom case, do the default:
+                       // Wrap the contents and add the toggle link
+                       } else {
+                               // Elements are treated differently
+                               if ( $collapsible.is( 'table' ) ) {
+                                       // The toggle-link will be in one the the cells (td or th) of the first row
+                                       $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
+                                       $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+
+                                       // If theres no toggle link, add it to the last cell
+                                       if ( !$toggle.length ) {
+                                               $firstItem.eq(-1).prepend( $toggleLink );
+                                       } else {
+                                               $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+                                                       opts = $.extend( {}, options, opts );
+                                                       toggleLinkPremade( $toggle, e, opts );
+                                               } );
                                        }
-                                       $collapsible.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
-                               } else {
-                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
-                                               toggleLinkPremade( $toggle, e, options );
-                                       } );
-                               }
 
-                       } else { // <div>, <p> etc.
+                               } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
+                                       // The toggle-link will be in the first list-item
+                                       $firstItem = $collapsible.find( 'li:first' );
+                                       $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+
+                                       // If theres no toggle link, add it
+                                       if ( !$toggle.length ) {
+                                               // Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
+                                               // to be "1". Except if the value-attribute is already used.
+                                               // If no value was set WebKit returns "", Mozilla returns '-1', others return null or undefined.
+                                               firstval = $firstItem.attr( 'value' );
+                                               if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
+                                                       $firstItem.attr( 'value', '1' );
+                                               }
+                                               $collapsible.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
+                                       } else {
+                                               $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+                                                       opts = $.extend( {}, options, opts );
+                                                       toggleLinkPremade( $toggle, e, opts );
+                                               } );
+                                       }
 
-                               // The toggle-link will be the first child of the element
-                               $toggle = $collapsible.find( '> .mw-collapsible-toggle' );
+                               } else { // <div>, <p> etc.
 
-                               // If a direct child .content-wrapper does not exists, create it
-                               if ( !$collapsible.find( '> .mw-collapsible-content' ).length ) {
-                                       $collapsible.wrapInner( '<div class="mw-collapsible-content"></div>' );
-                               }
+                                       // The toggle-link will be the first child of the element
+                                       $toggle = $collapsible.find( '> .mw-collapsible-toggle' );
 
-                               // If theres no toggle link, add it
-                               if ( !$toggle.length ) {
-                                       $collapsible.prepend( $toggleLink );
-                               } else {
-                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
-                                               toggleLinkPremade( $toggle, e, options );
-                                       } );
+                                       // If a direct child .content-wrapper does not exists, create it
+                                       if ( !$collapsible.find( '> .mw-collapsible-content' ).length ) {
+                                               $collapsible.wrapInner( '<div class="mw-collapsible-content"></div>' );
+                                       }
+
+                                       // If theres no toggle link, add it
+                                       if ( !$toggle.length ) {
+                                               $collapsible.prepend( $toggleLink );
+                                       } else {
+                                               $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+                                                       opts = $.extend( {}, options, opts );
+                                                       toggleLinkPremade( $toggle, e, opts );
+                                               } );
+                                       }
                                }
                        }
-               }
-
-               // Initial state (only for those that are not custom,
-               // because the initial state of those has been taken care of already).
-               if ( $collapsible.hasClass( 'mw-collapsed' ) && ( $collapsible.attr( 'id' ) || '').indexOf( 'mw-customcollapsible-' ) !== 0 ) {
-                       $collapsible.removeClass( 'mw-collapsed' );
-                       // The collapsible element could have multiple togglers
-                       // To toggle the initial state only click one of them (ie. the first one, eq(0) )
-                       // Else it would go like: hide,show,hide,show for each toggle link.
-                       // This is just like it would be in reality (only one toggle is clicked at a time).
-                       $toggleLink.eq( 0 ).trigger( 'click', [ { instantHide: true } ] );
-               }
-       } );
-};
 
+                       // Initial state (only for those that are not custom,
+                       // because the initial state of those has been taken care of already).
+                       if (
+                               ( options.collapsed || $collapsible.hasClass( 'mw-collapsed' ) ) &&
+                               ( !$customTogglers || !$customTogglers.length )
+                       ) {
+                               $collapsible.removeClass( 'mw-collapsed' );
+                               // The collapsible element could have multiple togglers
+                               // To toggle the initial state only click one of them (ie. the first one, eq(0) )
+                               // Else it would go like: hide,show,hide,show for each toggle link.
+                               // This is just like it would be in reality (only one toggle is clicked at a time).
+                               $toggleLink.eq( 0 ).trigger( 'click', [ { instantHide: true } ] );
+                       }
+               } );
+       };
 }( jQuery, mediaWiki ) );
index 8320304..e08c9aa 100644 (file)
@@ -98,7 +98,9 @@
                        // like charAt, toLowerCase and split are expected.
                        return String( data );
                } else {
-                       if ( node.tagName.toLowerCase() === 'img' ) {
+                       if ( !node ) {
+                               return $node.text();
+                       } else if ( node.tagName.toLowerCase() === 'img' ) {
                                return $node.attr( 'alt' ) || ''; // handle undefined alt
                        } else {
                                return $.map( $.makeArray( node.childNodes ), function( elem ) {
                }
        }
 
-       function getTextFromRowAndCellIndex( rows, rowIndex, cellIndex ) {
-               if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
-                       return $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
-               } else {
-                       return '';
-               }
-       }
-
        function detectParserForColumn( table, rows, cellIndex ) {
                var l = parsers.length,
                        nodeValue,
                        concurrent = 0,
                        needed = ( rows.length > 4 ) ? 5 : rows.length;
 
-               while( i < l ) {
-                       nodeValue = getTextFromRowAndCellIndex( rows, rowIndex, cellIndex );
+               while ( i < l ) {
+                       if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
+                               nodeValue = $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
+                       } else {
+                               nodeValue = '';
+                       }
+
                        if ( nodeValue !== '') {
                                if ( parsers[i].is( nodeValue, table ) ) {
                                        concurrent++;
 
        }
 
+       /**
+        * Replace all rowspanned cells in the body with clones in each row, so sorting
+        * need not worry about them.
+        *
+        * @param $table jQuery object for a <table>
+        */
        function explodeRowspans( $table ) {
-               // Split multi row cells into multiple cells with the same content
-               $table.find( '> tbody > tr > [rowspan]' ).each(function () {
-                       var rowSpan = this.rowSpan;
-                       this.rowSpan = 1;
-                       var cell = $( this );
-                       var next = cell.parent().nextAll();
+               var rowspanCells = $table.find( '> tbody > tr > [rowspan]' ).get();
+
+               // Short circuit
+               if ( !rowspanCells.length ) {
+                       return;
+               }
+
+               // First, we need to make a property like cellIndex but taking into
+               // account colspans. We also cache the rowIndex to avoid having to take
+               // cell.parentNode.rowIndex in the sorting function below.
+               $table.find( '> tbody > tr' ).each( function () {
+                       var col = 0;
+                       var l = this.cells.length;
+                       for ( var i = 0; i < l; i++ ) {
+                               this.cells[i].realCellIndex = col;
+                               this.cells[i].realRowIndex = this.rowIndex;
+                               col += this.cells[i].colSpan;
+                       }
+               } );
+
+               // Split multi row cells into multiple cells with the same content.
+               // Sort by column then row index to avoid problems with odd table structures.
+               // Re-sort whenever a rowspanned cell's realCellIndex is changed, because it
+               // might change the sort order.
+               function resortCells() {
+                       rowspanCells = rowspanCells.sort( function ( a, b ) {
+                               var ret = a.realCellIndex - b.realCellIndex;
+                               if ( !ret ) {
+                                       ret = a.realRowIndex - b.realRowIndex;
+                               }
+                               return ret;
+                       } );
+                       $.each( rowspanCells, function () {
+                               this.needResort = false;
+                       } );
+               }
+               resortCells();
+
+               var spanningRealCellIndex, rowSpan, colSpan;
+               function filterfunc() {
+                       return this.realCellIndex >= spanningRealCellIndex;
+               }
+
+               function fixTdCellIndex() {
+                       this.realCellIndex += colSpan;
+                       if ( this.rowSpan > 1 ) {
+                               this.needResort = true;
+                       }
+               }
+
+               while ( rowspanCells.length ) {
+                       if ( rowspanCells[0].needResort ) {
+                               resortCells();
+                       }
+
+                       var cell = rowspanCells.shift();
+                       rowSpan = cell.rowSpan;
+                       colSpan = cell.colSpan;
+                       spanningRealCellIndex = cell.realCellIndex;
+                       cell.rowSpan = 1;
+                       var $nextRows = $( cell ).parent().nextAll();
                        for ( var i = 0; i < rowSpan - 1; i++ ) {
-                               var td = next.eq( i ).children( 'td' );
-                               if ( !td.length ) {
-                                       next.eq( i ).append( cell.clone() );
-                               } else if ( this.cellIndex === 0 ) {
-                                       td.eq( this.cellIndex ).before( cell.clone() );
+                               var $tds = $( $nextRows[i].cells ).filter( filterfunc );
+                               var $clone = $( cell ).clone();
+                               $clone[0].realCellIndex = spanningRealCellIndex;
+                               if ( $tds.length ) {
+                                       $tds.each( fixTdCellIndex );
+                                       $tds.first().before( $clone );
                                } else {
-                                       td.eq( this.cellIndex - 1 ).after( cell.clone() );
+                                       $nextRows.eq( i ).append( $clone );
                                }
                        }
-               });
+               }
        }
 
        function buildCollationTable() {
index a550d97..a36fa48 100644 (file)
@@ -128,6 +128,13 @@ img.thumbborder {
 #userlogin, #userloginForm {
        border: solid 1px #cccccc;
        padding: 1.2em;
-       margin: .5em;
-       float: left;
+       margin: 0.5em;
+}
+
+#loginend {
+       margin: 0.5em;
+}
+
+#loginend table {
+       width: 100%;
 }
index ce621f4..32b8154 100644 (file)
@@ -487,7 +487,7 @@ class ParserTest {
                } elseif ( isset( $opts['comment'] ) ) {
                        $out = Linker::formatComment( $input, $title, $local );
                } elseif ( isset( $opts['preload'] ) ) {
-                       $out = $parser->getpreloadText( $input, $title, $options );
+                       $out = $parser->getPreloadText( $input, $title, $options );
                } else {
                        $output = $parser->parse( $input, $title, $options, true, true, 1337 );
                        $out = $output->getText();
index e9218de..e28074e 100644 (file)
@@ -164,6 +164,145 @@ baz
 </p>
 !! end
 
+!! test
+Paragraphs with newline spacing with comment lines in between
+!! input
+----
+a
+<!--foo-->
+b
+----
+a
+<!--foo--><!--More than 1 comment disables stripping of this line!-->
+b
+----
+a
+<!--foo-->
+
+b
+----
+a
+
+<!--foo-->
+b
+----
+a
+<!--foo-->
+
+
+b
+----
+a
+
+
+<!--foo-->
+b
+----
+!! result
+<hr />
+<p>a
+b
+</p>
+<hr />
+<p>a
+</p><p>b
+</p>
+<hr />
+<p>a
+</p><p>b
+</p>
+<hr />
+<p>a
+</p><p>b
+</p>
+<hr />
+<p>a
+</p><p><br />
+b
+</p>
+<hr />
+<p>a
+</p><p><br />
+b
+</p>
+<hr />
+
+!! end
+
+!! test
+Paragraphs with newline spacing with non-empty white-space lines in between
+!! input
+----
+a
+b
+----
+a
+b
+----
+!! result
+<hr />
+<p>a
+</p><p>b
+</p>
+<hr />
+<p>a
+</p><p><br /> 
+b
+</p>
+<hr />
+
+!! end
+
+!! test
+Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between
+!! input
+----
+a
+ <!--foo-->
+b
+----
+a
+ <!--foo--><!--More than 1 comment disables stripping of this line!-->
+b
+----
+a
+<!--foo-->
+ <!--bar-->
+b
+----
+a
+ <!--foo-->
+ <!--bar-->
+b
+----
+!! result
+<hr />
+<p>a
+b
+</p>
+<hr />
+<p>a
+</p><p>b
+</p>
+<hr />
+<p>a
+</p><p>b
+</p>
+<hr />
+<p>a
+</p><p><br /> 
+b
+</p>
+<hr />
+
+!! end
+
 !! test
 Parsing an URL
 !! input
@@ -837,7 +976,7 @@ x <div>foo</div> z
 !! end
 
 !! test
-Empty lines between block tags to test open p-tags are closed between the block tags
+Empty lines between lines with block tags
 !! input
 <div></div>
 
@@ -845,6 +984,12 @@ Empty lines between block tags to test open p-tags are closed between the block
 <div></div>a
 
 b
+<div>a</div>b
+
+<div>b</div>d
+
+
+<div>e</div>
 !! result
 <div></div>
 <p><br />
@@ -852,6 +997,12 @@ b
 <div></div>a
 <p>b
 </p>
+<div>a</div>b
+<div>b</div>d
+<p><br />
+</p>
+<div>e</div>
+
 !! end
 
 ###
@@ -3270,6 +3421,24 @@ Table with row followed by newlines and table heading
 
 !! end
 
+!! test
+Table with empty line following the start tag
+!! input
+{|
+
+|-
+| foo
+|}
+!! result
+<table>
+
+
+<tr>
+<td> foo
+</td></tr></table>
+
+!! end
+
 # FIXME: Preserve the attribute properly (with an empty string as value) in
 # the PHP parser. Parsoid implements the behavior below.
 !! test
@@ -3311,6 +3480,43 @@ Wikitext table with a lot of comments
 
 !! end
 
+!! test
+Wikitext table with double-line table cell
+!! input
+{|
+|a
+b
+|}
+!! result
+<table>
+<tr>
+<td>a
+<p>b
+</p>
+</td></tr></table>
+
+!! end
+
+# The expected HTML structure in this test is debatable. The PHP parser does
+# not parse this kind of table at all. The main focus for Parsoid is on
+# round-tripping, so this output is ok for now. TODO: revisit!
+!! test
+Wikitext table with html-syntax row (Parsoid)
+!! options
+parsoid
+!! input
+{|
+|-
+<td>foo</td>
+|}
+!! result
+<table>
+<tbody>
+<tr>
+<td></td>
+<td>foo</td></tr></tbody></table>
+!! end
+
 ###
 ### Internal links
 ###
@@ -4392,7 +4598,7 @@ List interrupted by empty line or heading
 <ul><li><ul><li> bar
 </li></ul>
 </li></ul>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A heading">edit</a>]</span> <span class="mw-headline" id="A_heading"> A heading </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A heading">edit</a>]</span> <span class="mw-headline" id="A_heading">A heading</span></h2>
 <ul><li> Another list item
 </li></ul>
 
@@ -4680,6 +4886,36 @@ Magic Word: {{SITENAME}}
 </p>
 !! end
 
+!! test
+Case-sensitive magic words, when cased differently, should just be template transclusions
+!! input
+{{CurrentMonth}}
+{{currentday}}
+{{cURreNTweEK}}
+{{currentHour}}
+!! result
+<p><a href="/index.php?title=Template:CurrentMonth&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentMonth (page does not exist)">Template:CurrentMonth</a>
+<a href="/index.php?title=Template:Currentday&amp;action=edit&amp;redlink=1" class="new" title="Template:Currentday (page does not exist)">Template:Currentday</a>
+<a href="/index.php?title=Template:CURreNTweEK&amp;action=edit&amp;redlink=1" class="new" title="Template:CURreNTweEK (page does not exist)">Template:CURreNTweEK</a>
+<a href="/index.php?title=Template:CurrentHour&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentHour (page does not exist)">Template:CurrentHour</a>
+</p>
+!! end
+
+!! test
+Case-insensitive magic words should still work with weird casing.
+!! input
+{{sErVeRNaMe}}
+{{LCFirst:AOEU}}
+{{ucFIRST:aoeu}}
+{{SERver}}
+!! result
+<p>example.org
+aOEU
+Aoeu
+<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
+</p>
+!! end
+
 !! test
 Namespace 1 {{ns:1}}
 !! input
@@ -7457,7 +7693,7 @@ More
 ===Smaller headline===
 Blah blah
 !! result
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline" id="Headline_1"> Headline 1 </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline" id="Headline_1">Headline 1</span></h2>
 <p>Some text
 </p>
 <h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline" id="Headline_2">Headline 2</span></h2>
@@ -7502,11 +7738,11 @@ Some text
 </li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline" id="Headline_1"> Headline 1 </span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Subheadline 1">edit</a>]</span> <span class="mw-headline" id="Subheadline_1"> Subheadline 1 </span></h3>
-<h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline" id="Skipping_a_level"> Skipping a level </span></h5>
-<h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline" id="Skipping_a_level_2"> Skipping a level </span></h6>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline" id="Headline_2"> Headline 2 </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline" id="Headline_1">Headline 1</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Subheadline 1">edit</a>]</span> <span class="mw-headline" id="Subheadline_1">Subheadline 1</span></h3>
+<h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline" id="Skipping_a_level">Skipping a level</span></h5>
+<h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline" id="Skipping_a_level_2">Skipping a level</span></h6>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline" id="Headline_2">Headline 2</span></h2>
 <p>Some text
 </p>
 <h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Another headline">edit</a>]</span> <span class="mw-headline" id="Another_headline">Another headline</span></h3>
@@ -7557,12 +7793,12 @@ Handling of sections up to level 6 and beyond
 </li>
 </ul>
 </td></tr></table>
-<h1><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Level 1 Heading">edit</a>]</span> <span class="mw-headline" id="Level_1_Heading"> Level 1 Heading</span></h1>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Level 2 Heading">edit</a>]</span> <span class="mw-headline" id="Level_2_Heading"> Level 2 Heading</span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Level 3 Heading">edit</a>]</span> <span class="mw-headline" id="Level_3_Heading"> Level 3 Heading</span></h3>
-<h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Level 4 Heading">edit</a>]</span> <span class="mw-headline" id="Level_4_Heading"> Level 4 Heading</span></h4>
-<h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Level 5 Heading">edit</a>]</span> <span class="mw-headline" id="Level_5_Heading"> Level 5 Heading</span></h5>
-<h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Level 6 Heading">edit</a>]</span> <span class="mw-headline" id="Level_6_Heading"> Level 6 Heading</span></h6>
+<h1><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Level 1 Heading">edit</a>]</span> <span class="mw-headline" id="Level_1_Heading">Level 1 Heading</span></h1>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Level 2 Heading">edit</a>]</span> <span class="mw-headline" id="Level_2_Heading">Level 2 Heading</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Level 3 Heading">edit</a>]</span> <span class="mw-headline" id="Level_3_Heading">Level 3 Heading</span></h3>
+<h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Level 4 Heading">edit</a>]</span> <span class="mw-headline" id="Level_4_Heading">Level 4 Heading</span></h4>
+<h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Level 5 Heading">edit</a>]</span> <span class="mw-headline" id="Level_5_Heading">Level 5 Heading</span></h5>
+<h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Level 6 Heading">edit</a>]</span> <span class="mw-headline" id="Level_6_Heading">Level 6 Heading</span></h6>
 <h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=7" title="Edit section: = Level 7 Heading=">edit</a>]</span> <span class="mw-headline" id=".3D_Level_7_Heading.3D">= Level 7 Heading=</span></h6>
 <h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=8" title="Edit section: == Level 8 Heading==">edit</a>]</span> <span class="mw-headline" id=".3D.3D_Level_8_Heading.3D.3D">== Level 8 Heading==</span></h6>
 <h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=9" title="Edit section: === Level 9 Heading===">edit</a>]</span> <span class="mw-headline" id=".3D.3D.3D_Level_9_Heading.3D.3D.3D">=== Level 9 Heading===</span></h6>
@@ -7599,12 +7835,12 @@ TOC regression (bug 9764)
 </li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline" id="title_1"> title 1 </span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1"> title 1.1 </span></h3>
-<h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1.1"> title 1.1.1 </span></h4>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline" id="title_1.2"> title 1.2 </span></h3>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline" id="title_2"> title 2 </span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline" id="title_2.1"> title 2.1 </span></h3>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline" id="title_1">title 1</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1">title 1.1</span></h3>
+<h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1.1">title 1.1.1</span></h4>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline" id="title_1.2">title 1.2</span></h3>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline" id="title_2">title 2</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline" id="title_2.1">title 2.1</span></h3>
 
 !! end
 
@@ -7635,12 +7871,12 @@ wgMaxTocLevel=3
 </li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline" id="title_1"> title 1 </span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1"> title 1.1 </span></h3>
-<h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1.1"> title 1.1.1 </span></h4>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline" id="title_1.2"> title 1.2 </span></h3>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline" id="title_2"> title 2 </span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline" id="title_2.1"> title 2.1 </span></h3>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline" id="title_1">title 1</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1">title 1.1</span></h3>
+<h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1.1">title 1.1.1</span></h4>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline" id="title_1.2">title 1.2</span></h3>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline" id="title_2">title 2</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline" id="title_2.1">title 2.1</span></h3>
 
 !! end
 
@@ -7680,8 +7916,8 @@ Resolving duplicate section names
 == Foo bar ==
 == Foo bar ==
 !! result
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline" id="Foo_bar"> Foo bar </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline" id="Foo_bar_2"> Foo bar </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline" id="Foo_bar">Foo bar</span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline" id="Foo_bar_2">Foo bar</span></h2>
 
 !! end
 
@@ -7691,8 +7927,8 @@ Resolving duplicate section names with differing case (bug 10721)
 == Foo bar ==
 == Foo Bar ==
 !! result
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline" id="Foo_bar"> Foo bar </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline" id="Foo_Bar_2"> Foo Bar </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline" id="Foo_bar">Foo bar</span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline" id="Foo_Bar_2">Foo Bar</span></h2>
 
 !! end
 
@@ -7757,9 +7993,9 @@ __TOC__
 <li class="toclevel-1 tocsection-3"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline" id="title_1"> title 1 </span></h2>
-<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1"> title 1.1 </span></h3>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline" id="title_2"> title 2 </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline" id="title_1">title 1</span></h2>
+<h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline" id="title_1.1">title 1.1</span></h3>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline" id="title_2">title 2</span></h2>
 
 !! end
 
@@ -7820,19 +8056,19 @@ section 5
 <li class="toclevel-1 tocsection-5"><a href="#text_.22_text"><span class="tocnumber">5</span> <span class="toctext">text " text</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: text > text">edit</a>]</span> <span class="mw-headline" id="text_.3E_text"> text &gt; text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: text > text">edit</a>]</span> <span class="mw-headline" id="text_.3E_text">text &gt; text</span></h2>
 <p>section 1
 </p>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: text &lt; text">edit</a>]</span> <span class="mw-headline" id="text_.3C_text"> text &lt; text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: text &lt; text">edit</a>]</span> <span class="mw-headline" id="text_.3C_text">text &lt; text</span></h2>
 <p>section 2
 </p>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: text &amp; text">edit</a>]</span> <span class="mw-headline" id="text_.26_text"> text &amp; text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: text &amp; text">edit</a>]</span> <span class="mw-headline" id="text_.26_text">text &amp; text</span></h2>
 <p>section 3
 </p>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: text ' text">edit</a>]</span> <span class="mw-headline" id="text_.27_text"> text ' text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: text ' text">edit</a>]</span> <span class="mw-headline" id="text_.27_text">text ' text</span></h2>
 <p>section 4
 </p>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: text &quot; text">edit</a>]</span> <span class="mw-headline" id="text_.22_text"> text " text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: text &quot; text">edit</a>]</span> <span class="mw-headline" id="text_.22_text">text " text</span></h2>
 <p>section 5
 </p>
 !! end
@@ -7861,6 +8097,45 @@ Headers with excess '=' characters
 
 !! end
 
+!! test
+HTML headers vs TOC (bug 23393)
+(__NOEDITSECTION__ for clearer output, doesn't matter here)
+!! input
+<h1>Header 1</h1>
+== Header 1.1 ==
+== Header 1.2 ==
+
+<h1>Header 2
+</h1>
+== Header 2.1 ==
+== Header 2.2 ==
+__NOEDITSECTION__
+!! result
+<table id="toc" class="toc"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1"><a href="#Header_1"><span class="tocnumber">1</span> <span class="toctext">Header 1</span></a>
+<ul>
+<li class="toclevel-2 tocsection-1"><a href="#Header_1.1"><span class="tocnumber">1.1</span> <span class="toctext">Header 1.1</span></a></li>
+<li class="toclevel-2 tocsection-2"><a href="#Header_1.2"><span class="tocnumber">1.2</span> <span class="toctext">Header 1.2</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1"><a href="#Header_2"><span class="tocnumber">2</span> <span class="toctext">Header 2</span></a>
+<ul>
+<li class="toclevel-2 tocsection-3"><a href="#Header_2.1"><span class="tocnumber">2.1</span> <span class="toctext">Header 2.1</span></a></li>
+<li class="toclevel-2 tocsection-4"><a href="#Header_2.2"><span class="tocnumber">2.2</span> <span class="toctext">Header 2.2</span></a></li>
+</ul>
+</li>
+</ul>
+</td></tr></table>
+<h1> <span class="mw-headline" id="Header_1">Header 1</span></h1>
+<h2> <span class="mw-headline" id="Header_1.1">Header 1.1</span></h2>
+<h2> <span class="mw-headline" id="Header_1.2">Header 1.2</span></h2>
+<h1> <span class="mw-headline" id="Header_2">Header 2</span></h1>
+<h2> <span class="mw-headline" id="Header_2.1">Header 2.1</span></h2>
+<h2> <span class="mw-headline" id="Header_2.2">Header 2.2</span></h2>
+
+!! end
+
 !! test
 BUG 1219 URL next to image (broken)
 !! input
@@ -9144,7 +9419,7 @@ Fuzz testing: Parser14
 == onmouseover= ==
 http://__TOC__
 !! result
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a>]</span> <span class="mw-headline" id="onmouseover.3D"> onmouseover= </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a>]</span> <span class="mw-headline" id="onmouseover.3D">onmouseover=</span></h2>
 http://<table id="toc" class="toc"><tr><td><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
@@ -11083,7 +11358,7 @@ anchorencode encodes like the TOC generator: (bug 18431)
 {{anchorencode: _ +:.3A%3A&&amp;]] }}
 __NOEDITSECTION__
 !! result
-<h3> <span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D"> _ +:.3A%3A&amp;&amp;]] </span></h3>
+<h3> <span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&amp;&amp;]]</span></h3>
 <p>.2B:.3A.253A.26.26.5D.5D
 </p>
 !! end
@@ -11313,7 +11588,7 @@ language=sr variant=sr-ec
 !! input
 == -{Naslov}- ==
 !! result
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уредите одељак „Naslov“">уреди</a>]</span> <span class="mw-headline" id="-.7BNaslov.7D-"> Naslov </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уредите одељак „Naslov“">уреди</a>]</span> <span class="mw-headline" id="-.7BNaslov.7D-">Naslov</span></h2>
 
 !! end
 
@@ -12474,7 +12749,7 @@ __TOC__
 <li class="toclevel-1 tocsection-1"><a href="#Lost_episodes"><span class="tocnumber">1</span> <span class="toctext"><i>Lost</i> episodes</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Lost episodes">edit</a>]</span> <span class="mw-headline" id="Lost_episodes"> <i>Lost</i> episodes </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Lost episodes">edit</a>]</span> <span class="mw-headline" id="Lost_episodes"><i>Lost</i> episodes</span></h2>
 
 !! end
 
@@ -12491,7 +12766,7 @@ __TOC__
 <li class="toclevel-1 tocsection-1"><a href="#should_be_bold_then_normal_text"><span class="tocnumber">1</span> <span class="toctext"><b>should be bold</b> then normal text</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: should be bold then normal text">edit</a>]</span> <span class="mw-headline" id="should_be_bold_then_normal_text"> <b>should be bold</b> then normal text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: should be bold then normal text">edit</a>]</span> <span class="mw-headline" id="should_be_bold_then_normal_text"><b>should be bold</b> then normal text</span></h2>
 
 !! end
 
@@ -12508,7 +12783,7 @@ __TOC__
 <li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Image">edit</a>]</span> <span class="mw-headline" id="Image"> Image <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Image">edit</a>]</span> <span class="mw-headline" id="Image">Image <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span></h2>
 
 !! end
 
@@ -12525,7 +12800,7 @@ __TOC__
 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a>]</span> <span class="mw-headline" id="Quote"> <blockquote>Quote</blockquote> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a>]</span> <span class="mw-headline" id="Quote"><blockquote>Quote</blockquote></span></h2>
 
 !! end
 
@@ -12544,7 +12819,7 @@ QED
 <li class="toclevel-1 tocsection-1"><a href="#Proof:_2_.3C_3"><span class="tocnumber">1</span> <span class="toctext">Proof: 2 &lt; 3</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Proof: 2 &lt; 3">edit</a>]</span> <span class="mw-headline" id="Proof:_2_.3C_3"> Proof: 2 &lt; 3 </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Proof: 2 &lt; 3">edit</a>]</span> <span class="mw-headline" id="Proof:_2_.3C_3">Proof: 2 &lt; 3</span></h2>
 <p><small>Hanc marginis exiguitas non caperet.</small>
 QED
 </p>
@@ -12564,8 +12839,8 @@ __TOC__
 <li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline" id="Foo_Bar"> <i>Foo</i> <b>Bar</b> </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline" id="Foo_Bar_2"> <i>Foo</i> <blockquote>Bar</blockquote> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline" id="Foo_Bar"><i>Foo</i> <b>Bar</b></span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline" id="Foo_Bar_2"><i>Foo</i> <blockquote>Bar</blockquote></span></h2>
 
 !! end
 
@@ -12583,8 +12858,8 @@ __TOC__
 <li class="toclevel-1 tocsection-2"><a href="#b.22.3EEvilbye"><span class="tocnumber">2</span> <span class="toctext"><sup> b"&gt;Evilbye</sup></span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a>]</span> <span class="mw-headline" id="Hello"> <sup class="in-h2">Hello</sup> </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;>Evilbye">edit</a>]</span> <span class="mw-headline" id="b.22.3EEvilbye"> <sup> b"&gt;Evilbye</sup> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a>]</span> <span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;>Evilbye">edit</a>]</span> <span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span></h2>
 
 !! end
 
@@ -12611,11 +12886,11 @@ __TOC__
 <li class="toclevel-1 tocsection-5"><a href="#Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">5</span> <span class="toctext"><span dir="ltr">Attributes after dir on these span tags must be deleted from the TOC</span></span></a></li>
 </ul>
 </td></tr></table>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: C++">edit</a>]</span> <span class="mw-headline" id="C.2B.2B"> <span dir="ltr">C++</span> </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: זבנג!">edit</a>]</span> <span class="mw-headline" id=".D7.96.D7.91.D7.A0.D7.92.21"> <span dir="rtl">זבנג!</span> </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: The attributes on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"> <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: All attributes on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"> <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> </span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Attributes after dir on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"> <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: C++">edit</a>]</span> <span class="mw-headline" id="C.2B.2B"><span dir="ltr">C++</span></span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: זבנג!">edit</a>]</span> <span class="mw-headline" id=".D7.96.D7.91.D7.A0.D7.92.21"><span dir="rtl">זבנג!</span></span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: The attributes on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span></span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: All attributes on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span></span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Attributes after dir on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span></span></h2>
 
 !! end
 
@@ -12632,7 +12907,7 @@ title=[[Main Page]]
 !! input
 {{int:Bug32057}}
 !! result
-<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Headline text">edit</a>]</span> <span class="mw-headline" id="Headline_text"> Headline text </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Headline text">edit</a>]</span> <span class="mw-headline" id="Headline_text">Headline text</span></h2>
 
 !! end
 
index 51fbff1..7d95b07 100644 (file)
@@ -64,7 +64,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                'oracle'
        );
 
-       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+       function __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
                $this->backupGlobals = false;
@@ -123,6 +123,10 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
+       function usesTemporaryTables() {
+               return self::$useTemporaryTables;
+       }
+
        /**
         * obtains a new temporary file name
         *
index e0e5535..07215c1 100644 (file)
@@ -26,11 +26,7 @@ class ExtraParserTest extends MediaWikiTestCase {
                MagicWord::clearCache();
        }
 
-       /**
-        * Bug 8689 - Long numeric lines kill the parser
-        *
-        * @group Database
-        */
+       // Bug 8689 - Long numeric lines kill the parser
        function testBug8689() {
                global $wgUser;
                $longLine = '1.' . str_repeat( '1234567890', 100000 ) . "\n";
@@ -41,20 +37,13 @@ class ExtraParserTest extends MediaWikiTestCase {
                        $this->parser->parse( $longLine, $t, $options )->getText() );
        }
 
-       /**
-        * Test the parser entry points
-        *
-        * @group Database
-        */
+       /* Test the parser entry points */
        function testParse() {
                $title = Title::newFromText( __FUNCTION__ );
                $parserOutput = $this->parser->parse( "Test\n{{Foo}}\n{{Bar}}", $title, $this->options );
                $this->assertEquals( "<p>Test\nContent of <i>Template:Foo</i>\nContent of <i>Template:Bar</i>\n</p>", $parserOutput->getText() );
        }
 
-       /**
-        * @group Database
-        */
        function testPreSaveTransform() {
                global $wgUser;
                $title = Title::newFromText( __FUNCTION__ );
@@ -63,9 +52,6 @@ class ExtraParserTest extends MediaWikiTestCase {
                $this->assertEquals( "Test\nContent of ''Template:Foo''\n{{Bar}}", $outputText );
        }
 
-       /**
-        * @group Database
-        */
        function testPreprocess() {
                $title = Title::newFromText( __FUNCTION__ );
                $outputText = $this->parser->preprocess( "Test\n{{Foo}}\n{{Bar}}", $title, $this->options );
@@ -87,8 +73,7 @@ class ExtraParserTest extends MediaWikiTestCase {
         * cleanSig() should do nothing if disabled
         */
        function testCleanSigDisabled() {
-               global $wgCleanSignatures;
-               $wgCleanSignatures = false;
+               $this->setMwGlobals( 'wgCleanSignatures', false );
 
                $title = Title::newFromText( __FUNCTION__ );
                $outputText = $this->parser->cleanSig( "{{Foo}} ~~~~" );
index 24fc47c..2e6417f 100644 (file)
@@ -570,7 +570,7 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $index, "wfMakeUrlIndexes(\"$url\")" );
        }
 
-       function provideMakeUrlIndexes() {
+       public static function provideMakeUrlIndexes() {
                return array(
                        array(
                                // just a regular :)
@@ -627,7 +627,7 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual, $description );
        }
 
-       function provideWfMatchesDomainList() {
+       public static function provideWfMatchesDomainList() {
                $a = array();
                $protocols = array( 'HTTP' => 'http:', 'HTTPS' => 'https:', 'protocol-relative' => '' );
                foreach ( $protocols as $pDesc => $p ) {
@@ -658,7 +658,7 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual, $description );
        }
 
-       function provideWfShellMaintenanceCmdList() {
+       public static function provideWfShellMaintenanceCmdList() {
                global $wgPhpCli;
                return array(
                        array( 'eval.php', array( '--help', '--test' ), array(),
index 4879a38..c585726 100644 (file)
@@ -11,7 +11,7 @@ class GlobalWithDBTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, wfIsBadImage( $name, $title, $blacklist ), $desc );
        }
 
-       function provideWfIsBadImageList() {
+       public static function provideWfIsBadImageList() {
                $blacklist = '* [[File:Bad.jpg]] except [[Nasty page]]';
                return array(
                        array( 'Bad.jpg', false, $blacklist, true,
index 8df038d..6229be3 100644 (file)
@@ -28,7 +28,7 @@ class WfBCP47Test extends MediaWikiTestCase {
        /**
         * Array format is ($code, $expected)
         */
-       function provideLanguageCodes() {
+       public static function provideLanguageCodes() {
                return array(
                        // Extracted from BCP47 (list not exhaustive)
                        # 2.1.1
index 407be8d..3c4fa20 100644 (file)
@@ -11,7 +11,7 @@ class WfBaseNameTest extends MediaWikiTestCase {
                        "wfBaseName('$fullpath') => '$basename'" );
        }
 
-       function providePaths() {
+       public static function providePaths() {
                return array(
                        array( '', '' ),
                        array( '/', '' ),
index c1225e3..8c67ced 100644 (file)
@@ -6,11 +6,10 @@ class WfExpandUrlTest extends MediaWikiTestCase {
        /** @dataProvider provideExpandableUrls */
        public function testWfExpandUrl( $fullUrl, $shortUrl, $defaultProto, $server, $canServer, $httpsMode, $message ) {
                // Fake $wgServer and $wgCanonicalServer
-               global $wgServer, $wgCanonicalServer;
-               $oldServer = $wgServer;
-               $oldCanServer = $wgCanonicalServer;
-               $wgServer = $server;
-               $wgCanonicalServer = $canServer;
+               $this->setMwGlobals( array(
+                       'wgServer' => $server,
+                       'wgCanonicalServer' => $canServer,
+               ) );
 
                // Fake $_SERVER['HTTPS'] if needed
                if ( $httpsMode ) {
@@ -20,10 +19,6 @@ class WfExpandUrlTest extends MediaWikiTestCase {
                }
 
                $this->assertEquals( $fullUrl, wfExpandUrl( $shortUrl, $defaultProto ), $message );
-
-               // Restore $wgServer and $wgCanonicalServer
-               $wgServer = $oldServer;
-               $wgCanonicalServer = $oldCanServer;
        }
 
        /**
index 9d66d6b..e4e33d1 100644 (file)
@@ -12,7 +12,7 @@ class WfShorthandToIntegerTest extends MediaWikiTestCase {
                );
        }
 
-       function provideABunchOfShorthands() {
+       public static function provideABunchOfShorthands() {
                return array(
                        array( '', -1, 'Empty string' ),
                        array( '     ', -1, 'String of spaces' ),
index cf1830f..ddfffe8 100644 (file)
@@ -10,7 +10,7 @@ class WfTimestampTest extends MediaWikiTestCase {
                $this->assertEquals( $output, wfTimestamp( $format, $input ), $desc );
        }
 
-       function provideNormalTimestamps() {
+       public static function provideNormalTimestamps() {
                $t = gmmktime( 12, 34, 56, 1, 15, 2001 );
                return array(
                        // TS_UNIX
@@ -60,7 +60,7 @@ class WfTimestampTest extends MediaWikiTestCase {
                $this->assertEquals( $output, wfTimestamp( $format, $input ), $desc );
        }
 
-       function provideOldTimestamps() {
+       public static function provideOldTimestamps() {
                return array(
                        array( '19011213204554', TS_RFC2822, 'Fri, 13 Dec 1901 20:45:54 GMT', 'Earliest time according to php documentation' ),
                        array( '20380119031407', TS_RFC2822, 'Tue, 19 Jan 2038 03:14:07 GMT', 'Latest 32 bit time' ),
@@ -99,7 +99,7 @@ class WfTimestampTest extends MediaWikiTestCase {
                $this->assertEquals( $output, wfTimestamp( TS_MW, $input ), $desc );
        }
 
-       function provideHttpDates() {
+       public static function provideHttpDates() {
                return array(
                        array( 'Sun, 06 Nov 1994 08:49:37 GMT', '19941106084937', 'RFC 822 date' ),
                        array( 'Sunday, 06-Nov-94 08:49:37 GMT', '19941106084937', 'RFC 850 date' ),
index 590664e..9e3d3a4 100644 (file)
@@ -43,8 +43,6 @@ class HtmlTest extends MediaWikiTestCase {
        }
 
        public function testElementBasics() {
-               global $wgWellFormedXml;
-
                $this->assertEquals(
                        '<img>',
                        Html::element( 'img', null, '' ),
@@ -63,7 +61,7 @@ class HtmlTest extends MediaWikiTestCase {
                        'Close tag for empty element (array, string)'
                );
 
-               $wgWellFormedXml = true;
+               $this->setMwGlobals( 'wgWellFormedXml', true );
 
                $this->assertEquals(
                        '<img />',
@@ -90,8 +88,6 @@ class HtmlTest extends MediaWikiTestCase {
        }
 
        public function testExpandAttributesForBooleans() {
-               global $wgHtml5, $wgWellFormedXml;
-
                $this->assertEquals(
                        '',
                        Html::expandAttributes( array( 'selected' => false ) ),
@@ -114,7 +110,7 @@ class HtmlTest extends MediaWikiTestCase {
                        'Boolean attributes have no value when value is true (passed as numerical array)'
                );
 
-               $wgWellFormedXml = true;
+               $this->setMwGlobals( 'wgWellFormedXml', true );
 
                $this->assertEquals(
                        ' selected=""',
@@ -122,7 +118,7 @@ class HtmlTest extends MediaWikiTestCase {
                        'Boolean attributes have empty string value when value is true (wgWellFormedXml)'
                );
 
-               $wgHtml5 = false;
+               $this->setMwGlobals( 'wgHtml5', false );
 
                $this->assertEquals(
                        ' selected="selected"',
@@ -136,8 +132,6 @@ class HtmlTest extends MediaWikiTestCase {
         * Please note it output a string prefixed with a space!
         */
        public function testExpandAttributesVariousExpansions() {
-               global $wgWellFormedXml;
-
                ### NOT EMPTY ####
                $this->assertEquals(
                        ' empty_string=""',
@@ -160,7 +154,7 @@ class HtmlTest extends MediaWikiTestCase {
                        'Number 0 value needs no quotes'
                );
 
-               $wgWellFormedXml = true;
+               $this->setMwGlobals( 'wgWellFormedXml', true );
 
                $this->assertEquals(
                        ' empty_string=""',
@@ -418,7 +412,7 @@ class HtmlTest extends MediaWikiTestCase {
         * List of input element types values introduced by HTML5
         * Full list at http://www.w3.org/TR/html-markup/input.html
         */
-       function provideHtml5InputTypes() {
+       public static function provideHtml5InputTypes() {
                $types = array(
                        'datetime',
                        'datetime-local',
index e353c46..ec4d98e 100644 (file)
@@ -17,7 +17,7 @@ class LinkerTest extends MediaWikiLangTestCase {
                );
        }
 
-       function provideCasesForUserLink() {
+       public static function provideCasesForUserLink() {
                # Format:
                # - expected
                # - userid
index a79b3a2..c83f7da 100644 (file)
@@ -7,7 +7,7 @@
  */
 class LinksUpdateTest extends MediaWikiTestCase {
 
-       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+       function __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
                $this->tablesUsed = array_merge( $this->tablesUsed,
index 45f8daf..6b71b7e 100644 (file)
@@ -346,33 +346,33 @@ class MWNamespaceTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        array( NS_MAIN ),
-                       MWNamespace::getcontentNamespaces(),
+                       MWNamespace::getContentNamespaces(),
                        '$wgContentNamespaces is an array with only NS_MAIN by default'
                );
 
 
                # test !is_array( $wgcontentNamespaces )
                $wgContentNamespaces = '';
-               $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+               $this->assertEquals( NS_MAIN, MWNamespace::getContentNamespaces() );
 
                $wgContentNamespaces = false;
-               $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+               $this->assertEquals( NS_MAIN, MWNamespace::getContentNamespaces() );
 
                $wgContentNamespaces = null;
-               $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+               $this->assertEquals( NS_MAIN, MWNamespace::getContentNamespaces() );
 
                $wgContentNamespaces = 5;
-               $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+               $this->assertEquals( NS_MAIN, MWNamespace::getContentNamespaces() );
 
                # test $wgContentNamespaces === array()
                $wgContentNamespaces = array();
-               $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+               $this->assertEquals( NS_MAIN, MWNamespace::getContentNamespaces() );
 
                # test !in_array( NS_MAIN, $wgContentNamespaces )
                $wgContentNamespaces = array( NS_USER, NS_CATEGORY );
                $this->assertEquals(
                        array( NS_MAIN, NS_USER, NS_CATEGORY ),
-                       MWNamespace::getcontentNamespaces(),
+                       MWNamespace::getContentNamespaces(),
                        'NS_MAIN is forced in $wgContentNamespaces even if unwanted'
                );
 
@@ -380,13 +380,13 @@ class MWNamespaceTest extends MediaWikiTestCase {
                $wgContentNamespaces = array( NS_MAIN );
                $this->assertEquals(
                        array( NS_MAIN ),
-                       MWNamespace::getcontentNamespaces()
+                       MWNamespace::getContentNamespaces()
                );
 
                $wgContentNamespaces = array( NS_MAIN, NS_USER, NS_CATEGORY );
                $this->assertEquals(
                        array( NS_MAIN, NS_USER, NS_CATEGORY ),
-                       MWNamespace::getcontentNamespaces()
+                       MWNamespace::getContentNamespaces()
                );
        }
 
index c378bb8..0f74899 100644 (file)
@@ -56,12 +56,18 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertEquals( 'abcdefghijka2', $msg->params( $params )->plain(), 'Params > 9 are replaced correctly' );
        }
 
-       function testInContentLanguage() {
-               global $wgLang, $wgForceUIMsgAsContentMsg;
-               $wgLang = Language::factory( 'fr' );
+       function testInContentLanguageDisabled() {
+               $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) );
 
                $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->inContentLanguage()->plain(), 'ForceUIMsg disabled' );
-               $wgForceUIMsgAsContentMsg['testInContentLanguage'] = 'mainpage';
+       }
+
+       function testInContentLanguageEnabled() {
+               $this->setMwGlobals( array(
+                       'wgLang' => Language::factory( 'fr' ),
+                       'wgForceUIMsgAsContentMsg' => array( 'mainpage' ),
+               ) );
+
                $this->assertEquals( 'Accueil', wfMessage( 'mainpage' )->inContentLanguage()->plain(), 'ForceUIMsg enabled' );
        }
 
index 48cf6dc..f587171 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+/**
+ * @group Database
+ */
 class RequestContextTest extends MediaWikiTestCase {
 
        /**
@@ -25,4 +28,42 @@ class RequestContextTest extends MediaWikiTestCase {
 
        }
 
+       public function testImportScopedSession() {
+               $context = RequestContext::getMain();
+
+               $oInfo = $context->exportSession();
+               $this->assertEquals( '127.0.0.1', $oInfo['ip'], "Correct initial IP address." );
+               $this->assertEquals( 0, $oInfo['userId'], "Correct initial user ID." );
+
+               $user = User::newFromName( 'UnitTestContextUser' );
+               $user->addToDatabase();
+
+               $sinfo = array(
+                       'sessionId' => 'd612ee607c87e749ef14da4983a702cd',
+                       'userId' => $user->getId(),
+                       'ip' => '192.0.2.0',
+                       'headers' => array( 'USER-AGENT' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0' )
+               );
+               $sc = RequestContext::importScopedSession( $sinfo ); // load new context
+
+               $info = $context->exportSession();
+               $this->assertEquals( $sinfo['ip'], $info['ip'], "Correct IP address." );
+               $this->assertEquals( $sinfo['headers'], $info['headers'], "Correct headers." );
+               $this->assertEquals( $sinfo['sessionId'], $info['sessionId'], "Correct session ID." );
+               $this->assertEquals( $sinfo['userId'], $info['userId'], "Correct user ID." );
+               $this->assertEquals( $sinfo['ip'], $context->getRequest()->getIP(), "Correct context IP address." );
+               $this->assertEquals( $sinfo['headers'], $context->getRequest()->getAllHeaders(), "Correct context headers." );
+               $this->assertEquals( $sinfo['sessionId'], session_id(), "Correct context session ID." );
+               $this->assertEquals( true, $context->getUser()->isLoggedIn(), "Correct context user." );
+               $this->assertEquals( $sinfo['userId'], $context->getUser()->getId(), "Correct context user ID." );
+               $this->assertEquals( 'UnitTestContextUser', $context->getUser()->getName(), "Correct context user name." );
+
+               unset ( $sc ); // restore previous context
+
+               $info = $context->exportSession();
+               $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct initial IP address." );
+               $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct initial headers." );
+               $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct initial session ID." );
+               $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct initial user ID." );
+       }
 }
index e8d8db0..3b8e5cf 100644 (file)
@@ -17,7 +17,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        var $the_page;
 
-       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+       function __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
                $this->tablesUsed = array_merge( $this->tablesUsed,
index 3948e34..39673c0 100644 (file)
@@ -6,14 +6,9 @@
  * ^--- important, causes temporary tables to be used instead of the real database
  */
 class RevisionTest_ContentHandlerUseDB extends RevisionStorageTest {
-       var $saveContentHandlerNoDB = null;
 
        function setUp() {
-               global $wgContentHandlerUseDB;
-
-               $this->saveContentHandlerNoDB = $wgContentHandlerUseDB;
-
-               $wgContentHandlerUseDB = false;
+               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
 
                $dbw = wfGetDB( DB_MASTER );
 
@@ -32,14 +27,6 @@ class RevisionTest_ContentHandlerUseDB extends RevisionStorageTest {
                parent::setUp();
        }
 
-       function tearDown() {
-               global $wgContentHandlerUseDB;
-
-               parent::tearDown();
-
-               $wgContentHandlerUseDB = $this->saveContentHandlerNoDB;
-       }
-
        /**
         * @covers Revision::selectFields
         */
index db0245b..9380928 100644 (file)
@@ -134,9 +134,7 @@ class RevisionTest extends MediaWikiTestCase {
 
        function testCompressRevisionTextUtf8Gzip() {
                $this->checkPHPExtension( 'zlib' );
-
-               global $wgCompressRevisions;
-               $wgCompressRevisions = true;
+               $this->setMwGlobals( 'wgCompressRevisions', true );
 
                $row = new stdClass;
                $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
index c0ed4a5..f5aacab 100644 (file)
@@ -90,7 +90,7 @@ class SanitizerTest extends MediaWikiTestCase {
        /**
         * Provide HTML5 tags
         */
-       function provideHtml5Tags() {
+       public static function provideHtml5Tags() {
                $ESCAPED = true; # We want tag to be escaped
                $VERBATIM = false; # We want to keep the tag
                return array(
@@ -125,7 +125,7 @@ class SanitizerTest extends MediaWikiTestCase {
                );
        }
 
-       function provideTagAttributesToDecode() {
+       public static function provideTagAttributesToDecode() {
                return array(
                        array( array( 'foo' => 'bar' ), 'foo=bar', 'Unquoted attribute' ),
                        array( array( 'foo' => 'bar' ), '    foo   =   bar    ', 'Spaced attribute' ),
@@ -229,7 +229,7 @@ class SanitizerTest extends MediaWikiTestCase {
        /**
         * Test for support or lack of support for specific attributes in the attribute whitelist.
         */
-       function provideAttributeSupport() {
+       public static function provideAttributeSupport() {
                /** array( <attributes>, <expected>, <message> ) */
                return array(
                        array( 'div', ' role="presentation"', ' role="presentation"', 'Support for WAI-ARIA\'s role="presentation".' ),
index 3422c90..4b49f63 100644 (file)
@@ -138,8 +138,8 @@ testBrowser                 = "firefox"
                $seleniumSettings = array();
                $seleniumBrowsers = array();
                $seleniumTestSuites = array();
-               global $wgSeleniumConfigFile;
-               $wgSeleniumConfigFile = '';
+               $this->setMwGlobals( 'wgSeleniumConfigFile', '' );
+
                SeleniumConfig::getSeleniumSettings( $seleniumSettings,
                        $seleniumBrowsers,
                        $seleniumTestSuites );
@@ -152,9 +152,9 @@ testBrowser                 = "firefox"
                $seleniumSettings = array();
                $seleniumBrowsers = array();
                $seleniumTestSuites = array();
-               global $wgSeleniumConfigFile;
                $this->writeToTempFile( $this->testConfig0 );
-               $wgSeleniumConfigFile = $this->tempFileName;
+               $this->setMwGlobals( 'wgSeleniumConfigFile', $this->tempFileName );
+
                SeleniumConfig::getSeleniumSettings( $seleniumSettings,
                        $seleniumBrowsers,
                        $seleniumTestSuites );
index db3d265..a54a57e 100644 (file)
@@ -57,7 +57,7 @@ class StringUtilsTest extends MediaWikiTestCase {
         * Markus Kuhn:
         * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
         */
-       function provideStringsForIsUtf8Check() {
+       public static function provideStringsForIsUtf8Check() {
                // Expected return values for StringUtils::isUtf8()
                $PASS = true;
                $FAIL = false;
index a58702b..3a2c62a 100644 (file)
@@ -4,22 +4,27 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->setMwGlobals( array(
-                       'wgLocalTZoffset' => null,
-                       'wgContLang' => Language::factory( 'en' ),
-                       'wgLanguageCode' => 'en',
-               ) );
-
                $this->iniSet( 'precision', 15 );
        }
 
-       # Test offset usage for a given language::userAdjust
-       function testUserAdjust() {
-               global $wgLocalTZoffset, $wgContLang;
+       /**
+        * Test offset usage for a given language::userAdjust
+        * @dataProvider dataUserAdjust
+        */
+       public function testUserAdjust( $date, $localTZoffset, $expected ) {
+               global $wgContLang;
+
+               $this->setMwGlobals( 'wgLocalTZoffset', $localTZoffset );
 
-               #  Collection of parameters for Language_t_Offset.
-               # Format: date to be formatted, localTZoffset value, expected date
-               $userAdjust_tests = array(
+               $this->assertEquals(
+                       strval( $expected ),
+                       strval( $wgContLang->userAdjust( $date, '' ) ),
+                       "User adjust {$date} by {$localTZoffset} minutes should give {$expected}"
+               );
+       }
+
+       public static function dataUserAdjust() {
+               return array(
                        array( 20061231235959, 0, 20061231235959 ),
                        array( 20061231235959, 5, 20070101000459 ),
                        array( 20061231235959, 15, 20070101001459 ),
@@ -31,15 +36,5 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
                        array( 20061231235959, -30, 20061231232959 ),
                        array( 20061231235959, -60, 20061231225959 ),
                );
-
-               foreach ( $userAdjust_tests as $data ) {
-                       $wgLocalTZoffset = $data[1];
-
-                       $this->assertEquals(
-                               strval( $data[2] ),
-                               strval( $wgContLang->userAdjust( $data[0], '' ) ),
-                               "User adjust {$data[0]} by {$data[1]} minutes should give {$data[2]}"
-                       );
-               }
        }
 }
index 89812c9..476c194 100644 (file)
@@ -10,7 +10,7 @@
  */
 class TitleMethodsTest extends MediaWikiTestCase {
 
-       public function setup() {
+       public function setUp() {
                global $wgContLang;
 
                parent::setUp();
@@ -34,7 +34,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $wgContLang->resetNamespaces(); # reset namespace cache
        }
 
-       public function teardown() {
+       public function tearDown() {
                global $wgContLang;
 
                parent::tearDown();
index 3dc5e82..cff8a2f 100644 (file)
@@ -96,7 +96,7 @@ class TitleTest extends MediaWikiTestCase {
         * @param string $action
         * @param array|string|true $expected Required error
         *
-        * @covers Title::checkReadPermission
+        * @covers Title::checkReadPermissions
         * @dataProvider dataWgWhitelistReadRegexp
         */
        function testWgWhitelistReadRegexp( $whitelistRegexp, $source, $action, $expected ) {
@@ -230,7 +230,7 @@ class TitleTest extends MediaWikiTestCase {
                );
        }
 
-       function provideCasesForGetpageviewlanguage() {
+       public static function provideCasesForGetpageviewlanguage() {
                # Format:
                # - expected
                # - Title name
@@ -280,7 +280,7 @@ class TitleTest extends MediaWikiTestCase {
                );
        }
 
-       function provideBaseTitleCases() {
+       public static function provideBaseTitleCases() {
                return array(
                        # Title, expected base, optional message
                        array( 'User:John_Doe/subOne/subTwo', 'John Doe/subOne' ),
@@ -319,7 +319,7 @@ class TitleTest extends MediaWikiTestCase {
                );
        }
 
-       function provideSubpageTitleCases() {
+       public static function provideSubpageTitleCases() {
                return array(
                        # Title, expected base, optional message
                        array( 'User:John_Doe/subOne/subTwo', 'subTwo' ),
index 46f8025..d382f6f 100644 (file)
@@ -102,10 +102,12 @@ class WebRequestTest extends MediaWikiTestCase {
         * @dataProvider provideGetIP
         */
        function testGetIP( $expected, $input, $squid, $private, $description ) {
-               global $wgSquidServersNoPurge, $wgUsePrivateIPs;
                $_SERVER = $input;
-               $wgSquidServersNoPurge = $squid;
-               $wgUsePrivateIPs = $private;
+               $this->setMwGlobals( array(
+                       'wgSquidServersNoPurge' => $squid,
+                       'wgUsePrivateIPs' => $private,
+               ) );
+
                $request = new WebRequest();
                $result = $request->getIP();
                $this->assertEquals( $expected, $result, $description );
index 2501be3..4bb6daa 100644 (file)
@@ -10,7 +10,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
 
        var $pages_to_delete;
 
-       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+       function __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
                $this->tablesUsed = array_merge(
index 1d937e9..dca9910 100644 (file)
@@ -6,16 +6,10 @@
  * ^--- important, causes temporary tables to be used instead of the real database
  */
 class WikiPageTest_ContentHandlerUseDB extends WikiPageTest {
-       var $saveContentHandlerNoDB = null;
 
        function setUp() {
-               global $wgContentHandlerUseDB;
-
                parent::setUp();
-
-               $this->saveContentHandlerNoDB = $wgContentHandlerUseDB;
-
-               $wgContentHandlerUseDB = false;
+               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
 
                $dbw = wfGetDB( DB_MASTER );
 
@@ -32,14 +26,6 @@ class WikiPageTest_ContentHandlerUseDB extends WikiPageTest {
                }
        }
 
-       function tearDown() {
-               global $wgContentHandlerUseDB;
-
-               $wgContentHandlerUseDB = $this->saveContentHandlerNoDB;
-
-               parent::tearDown();
-       }
-
        public function testGetContentModel() {
                $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT );
 
index 8f6b935..8842766 100644 (file)
@@ -109,7 +109,7 @@ class ApiBlockTest extends ApiTestCase {
        /**
         * Just provide the 'block' and 'unblock' action to test both API calls
         */
-       function provideBlockUnblockAction() {
+       public static function provideBlockUnblockAction() {
                return array(
                        array( 'block' ),
                        array( 'unblock' ),
index 1efbaea..7d8e01f 100644 (file)
  */
 class ApiEditPageTest extends ApiTestCase {
 
-       public function setup() {
+       public function setUp() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
-               parent::setup();
+               parent::setUp();
 
                $wgExtraNamespaces[12312] = 'Dummy';
                $wgExtraNamespaces[12313] = 'Dummy_talk';
@@ -28,7 +28,7 @@ class ApiEditPageTest extends ApiTestCase {
                $this->doLogin();
        }
 
-       public function teardown() {
+       public function tearDown() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
                unset( $wgExtraNamespaces[12312] );
@@ -40,7 +40,7 @@ class ApiEditPageTest extends ApiTestCase {
                MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
                $wgContLang->resetNamespaces(); # reset namespace cache
 
-               parent::teardown();
+               parent::tearDown();
        }
 
        function testEdit() {
@@ -124,7 +124,7 @@ class ApiEditPageTest extends ApiTestCase {
                $this->assertEquals( $data, $page->getContent()->serialize() );
        }
 
-       static function provideEditAppend() {
+       public static function provideEditAppend() {
                return array(
                        array( #0: append
                                'foo', 'append', 'bar', "foobar"
index 4cc8bd2..eda06d4 100644 (file)
@@ -63,7 +63,7 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                $this->assertEquals( $expectedContent, $result, "Message fallback failed." );
        }
 
-       function provideMessagesForFallback() {
+       public static function provideMessagesForFallback() {
                return array(
                        array( 'FallbackLanguageTest-Full', 'ab', 'ab' ),
                        array( 'FallbackLanguageTest-Partial', 'ab', 'ru' ),
@@ -83,7 +83,7 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                $this->assertEquals( $expectedContent, $result, "Full key message fallback failed." );
        }
 
-       function provideMessagesForFullKeys() {
+       public static function provideMessagesForFullKeys() {
                return array(
                        array( 'MessageCacheTest-FullKeyTest/ru', 'ru', 'ru' ),
                        array( 'MessageCacheTest-FullKeyTest/ru', 'ab', 'ru' ),
index 19ceadd..ac8dcef 100644 (file)
@@ -10,9 +10,9 @@
  */
 class ContentHandlerTest extends MediaWikiTestCase {
 
-       public function setup() {
+       public function setUp() {
                global $wgContLang;
-               parent::setup();
+               parent::setUp();
 
                $this->setMwGlobals( array(
                        'wgExtraNamespaces' => array(
@@ -145,62 +145,72 @@ class ContentHandlerTest extends MediaWikiTestCase {
                $this->assertEquals( $expected->getCode(), $lang->getCode() );
        }
 
-       public function testGetContentText_Null() {
-               global $wgContentHandlerTextFallback;
+       public static function dataGetContentText_Null() {
+               return array(
+                       array( 'fail' ),
+                       array( 'serialize' ),
+                       array( 'ignore' ),
+               );
+       }
 
-               $content = null;
+       /**
+        * @dataProvider dataGetContentText_Null
+        */
+       public function testGetContentText_Null( $contentHandlerTextFallback ) {
+               $this->setMwGlobals( 'wgContentHandlerTextFallback', $contentHandlerTextFallback );
 
-               $wgContentHandlerTextFallback = 'fail';
-               $text = ContentHandler::getContentText( $content );
-               $this->assertEquals( '', $text );
+               $content = null;
 
-               $wgContentHandlerTextFallback = 'serialize';
                $text = ContentHandler::getContentText( $content );
                $this->assertEquals( '', $text );
+       }
 
-               $wgContentHandlerTextFallback = 'ignore';
-               $text = ContentHandler::getContentText( $content );
-               $this->assertEquals( '', $text );
+       public static function dataGetContentText_TextContent() {
+               return array(
+                       array( 'fail' ),
+                       array( 'serialize' ),
+                       array( 'ignore' ),
+               );
        }
 
-       public function testGetContentText_TextContent() {
-               global $wgContentHandlerTextFallback;
+       /**
+        * @dataProvider dataGetContentText_TextContent
+        */
+       public function testGetContentText_TextContent( $contentHandlerTextFallback ) {
+               $this->setMwGlobals( 'wgContentHandlerTextFallback', $contentHandlerTextFallback );
 
                $content = new WikitextContent( "hello world" );
 
-               $wgContentHandlerTextFallback = 'fail';
-               $text = ContentHandler::getContentText( $content );
-               $this->assertEquals( $content->getNativeData(), $text );
-
-               $wgContentHandlerTextFallback = 'serialize';
-               $text = ContentHandler::getContentText( $content );
-               $this->assertEquals( $content->serialize(), $text );
-
-               $wgContentHandlerTextFallback = 'ignore';
                $text = ContentHandler::getContentText( $content );
                $this->assertEquals( $content->getNativeData(), $text );
        }
 
-       public function testGetContentText_NonTextContent() {
-               global $wgContentHandlerTextFallback;
+       /**
+        * ContentHandler::getContentText should have thrown an exception for non-text Content object
+        * @expectedException MWException
+        */
+       public function testGetContentText_NonTextContent_fail() {
+               $this->setMwGlobals( 'wgContentHandlerTextFallback', 'fail' );
 
                $content = new DummyContentForTesting( "hello world" );
 
-               $wgContentHandlerTextFallback = 'fail';
+               ContentHandler::getContentText( $content );
+       }
 
-               try {
-                       $text = ContentHandler::getContentText( $content );
+       public function testGetContentText_NonTextContent_serialize() {
+               $this->setMwGlobals( 'wgContentHandlerTextFallback', 'serialize' );
 
-                       $this->fail( "ContentHandler::getContentText should have thrown an exception for non-text Content object" );
-               } catch ( MWException $ex ) {
-                       // as expected
-               }
+               $content = new DummyContentForTesting( "hello world" );
 
-               $wgContentHandlerTextFallback = 'serialize';
                $text = ContentHandler::getContentText( $content );
                $this->assertEquals( $content->serialize(), $text );
+       }
+
+       public function testGetContentText_NonTextContent_ignore() {
+               $this->setMwGlobals( 'wgContentHandlerTextFallback', 'ignore' );
+
+               $content = new DummyContentForTesting( "hello world" );
 
-               $wgContentHandlerTextFallback = 'ignore';
                $text = ContentHandler::getContentText( $content );
                $this->assertNull( $text );
        }
index 382f71a..4fc2d51 100644 (file)
@@ -211,15 +211,11 @@ class TextContentTest extends MediaWikiLangTestCase {
         * @group Database
         */
        public function testIsCountable( $text, $hasLinks, $mode, $expected ) {
-               global $wgArticleCountMethod;
-
-               $old = $wgArticleCountMethod;
-               $wgArticleCountMethod = $mode;
+               $this->setMwGlobals( 'wgArticleCountMethod', $mode );
 
                $content = $this->newContent( $text );
 
                $v = $content->isCountable( $hasLinks, $this->context->getTitle() );
-               $wgArticleCountMethod = $old;
 
                $this->assertEquals( $expected, $v, 'isCountable() returned unexpected value ' . var_export( $v, true )
                        . ' instead of ' . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
index 7b84d47..097e57a 100644 (file)
@@ -311,7 +311,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                        $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ ), "Database creationg" );
                $this->assertTrue( $db->insert( 'a', array( 'a_1' => 10 ), __METHOD__ ),
                        "Insertion worked" );
-               $this->assertEquals( "integer", gettype( $db->insertId() ), "Actual typecheck" );
+               $this->assertInternalType( 'integer', $db->insertId(), "Actual typecheck" );
                $this->assertTrue( $db->close(), "closing database" );
        }
 
index 65c80d1..c9f5f5c 100644 (file)
@@ -209,4 +209,10 @@ class DatabaseTest extends MediaWikiTestCase {
                                . ( $this->db->getType() == 'postgres' ? '()' : '' )
                );
        }
+
+       function testUnknownTableCorruptsResults() {
+               $res = $this->db->select( 'page', '*', array( 'page_id' => 1 ) );
+               $this->assertFalse( $this->db->tableExists( 'foobarbaz' ) );
+               $this->assertInternalType( 'int', $res->numRows() );
+       }
 }
index a08910a..cacaaa3 100644 (file)
@@ -88,7 +88,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "FileBackend::isStoragePath on path '$path'" );
        }
 
-       function provider_testIsStoragePath() {
+       public static function provider_testIsStoragePath() {
                return array(
                        array( 'mwstore://', true ),
                        array( 'mwstore://backend', true ),
@@ -112,7 +112,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "FileBackend::splitStoragePath on path '$path'" );
        }
 
-       function provider_testSplitStoragePath() {
+       public static function provider_testSplitStoragePath() {
                return array(
                        array( 'mwstore://backend/container', array( 'backend', 'container', '' ) ),
                        array( 'mwstore://backend/container/', array( 'backend', 'container', '' ) ),
@@ -136,7 +136,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "FileBackend::normalizeStoragePath on path '$path'" );
        }
 
-       function provider_normalizeStoragePath() {
+       public static function provider_normalizeStoragePath() {
                return array(
                        array( 'mwstore://backend/container', 'mwstore://backend/container' ),
                        array( 'mwstore://backend/container/', 'mwstore://backend/container' ),
@@ -162,7 +162,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "FileBackend::parentStoragePath on path '$path'" );
        }
 
-       function provider_testParentStoragePath() {
+       public static function provider_testParentStoragePath() {
                return array(
                        array( 'mwstore://backend/container/path/to/obj', 'mwstore://backend/container/path/to' ),
                        array( 'mwstore://backend/container/path/to', 'mwstore://backend/container/path' ),
@@ -387,6 +387,14 @@ class FileBackendTest extends MediaWikiTestCase {
                        $dest, // dest
                );
 
+               $op2 = $op;
+               $op2['ignoreMissingSource'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       self::baseStorePath() . '/unittest-cont-bad/e/file.txt', // source
+                       $dest, // dest
+               );
+
                return $cases;
        }
 
@@ -499,6 +507,14 @@ class FileBackendTest extends MediaWikiTestCase {
                        $dest, // dest
                );
 
+               $op2 = $op;
+               $op2['ignoreMissingSource'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       self::baseStorePath() . '/unittest-cont-bad/e/file.txt', // source
+                       $dest, // dest
+               );
+
                return $cases;
        }
 
@@ -582,6 +598,14 @@ class FileBackendTest extends MediaWikiTestCase {
                        true // succeeds
                );
 
+               $op['ignoreMissingSource'] = true;
+               $op['src'] = self::baseStorePath() . '/unittest-cont-bad/e/file.txt';
+               $cases[] = array(
+                       $op, // operation
+                       false, // without source
+                       true // succeeds
+               );
+
                return $cases;
        }
 
@@ -903,7 +927,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
        }
 
-       function provider_testConcatenate() {
+       public static function provider_testConcatenate() {
                $cases = array();
 
                $rand = mt_rand( 0, 2000000000 ) . time();
@@ -1017,7 +1041,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
        }
 
-       function provider_testGetFileStat() {
+       public static function provider_testGetFileStat() {
                $cases = array();
 
                $base = self::baseStorePath();
@@ -1072,7 +1096,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
        }
 
-       function provider_testGetFileContents() {
+       public static function provider_testGetFileContents() {
                $cases = array();
 
                $base = self::baseStorePath();
@@ -1140,7 +1164,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $tmpFile->bind( $obj );
        }
 
-       function provider_testGetLocalCopy() {
+       public static function provider_testGetLocalCopy() {
                $cases = array();
 
                $base = self::baseStorePath();
@@ -1206,7 +1230,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
        }
 
-       function provider_testGetLocalReference() {
+       public static function provider_testGetLocalReference() {
                $cases = array();
 
                $base = self::baseStorePath();
@@ -1281,7 +1305,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
        }
 
-       function provider_testGetFileHttpUrl() {
+       public static function provider_testGetFileHttpUrl() {
                $cases = array();
 
                $base = self::baseStorePath();
@@ -1305,7 +1329,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
        }
 
-       function provider_testPrepareAndClean() {
+       public static function provider_testPrepareAndClean() {
                $base = self::baseStorePath();
                return array(
                        array( "$base/unittest-cont1/e/a/z/some_file1.txt", true ),
@@ -2024,53 +2048,79 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestLockCalls() {
                $backendName = $this->backendClass();
 
-               for ( $i=0; $i<50; $i++ ) {
-                       $paths = array(
-                               "test1.txt",
-                               "test2.txt",
-                               "test3.txt",
-                               "subdir1",
-                               "subdir1", // duplicate
-                               "subdir1/test1.txt",
-                               "subdir1/test2.txt",
-                               "subdir2",
-                               "subdir2", // duplicate
-                               "subdir2/test3.txt",
-                               "subdir2/test4.txt",
-                               "subdir2/subdir",
-                               "subdir2/subdir/test1.txt",
-                               "subdir2/subdir/test2.txt",
-                               "subdir2/subdir/test3.txt",
-                               "subdir2/subdir/test4.txt",
-                               "subdir2/subdir/test5.txt",
-                               "subdir2/subdir/sub",
-                               "subdir2/subdir/sub/test0.txt",
-                               "subdir2/subdir/sub/120-px-file.txt",
-                       );
+               $paths = array(
+                       "test1.txt",
+                       "test2.txt",
+                       "test3.txt",
+                       "subdir1",
+                       "subdir1", // duplicate
+                       "subdir1/test1.txt",
+                       "subdir1/test2.txt",
+                       "subdir2",
+                       "subdir2", // duplicate
+                       "subdir2/test3.txt",
+                       "subdir2/test4.txt",
+                       "subdir2/subdir",
+                       "subdir2/subdir/test1.txt",
+                       "subdir2/subdir/test2.txt",
+                       "subdir2/subdir/test3.txt",
+                       "subdir2/subdir/test4.txt",
+                       "subdir2/subdir/test5.txt",
+                       "subdir2/subdir/sub",
+                       "subdir2/subdir/sub/test0.txt",
+                       "subdir2/subdir/sub/120-px-file.txt",
+               );
 
+               for ( $i=0; $i<25; $i++ ) {
                        $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName) ($i)." );
                        $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
 
                        $status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName) ($i)." );
                        $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
 
                        $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName) ($i)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName). ($i)" );
                        $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+                       ## Flip the acquire/release ordering around ##
+
+                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName) ($i)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName) ($i)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
 
                        $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName). ($i)" );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
+                       $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+                               "Locking of files succeeded ($backendName) ($i)." );
                        $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
+                               "Locking of files succeeded with OK status ($backendName) ($i)." );
                }
 
                $status = Status::newGood();
index 74b921a..2642541 100644 (file)
@@ -20,7 +20,7 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
        /**
         * Provider for testFormat()
         */
-       function provideDocFormattingTests() {
+       public static function provideDocFormattingTests() {
                # Format: (expected string, unformattedText string, optional message)
                return array(
                        # Escape some wikitext
index 453cec3..7d4b2bb 100644 (file)
@@ -8,19 +8,19 @@
 class JobQueueTest extends MediaWikiTestCase {
        protected $key;
        protected $queueRand, $queueRandTTL, $queueFifo, $queueFifoTTL;
-       protected $old = array();
 
-       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+       function __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
                $this->tablesUsed[] = 'job';
        }
 
        protected function setUp() {
-               global $wgMemc, $wgJobTypeConf;
+               global $wgJobTypeConf;
                parent::setUp();
-               $this->old['wgMemc'] = $wgMemc;
-               $wgMemc = new HashBagOStuff();
+
+               $this->setMwGlobals( 'wgMemc', new HashBagOStuff() );
+
                if ( $this->getCliArg( 'use-jobqueue=' ) ) {
                        $name = $this->getCliArg( 'use-jobqueue=' );
                        if ( !isset( $wgJobTypeConf[$name] ) ) {
@@ -32,44 +32,50 @@ class JobQueueTest extends MediaWikiTestCase {
                }
                $baseConfig['type'] = 'null';
                $baseConfig['wiki'] = wfWikiID();
-               $this->queueRand = JobQueue::factory(
-                       array( 'order' => 'random', 'claimTTL' => 0 ) + $baseConfig );
-               $this->queueRandTTL = JobQueue::factory(
-                       array( 'order' => 'random', 'claimTTL' => 10 ) + $baseConfig );
-               $this->queueFifo = JobQueue::factory(
-                       array( 'order' => 'fifo', 'claimTTL' => 0 ) + $baseConfig );
-               $this->queueFifoTTL = JobQueue::factory(
-                       array( 'order' => 'fifo', 'claimTTL' => 10 ) + $baseConfig );
-               if ( $baseConfig['class'] !== 'JobQueueDB' ) { // DB namespace with prefix or temp tables
-                       foreach ( array( 'queueRand', 'queueRandTTL', 'queueFifo', 'queueFifoTTL' ) as $q ) {
-                               $this->$q->setTestingPrefix( 'unittests-' . wfRandomString( 32 ) );
-                       }
+               $variants = array(
+                       'queueRand' => array( 'order' => 'random', 'claimTTL' => 0 ),
+                       'queueRandTTL' => array( 'order' => 'random', 'claimTTL' => 10 ),
+                       'queueTimestamp' => array( 'order' => 'timestamp', 'claimTTL' => 0 ),
+                       'queueTimestampTTL' => array( 'order' => 'timestamp', 'claimTTL' => 10 ),
+                       'queueFifo' => array( 'order' => 'fifo', 'claimTTL' => 0 ),
+                       'queueFifoTTL' => array( 'order' => 'fifo', 'claimTTL' => 10 ),
+               );
+               foreach ( $variants as $q => $settings ) {
+                       try {
+                               $this->$q = JobQueue::factory( $settings + $baseConfig );
+                               if ( ! ( $this->$q instanceof JobQueueDB ) ) {
+                                       $this->$q->setTestingPrefix( 'unittests-' . wfRandomString( 32 ) );
+                               }
+                       } catch ( MWException $e ) {}; // unsupported? (@TODO: what if it was another error?)
                }
        }
 
        protected function tearDown() {
-               global $wgMemc;
                parent::tearDown();
-               foreach ( array( 'queueRand', 'queueRandTTL', 'queueFifo', 'queueFifoTTL' ) as $q ) {
-                       do {
-                               $job = $this->$q->pop();
-                               if ( $job ) {
-                                       $this->$q->ack( $job );
-                               }
-                       } while ( $job );
+               foreach ( array(
+                       'queueRand', 'queueRandTTL', 'queueTimestamp', 'queueTimestampTTL',
+                       'queueFifo', 'queueFifoTTL'
+               ) as $q ) {
+                       if ( $this->$q ) {
+                               do {
+                                       $job = $this->$q->pop();
+                                       if ( $job ) {
+                                               $this->$q->ack( $job );
+                                       }
+                               } while ( $job );
+                       }
+                       $this->$q = null;
                }
-               $this->queueRand = null;
-               $this->queueRandTTL = null;
-               $this->queueFifo = null;
-               $this->queueFifoTTL = null;
-               $wgMemc = $this->old['wgMemc'];
        }
 
        /**
         * @dataProvider provider_queueLists
         */
-       function testProperties( $queue, $order, $recycles, $desc ) {
+       function testProperties( $queue, $recycles, $desc ) {
                $queue = $this->$queue;
+               if ( !$queue ) {
+                       $this->markTestSkipped( $desc );
+               }
 
                $this->assertEquals( wfWikiID(), $queue->getWiki(), "Proper wiki ID ($desc)" );
                $this->assertEquals( 'null', $queue->getType(), "Proper job type ($desc)" );
@@ -78,8 +84,12 @@ class JobQueueTest extends MediaWikiTestCase {
        /**
         * @dataProvider provider_queueLists
         */
-       function testBasicOperations( $queue, $order, $recycles, $desc ) {
+       function testBasicOperations( $queue, $recycles, $desc ) {
                $queue = $this->$queue;
+               if ( !$queue ) {
+                       $this->markTestSkipped( $desc );
+               }
+
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
                $queue->flushCaches();
@@ -137,8 +147,12 @@ class JobQueueTest extends MediaWikiTestCase {
        /**
         * @dataProvider provider_queueLists
         */
-       function testBasicDeduplication( $queue, $order, $recycles, $desc ) {
+       function testBasicDeduplication( $queue, $recycles, $desc ) {
                $queue = $this->$queue;
+               if ( !$queue ) {
+                       $this->markTestSkipped( $desc );
+               }
+
 
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
@@ -186,8 +200,12 @@ class JobQueueTest extends MediaWikiTestCase {
        /**
         * @dataProvider provider_queueLists
         */
-       function testRootDeduplication( $queue, $order, $recycles, $desc ) {
+       function testRootDeduplication( $queue, $recycles, $desc ) {
                $queue = $this->$queue;
+               if ( !$queue ) {
+                       $this->markTestSkipped( $desc );
+               }
+
 
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
@@ -238,6 +256,10 @@ class JobQueueTest extends MediaWikiTestCase {
         */
        function testJobOrder( $queue, $recycles, $desc ) {
                $queue = $this->$queue;
+               if ( !$queue ) {
+                       $this->markTestSkipped( $desc );
+               }
+
 
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
@@ -264,16 +286,18 @@ class JobQueueTest extends MediaWikiTestCase {
                $this->assertEquals( 0, $queue->getAcquiredCount(), "No jobs active ($desc)" );
        }
 
-       function provider_queueLists() {
+       public static function provider_queueLists() {
                return array(
-                       array( 'queueRand', 'rand', false, 'Random queue without ack()' ),
-                       array( 'queueRandTTL', 'rand', true, 'Random queue with ack()' ),
-                       array( 'queueFifo', 'fifo', false, 'Ordered queue without ack()' ),
-                       array( 'queueFifoTTL', 'fifo', true, 'Ordered queue with ack()' )
+                       array( 'queueRand', false, 'Random queue without ack()' ),
+                       array( 'queueRandTTL', true, 'Random queue with ack()' ),
+                       array( 'queueTimestamp', false, 'Time ordered queue without ack()' ),
+                       array( 'queueTimestampTTL', true, 'Time ordered queue with ack()' ),
+                       array( 'queueFifo', false, 'FIFO ordered queue without ack()' ),
+                       array( 'queueFifoTTL', true, 'FIFO ordered queue with ack()' )
                );
        }
 
-       function provider_fifoQueueLists() {
+       public static function provider_fifoQueueLists() {
                return array(
                        array( 'queueFifo', false, 'Ordered queue without ack()' ),
                        array( 'queueFifoTTL', true, 'Ordered queue with ack()' )
index 56dc648..5051830 100644 (file)
@@ -47,7 +47,7 @@ class ServicesJsonTest extends MediaWikiTestCase {
                }
        }
 
-       function provideValuesToEncode() {
+       public static function provideValuesToEncode() {
                $obj = new stdClass();
                $obj->property = 'value';
                $obj->property2 = null;
@@ -71,7 +71,7 @@ class ServicesJsonTest extends MediaWikiTestCase {
                );
        }
 
-       function provideValuesToDecode() {
+       public static function provideValuesToDecode() {
                return array(
                        array( '1', 'basic integer' ),
                        array( '-1', 'negative integer' ),
index 26747b9..632eb52 100644 (file)
@@ -54,7 +54,7 @@ class CSSJanusTest extends MediaWikiTestCase {
         * These transform cases are tested *in both directions*
         * No need to declare a principle twice in both directions here.
         */
-       function provideTransformCases() {
+       public static function provideTransformCases() {
                return array(
                        // Property keys
                        array(
@@ -476,7 +476,7 @@ class CSSJanusTest extends MediaWikiTestCase {
         * If both ways can be tested, either put both versions in here or move
         * it to provideTransformCases().
         */
-       function provideTransformAdvancedCases() {
+       public static function provideTransformAdvancedCases() {
                $bgPairs = array(
                        # [ - _ . ] <-> [ left right ltr rtl ]
                        'foo.jpg' => 'foo.jpg',
@@ -542,7 +542,7 @@ class CSSJanusTest extends MediaWikiTestCase {
         * Cases that are currently failing, but
         * should be looked at in the future as enhancements and/or bug fix
         */
-       function provideTransformBrokenCases() {
+       public static function provideTransformBrokenCases() {
                return array(
                        // Guard against selectors that look flippable
                        array(
index 57017a8..e9901ce 100644 (file)
@@ -27,7 +27,7 @@ class CSSMinTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedOutput, $minified, 'Minified output should be in the form expected.' );
        }
 
-       function provideMinifyCases() {
+       public static function provideMinifyCases() {
                return array(
                        // Whitespace
                        array( "\r\t\f \v\n\r", "" ),
@@ -77,7 +77,7 @@ class CSSMinTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedOutput, $remapped, 'CSSMin::remap should return the expected url form.' . $messageAdd );
        }
 
-       function provideRemapCases() {
+       public static function provideRemapCases() {
                // Parameter signature:
                // CSSMin::remap( $code, $local, $remote, $embedData = true )
                return array(
@@ -119,7 +119,7 @@ class CSSMinTest extends MediaWikiTestCase {
                $this->testMinifyOutput( $code, $expectedOutput );
        }
 
-       function provideStringCases() {
+       public static function provideStringCases() {
                return array(
                        // String values should be respected
                        // - More than one space in a string value
index 1f55079..eb64a64 100644 (file)
@@ -2,7 +2,7 @@
 
 class JavaScriptMinifierTest extends MediaWikiTestCase {
 
-       function provideCases() {
+       public static function provideCases() {
                return array(
 
                        // Basic whitespace and comments that should be stripped entirely
@@ -132,7 +132,7 @@ class JavaScriptMinifierTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedOutput, $minified, "Minified output should be in the form expected." );
        }
 
-       function provideBug32548() {
+       public static function provideBug32548() {
                return array(
                        array(
                                // This one gets interpreted all together by the prior code;
index b221b83..117a072 100644 (file)
@@ -18,8 +18,6 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
         * translation (to en) where XMP should win.
         */
        public function testMultilingualCascade() {
-               global $wgShowEXIF;
-
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
@@ -27,7 +25,7 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                        $this->markTestSkipped( "This test needs the xml extension." );
                }
 
-               $wgShowEXIF = true;
+               $this->setMwGlobals( 'wgShowEXIF', true );
 
                $meta = BitmapMetadataHandler::Jpeg( $this->filePath .
                        '/Xmp-exif-multilingual_test.jpg' );
index 3de60b7..c4706bf 100644 (file)
@@ -22,7 +22,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedParams, $params, $msg );
        }
 
-       function provideNormaliseParams() {
+       public static function provideNormaliseParams() {
                return array(
                        /* Regular resize operations */
                        array(
index db29d17..f02e8b9 100644 (file)
@@ -25,21 +25,11 @@ class ExifRotationTest extends MediaWikiTestCase {
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
-               global $wgShowEXIF;
-               $this->show = $wgShowEXIF;
-               $wgShowEXIF = true;
 
-               global $wgEnableAutoRotation;
-               $this->oldAuto = $wgEnableAutoRotation;
-               $wgEnableAutoRotation = true;
-       }
-
-       protected function tearDown() {
-               global $wgShowEXIF, $wgEnableAutoRotation;
-               $wgShowEXIF = $this->show;
-               $wgEnableAutoRotation = $this->oldAuto;
-
-               parent::tearDown();
+               $this->setMwGlobals( array(
+                       'wgShowEXIF' => true,
+                       'wgEnableAutoRotation' => true,
+               ) );
        }
 
        /**
@@ -139,14 +129,11 @@ class ExifRotationTest extends MediaWikiTestCase {
         * @dataProvider provideFilesNoAutoRotate
         */
        function testMetadataNoAutoRotate( $name, $type, $info ) {
-               global $wgEnableAutoRotation;
-               $wgEnableAutoRotation = false;
+               $this->setMwGlobals( 'wgEnableAutoRotation', false );
 
                $file = $this->dataFile( $name, $type );
                $this->assertEquals( $info['width'], $file->getWidth(), "$name: width check" );
                $this->assertEquals( $info['height'], $file->getHeight(), "$name: height check" );
-
-               $wgEnableAutoRotation = true;
        }
 
        /**
@@ -154,8 +141,7 @@ class ExifRotationTest extends MediaWikiTestCase {
         * @dataProvider provideFilesNoAutoRotate
         */
        function testRotationRenderingNoAutoRotate( $name, $type, $info, $thumbs ) {
-               global $wgEnableAutoRotation;
-               $wgEnableAutoRotation = false;
+               $this->setMwGlobals( 'wgEnableAutoRotation', false );
 
                foreach ( $thumbs as $size => $out ) {
                        if ( preg_match( '/^(\d+)px$/', $size, $matches ) ) {
@@ -187,7 +173,6 @@ class ExifRotationTest extends MediaWikiTestCase {
                                $this->assertEquals( $out[1], $gis[1], "$name: thumb actual height check for $size" );
                        }
                }
-               $wgEnableAutoRotation = true;
        }
 
        public static function provideFilesNoAutoRotate() {
@@ -238,7 +223,7 @@ class ExifRotationTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $result );
        }
 
-       function provideBitmapExtractPreRotationDimensions() {
+       public static function provideBitmapExtractPreRotationDimensions() {
                return array(
                        array(
                                0,
index 1e91201..3bbce2b 100644 (file)
@@ -66,7 +66,7 @@ class PNGMetadataExtractorTest extends MediaWikiTestCase {
         * actual resolution of the image is (aka in dots per meter).
         */
        /*
-       function testPngPhysTag () {
+       function testPngPhysTag() {
                $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
                        'Png-native-test.png' );
 
index 86fd95c..99ec05d 100644 (file)
@@ -29,6 +29,7 @@
  * Requires PHPUnit.
  *
  * @ingroup UtfNormal
+ * @group Large
  */
 class CleanUpTest extends MediaWikiTestCase {
        /** @todo document */
index 51643ce..263df5f 100644 (file)
@@ -65,68 +65,44 @@ class MagicVariableTest extends MediaWikiTestCase {
 
        # day
 
-       /**
-        * @dataProvider MediaWikiProvide::Days
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Days */
        function testCurrentdayIsUnPadded( $day ) {
                $this->assertUnPadded( 'currentday', $day );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Days
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Days */
        function testCurrentdaytwoIsZeroPadded( $day ) {
                $this->assertZeroPadded( 'currentday2', $day );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Days
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Days */
        function testLocaldayIsUnPadded( $day ) {
                $this->assertUnPadded( 'localday', $day );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Days
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Days */
        function testLocaldaytwoIsZeroPadded( $day ) {
                $this->assertZeroPadded( 'localday2', $day );
        }
 
        # month
 
-       /**
-        * @dataProvider MediaWikiProvide::Months
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Months */
        function testCurrentmonthIsZeroPadded( $month ) {
                $this->assertZeroPadded( 'currentmonth', $month );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Months
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Months */
        function testCurrentmonthoneIsUnPadded( $month ) {
                $this->assertUnPadded( 'currentmonth1', $month );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Months
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Months */
        function testLocalmonthIsZeroPadded( $month ) {
                $this->assertZeroPadded( 'localmonth', $month );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Months
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Months */
        function testLocalmonthoneIsUnPadded( $month ) {
                $this->assertUnPadded( 'localmonth1', $month );
        }
@@ -134,36 +110,24 @@ class MagicVariableTest extends MediaWikiTestCase {
 
        # revision day
 
-       /**
-        * @dataProvider MediaWikiProvide::Days
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Days */
        function testRevisiondayIsUnPadded( $day ) {
                $this->assertUnPadded( 'revisionday', $day );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Days
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Days */
        function testRevisiondaytwoIsZeroPadded( $day ) {
                $this->assertZeroPadded( 'revisionday2', $day );
        }
 
        # revision month
 
-       /**
-        * @dataProvider MediaWikiProvide::Months
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Months */
        function testRevisionmonthIsZeroPadded( $month ) {
                $this->assertZeroPadded( 'revisionmonth', $month );
        }
 
-       /**
-        * @dataProvider MediaWikiProvide::Months
-        * @group Database
-        */
+       /** @dataProvider MediaWikiProvide::Months */
        function testRevisionmonthoneIsUnPadded( $month ) {
                $this->assertUnPadded( 'revisionmonth1', $month );
        }
@@ -172,19 +136,20 @@ class MagicVariableTest extends MediaWikiTestCase {
         * Rough tests for {{SERVERNAME}} magic word
         * Bug 31176
         * @group Database
+        * @dataProvider dataServernameFromDifferentProtocols
         */
-       function testServernameFromDifferentProtocols() {
-               global $wgServer;
-               $saved_wgServer = $wgServer;
+       function testServernameFromDifferentProtocols( $server ) {
+               $this->setMwGlobals( 'wgServer', $server );
 
-               $wgServer = 'http://localhost/';
-               $this->assertMagic( 'localhost', 'servername' );
-               $wgServer = 'https://localhost/';
-               $this->assertMagic( 'localhost', 'servername' );
-               $wgServer = '//localhost/'; # bug 31176
                $this->assertMagic( 'localhost', 'servername' );
+       }
 
-               $wgServer = $saved_wgServer;
+       function dataServernameFromDifferentProtocols() {
+               return array(
+                       array( 'http://localhost/' ),
+                       array( 'https://localhost/' ),
+                       array( '//localhost/' ), # bug 31176
+               );
        }
 
        ############### HELPERS ############################################
index bf6931a..5732beb 100644 (file)
@@ -577,7 +577,7 @@ class NewParserTest extends MediaWikiTestCase {
                } elseif ( isset( $opts['comment'] ) ) {
                        $out = Linker::formatComment( $input, $title, $local );
                } elseif ( isset( $opts['preload'] ) ) {
-                       $out = $parser->getpreloadText( $input, $title, $options );
+                       $out = $parser->getPreloadText( $input, $title, $options );
                } else {
                        $output = $parser->parse( $input, $title, $options, true, true, 1337 );
                        $out = $output->getText();
index 5c1a268..50fe0e4 100644 (file)
@@ -28,5 +28,22 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                $this->assertEquals( $expected, $text );
        }
 
+       public function testCallParserFunction() {
+               global $wgParser;
+
+               // Normal parses test passing PPNodes. Test passing an array.
+               $title = Title::newFromText( str_replace( '::', '__', __METHOD__ ) );
+               $wgParser->startExternalParse( $title, new ParserOptions(), Parser::OT_HTML );
+               $frame = $wgParser->getPreprocessor()->newFrame();
+               $ret = $wgParser->callParserFunction( $frame, '#tag',
+                       array( 'pre', 'foo', 'style' => 'margin-left: 1.6em' )
+               );
+               $ret['text'] = $wgParser->mStripState->unstripBoth( $ret['text'] );
+               $this->assertSame( array(
+                       'found' => true,
+                       'text' => '<pre style="margin-left: 1.6em">foo</pre>',
+               ), $ret, 'callParserFunction works for {{#tag:pre|foo|style=margin-left: 1.6em}}' );
+       }
+
        // TODO: Add tests for cleanSig() / cleanSigInSig(), getSection(), replaceSection(), getPreloadText()
 }
index c51a1dc..fb13118 100644 (file)
@@ -18,7 +18,7 @@ class PreprocessorTest extends MediaWikiTestCase {
                return array( 'gallery', 'display map' /* Used by Maps, see r80025 CR */, '/foo' );
        }
 
-       function provideCases() {
+       public static function provideCases() {
                return array(
                        array( "Foo", "<root>Foo</root>" ),
                        array( "<!-- Foo -->", "<root><comment>&lt;!-- Foo --&gt;</comment></root>" ),
@@ -148,7 +148,7 @@ class PreprocessorTest extends MediaWikiTestCase {
        /**
         * These are more complex test cases taken out of wiki articles.
         */
-       function provideFiles() {
+       public static function provideFiles() {
                return array(
                        array( "QuoteQuran" ), # http://en.wikipedia.org/w/index.php?title=Template:QuoteQuran/sandbox&oldid=237348988 GFDL + CC-BY-SA by Striver
                        array( "Factorial" ), # http://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC-BY-SA by Polonium
@@ -180,7 +180,7 @@ class PreprocessorTest extends MediaWikiTestCase {
        /**
         * Tests from Bug 28642 · https://bugzilla.wikimedia.org/28642
         */
-       function provideHeadings() {
+       public static function provideHeadings() {
                return array( /* These should become headings: */
                        array( "== h ==<!--c1-->", "<root><h level=\"2\" i=\"1\">== h ==<comment>&lt;!--c1--&gt;</comment></h></root>" ),
                        array( "== h ==         <!--c1-->", "<root><h level=\"2\" i=\"1\">== h ==       <comment>&lt;!--c1--&gt;</comment></h></root>" ),
index d643264..ed60079 100644 (file)
@@ -20,7 +20,6 @@ class TagHookTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideValidNames
-        * @group Database
         */
        function testTagHooks( $tag ) {
                global $wgParserConf, $wgContLang;
@@ -48,7 +47,6 @@ class TagHookTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideValidNames
-        * @group Database
         */
        function testFunctionTagHooks( $tag ) {
                global $wgParserConf, $wgContLang;
index 0cecdee..b86636f 100644 (file)
@@ -62,7 +62,7 @@ class MediaWikiSiteTest extends SiteTest {
                $this->assertEquals( $expected, $site->getFileUrl( $pathArgument ) );
        }
 
-       public function provideGetPageUrl() {
+       public static function provideGetPageUrl() {
                return array(
                        // path, page, expected substring
                        array( 'http://acme.test/wiki/$1', 'Berlin', '/wiki/Berlin' ),
index d20e2a5..8033784 100644 (file)
@@ -201,7 +201,7 @@ class SiteTest extends MediaWikiTestCase {
                $this->assertEquals( '', $site->getProtocol() );
        }
 
-       public function provideGetPageUrl() {
+       public static function provideGetPageUrl() {
                //NOTE: the assumption that the URL is built by replacing $1
                //      with the urlencoded version of $page
                //      is true for Site but not guaranteed for subclasses.
index f5ef0fb..15a11ed 100644 (file)
@@ -56,7 +56,7 @@ class SpecialSearchTest extends MediaWikiTestCase {
 
        }
 
-       function provideSearchOptionsTests() {
+       public static function provideSearchOptionsTests() {
                $defaultNS = SearchEngine::defaultNamespaces();
                $EMPTY_REQUEST = array();
                $NO_USER_PREF = null;
index 4d2d8ce..ac93aa7 100644 (file)
@@ -8,12 +8,13 @@
 class UploadFromUrlTest extends ApiTestCase {
 
        protected function setUp() {
-               global $wgEnableUploads, $wgAllowCopyUploads, $wgAllowAsyncCopyUploads;
                parent::setUp();
 
-               $wgEnableUploads = true;
-               $wgAllowCopyUploads = true;
-               $wgAllowAsyncCopyUploads = true;
+               $this->setMwGlobals( array(
+                       'wgEnableUploads' => true,
+                       'wgAllowCopyUploads' => true,
+                       'wgAllowAsyncCopyUploads' => true,
+               ) );
                wfSetupSession();
 
                if ( wfLocalFile( 'UploadFromUrlTest.png' )->exists() ) {
index 8fcaa21..7a0fea4 100644 (file)
@@ -44,8 +44,7 @@ class UploadStashTest extends MediaWikiTestCase {
        }
 
        public function testBug29408() {
-               global $wgUser;
-               $wgUser = self::$users['uploader']->user;
+               $this->setMwGlobals( 'wgUser', self::$users['uploader']->user );
 
                $repo = RepoGroup::singleton()->getLocalRepo();
                $stash = new UploadStash( $repo );
index 9723e1e..fdf3347 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/LanguageAm.php */
 class LanguageAmTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
index 523ee7f..a623912 100644 (file)
@@ -6,7 +6,6 @@
 
 /** Tests for MediaWiki languages/LanguageAr.php */
 class LanguageArTest extends LanguageClassesTestCase {
-
        function testFormatNum() {
                $this->assertEquals( '١٬٢٣٤٬٥٦٧', $this->getLang()->formatNum( '1234567' ) );
                $this->assertEquals( '-١٢٫٨٩', $this->getLang()->formatNum( -12.89 ) );
@@ -20,7 +19,7 @@ class LanguageArTest extends LanguageClassesTestCase {
                $this->assertEquals( $expected, $this->getLang()->sprintfDate( $format, $date ) );
        }
 
-       function providerSprintfDate() {
+       public static function providerSprintfDate() {
                return array(
                        array(
                                'xg "vs" g',
@@ -51,7 +50,12 @@ class LanguageArTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
index 0144941..a88356a 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/LanguageBe.php */
 class LanguageBeTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 1 ),
                        array( 'many', 11 ),
index 5b246d8..8bc908d 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 class LanguageBe_taraskTest extends LanguageClassesTestCase {
-
        /**
         * Make sure the language code we are given is indeed
         * be-tarask. This is to ensure LanguageClassesTestCase
@@ -33,14 +32,19 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
                $this->assertEquals( '1234', $this->getLang()->commafy( '1234' ) );
        }
 
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
-               $forms = array( 'one', 'few', 'many', 'other' );
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms =  array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -57,17 +61,16 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms =  array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralTwoForms() {
+       public static function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
-
 }
index c364917..3cdde36 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/LanguageBho.php */
 class LanguageBhoTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
@@ -22,5 +26,4 @@ class LanguageBhoTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 76d0070..83a0ef6 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/LanguageBs.php */
 class LanguageBsTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'many', 0 ),
                        array( 'one', 1 ),
@@ -29,5 +33,4 @@ class LanguageBsTest extends LanguageClassesTestCase {
                        array( 'many', 200 ),
                );
        }
-
 }
index 884a129..06374d4 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/Languagecs.php */
 class LanguageCsTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -28,5 +32,4 @@ class LanguageCsTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index e2394b3..a368371 100644 (file)
@@ -7,27 +7,30 @@
 
 /** Tests for MediaWiki languages/LanguageCu.php */
 class LanguageCuTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'few', 'many', 'other' );
+               $forms =  array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'many', 3 ),
-                       array( 'many', 4 ),
+                       array( 'two', 2 ),
+                       array( 'few', 3 ),
+                       array( 'few', 4 ),
                        array( 'other', 5 ),
                        array( 'one', 11 ),
                        array( 'other', 20 ),
-                       array( 'few', 22 ),
-                       array( 'many', 223 ),
+                       array( 'two', 22 ),
+                       array( 'few', 223 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 2a7f4a9..221a498 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageCy.php */
 class LanguageCyTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'zero', 'one', 'two', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -30,5 +34,4 @@ class LanguageCyTest extends LanguageClassesTestCase {
                        array( 'other', 200.00 ),
                );
        }
-
 }
index 285ce64..be42124 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/classes/LanguageDsb.php */
 class LanguageDsbTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
@@ -28,5 +32,4 @@ class LanguageDsbTest extends LanguageClassesTestCase {
                        array( 'other', 555 ),
                );
        }
-
 }
index faf0de5..4f96b48 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/classes/LanguageFr.php */
 class LanguageFrTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
@@ -22,5 +26,4 @@ class LanguageFrTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 2dbb088..da7cf12 100644 (file)
@@ -7,20 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageGa.php */
 class LanguageGaTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 5de1e9d..4ff97ea 100644 (file)
@@ -7,14 +7,13 @@
 
 /** Tests for MediaWiki languages/classes/LanguageGd.php */
 class LanguageGdTest extends LanguageClassesTestCase {
-
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
+       public static function providerPlural() {
                return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
@@ -33,7 +32,7 @@ class LanguageGdTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralExplicit() {
+       public static function providerPluralExplicit() {
                return array (
                                array( 'other', 0 ),
                                array( 'one', 1 ),
index 4126e07..ef95c5f 100644 (file)
@@ -7,16 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageGv.php */
 class LanguageGvTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                // This is not compatible with CLDR plural rules http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#gv
-               $forms = array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
+               // What does this mean? Is there a hard-coded override for gv somewhere? -Ryan Kaldari 2013-01-28
+               $forms =  array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->markTestSkipped( "This test won't work since convertPlural for gv doesn't seem to actually follow our plural rules." );
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'Form 4', 0 ),
                        array( 'Form 2', 1 ),
                        array( 'Form 3', 2 ),
@@ -28,5 +34,4 @@ class LanguageGvTest extends LanguageClassesTestCase {
                        array( 'Form 4', 50 ),
                );
        }
-
 }
index 6de88e5..7849349 100644 (file)
@@ -7,46 +7,83 @@
 
 /** Tests for MediaWiki languages/classes/LanguageHe.php */
 class LanguageHeTest extends LanguageClassesTestCase {
+       /*
+       The most common usage for the plural forms is two forms,
+       for singular and plural. In this case, the second form
+       is technically dual, but in practice it's used as plural.
+       In some cases, usually with expressions of time, three forms
+       are needed - singular, dual and plural.
+       CLDR also specifies a fourth form for multiples of 10,
+       which is very rare. It also has a mistake, because
+       the number 10 itself is supposed to be just plural,
+       so currently it's overridden in MediaWiki.
+       */
 
-       /** @dataProvider providerPluralDual */
-       function testPluralDual( $result, $value ) {
+       /** @dataProvider provideTwoPluralForms */
+       function testTwoPluralForms( $result, $value ) {
+               $forms = array( 'one', 'other' );
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       /** @dataProvider provideThreePluralForms */
+       function testThreePluralForms( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralDual() {
-               return array(
-                       array( 'other', 0 ), // Zero -> plural
+       /** @dataProvider provideFourPluralForms */
+       function testFourPluralForms( $result, $value ) {
+               $forms = array( 'one', 'two', 'many', 'other' );
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       /** @dataProvider provideFourPluralForms */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function provideTwoPluralForms() {
+               return array (
+                       array( 'other', 0 ), // Zero - plural
                        array( 'one', 1 ), // Singular
-                       array( 'two', 2 ), // Dual
-                       array( 'other', 3 ), // Plural
+                       array( 'other', 2 ), // No third form provided, use it as plural
+                       array( 'other', 3 ), // Plural - other
+                       array( 'other', 10 ), // No fourth form provided, use it as plural
+                       array( 'other', 20 ), // No fourth form provided, use it as plural
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
-               $forms = array( 'one', 'other' );
-               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       public static function provideThreePluralForms() {
+               return array (
+                       array( 'other', 0 ), // Zero - plural
+                       array( 'one', 1 ), // Singular
+                       array( 'two', 2 ), // Dual
+                       array( 'other', 3 ), // Plural - other
+                       array( 'other', 10 ), // No fourth form provided, use it as plural
+                       array( 'other', 20 ), // No fourth form provided, use it as plural
+               );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'other', 0 ), // Zero -> plural
+       public static function provideFourPluralForms() {
+               return array (
+                       array( 'other', 0 ), // Zero - plural
                        array( 'one', 1 ), // Singular
-                       array( 'other', 2 ), // Plural, no dual provided
-                       array( 'other', 3 ), // Plural
+                       array( 'two', 2 ), // Dual
+                       array( 'other', 3 ), // Plural - other
+                       array( 'other', 10 ), // 10 is supposed to be plural (other), not "many"
+                       array( 'many', 20 ), // Fourth form provided - rare, but supported by CLDR
                );
        }
 
-       /** @dataProvider providerGrammar */
+       /** @dataProvider provideGrammar */
        function testGrammar( $result, $word, $case ) {
                $this->assertEquals( $result, $this->getLang()->convertGrammar( $word, $case ) );
        }
 
        // The comments in the beginning of the line help avoid RTL problems
        // with text editors.
-       function providerGrammar() {
-               return array(
+       public static function provideGrammar() {
+               return array (
                        array(
                                /* result */ 'וויקיפדיה',
                                /* word   */ 'ויקיפדיה',
index 86d6af5..9502d6a 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/LanguageHi.php */
 class LanguageHiTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
@@ -22,5 +26,4 @@ class LanguageHiTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 9dce4ea..badfd11 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageHr.php */
 class LanguageHrTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'many', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -29,5 +33,4 @@ class LanguageHrTest extends LanguageClassesTestCase {
                        array( 'many', 200 ),
                );
        }
-
 }
index bec7d81..bae4542 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/classes/LanguageHsb.php */
 class LanguageHsbTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
@@ -28,5 +32,4 @@ class LanguageHsbTest extends LanguageClassesTestCase {
                        array( 'other', 555 ),
                );
        }
-
 }
index 23d8e0c..40ae108 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/LanguageHu.php */
 class LanguageHuTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
@@ -22,5 +26,4 @@ class LanguageHuTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 7088d37..f520b7e 100644 (file)
@@ -7,20 +7,24 @@
 
 /** Tests for MediaWiki languages/LanguageHy.php */
 class LanguageHyTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               // This fails for 0, but I'm not sure why. Some voodoo going on here.
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 9b4a53a..e863490 100644 (file)
@@ -7,20 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageKsh.php */
 class LanguageKshTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other', 'zero' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 669d8b0..2fa40b5 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/classes/LanguageLn.php */
 class LanguageLnTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
@@ -22,5 +26,4 @@ class LanguageLnTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 9d6428b..45f083b 100644 (file)
@@ -7,21 +7,19 @@
 
 /** Tests for MediaWiki languages/LanguageLt.php */
 class LanguageLtTest extends LanguageClassesTestCase {
-
-       /** @dataProvider provideOneFewOtherCases */
-       function testOneFewOtherPlural( $result, $value ) {
-               $forms = array( 'one', 'few', 'other' );
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms =  array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       /** @dataProvider provideOneFewCases */
-       function testOneFewPlural( $result, $value ) {
-               $forms = array( 'one', 'few' );
-               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
        }
 
-       function provideOneFewOtherCases() {
-               return array(
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -36,10 +34,21 @@ class LanguageLtTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideOneFewCases() {
-               return array(
+       /** @dataProvider providePluralTwoForms */
+       function testOneFewPlural( $result, $value ) {
+               $forms =  array( 'one', 'other' );
+               // This fails for 21, but not sure why.
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       public static function providePluralTwoForms() {
+               return array (
                        array( 'one', 1 ),
-                       array( 'few', 15 ),
+                       array( 'other', 2 ),
+                       array( 'other', 15 ),
+                       array( 'other', 20 ),
+                       array( 'one', 21 ),
+                       array( 'other', 22 ),
                );
        }
 }
index bd0c759..3ff9589 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageLv.php */
 class LanguageLvTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'zero', 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
@@ -27,5 +31,4 @@ class LanguageLvTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index c1e516b..f4eb99a 100644 (file)
@@ -7,14 +7,18 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMg.php */
 class LanguageMgTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePlural() {
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
                return array(
                        array( 'one', 0 ),
                        array( 'one', 1 ),
@@ -23,5 +27,4 @@ class LanguageMgTest extends LanguageClassesTestCase {
                        array( 'other', 123.3434 ),
                );
        }
-
 }
index 5c241ba..4ff2e3e 100644 (file)
@@ -7,27 +7,28 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMk.php */
 class LanguageMkTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
 
-       function providerPlural() {
-               return array(
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
                        array( 'one', 21 ),
-                       array( 'other', 411 ),
+                       array( 'one', 411 ),
                        array( 'other', 12.345 ),
                        array( 'other', 20 ),
                        array( 'one', 31 ),
                        array( 'other', 200 ),
                );
        }
-
-
 }
index 396114d..057ca67 100644 (file)
@@ -14,7 +14,7 @@ class LanguageMlTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->formatNum( $value ) );
        }
 
-       function providerFormatNum() {
+       public static function providerFormatNum() {
                return array(
                        array( '12,34,567', '1234567' ),
                        array( '12,345', '12345' ),
index f7da1cd..3ffa4e7 100644 (file)
@@ -7,19 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMo.php */
 class LanguageMoTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'few', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 19 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'few',   0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index f2b881e..350aa08 100644 (file)
@@ -7,21 +7,25 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMt.php */
 class LanguageMtTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralAllForms */
-       function testPluralAllForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralAllForms() {
-               return array(
-                       array( 'few', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 19 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'few',   0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   10 ),
+                       array( 'many',  11 ),
+                       array( 'many',  19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
@@ -37,28 +41,28 @@ class LanguageMtTest extends LanguageClassesTestCase {
 
        /** @dataProvider providerPluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralTwoForms() {
-               return array(
-                       array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 19 ),
-                       array( 'many', 20 ),
-                       array( 'many', 99 ),
-                       array( 'many', 100 ),
-                       array( 'many', 101 ),
-                       array( 'many', 102 ),
-                       array( 'many', 110 ),
-                       array( 'many', 111 ),
-                       array( 'many', 119 ),
-                       array( 'many', 120 ),
-                       array( 'many', 201 ),
+       public static function providerPluralTwoForms() {
+               return array (
+                       array( 'other',  0 ),
+                       array( 'one',   1 ),
+                       array( 'other',  2 ),
+                       array( 'other',  10 ),
+                       array( 'other',  11 ),
+                       array( 'other',  19 ),
+                       array( 'other',  20 ),
+                       array( 'other',  99 ),
+                       array( 'other',  100 ),
+                       array( 'other',  101 ),
+                       array( 'other',  102 ),
+                       array( 'other',  110 ),
+                       array( 'other',  111 ),
+                       array( 'other',  119 ),
+                       array( 'other',  120 ),
+                       array( 'other',  201 ),
                );
        }
 }
index 9d80d13..059de44 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageNso.php */
 class LanguageNsoTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index 1e36097..837fc3a 100644 (file)
@@ -7,58 +7,62 @@
 
 /** Tests for MediaWiki languages/classes/LanguagePl.php */
 class LanguagePlTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralFourForms() {
-               return array(
-                       array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 3 ),
-                       array( 'few', 4 ),
-                       array( 'many', 5 ),
-                       array( 'many', 9 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 21 ),
-                       array( 'few', 22 ),
-                       array( 'few', 23 ),
-                       array( 'few', 24 ),
-                       array( 'many', 25 ),
-                       array( 'many', 200 ),
-                       array( 'many', 201 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'many',  0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   3 ),
+                       array( 'few',   4 ),
+                       array( 'many',  5 ),
+                       array( 'many',  9 ),
+                       array( 'many',  10 ),
+                       array( 'many',  11 ),
+                       array( 'many',  21 ),
+                       array( 'few',   22 ),
+                       array( 'few',   23 ),
+                       array( 'few',   24 ),
+                       array( 'many',  25 ),
+                       array( 'many',  200 ),
+                       array( 'many',  201 ),
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+       /** @dataProvider providerPluralTwoForms */
+       function testPluralTwoForms( $result, $value ) {
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
-                       array( 'many', 3 ),
-                       array( 'many', 4 ),
-                       array( 'many', 5 ),
-                       array( 'many', 9 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 21 ),
-                       array( 'many', 22 ),
-                       array( 'many', 23 ),
-                       array( 'many', 24 ),
-                       array( 'many', 25 ),
-                       array( 'many', 200 ),
-                       array( 'many', 201 ),
+       public static function providerPluralTwoForms() {
+               return array (
+                       array( 'other',  0 ),
+                       array( 'one',   1 ),
+                       array( 'other',  2 ),
+                       array( 'other',  3 ),
+                       array( 'other',  4 ),
+                       array( 'other',  5 ),
+                       array( 'other',  9 ),
+                       array( 'other',  10 ),
+                       array( 'other',  11 ),
+                       array( 'other',  21 ),
+                       array( 'other',  22 ),
+                       array( 'other',  23 ),
+                       array( 'other',  24 ),
+                       array( 'other',  25 ),
+                       array( 'other',  200 ),
+                       array( 'other',  201 ),
                );
        }
 }
index 916ea45..70324f5 100644 (file)
@@ -7,19 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageRo.php */
 class LanguageRoTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'few', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 19 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'few',   0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index 0792f75..ccfda20 100644 (file)
@@ -8,15 +8,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageRu.php */
 class LanguageRuTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -33,16 +37,16 @@ class LanguageRuTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms =  array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralTwoForms() {
+       public static function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
 
@@ -51,7 +55,7 @@ class LanguageRuTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->convertGrammar( $word, $case ) );
        }
 
-       function providerGrammar() {
+       public static function providerGrammar() {
                return array(
                        array(
                                'Википедии',
index c7dd802..9b9297c 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSe.php */
 class LanguageSeTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralThreeForms */
-       function testPluralThreeForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralThreeForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -23,14 +27,14 @@ class LanguageSeTest extends LanguageClassesTestCase {
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
+       /** @dataProvider providerPluralTwoForms */
+       function testPluralTwoForms( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       public static function providerPluralTwoForms() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 8a6e979..589a369 100644 (file)
@@ -7,28 +7,32 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSgs.php */
 class LanguageSgsTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePluralAllForms */
        function testPluralAllForms( $result, $value ) {
-               $forms = array( 'one', 'few', 'many', 'other' );
+               $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralAllForms() {
+       /** @dataProvider providePluralAllForms */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePluralAllForms() {
                return array(
-                       array( 'many', 0 ),
+                       array( 'few', 0 ),
                        array( 'one', 1 ),
-                       array( 'few', 2 ),
+                       array( 'two', 2 ),
                        array( 'other', 3 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 12 ),
-                       array( 'many', 19 ),
+                       array( 'few', 10 ),
+                       array( 'few', 11 ),
+                       array( 'few', 12 ),
+                       array( 'few', 19 ),
                        array( 'other', 20 ),
-                       array( 'many', 100 ),
+                       array( 'few', 100 ),
                        array( 'one', 101 ),
-                       array( 'many', 111 ),
-                       array( 'many', 112 ),
+                       array( 'few', 111 ),
+                       array( 'few', 112 ),
                );
        }
 
@@ -38,7 +42,7 @@ class LanguageSgsTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralTwoForms() {
+       public static function providePluralTwoForms() {
                return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
index 282fd2f..8dd18ea 100644 (file)
@@ -7,18 +7,30 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSh.php */
 class LanguageShTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+                       array( 'one',  1 ),
+                       array( 'few', 2 ),
+                       array( 'few', 4 ),
+                       array( 'many', 5 ),
+                       array( 'many', 10 ),
+                       array( 'many', 11 ),
+                       array( 'many', 12 ),
+                       array( 'one', 101 ),
+                       array( 'few', 102 ),
+                       array( 'many', 111 ),
                );
        }
 }
index 89cbbf0..da09b56 100644 (file)
@@ -8,15 +8,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSk.php */
 class LanguageSkTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
index 075e6af..8329791 100644 (file)
@@ -8,20 +8,24 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSl.php */
 class LanguageSlTest extends LanguageClassesTestCase {
-
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'two', 'few', 'other', 'zero' );
+               $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'zero', 0 ),
-                       array( 'one', 1 ),
-                       array( 'two', 2 ),
-                       array( 'few', 3 ),
-                       array( 'few', 4 ),
+       /** @dataProvider providerPlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providerPlural() {
+               return array (
+                       array( 'other',  0 ),
+                       array( 'one',   1 ),
+                       array( 'two',   2 ),
+                       array( 'few',   3 ),
+                       array( 'few',   4 ),
                        array( 'other', 5 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index 6d65521..2eb8113 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSma.php */
 class LanguageSmaTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralThreeForms */
-       function testPluralThreeForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralThreeForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -23,14 +27,14 @@ class LanguageSmaTest extends LanguageClassesTestCase {
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
+       /** @dataProvider providerPluralTwoForms */
+       function testPluralTwoForms( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       public static function providerPluralTwoForms() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 5611030..05e8875 100644 (file)
@@ -16,9 +16,6 @@ require_once dirname( __DIR__ ) . '/bootstrap.php';
 
 /** Tests for MediaWiki languages/LanguageSr.php */
 class LanguageSrTest extends LanguageClassesTestCase {
-
-       ##### TESTS #######################################################
-
        function testEasyConversions() {
                $this->assertCyrillic(
                        'шђчћжШЂЧЋЖ',
@@ -113,14 +110,19 @@ class LanguageSrTest extends LanguageClassesTestCase {
                );
        }
 
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -137,16 +139,16 @@ class LanguageSrTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralTwoForms() {
+       public static function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
 
index dd90d31..f55684f 100644 (file)
@@ -19,7 +19,7 @@ class LanguageTest extends LanguageClassesTestCase {
                $this->assertEquals( $expected, $this->getLang()->formatTimePeriod( $seconds, $format ), $desc );
        }
 
-       function provideFormattableTimes() {
+       public static function provideFormattableTimes() {
                return array(
                        array(
                                9.45,
@@ -251,7 +251,7 @@ class LanguageTest extends LanguageClassesTestCase {
        /**
         * Array format is ($len, $ellipsis, $input, $expected)
         */
-       function provideHTMLTruncateData() {
+       public static function provideHTMLTruncateData() {
                return array(
                        array( 0, 'XXX', "1234567890", "XXX" ),
                        array( 8, 'XXX', "1234567890", "12345XXX" ),
@@ -324,7 +324,7 @@ class LanguageTest extends LanguageClassesTestCase {
         * and distributed as free software, under the GNU General Public Licence.
         * http://www.bortzmeyer.org/gabuzomeu-parsing-language-tags.html
         */
-       function provideWellFormedLanguageTags() {
+       public static function provideWellFormedLanguageTags() {
                return array(
                        array( 'fr', 'two-letter code' ),
                        array( 'fr-latn', 'two-letter code with lower case script code' ),
@@ -375,7 +375,7 @@ class LanguageTest extends LanguageClassesTestCase {
         * and distributed as free software, under the GNU General Public Licence.
         * http://www.bortzmeyer.org/gabuzomeu-parsing-language-tags.html
         */
-       function provideMalformedLanguageTags() {
+       public static function provideMalformedLanguageTags() {
                return array(
                        array( 'f', 'language too short' ),
                        array( 'f-Latn', 'language too short with script' ),
@@ -437,7 +437,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideLanguageCodes() {
+       public static function provideLanguageCodes() {
                return array(
                        array( 'fr', 'Two letters, minor case' ),
                        array( 'EN', 'Two letters, upper case' ),
@@ -460,7 +460,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideKnownLanguageTags() {
+       public static function provideKnownLanguageTags() {
                return array(
                        array( 'fr', 'simple code' ),
                        array( 'bat-smg', 'an MW legacy tag' ),
@@ -493,7 +493,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideUnknownLanguageTags() {
+       public static function provideUnknownLanguageTags() {
                return array(
                        array( 'mw', 'non-existent two-letter code' ),
                );
@@ -530,7 +530,7 @@ class LanguageTest extends LanguageClassesTestCase {
                date_default_timezone_set( $oldTZ );
        }
 
-       function provideSprintfDateSamples() {
+       public static function provideSprintfDateSamples() {
                return array(
                        array(
                                'xiY',
@@ -836,7 +836,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideFormatSizes() {
+       public static function provideFormatSizes() {
                return array(
                        array(
                                0,
@@ -898,61 +898,61 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideFormatBitrate() {
+       public static function provideFormatBitrate() {
                return array(
                        array(
                                0,
-                               "0bps",
+                               "0 bps",
                                "0 bits per second"
                        ),
                        array(
                                999,
-                               "999bps",
+                               "999 bps",
                                "999 bits per second"
                        ),
                        array(
                                1000,
-                               "1kbps",
+                               "1 kbps",
                                "1 kilobit per second"
                        ),
                        array(
                                1000 * 1000,
-                               "1Mbps",
+                               "1 Mbps",
                                "1 megabit per second"
                        ),
                        array(
                                pow( 10, 9 ),
-                               "1Gbps",
+                               "1 Gbps",
                                "1 gigabit per second"
                        ),
                        array(
                                pow( 10, 12 ),
-                               "1Tbps",
+                               "1 Tbps",
                                "1 terabit per second"
                        ),
                        array(
                                pow( 10, 15 ),
-                               "1Pbps",
+                               "1 Pbps",
                                "1 petabit per second"
                        ),
                        array(
                                pow( 10, 18 ),
-                               "1Ebps",
+                               "1 Ebps",
                                "1 exabit per second"
                        ),
                        array(
                                pow( 10, 21 ),
-                               "1Zbps",
+                               "1 Zbps",
                                "1 zetabit per second"
                        ),
                        array(
                                pow( 10, 24 ),
-                               "1Ybps",
+                               "1 Ybps",
                                "1 yottabit per second"
                        ),
                        array(
                                pow( 10, 27 ),
-                               "1,000Ybps",
+                               "1,000 Ybps",
                                "1,000 yottabits per second"
                        ),
                );
@@ -970,7 +970,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideFormatDuration() {
+       public static function provideFormatDuration() {
                return array(
                        array(
                                0,
@@ -1106,7 +1106,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideCheckTitleEncodingData() {
+       public static function provideCheckTitleEncodingData() {
                return array(
                        array( "" ),
                        array( "United States of America" ), // 7bit ASCII
@@ -1170,7 +1170,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideRomanNumeralsData() {
+       public static function provideRomanNumeralsData() {
                return array(
                        array( 1, 'I' ),
                        array( 2, 'II' ),
@@ -1225,7 +1225,7 @@ class LanguageTest extends LanguageClassesTestCase {
                $this->assertEquals( $expected, $chosen );
        }
 
-       function providePluralData() {
+       public static function providePluralData() {
                // Params are: [expected text, number given, [the plural forms]]
                return array(
                        array( 'plural', 0, array(
@@ -1273,7 +1273,7 @@ class LanguageTest extends LanguageClassesTestCase {
                $this->assertEquals( $expected, $lang->translateBlockExpiry( $str ), $desc );
        }
 
-       function provideTranslateBlockExpiry() {
+       public static function provideTranslateBlockExpiry() {
                return array(
                        array( '2 hours', '2 hours', 'simple data from ipboptions' ),
                        array( 'indefinite', 'infinite', 'infinite from ipboptions' ),
@@ -1302,7 +1302,7 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideCommafyData() {
+       public static function provideCommafyData() {
                return array(
                        array( 1, '1' ),
                        array( 10, '10' ),
@@ -1341,7 +1341,7 @@ class LanguageTest extends LanguageClassesTestCase {
                $this->assertEquals( $expected, Language::isSupportedLanguage( $code ), $comment );
        }
 
-       static function provideIsSupportedLanguage() {
+       public static function provideIsSupportedLanguage() {
                return array(
                        array( 'en', true, 'is supported language' ),
                        array( 'fi', true, 'is supported language' ),
index 8af0eee..b2cc4c3 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageTi.php */
 class LanguageTiTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index abd8581..0299653 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageTl.php */
 class LanguageTlTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index e93d49d..464a310 100644 (file)
@@ -31,7 +31,7 @@ class LanguageTrTest extends LanguageClassesTestCase {
                $this->assertEquals( $expected, $res, $msg );
        }
 
-       function provideDottedAndDotlessI() {
+       public static function provideDottedAndDotlessI() {
                return array(
                        # function, input, input case, expected
                        # Case changed:
index 9bbfaf6..66cd183 100644 (file)
@@ -8,15 +8,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageUk.php */
 class LanguageUkTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -33,16 +37,16 @@ class LanguageUkTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralTwoForms() {
+       public static function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
 }
index 28329fa..813222d 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageWa.php */
 class LanguageWaTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       public static function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index 40d24fc..f82898f 100644 (file)
@@ -73,8 +73,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         * Clears $wgUser, and reports errors from addDBData to PHPUnit
         */
        protected function setUp() {
-               global $wgUser;
-
                parent::setUp();
 
                // Check if any Exception is stored for rethrowing from addDBData
@@ -83,7 +81,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                        throw $this->exceptionFromAddDBData;
                }
 
-               $wgUser = new User();
+               $this->setMwGlobals( 'wgUser', new User() );
        }
 
        /**
index 3902b68..279932f 100644 (file)
@@ -151,11 +151,12 @@ class SideBarTest extends MediaWikiLangTestCase {
 
        /**
         * Simple test to verify our helper assertAttribs() is functional
-        * Please note this assume MediaWiki default settings:
-        *   $wgNoFollowLinks = true
-        *   $wgExternalLinkTarget = false
         */
        function testTestAttributesAssertionHelper() {
+               $this->setMwGlobals( array(
+                       'wgNoFollowLinks' => true,
+                       'wgExternalLinkTarget' => false,
+               ) );
                $attribs = $this->getAttribs();
 
                $this->assertArrayHasKey( 'rel', $attribs );
@@ -168,38 +169,30 @@ class SideBarTest extends MediaWikiLangTestCase {
         * Test $wgNoFollowLinks in sidebar
         */
        function testRespectWgnofollowlinks() {
-               global $wgNoFollowLinks;
-               $saved = $wgNoFollowLinks;
-               $wgNoFollowLinks = false;
+               $this->setMwGlobals( 'wgNoFollowLinks', false );
 
                $attribs = $this->getAttribs();
                $this->assertArrayNotHasKey( 'rel', $attribs,
                        'External URL in sidebar do not have rel=nofollow when $wgNoFollowLinks = false'
                );
-
-               // Restore global
-               $wgNoFollowLinks = $saved;
        }
 
        /**
         * Test $wgExternaLinkTarget in sidebar
+        * @dataProvider dataRespectExternallinktarget
         */
-       function testRespectExternallinktarget() {
-               global $wgExternalLinkTarget;
-               $saved = $wgExternalLinkTarget;
-
-               $wgExternalLinkTarget = '_blank';
-               $attribs = $this->getAttribs();
-               $this->assertArrayHasKey( 'target', $attribs );
-               $this->assertEquals( $attribs['target'], '_blank' );
+       function testRespectExternallinktarget( $externalLinkTarget ) {
+               $this->setMwGlobals( 'wgExternalLinkTarget', $externalLinkTarget );
 
-               $wgExternalLinkTarget = '_self';
                $attribs = $this->getAttribs();
                $this->assertArrayHasKey( 'target', $attribs );
-               $this->assertEquals( $attribs['target'], '_self' );
-
-               // Restore global
-               $wgExternalLinkTarget = $saved;
+               $this->assertEquals( $attribs['target'], $externalLinkTarget );
        }
 
+       function dataRespectExternallinktarget() {
+               return array(
+                       array( '_blank' ),
+                       array( '_self' ),
+               );
+       }
 }
index f707588..4b8ee0d 100644 (file)
@@ -5,7 +5,9 @@
 
        var mwTestIgnore, mwTester,
                addons,
-               envExecCount;
+               envExecCount,
+               ELEMENT_NODE = 1,
+               TEXT_NODE = 3;
 
        /**
         * Add bogus to url to prevent IE crazy caching
                return $.when.apply( $, altPromises );
        };
 
+       /**
+        * Recursively convert a node to a plain object representing its structure.
+        * Only considers attributes and contents (elements and text nodes).
+        * Attribute values are compared strictly and not normalised.
+        *
+        * @param {Node} node
+        * @return {Object|string} Plain JavaScript value representing the node.
+        */
+       function getDomStructure( node ) {
+               var $node, children, processedChildren, i, len, el;
+               $node = $( node );
+               if ( node.nodeType === ELEMENT_NODE ) {
+                       children = $node.contents();
+                       processedChildren = [];
+                       for ( i = 0, len = children.length; i < len; i++ ) {
+                               el = children[i];
+                               if ( el.nodeType === ELEMENT_NODE || el.nodeType === TEXT_NODE ) {
+                                       processedChildren.push( getDomStructure( el ) );
+                               }
+                       }
+
+                       return {
+                               tagName: node.tagName,
+                               attributes: $node.getAttrs(),
+                               contents: processedChildren
+                       };
+               } else {
+                       // Should be text node
+                       return $node.text();
+               }
+       }
+
+       /**
+        * Gets structure of node for this HTML.
+        *
+        * @param {string} html HTML markup for one or more nodes.
+        */
+       function getHtmlStructure( html ) {
+               var el = $( '<div>' ).append( html )[0];
+               return getDomStructure( el );
+       }
+
        /**
         * Add-on assertion helpers
         */
                // Expect numerical value greater than or equal to X
                gtOrEq: function ( actual, expected, message ) {
                        QUnit.push( actual >= expected, actual, 'greater than or equal to ' + expected, message );
+               },
+
+               /**
+                * Asserts that two HTML strings are structurally equivalent.
+                *
+                * @param {string} actualHtml Actual HTML markup.
+                * @param {string} expectedHtml Expected HTML markup
+                * @param {string} message Assertion message.
+                */
+               htmlEqual: function ( actualHtml, expectedHtml, message ) {
+                       var actual = getHtmlStructure( actualHtml ),
+                               expected = getHtmlStructure( expectedHtml );
+
+                       QUnit.push(
+                               QUnit.equiv(
+                                       actual,
+                                       expected
+                               ),
+                               actual,
+                               expected,
+                               message
+                       );
+               },
+
+               /**
+                * Asserts that two HTML strings are not structurally equivalent.
+                *
+                * @param {string} actualHtml Actual HTML markup.
+                * @param {string} expectedHtml Expected HTML markup.
+                * @param {string} message Assertion message.
+                */
+               notHtmlEqual: function ( actualHtml, expectedHtml, message ) {
+                       var actual = getHtmlStructure( actualHtml ),
+                               expected = getHtmlStructure( expectedHtml );
+
+                       QUnit.push(
+                               !QUnit.equiv(
+                                       actual,
+                                       expected
+                               ),
+                               actual,
+                               expected,
+                               message
+                       );
                }
        };
 
                assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
        } );
 
+       QUnit.test( 'htmlEqual', 8, function ( assert ) {
+               assert.htmlEqual(
+                       '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>',
+                       '<div><p data-length=\'10\'  class=\'some classes\'>Child paragraph with <a href=\'http://example.com\' >A link</a></p>Regular text<span>A span</span></div>',
+                       'Attribute order, spacing and quotation marks (equal)'
+               );
+
+               assert.notHtmlEqual(
+                       '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>',
+                       '<div><p data-length=\'10\'  class=\'some more classes\'>Child paragraph with <a href=\'http://example.com\' >A link</a></p>Regular text<span>A span</span></div>',
+                       'Attribute order, spacing and quotation marks (not equal)'
+               );
+
+               assert.htmlEqual(
+                       '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="minor">Last</label><input id="lastname" />',
+                       '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="minor">Last</label><input id="lastname" />',
+                       'Multiple root nodes (equal)'
+               );
+
+               assert.notHtmlEqual(
+                       '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="minor">Last</label><input id="lastname" />',
+                       '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="important" >Last</label><input id="lastname" />',
+                       'Multiple root nodes (not equal, last label node is different)'
+               );
+
+               assert.htmlEqual(
+                       'fo&quot;o<br/>b&gt;ar',
+                       'fo"o<br/>b>ar',
+                       'Extra escaping is equal'
+               );
+               assert.notHtmlEqual(
+                       'foo&lt;br/&gt;bar',
+                       'foo<br/>bar',
+                       'Text escaping (not equal)'
+               );
+
+               assert.htmlEqual(
+                       'foo<a href="http://example.com">example</a>bar',
+                       'foo<a href="http://example.com">example</a>bar',
+                       'Outer text nodes are compared (equal)'
+               );
+
+               assert.notHtmlEqual(
+                       'foo<a href="http://example.com">example</a>bar',
+                       'foo<a href="http://example.com">example</a>quux',
+                       'Outer text nodes are compared (last text node different)'
+               );
+
+       } );
+
        QUnit.module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
 
        QUnit.test( 'Teardown', 3, function ( assert ) {
index 6159bdb..1a380a5 100644 (file)
                } );
        }
 
+       /**
+        * Run a table test by building a table with the given HTML,
+        * running some callback on it, then checking the results.
+        *
+        * @param {String} msg text to pass on to qunit for the comparison
+        * @param {String} HTML to make the table
+        * @param {String[][]} expected rows/cols to compare against at end
+        * @param {function($table)} callback something to do with the table before we compare
+        */
+       function tableTestHTML( msg, html, expected, callback ) {
+               QUnit.test( msg, 1, function ( assert ) {
+                       var $table = $( html );
+
+                       // Give caller a chance to set up sorting and manipulate the table.
+                       if ( callback ) {
+                               callback( $table );
+                       } else {
+                               $table.tablesorter();
+                               $table.find( '#sortme' ).click();
+                       }
+
+                       // Table sorting is done synchronously; if it ever needs to change back
+                       // to asynchronous, we'll need a timeout or a callback here.
+                       var extracted = tableExtract( $table );
+                       assert.deepEqual( extracted, expected, msg );
+               } );
+       }
+
        function reversed( arr ) {
                // Clone array
                var arr2 = arr.slice( 0 );
                        'Applied correct sorting order'
                );
        } );
+
+       // bug 41889 - exploding rowspans in more complex cases
+       tableTestHTML(
+               'Rowspan exploding with row headers',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><th rowspan="2">foo</th><td rowspan="2">bar</td><td>baz</td></tr>' +
+                       '<tr><td>2</td><td>baz</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo', 'bar', 'baz' ],
+                       [ '2', 'foo', 'bar', 'baz' ]
+               ]
+       );
+
+       tableTestHTML(
+               'Rowspan exploding with colspanned cells',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td></tr>' +
+                       '<tr><td>2</td><td colspan="2">foobar</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo', 'bar', 'baz' ],
+                       [ '2', 'foobar', 'baz' ]
+               ]
+       );
+
+       tableTestHTML(
+               'Rowspan exploding with colspanned cells (2)',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th><th>quux</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>quux</td></tr>' +
+                       '<tr><td>2</td><td colspan="2">foobar</td><td>quux</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo', 'bar', 'baz', 'quux' ],
+                       [ '2', 'foobar', 'baz', 'quux' ]
+               ]
+       );
+
+       tableTestHTML(
+               'Rowspan exploding with rightmost rows spanning most',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td rowspan="2">foo</td><td rowspan="4">bar</td></tr>' +
+                       '<tr><td>2</td></tr>' +
+                       '<tr><td>3</td><td rowspan="2">foo</td></tr>' +
+                       '<tr><td>4</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo', 'bar' ],
+                       [ '2', 'foo', 'bar' ],
+                       [ '3', 'foo', 'bar' ],
+                       [ '4', 'foo', 'bar' ]
+               ]
+       );
+
+       tableTestHTML(
+               'Rowspan exploding with rightmost rows spanning most (2)',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td rowspan="2">foo</td><td rowspan="4">bar</td><td>baz</td></tr>' +
+                       '<tr><td>2</td><td>baz</td></tr>' +
+                       '<tr><td>3</td><td rowspan="2">foo</td><td>baz</td></tr>' +
+                       '<tr><td>4</td><td>baz</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo', 'bar', 'baz' ],
+                       [ '2', 'foo', 'bar', 'baz' ],
+                       [ '3', 'foo', 'bar', 'baz' ],
+                       [ '4', 'foo', 'bar', 'baz' ]
+               ]
+       );
+
+       tableTestHTML(
+               'Rowspan exploding with row-and-colspanned cells',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo1</th><th>foo2</th><th>bar</th><th>baz</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td rowspan="2">foo1</td><td rowspan="2">foo2</td><td rowspan="4">bar</td><td>baz</td></tr>' +
+                       '<tr><td>2</td><td>baz</td></tr>' +
+                       '<tr><td>3</td><td colspan="2" rowspan="2">foo</td><td>baz</td></tr>' +
+                       '<tr><td>4</td><td>baz</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo1', 'foo2', 'bar', 'baz' ],
+                       [ '2', 'foo1', 'foo2', 'bar', 'baz' ],
+                       [ '3', 'foo', 'bar', 'baz' ],
+                       [ '4', 'foo', 'bar', 'baz' ]
+               ]
+       );
+
+       tableTestHTML(
+               'Rowspan exploding with uneven rowspan layout',
+               '<table class="sortable">' +
+                       '<thead><tr><th id="sortme">n</th><th>foo1</th><th>foo2</th><th>foo3</th><th>bar</th><th>baz</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>1</td><td rowspan="2">foo1</td><td rowspan="2">foo2</td><td rowspan="2">foo3</td><td>bar</td><td>baz</td></tr>' +
+                       '<tr><td>2</td><td rowspan="3">bar</td><td>baz</td></tr>' +
+                       '<tr><td>3</td><td rowspan="2">foo1</td><td rowspan="2">foo2</td><td rowspan="2">foo3</td><td>baz</td></tr>' +
+                       '<tr><td>4</td><td>baz</td></tr>' +
+                       '</tbody></table>',
+               [
+                       [ '1', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ],
+                       [ '2', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ],
+                       [ '3', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ],
+                       [ '4', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ]
+               ]
+       );
+
 }( jQuery, mediaWiki ) );
index 3fbc831..9efa509 100644 (file)
@@ -21,8 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
  */
 
 class SeleniumServerManager {
index d6b7cb8..4583360 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiButtonsAvailabilityTestCase
  *
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
-
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
@@ -35,7 +30,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  * Test Case Name :'Back' and 'Continue' button availability
  * Version        : MediaWiki 1.18alpha
  */
-
 class MediaWikiButtonsAvailabilityTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 76a794c..6375d66 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiDifferentDatabaseAccountTestCase
  *
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
-
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
@@ -35,7 +30,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  * Test Case Name : Install MediaWiki with different Database accounts for web access.
  * Version        : MediaWiki 1.18alpha
  */
-
 class MediaWikiDifferentDatabaseAccountTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 2c879c3..fad4e06 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiDifferntDatabasePrefixTestCase
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
@@ -35,7 +31,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  *                  database prefixes(Share one database between multiple wikis).
  * Version        : MediaWiki 1.18alpha
  */
-
 class MediaWikiDifferntDatabasePrefixTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 7eb6d38..37f5af2 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiErrorsConnectToDatabasePageTestCase
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 
index e3d4266..536ceb6 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiErrorsNamepageTestCase
  *
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
+
 /**
  * Test Case ID   : 10 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
  * Test Case Name : Invalid/ blank values for fields in 'Name' page.
  * Version        : MediaWiki 1.18alpha
  */
-
-require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
-
 class MediaWikiErrorsNamepageTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 961f692..f0efce6 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiHelpFieldHintTestCase
  *
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
+
 /**
  * Test Case ID   : 29 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
  * Test Case Name : Help field hint availability for the fields.
  * Version        : MediaWiki 1.18alpha
  */
-
-require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
-
 class MediaWikiHelpFieldHintTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 06bad30..a9a8fc3 100644 (file)
@@ -21,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
index 2663f65..86a4624 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiInstallationConfig
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 
index f63c2eb..2b7d48e 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiInstallationConfig
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 
index b271c7e..3d7996b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiInstallationConfig
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 
index f179113..6946cc7 100644 (file)
@@ -21,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 if ( PHP_SAPI != 'cli' ) {
index 0aa9d41..92f26d0 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiOnAlreadyInstalledTestCase
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
index aa307b7..e9be370 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiMySQLiteataBaseTestCase
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 
index 7f6dfe3..ce27500 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 
index 325ee1a..f34210c 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiRestartInstallationTestCase
  *
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
-
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
@@ -35,7 +30,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  * Test Case Name : Install mediawiki on a already installed Mediawiki.
  * Version        : MediaWiki 1.18alpha
  */
-
 class MediaWikiRestartInstallationTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 87e7ee3..039d71a 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiRightFrameworkLinksTestCase
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
@@ -37,7 +33,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  *                  User selects 'Upgrading' link.
  * Version        : MediaWiki 1.18alpha
  */
-
 class MediaWikiRightFrameworkLinksTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index 56634ec..cd901d1 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiUpgradeExistingDatabaseTestCase
  *
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
-
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
@@ -35,7 +30,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  * Test Case Name : Install Mediawiki by updating the existing database.
  * Version        : MediaWiki 1.18alpha
  */
-
 class MediaWikiUpgradeExistingDatabaseTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index b2fa7e6..9733152 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * MediaWikiUserInterfaceTestCase
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
  */
 
 require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
@@ -35,8 +31,6 @@ require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
  * Database settings/ Name/ Options/ Install/ Complete/ Restart Inslation pages
  * Version        : MediaWiki 1.18alpha
  */
-
-
 class MediaWikiUserInterfaceTestCase extends MediaWikiInstallationCommonFunction {
        function setUp() {
                parent::setUp();
index a74efc5..2803ff2 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class AddContentToNewPageTestCase extends SeleniumTestCase {
index 19dc927..c70af33 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class AddNewPageTestCase extends SeleniumTestCase {
index e29f2c7..a603f99 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 Class CreateAccountTestCase extends SeleniumTestCase {
index eb25f8b..f0005cd 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class DeletePageAdminTestCase extends SeleniumTestCase {
index 81310b1..77282e4 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class EmailPasswordTestCase extends SeleniumTestCase {
index aeb2315..7fd8e07 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class MediaWikiEditorConfig {
index 3964dc1..d2eaa40 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class MovePageTestCase extends SeleniumTestCase {
index 730323d..81e3a4d 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
index bc7c768..842108f 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
index bde1b57..5fdc5c8 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class PageSearchTestCase extends SeleniumTestCase {
index 615c23c..036201f 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class PreviewPageTestCase extends SeleniumTestCase {
index 80eacc5..1e4cc2d 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class SavePageTestCase extends SeleniumTestCase {
index a68ea97..c70e38f 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Selenium server manager
  *
@@ -22,9 +21,6 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  * http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
  */
 
 class UserPreferencesTestCase extends SeleniumTestCase {