Merge "(bug 22457) More natural flow for the "By e-mail" feature"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 24 Jan 2013 23:14:52 +0000 (23:14 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 24 Jan 2013 23:14:52 +0000 (23:14 +0000)
558 files changed:
.gitignore
CREDITS
RELEASE-NOTES-1.21
UPGRADE
bin/ulimit4.sh [deleted file]
bin/ulimit5.sh [new file with mode: 0644]
docs/hooks.txt
includes/ArrayUtils.php [new file with mode: 0644]
includes/Article.php
includes/AutoLoader.php
includes/Block.php
includes/CategoryViewer.php
includes/ChangesList.php
includes/DefaultSettings.php
includes/EditPage.php
includes/FormOptions.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/HistoryBlob.php
includes/HttpFunctions.php
includes/ImagePage.php
includes/Linker.php
includes/Message.php
includes/MessageBlobStore.php
includes/OutputPage.php
includes/Preferences.php
includes/ProtectionForm.php
includes/RecentChange.php
includes/ScopedCallback.php [new file with mode: 0644]
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPageFactory.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WebRequest.php
includes/Wiki.php
includes/WikiPage.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php [new file with mode: 0644]
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatDbg.php
includes/api/ApiFormatDump.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatNone.php
includes/api/ApiFormatPhp.php
includes/api/ApiFormatRaw.php
includes/api/ApiFormatTxt.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiFormatYaml.php
includes/api/ApiHelp.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDisabled.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiResult.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiWatch.php
includes/cache/HTMLCacheUpdate.php
includes/cache/SquidUpdate.php
includes/content/ContentHandler.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/dao/DBAccessBase.php
includes/db/Database.php
includes/db/DatabaseMysql.php
includes/db/IORMTable.php
includes/db/LoadBalancer.php
includes/db/ORMRow.php
includes/db/ORMTable.php
includes/diff/DifferenceEngine.php
includes/externalstore/ExternalStore.php
includes/filebackend/FSFileBackend.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.i18n.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/SqliteUpdater.php
includes/interwiki/Interwiki.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueDB.php
includes/job/JobQueueGroup.php
includes/job/jobs/NullJob.php
includes/libs/CSSJanus.php
includes/logging/LogEntry.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/objectcache/APCBagOStuff.php
includes/objectcache/BagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/EhcacheBagOStuff.php
includes/objectcache/EmptyBagOStuff.php
includes/objectcache/HashBagOStuff.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedClient.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php
includes/objectcache/XCacheBagOStuff.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/Parser_LinkHooks.php
includes/parser/Tidy.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimpleText.php
includes/profiler/ProfilerSimpleTrace.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/site/MediaWikiSite.php
includes/site/Site.php
includes/site/SiteArray.php [deleted file]
includes/site/SiteList.php
includes/site/SiteObject.php [deleted file]
includes/site/SiteSQLStore.php [new file with mode: 0644]
includes/site/SiteStore.php [new file with mode: 0644]
includes/site/Sites.php [deleted file]
includes/site/SitesTable.php [deleted file]
includes/specials/SpecialContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/upload/AssembleUploadChunks.php
includes/upload/PublishStashedFile.php [new file with mode: 0644]
includes/upload/UploadBase.php
includes/upload/UploadFromStash.php
languages/Language.php
languages/data/plurals-mediawiki.xml
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAls.php [deleted file]
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArn.php
languages/messages/MessagesAry.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAvk.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBat_smg.php [deleted file]
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBe_x_old.php [deleted file]
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBo.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCps.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/MessagesCv.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesDv.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesExt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFiu_vro.php [deleted file]
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.php
languages/messages/MessagesHa.php
languages/messages/MessagesHak.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHil.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIg.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJam.php
languages/messages/MessagesJut.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKoi.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLfn.php
languages/messages/MessagesLg.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLiv.php
languages/messages/MessagesLmo.php
languages/messages/MessagesLn.php
languages/messages/MessagesLo.php
languages/messages/MessagesLoz.php
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesLzz.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMwl.php
languages/messages/MessagesMy.php
languages/messages/MessagesMyv.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNah.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesNo.php [deleted file]
languages/messages/MessagesNso.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPam.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPnt.php
languages/messages/MessagesPrg.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesQug.php
languages/messages/MessagesRgn.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_rup.php [deleted file]
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSat.php
languages/messages/MessagesSc.php
languages/messages/MessagesScn.php
languages/messages/MessagesSco.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSei.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSimple.php [deleted file]
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSrn.php
languages/messages/MessagesStq.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTcy.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTg_cyrl.php
languages/messages/MessagesTg_latn.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTo.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVmf.php
languages/messages/MessagesVo.php
languages/messages/MessagesVot.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesWo.php
languages/messages/MessagesWuu.php
languages/messages/MessagesXal.php
languages/messages/MessagesXmf.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh_classical.php [deleted file]
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/messages/MessagesZh_min_nan.php [deleted file]
languages/messages/MessagesZh_yue.php [deleted file]
maintenance/Maintenance.php
maintenance/archives/patch-ufg_group-length-increase-255.sql [new file with mode: 0644]
maintenance/archives/patch-ufg_group-length-increase.sql [deleted file]
maintenance/archives/patch-ug_group-length-increase-255.sql [new file with mode: 0644]
maintenance/archives/patch-ug_group-length-increase.sql [deleted file]
maintenance/archives/patch-user_former_groups.sql
maintenance/cleanupUploadStash.php
maintenance/copyFileBackend.php
maintenance/fixSlaveDesync.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/mcc.php
maintenance/mctest.php
maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ufg_group-length-increase.sql [deleted file]
maintenance/oracle/archives/patch-ug_group-length-increase-255.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ug_group-length-increase.sql [deleted file]
maintenance/oracle/archives/patch-user_former_groups.sql
maintenance/oracle/tables.sql
maintenance/orphans.php
maintenance/purgeList.php
maintenance/rebuildLocalisationCache.php
maintenance/refreshLinks.php
maintenance/runJobs.php
maintenance/sqlite/archives/patch-ufg_group-length-increase-255.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-ufg_group-length-increase.sql [deleted file]
maintenance/sqlite/archives/patch-ug_group-length-increase-255.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-ug_group-length-increase.sql [deleted file]
maintenance/storage/compressOld.php
maintenance/tables.sql
resources/Resources.php
resources/jquery/jquery.client.js
resources/mediawiki.action/mediawiki.action.edit.preview.js
resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki/mediawiki.Uri.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.jqueryMsg.peg
skins/common/commonPrint.css
tests/TestsAutoLoader.php
tests/parser/parserTests.txt
tests/phpunit/Makefile
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/OutputPageTest.php [new file with mode: 0644]
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/api/ApiAccountCreationTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiParseTest.php
tests/phpunit/includes/api/ApiPurgeTest.php
tests/phpunit/includes/api/ApiQueryRevisionsTest.php
tests/phpunit/includes/api/ApiQueryTest.php
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/api/format/ApiFormatPhpTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/content/WikitextContentTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/ORMTableTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/libs/CSSJanusTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php [new file with mode: 0644]
tests/phpunit/includes/site/MediaWikiSiteTest.php
tests/phpunit/includes/site/SiteArrayTest.php [deleted file]
tests/phpunit/includes/site/SiteListTest.php
tests/phpunit/includes/site/SiteObjectTest.php [deleted file]
tests/phpunit/includes/site/SiteSQLStoreTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SiteTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SitesTest.php [deleted file]
tests/phpunit/includes/site/TestSites.php
tests/phpunit/languages/LanguageBhTest.php [deleted file]
tests/phpunit/languages/LanguageBhoTest.php [new file with mode: 0644]
tests/phpunit/languages/LanguageTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
thumb.php

index a47a454..004ecf4 100644 (file)
@@ -1,6 +1,9 @@
 # Repository management
 .svn
 
+# git-deploy status file:
+/.deploy
+
 # Editors
 *.kate-swp
 *~
diff --git a/CREDITS b/CREDITS
index ca5d6d7..a03ad5e 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -120,6 +120,7 @@ following names for their contribution to the product.
 * Daniel Werner
 * David Baumgarten
 * Denny Vrandecic
+* Dévai Tamás
 * Edward Z. Yang
 * Elvis Stansvik
 * Erwin Dokter
index 896dfe4..1efd80d 100644 (file)
@@ -1,4 +1,3 @@
-
 Security reminder: MediaWiki does not require PHP's register_globals. If you
 have it on, turn it '''off''' if you can.
 
@@ -16,6 +15,7 @@ production.
 * (bug 39957) Added $wgUnwatchedPageThreshold, specifying minimum count
   of page watchers required for the number to be accessible to users
   without the unwatchedpages permission.
+* $wgBug34832TransitionalRollback has been removed.
 
 === New features in 1.21 ===
 * (bug 38110) Schema changes (adding or dropping tables, indicies and
@@ -60,12 +60,31 @@ production.
   debug mode: wfMsg, wfMsgNoTrans, wfMsgForContent, wfMsgForContentNoTrans,
   wfMsgReal, wfMsgGetKey, wfMsgHtml, wfMsgWikiHtml, wfMsgExt, wfEmptyMsg. Use
   the Message class, or the global method wfMessage.
+* Added $wgEnableCanonicalServerLink, off by default. If enabled, a
+  <link rel=canonical> tag is added to every page indicating the correct server
+  to use.
 * Debug message emitted by wfDebugLog() will now be prefixed with the group
   name when its logged to the default log file. That is the case whenever the
   group has no key in wgDebugLogGroups, that will help triage the default log.
 * (bug 24620) Add types to LogFormatter.
 * jQuery JSON upgraded from 2.3 to 2.4.0.
 * Added GetDoubleUnderscoreIDs hook, for modifying the list of magic words.
+* DatabaseUpdater class has two new methods to ease extensions schema changes:
+  dropExtensionIndex and renameExtensionIndex.
+* New preference type - 'api'. Preferences of this type are not shown on
+  Special:Preferences, but are still available via the action=options API.
+* (bug 39397) Hide rollback link if a user is the only contributor of the page.
+* $wgPageInfoTransclusionLimit limits the list size of transcluded articles
+  on the info action. Default is 50.
+* Added action=createaccount to allow user account creation.
+* (bug 40124) action=options API also allows for setting of arbitrary
+  preferences, provided that their names are prefixed with 'userjs-'. This
+  officially reenables the feature that was undocumented and defective
+  in MW 1.20 (saving preferences using Special:Preferences cleared any
+  additional fields) and which has been disabled in 1.20.1 as a part of
+  a security fix (bug 42202).
+* Added the ability to limit the wall clock time used by shell processes,
+  as well as the CPU time. Configurable with $wgMaxShellWallClockTime.
 
 === Bug fixes in 1.21 ===
 * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
@@ -110,7 +129,9 @@ production.
 * (bug 14901) Email notification mistakes log action for new page creation.
   Enotif no longer sends "page has been created" notifications for some log
   actions. The following events now have a correct message: page creation,
-  deletion, move, restore (undeletion), change (edit).
+  deletion, move, restore (undeletion), change (edit). Parameter
+  $CHANGEDORCREATED is deprecated in 'enotif_body' and scheduled for removal in
+  MediaWiki 1.23.
 * (bug 457) In the sidebar of Vector, CologneBlue, Monobook, and Monobook-based
   skins, the heading levels have been changed from (variously per skin)
   <h4>, <h5> or <h6> to only <h3>s, with a <h2> hidden heading above them.
@@ -127,7 +148,12 @@ production.
 * (bug 41733) Hide "New user message" (.usermessage) element from printable view.
 * (bug 39062) Special:Contributions will display changes that don't have
   a parent id instead of just an empty bullet item.
+* (bug 37209) "LinkCache doesn't currently know about this title" error fixed.
 * wfMerge() now works if $wgDiff3 contains spaces
+* (bug 43052) mediawiki.action.view.dblClickEdit.dblClickEdit should trigger
+  ca-edit click instead opening URL directly.
+* (bug 43964) Invalid value of "link" parameter in <gallery> no longer produces
+  a fatal error.
 
 === API changes in 1.21 ===
 * prop=revisions can now report the contentmodel and contentformat.
@@ -151,6 +177,24 @@ production.
 * BREAKING CHANGE: list=logevents output format changed for details of some log
   types. Specifically, details that were formerly reported under a key like
   "4::foo" will now be reported under a key of simply "foo".
+* BREAKING CHANGE: '??_badcontinue' error code was changed to '??badcontinue'
+  for all query modules.
+* ApiQueryBase adds 'badcontinue' error code if module has 'continue' parameter.
+* (bug 35885) Removed version parameter and all getVersion() methods.
+* action=options now takes a "resetkinds" option, which allows only resetting
+  certain types of preferences when the "reset" option is set.
+* (bug 36751) ApiQueryImageInfo now returns imageinfo for the redirect target
+  when queried with &redirects=.
+* (bug 31849) ApiQueryImageInfo no longer gets confused when asked for info on
+  a redirect and its target.
+* (bug 43849) ApiQueryImageInfo no longer throws exceptions with ForeignDBRepo
+  redirects.
+* On error, any warnings generated before that error will be shown in the result.
+
+=== API internal changes in 1.21 ===
+* For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
+  Never use on the production servers, as this flag introduces security holes.
+  Whenever enabled, a warning will also be added to all output.
 
 === Languages updated in 1.21 ===
 
diff --git a/UPGRADE b/UPGRADE
index 5e92806..2c6df98 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -39,8 +39,8 @@ Download the files for the new version of the software. These are available
 as a compressed "tar" archive from the Wikimedia Download Service
 (http://download.wikimedia.org/mediawiki).
 
-You can also obtain the new files directly from our Subversion source code
-repository, via a checkout or export operation.
+You can also obtain the new files directly from our Git source code
+repository.
 
 Replace the existing MediaWiki files with the new. You should preserve the
 LocalSettings.php file and the "extensions" and "images" directories.
diff --git a/bin/ulimit4.sh b/bin/ulimit4.sh
deleted file mode 100755 (executable)
index 2a840d2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-ulimit -t $1 -v $2 -f $3
-eval "$4"
diff --git a/bin/ulimit5.sh b/bin/ulimit5.sh
new file mode 100644 (file)
index 0000000..3f24172
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+if [ "$1" -gt 0 ]; then
+       ulimit -t "$1"
+fi
+if [ "$2" -gt 0 ]; then
+       ulimit -v "$2"
+fi
+if [ "$3" -gt 0 ]; then
+       ulimit -f "$3"
+fi
+if [ "$4" -gt 0 ]; then
+       timeout $4 /bin/bash -c "$5"
+       STATUS="$?"
+       if [ "$STATUS" == 124 ]; then
+               echo "ulimit5.sh: timed out." 1>&2
+       fi
+       exit "$STATUS"
+else
+       eval "$5"
+fi
index d752fd0..6574c17 100644 (file)
@@ -822,7 +822,7 @@ etc.
 'DatabaseOraclePostInit': Called after initialising an Oracle database
 &$db: the DatabaseOracle object
 
-'Debug': called when outputting a debug log line via wfDebug() or wfDebugLog()
+'Debug': Called when outputting a debug log line via wfDebug() or wfDebugLog()
 $text: plaintext string to be output
 $group: null or a string naming a logging group (as defined in $wgDebugLogGroups)
 
@@ -833,7 +833,7 @@ $title: the diff page title (nullable)
 $old: the ?old= param value from the url
 $new: the ?new= param value from the url
 
-'DiffViewHeader': called before diff display
+'DiffViewHeader': Called before diff display
 $diff: DifferenceEngine object that's calling
 $oldRev: Revision object of the "old" revision (may be null/invalid)
 $newRev: Revision object of the "new" revision
@@ -869,11 +869,18 @@ $text: content of the edit box
 &$error: error message to return
 $summary: Edit summary for page
 
-'EditFilterMergedContent': Post-section-merge edit filter
-$editor: EditPage instance (object)
-$content: content of the edit box, as a Content object
-&$error: error message to return
+'EditFilterMergedContent': Post-section-merge edit filter.
+This may be triggered by the EditPage or any other facility that modifies page content.
+Use the $status object to indicate whether the edit should be allowed, and to provide
+a reason for disallowing it. Return false to abort the edit, and true to continue.
+Returning true if $status->isOK() returns false means "don't save but continue user
+interaction", e.g. show the edit form.
+$context: object implementing the IContextSource interface.
+$content: content of the edit box, as a Content object.
+$status: Status object to represent errors, etc.
 $summary: Edit summary for page
+$user: the User object representing the user whois performing the edit.
+$minoredit: whether the edit was marked as minor by the user.
 
 'EditFormPreloadText': Allows population of the edit form when creating
 new pages
@@ -884,7 +891,7 @@ new pages
 pages
 $editPage: EditPage    object
 
-'EditPage::attemptSave': called before an article is
+'EditPage::attemptSave': Called before an article is
 saved, that is before WikiPage::doEditContent() is called
 $editpage_Obj: the current EditPage object
 
@@ -923,46 +930,51 @@ sections.
 &$editor: EditPage instance
 &$out: OutputPage instance
 
-'EditPageBeforeEditButtons':  allows modifying the edit buttons below the
-textarea in the edit form
+'EditPageBeforeEditButtons': Allows modifying the edit buttons below the
+textarea in the edit form.
 &$editpage: The current EditPage object
 &$buttons: Array of edit buttons "Save", "Preview", "Live", and "Diff"
 &$tabindex: HTML tabindex of the last edit check/button
 
-'EditPageBeforeEditChecks':  allows modifying the edit checks below the
-textarea in the edit form
+'EditPageBeforeEditChecks': Allows modifying the edit checks below the textarea
+in the edit form.
 &$editpage: The current EditPage object
 &$checks: Array of edit checks like "watch this page"/"minor edit"
 &$tabindex: HTML tabindex of the last edit check/button
 
-'EditPageBeforeEditToolbar': allows modifying the edit toolbar above the
-textarea in the edit form
+'EditPageBeforeEditToolbar': Allows modifying the edit toolbar above the
+textarea in the edit form.
 &$toolbar: The toolbar HTMl
 
-'EditPageCopyrightWarning': Allow for site and per-namespace customization of contribution/copyright notice.
+'EditPageCopyrightWarning': Allow for site and per-namespace customization of
+contribution/copyright notice.
 $title: title of page being edited
-&$msg: localization message name, overridable. Default is either 'copyrightwarning' or 'copyrightwarning2'
+&$msg: localization message name, overridable. Default is either
+  'copyrightwarning' or 'copyrightwarning2'.
 
-'EditPageGetDiffText': Allow modifying the wikitext that will be used in
-"Show changes". DEPRECATED. Use EditPageGetDiffContent instead.
-Note that it is preferrable to implement diff handling for different data types using the ContentHandler facility.
+'EditPageGetDiffText': DEPRECATED. Use EditPageGetDiffContent instead. Allow
+modifying the wikitext that will be used in "Show changes". Note that it is
+preferrable to implement diff handling for different data types using the
+ContentHandler facility.
 $editPage: EditPage object
 &$newtext: wikitext that will be used as "your version"
 
 'EditPageGetDiffContent': Allow modifying the wikitext that will be used in
-"Show changes".
-Note that it is preferrable to implement diff handling for different data types using the ContentHandler facility.
+"Show changes". Note that it is preferrable to implement diff handling for
+different data types using the ContentHandler facility.
 $editPage: EditPage object
 &$newtext: wikitext that will be used as "your version"
 
-'EditPageGetPreviewText': Allow modifying the wikitext that will be previewed.
-DEPRECATED. Use EditPageGetPreviewContent instead.
-Note that it is preferrable to implement previews for different data types using the COntentHandler facility.
+'EditPageGetPreviewText': DEPRECATED. Use EditPageGetPreviewContent instead.
+Allow modifying the wikitext that will be previewed. Note that it is preferrable
+to implement previews for different data types using the COntentHandler
+facility.
 $editPage: EditPage object
 &$toparse: wikitext that will be parsed
 
-'EditPageGetPreviewContent': Allow modifying the wikitext that will be previewed.
-Note that it is preferrable to implement previews for different data types using the COntentHandler facility.
+'EditPageGetPreviewContent': Allow modifying the wikitext that will be
+previewed. Note that it is preferrable to implement previews for different data
+types using the COntentHandler facility.
 $editPage: EditPage object
 &$content: Content object to be previewed (may be replaced by hook function)
 
@@ -970,7 +982,7 @@ $editPage: EditPage object
 &$editpage: The current EditPage object
 &$res: the HTML of the error text
 
-'EditPageTosSummary':  Give a chance for site and per-namespace customizations
+'EditPageTosSummary': Give a chance for site and per-namespace customizations
 of terms of service summary link that might exist separately from the copyright
 notice.
 $title: title of page being edited
@@ -984,73 +996,80 @@ $link: Default link
 &$result: Result (alter this to override the generated links)
 $lang: The language code to use for the link in the wfMessage function
 
-'EmailConfirmed': When checking that the user's email address is "confirmed"
+'EmailConfirmed': When checking that the user's email address is "confirmed".
 $user: User being checked
 $confirmed: Whether or not the email address is confirmed
 This runs before the other checks, such as anonymity and the real check; return
 true to allow those checks to occur, and false if checking is done.
 
-'EmailUser': before sending email from one user to another
+'EmailUser': Before sending email from one user to another.
 $to: address of receiving user
 $from: address of sending user
 $subject: subject of the mail
 $text: text of the mail
 
-'EmailUserCC': before sending the copy of the email to the author
+'EmailUserCC': Before sending the copy of the email to the author.
 $to: address of receiving user
 $from: address of sending user
 $subject: subject of the mail
 $text: text of the mail
 
-'EmailUserComplete': after sending email from one user to another
+'EmailUserComplete': After sending email from one user to another.
 $to: address of receiving user
 $from: address of sending user
 $subject: subject of the mail
 $text: text of the mail
 
-'EmailUserForm': after building the email user form object
+'EmailUserForm': After building the email user form object.
 $form: HTMLForm object
 
-'EmailUserPermissionsErrors': to retrieve permissions errors for emailing a user.
+'EmailUserPermissionsErrors': to retrieve permissions errors for emailing a
+user.
 $user: The user who is trying to email another user.
 $editToken: The user's edit token.
-&$hookErr: Out-param for the error. Passed as the parameters to OutputPage::showErrorPage.
+&$hookErr: Out-param for the error. Passed as the parameters to
+  OutputPage::showErrorPage.
 
-'ExemptFromAccountCreationThrottle': Exemption from the account creation throttle
+'ExemptFromAccountCreationThrottle': Exemption from the account creation
+throttle.
 $ip: The ip address of the user
 
-'ExtensionTypes': called when generating the extensions credits, use this to change the tables headers
+'ExtensionTypes': Called when generating the extensions credits, use this to
+change the tables headers.
 &$extTypes: associative array of extensions types
 
-'ExtractThumbParameters': called when extracting thumbnail parameters from a thumbnail file name
+'ExtractThumbParameters': Called when extracting thumbnail parameters from a
+thumbnail file name.
 $thumbname: the base name of the thumbnail file
 &$params: the currently extracted params (has source name, temp or archived zone)
 
-'FetchChangesList': When fetching the ChangesList derivative for
-a particular user
+'FetchChangesList': When fetching the ChangesList derivative for a particular
+user.
 $user: User the list is being fetched for
 &$skin: Skin object to be used with the list
-&$list: List object (defaults to NULL, change it to an object
-       instance and return false override the list derivative used)
+&$list: List object (defaults to NULL, change it to an object instance and
+  return false override the list derivative used)
 
-'FileDeleteComplete': When a file is deleted
+'FileDeleteComplete': When a file is deleted.
 $file: reference to the deleted file
 $oldimage: in case of the deletion of an old image, the name of the old file
 $article: in case all revisions of the file are deleted a reference to the
-       WikiFilePage associated with the file.
+  WikiFilePage associated with the file.
 $user: user who performed the deletion
 $reason: reason
 
-'FileTransformed': When a file is transformed and moved into storage
+'FileTransformed': When a file is transformed and moved into storage.
 $file: reference to the File object
 $thumb: the MediaTransformOutput object
 $tmpThumbPath: The temporary file system path of the transformed file
 $thumbPath: The permanent storage path of the transformed file
 
-'FileUpload': When a file upload occurs
+'FileUpload': When a file upload occurs.
 $file : Image object representing the file that was uploaded
-$reupload : Boolean indicating if there was a previously another image there or not (since 1.17)
-$hasDescription : Boolean indicating that there was already a description page and a new one from the comment wasn't created (since 1.17)
+$reupload : Boolean indicating if there was a previously another image there or
+  not (since 1.17)
+$hasDescription : Boolean indicating that there was already a description page
+  and a new one from the comment wasn't created (since 1.17)
 
 'FileUndeleteComplete': When a file is undeleted
 $title: title object to the file
@@ -1058,28 +1077,30 @@ $fileVersions: array of undeleted versions. Empty if all versions were restored
 $user: user who performed the undeletion
 $reason: reason
 
-'FormatAutocomments': When an autocomment is formatted by the Linker
- &$comment: Reference to the accumulated comment. Initially null, when set the default code will be skipped.
+'FormatAutocomments': When an autocomment is formatted by the Linker.
+ &$comment: Reference to the accumulated comment. Initially null, when set the
+   default code will be skipped.
  $pre: Initial part of the parsed comment before the call to the hook.
  $auto: The extracted part of the parsed comment before the call to the hook.
  $post: The final part of the parsed comment before the call to the hook.
  $title: An optional title object used to links to sections. Can be null.
  $local: Boolean indicating whether section links should refer to local page.
 
-'GetAutoPromoteGroups': When determining which autopromote groups a user
-is entitled to be in.
+'GetAutoPromoteGroups': When determining which autopromote groups a user is
+entitled to be in.
 &$user: user to promote.
 &$promote: groups that will be added.
 
 'GetBlockedStatus': after loading blocking status of an user from the database
 $user: user (object) being checked
 
-'GetCacheVaryCookies': get cookies that should vary cache options
+'GetCacheVaryCookies': Get cookies that should vary cache options.
 $out: OutputPage object
 &$cookies: array of cookies name, add a value to it if you want to add a cookie
-       that have to vary cache options
+  that have to vary cache options
 
-'GetCanonicalURL': modify fully-qualified URLs used for IRC and e-mail notifications
+'GetCanonicalURL': Modify fully-qualified URLs used for IRC and e-mail
+notifications.
 $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getCanonicalURL()
@@ -1088,161 +1109,170 @@ $query: query options passed to Title::getCanonicalURL()
 $title: Title object that we need to get a sortkey for
 &$sortkey: Sortkey to use.
 
-'GetDoubleUnderscoreIDs': modify the list of behavior switch (double underscore)
-magic words. Called by MagicWord.
+'GetDoubleUnderscoreIDs': Modify the list of behavior switch (double
+underscore) magic words. Called by MagicWord.
 &$doubleUnderscoreIDs: array of strings
 
-'GetFullURL': modify fully-qualified URLs used in redirects/export/offsite data
+'GetFullURL': Modify fully-qualified URLs used in redirects/export/offsite data.
 $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getFullURL()
 
-'GetInternalURL': modify fully-qualified URLs used for squid cache purging
+'GetInternalURL': Modify fully-qualified URLs used for squid cache purging.
 $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getInternalURL()
 
-'GetIP': modify the ip of the current user (called only once)
+'GetIP': modify the ip of the current user (called only once).
 &$ip: string holding the ip as determined so far
 
-'GetLinkColours': modify the CSS class of an array of page links
+'GetLinkColours': modify the CSS class of an array of page links.
 $linkcolour_ids: array of prefixed DB keys of the pages linked to,
        indexed by page_id.
 &$colours: (output) array of CSS classes, indexed by prefixed DB keys
 
-'GetLocalURL': modify local URLs as output into page links. Note that if you
-       are working with internal urls (non-interwiki) then it may be preferable
-       to work with the GetLocalURL::Internal or GetLocalURL::Article hooks as
-       GetLocalURL can be buggy for internal urls on render if you do not
-       re-implement the horrible hack that Title::getLocalURL uses
-       in your own extension.
+'GetLocalURL': Modify local URLs as output into page links. Note that if you are
+working with internal urls (non-interwiki) then it may be preferable to work
+with the GetLocalURL::Internal or GetLocalURL::Article hooks as GetLocalURL can
+be buggy for internal urls on render if you do not re-implement the horrible
+hack that Title::getLocalURL uses in your own extension.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getLocalURL()
 
-'GetLocalURL::Internal': modify local URLs to internal pages.
+'GetLocalURL::Internal': Modify local URLs to internal pages.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getLocalURL()
 
-'GetLocalURL::Article': modify local URLs specifically pointing to article paths
-       without any fancy queries or variants.
+'GetLocalURL::Article': Modify local URLs specifically pointing to article paths
+without any fancy queries or variants.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 
-'GetMetadataVersion': modify the image metadata version currently in use. This is
-       used when requesting image metadata from a ForiegnApiRepo. Media handlers
-       that need to have versioned metadata should add an element to the end of
-       the version array of the form 'handler_name=version'. Most media handlers
-       won't need to do this unless they broke backwards compatibility with a
-       previous version of the media handler metadata output.
+'GetMetadataVersion': Modify the image metadata version currently in use. This
+is used when requesting image metadata from a ForiegnApiRepo. Media handlers
+that need to have versioned metadata should add an element to the end of the
+version array of the form 'handler_name=version'. Most media handlers won't need
+to do this unless they broke backwards compatibility with a previous version of
+the media handler metadata output.
 &$version: Array of version strings
 
-'GetPreferences': modify user preferences
+'GetPreferences': Modify user preferences.
 $user: User whose preferences are being modified.
 &$preferences: Preferences description array, to be fed to an HTMLForm object
 
 'getUserPermissionsErrors': Add a permissions error when permissions errors are
-       checked for.  Use instead of userCan for most cases. Return false if the
-       user can't do it, and populate $result with the reason in the form of
-       array( messagename, param1, param2, ... ).  For consistency, error messages
-       should be plain text with no special coloring, bolding, etc. to show that
-       they're errors; presenting them properly to the user as errors is done by
-       the caller.
+checked for. Use instead of userCan for most cases. Return false if the user
+can't do it, and populate $result with the reason in the form of
+array( messagename, param1, param2, ... ). For consistency, error messages
+should be plain text with no special coloring, bolding, etc. to show that
+they're errors; presenting them properly to the user as errors is done by the
+caller.
 $title: Title object being checked against
 $user : Current user object
 $action: Action being checked
 $result: User permissions error to add. If none, return true.
 
-'getUserPermissionsErrorsExpensive': Absolutely the same, but is called only
-       if expensive checks are enabled.
+'getUserPermissionsErrorsExpensive': Equal to getUserPermissionsErrors, but is
+called only if expensive checks are enabled. Add a permissions error when
+permissions errors are checked for. Return false if the user can't do it, and
+populate $result with the reason in the form of array( messagename, param1,
+param2, ... ). For consistency, error messages should be plain text with no
+special coloring, bolding, etc. to show that they're errors; presenting them
+properly to the user as errors is done by the caller.
 
-'GitViewers': called when generating the list of git viewers for Special:Version, use
-       this to change the list.
-&$extTypes: associative array of repo URLS to viewer URLs.
+$title: Title object being checked against
+$user : Current user object
+$action: Action being checked
+$result: User permissions error to add. If none, return true.
 
+'GitViewers': Called when generating the list of git viewers for
+Special:Version, use this to change the list.
+&$extTypes: associative array of repo URLS to viewer URLs.
 
 '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.
+image insertion. You can skip the default logic entirely by returning false, or
+just modify a few things using call-by-reference.
 &$skin: Skin object
 &$title: Title object of the image
 &$file: File object, or false if it doesn't exist
 &$frameParams: Various parameters with special meanings; see documentation in
-       includes/Linker.php for Linker::makeImageLink
+  includes/Linker.php for Linker::makeImageLink
 &$handlerParams: Various parameters with special meanings; see documentation in
-       includes/Linker.php for Linker::makeImageLink
+  includes/Linker.php for Linker::makeImageLink
 &$time: Timestamp of file in 'YYYYMMDDHHIISS' string form, or false for current
 &$res: Final HTML output, used if you return false
 
 
 'ImageOpenShowImageInlineBefore': Call potential extension just before showing
-       the image on an image page
+the image on an image page.
 $imagePage: ImagePage object ($this)
 $output: $wgOut
 
-'ImagePageAfterImageLinks': called after the image links section on an image
-       page is built
+'ImagePageAfterImageLinks': Called after the image links section on an image
+page is built.
 $imagePage: ImagePage object ($this)
 &$html: HTML for the hook to add
 
-'ImagePageFileHistoryLine': called when a file history line is contructed
+'ImagePageFileHistoryLine': Called when a file history line is contructed.
 $file: the file
 $line: the HTML of the history line
 $css: the line CSS class
 
-'ImagePageFindFile': called when fetching the file associated with an image page
+'ImagePageFindFile': Called when fetching the file associated with an image
+page.
 $page: ImagePage object
 &$file: File object
 &$displayFile: displayed File object
 
-'ImagePageShowTOC': called when the file toc on an image page is generated
+'ImagePageShowTOC': Called when the file toc on an image page is generated.
 $page: ImagePage object
 &$toc: Array of <li> strings
 
 'ImgAuthBeforeStream': executed before file is streamed to user, but only when
-       using img_auth.php
+using img_auth.php.
 &$title: the Title object of the file as it would appear for the upload page
 &$path: the original file and path name when img_auth was invoked by the the web
-       server
+  server
 &$name: the name only component of the file
 &$result: The location to pass back results of the hook routine (only used if
-       failed)
-       $result[0]=The index of the header message
-       $result[1]=The index of the body text message
-       $result[2 through n]=Parameters passed to body text message. Please note the
-       header message cannot receive/use parameters.
+  failed)
+  $result[0]=The index of the header message
+  $result[1]=The index of the body text message
+  $result[2 through n]=Parameters passed to body text message. Please note the
+  header message cannot receive/use parameters.
 
-'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item
+'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item.
 $reader: XMLReader object
 $logInfo: Array of information
 Return false to stop further processing of the tag
 
-'ImportHandlePageXMLTag': When parsing a XML tag in a page
+'ImportHandlePageXMLTag': When parsing a XML tag in a page.
 $reader: XMLReader object
 $pageInfo: Array of information
 Return false to stop further processing of the tag
 
-'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision
+'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision.
 $reader: XMLReader object
 $pageInfo: Array of page information
 $revisionInfo: Array of revision information
 Return false to stop further processing of the tag
 
-'ImportHandleToplevelXMLTag': When parsing a top level XML tag
+'ImportHandleToplevelXMLTag': When parsing a top level XML tag.
 $reader: XMLReader object
 Return false to stop further processing of the tag
 
-'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload
+'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload.
 $reader: XMLReader object
 $revisionInfo: Array of information
 Return false to stop further processing of the tag
 
-'InfoAction': When building information to display on the action=info page
+'InfoAction': When building information to display on the action=info page.
 $context: IContextSource object
 &$pageInfo: Array of information
 
-'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect
+'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect.
 $title: Title object ($wgTitle)
 $request: WebRequest
 $ignoreRedirect: boolean to skip redirect check
@@ -1255,10 +1285,10 @@ $prefix: interwiki prefix we are looking for.
 &$iwData: output array describing the interwiki with keys iw_url, iw_local,
   iw_trans and optionally iw_api and iw_wikiid.
 
-'InternalParseBeforeSanitize': during Parser's internalParse method just before the
-parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/includeonly/
-onlyinclude and other processings. Ideal for syntax-extensions after template/parser
-function execution which respect nowiki and HTML-comments.
+'InternalParseBeforeSanitize': during Parser's internalParse method just before
+the parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/
+includeonly/onlyinclude and other processings. Ideal for syntax-extensions after
+template/parser function execution which respect nowiki and HTML-comments.
 &$parser: Parser object
 &$text: string containing partially parsed text
 &$stripState: Parser's internal StripState object
@@ -1269,7 +1299,8 @@ but after nowiki/noinclude/includeonly/onlyinclude and other processings.
 &$text: string containing partially parsed text
 &$stripState: Parser's internal StripState object
 
-'InvalidateEmailComplete': Called after a user's email has been invalidated successfully
+'InvalidateEmailComplete': Called after a user's email has been invalidated
+successfully.
 $user: user (object) whose email is being invalidated
 
 'IRCLineURL': When constructing the URL to use in an IRC notification.
@@ -1284,8 +1315,8 @@ $article: article (object) being checked
 $ip: IP being check
 $result: Change this value to override the result of wfIsTrustedProxy()
 
-'isValidEmailAddr': Override the result of User::isValidEmailAddr(), for ins-
-tance to return false if the domain name doesn't match your organization
+'isValidEmailAddr': Override the result of User::isValidEmailAddr(), for
+instance to return false if the domain name doesn't match your organization.
 $addr: The e-mail address entered by the user
 &$result: Set this and return false to override the internal checks
 
@@ -1320,42 +1351,42 @@ $lang: laguage code (string)
 $code language of the preferred translations
 
 'LinkBegin': Used when generating internal and interwiki links in
-Linker::link(), before processing starts.  Return false to skip default proces-
-sing and return $ret.  See documentation for Linker::link() for details on the
-expected meanings of parameters.
+Linker::link(), before processing starts.  Return false to skip default
+processing and return $ret. See documentation for Linker::link() for details on
+the expected meanings of parameters.
 $skin: the Skin object
 $target: the Title that the link is pointing to
-&$html: the contents that the <a> tag should have (raw HTML); null means "de-
-       fault"
-&$customAttribs: the HTML attributes that the <a> tag should have, in associa-
-       tive array form, with keys and values unescaped.  Should be merged with de-
-       fault values, with a value of false meaning to suppress the attribute.
+&$html: the contents that the <a> tag should have (raw HTML); null means
+  "default".
+&$customAttribs: the HTML attributes that the <a> tag should have, in
+associative array form, with keys and values unescaped.  Should be merged with
+default values, with a value of false meaning to suppress the attribute.
 &$query: the query string to add to the generated URL (the bit after the "?"),
-       in associative array form, with keys and values unescaped.
+  in associative array form, with keys and values unescaped.
 &$options: array of options.  Can include 'known', 'broken', 'noclasses'.
 &$ret: the value to return if your hook returns false.
 
 'LinkEnd': Used when generating internal and interwiki links in Linker::link(),
 just before the function returns a value.  If you return true, an <a> element
-with HTML attributes $attribs and contents $html will be returned.  If you re-
-turn false, $ret will be returned.
+with HTML attributes $attribs and contents $html will be returned.  If you
+return false, $ret will be returned.
 $skin: the Skin object
 $target: the Title object that the link is pointing to
 $options: the options.  Will always include either 'known' or 'broken', and may
-       include 'noclasses'.
+  include 'noclasses'.
 &$html: the final (raw HTML) contents of the <a> tag, after processing.
 &$attribs: the final HTML attributes of the <a> tag, after processing, in asso-
-       ciative array form.
+  ciative array form.
 &$ret: the value to return if your hook returns false.
 
 'LinkerMakeExternalImage': At the end of Linker::makeExternalImage() just
-before the return
+before the return.
 &$url: the image url
 &$alt: the image's alt text
 &$img: the new image HTML (if returning false)
 
 'LinkerMakeExternalLink': At the end of Linker::makeExternalLink() just
-before the return
+before the return.
 &$url: the link url
 &$text: the link text
 &$link: the new link HTML (if returning false)
@@ -1363,7 +1394,7 @@ before the return
 $linkType: The external link type
 
 'LinksUpdate': At the beginning of LinksUpdate::doUpdate() just before the
-actual update
+actual update.
 &$linksUpdate: the LinksUpdate object
 
 'LinksUpdateAfterInsert': At the end of LinksUpdate::incrTableUpdate() after
@@ -1382,10 +1413,10 @@ including delete and insert, has completed for all link tables
 'ListDefinedTags': When trying to find all defined tags.
 &$tags: The list of tags.
 
-'LoadExtensionSchemaUpdates': called during database installation and updates
+'LoadExtensionSchemaUpdates': Called during database installation and updates.
 &updater: A DatabaseUpdater subclass
 
-'LocalFile::getHistory': called before file history query performed
+'LocalFile::getHistory': Called before file history query performed.
 $file: the File object
 $tables: tables
 $fields: select fields
@@ -1393,91 +1424,89 @@ $conds: conditions
 $opts: query options
 $join_conds: JOIN conditions
 
-'LocalFilePurgeThumbnails': called before thumbnails for a local file a purged
+'LocalFilePurgeThumbnails': Called before thumbnails for a local file a purged.
 $file: the File object
 $archiveName: name of an old file version or false if it's the current one
 
-'LocalisationCacheRecache': Called when loading the localisation data into cache
+'LocalisationCacheRecache': Called when loading the localisation data into
+cache.
 $cache: The LocalisationCache object
 $code: language code
 &$alldata: The localisation data from core and extensions
 
-'LogEventsListShowLogExtract': called before the string is added to OutputPage. Returning false will prevent the string from being added to the OutputPage
+'LogEventsListShowLogExtract': Called before the string is added to OutputPage.
+Returning false will prevent the string from being added to the OutputPage.
 &$s: html string to show for the log extract
 $types: String or Array Log types to show
 $page: String or Title The page title to show log entries for
 $user: String The user who made the log entries
 $param: Associative Array with the following additional options:
- - lim Integer Limit of items to show, default is 50
- - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
- - showIfEmpty boolean Set to false if you don't want any output in case the loglist is empty if set to true (default), "No matching items in log" is displayed if loglist is empty
- - msgKey Array If you want a nice box with a message, set this to the key of the message. First element is the message key, additional optional elements are parameters for the key that are processed with wfMessage()->params()->parseAsBlock()
- - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset
- - wrap String Wrap the message in html (usually something like "&lt;div ...>$1&lt;/div>").
- - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
-
-'LoggableUserIPData': called when IP data for a user action can be logged by extensions like CheckUser.
-This is intended for when users do things that do not already create edits or log entries.
-$context: The context the of the action, which includes the user and request
-$data: Associative array of data for handlers to record. It must include values for:
- - 'namespace' Integer namespace for target title (NS_SPECIAL is allowed)
- - 'title'     Database key string for target title (empty string if not applicable)
- - 'pageid'    Integer page ID for target title (zero if not applicable)
- - 'action'    Wikitext string in the same format as an edit summary
- - 'comment'   Wikitext string in the same format as an edit summary
- - 'timestamp' Timestamp when the action occured
-
-'LoginAuthenticateAudit': a login attempt for a valid user account either
+  - lim Integer Limit of items to show, default is 50
+  - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
+  - showIfEmpty boolean Set to false if you don't want any output in case the
+    loglist is empty if set to true (default), "No matching items in log" is
+    displayed if loglist is empty
+  - msgKey Array If you want a nice box with a message, set this to the key of
+    the message. First element is the message key, additional optional elements
+    are parameters for the key that are processed with
+    wfMessage()->params()->parseAsBlock()
+  - offset Set to overwrite offset parameter in $wgRequest set to '' to unset
+    offset
+  - wrap String Wrap the message in html (usually something like
+    "&lt;div ...>$1&lt;/div>").
+  - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
+
+'LoginAuthenticateAudit': A login attempt for a valid user account either
 succeeded or failed. No return data is accepted; this hook is for auditing only.
 $user: the User object being authenticated against
 $password: the password being submitted and found wanting
 $retval: a LoginForm class constant with authenticateUserData() return
-       value (SUCCESS, WRONG_PASS, etc)
+  value (SUCCESS, WRONG_PASS, etc.).
 
-'LogLine': Processes a single log entry on Special:Log
+'LogLine': Processes a single log entry on Special:Log.
 $log_type: string for the type of log entry (e.g. 'move'). Corresponds to
-       logging.log_type database field.
+  logging.log_type database field.
 $log_action: string for the type of log action (e.g. 'delete', 'block',
-       'create2'). Corresponds to logging.log_action database field.
+  'create2'). Corresponds to logging.log_action database field.
 $title: Title object that corresponds to logging.log_namespace and
-       logging.log_title database fields.
+  logging.log_title database fields.
 $paramArray: Array of parameters that corresponds to logging.log_params field.
-       Note that only $paramArray[0] appears to contain anything.
+  Note that only $paramArray[0] appears to contain anything.
 &$comment: string that corresponds to logging.log_comment database field, and
-       which is displayed in the UI.
+  which is displayed in the UI.
 &$revert: string that is displayed in the UI, similar to $comment.
 $time: timestamp of the log entry (added in 1.12)
 
-'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance script
+'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance
+script.
 $refreshLinks: RefreshLinks object
 
 'MagicWordwgVariableIDs': When definig new magic words IDs.
 $variableIDs: array of strings
 
-'MakeGlobalVariablesScript': called right before Skin::makeVariablesScript
-is executed. Ideally, this hook should only be used to add variables that
-depend on the current page/request; static configuration should be added
-through ResourceLoaderGetConfigVars instead.
-&$vars: variable (or multiple variables) to be added into the output
-       of Skin::makeVariablesScript
-$out: The OutputPage which called the hook,
-    can be used to get the real title
+'MakeGlobalVariablesScript': Called right before Skin::makeVariablesScript is
+executed. Ideally, this hook should only be used to add variables that depend on
+the current page/request; static configuration should be added through
+ResourceLoaderGetConfigVars instead.
+&$vars: variable (or multiple variables) to be added into the output of
+  Skin::makeVariablesScript
+$out: The OutputPage which called the hook, can be used to get the real title.
 
-'MarkPatrolled': before an edit is marked patrolled
+'MarkPatrolled': Aefore an edit is marked patrolled.
 $rcid: ID of the revision to be marked patrolled
 $user: the user (object) marking the revision as patrolled
-$wcOnlySysopsCanPatrol: config setting indicating whether the user
-       needs to be a sysop in order to mark an edit patrolled
+$wcOnlySysopsCanPatrol: config setting indicating whether the user needs to be a
+  sysop in order to mark an edit patrolled.
 
-'MarkPatrolledComplete': after an edit is marked patrolled
+'MarkPatrolledComplete': After an edit is marked patrolled.
 $rcid: ID of the revision marked as patrolled
 $user: user (object) who marked the edit patrolled
-$wcOnlySysopsCanPatrol: config setting indicating whether the user
-       must be a sysop to patrol the edit
+$wcOnlySysopsCanPatrol: config setting indicating whether the user must be a
+  sysop to patrol the edit.
 
-'MediaWikiPerformAction': Override MediaWiki::performAction().
-Use this to do something completely different, after the basic
-globals have been set up, but before ordinary actions take place.
+'MediaWikiPerformAction': Override MediaWiki::performAction(). Use this to do
+something completely different, after the basic globals have been set up, but
+before ordinary actions take place.
 $output: $wgOut
 $article: $wgArticle
 $title: $wgTitle
@@ -1485,12 +1514,12 @@ $user: $wgUser
 $request: $wgRequest
 $mediaWiki: The $mediawiki object
 
-'MessagesPreLoad': When loading a message from the database
+'MessagesPreLoad': When loading a message from the database.
 $title: title of the message (string)
 $message: value (string), change it to the message you want to define
 
-'MessageCacheReplace': When a message page is changed.
-Useful for updating caches.
+'MessageCacheReplace': When a message page is changed. Useful for updating
+caches.
 $title: name of the page changed.
 $text: new contents of the page.
 
@@ -1501,12 +1530,11 @@ $db: The database object to be queried.
 &$opts: Options for the query.
 &$join_conds: Join conditions for the query.
 
-'MonoBookTemplateToolboxEnd': Called by Monobook skin after toolbox links have
-been rendered (useful for adding more)
-Note: this is only run for the Monobook skin. This hook is deprecated and
-may be removed in the future. To add items to the toolbox you should use
-the SkinTemplateToolboxEnd hook instead, which works for all
-"SkinTemplate"-type skins.
+'MonoBookTemplateToolboxEnd': DEPRECATED. Called by Monobook skin after toolbox
+links have been rendered (useful for adding more). Note: this is only run for
+the Monobook skin. To add items to the toolbox you should use the
+SkinTemplateToolboxEnd hook instead, which works for all "SkinTemplate"-type
+skins.
 $tools: array of tools
 
 'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array
@@ -1515,16 +1543,18 @@ still letting the skin make final decisions on skin-specific markup conventions
 using this hook.
 &$sk: The BaseTemplate base skin template
 &$toolbox: An array of toolbox items, see BaseTemplate::getToolbox and
-       BaseTemplate::makeListItem for details on the format of individual
-       items inside of this array
+  BaseTemplate::makeListItem for details on the format of individual items
+  inside of this array.
 
-'NamespaceIsMovable': Called when determining if it is possible to pages in a namespace.
+'NamespaceIsMovable': Called when determining if it is possible to pages in a
+namespace.
 $index: Integer; the index of the namespace being checked.
-$result: Boolean; whether MediaWiki currently thinks that pages in this namespace are movable.
-Hooks may change this value to override the return value of MWNamespace::isMovable()
+$result: Boolean; whether MediaWiki currently thinks that pages in this
+  namespace are movable. Hooks may change this value to override the return
+  value of MWNamespace::isMovable().
 
-'NewRevisionFromEditComplete': called when a revision was inserted
-due to an edit
+'NewRevisionFromEditComplete': Called when a revision was inserted due to an
+edit.
 $wikiPage: the WikiPage edited
 $rev: the new revision
 $baseID: the revision ID this was based off, if any
@@ -1532,45 +1562,46 @@ $user: the editing user
 
 'NormalizeMessageKey': Called before the software gets the text of a message
 (stuff in the MediaWiki: namespace), useful for changing WHAT message gets
-displayed
+displayed.
 &$key: the message being looked up. Change this to something else to change
-       what message gets displayed (string)
+  what message gets displayed (string)
 &$useDB: whether or not to look up the message in the database (bool)
 &$langCode: the language code to get the message for (string) - or -
-       whether to use the content language (true) or site language (false) (bool)
+  whether to use the content language (true) or site language (false) (bool)
 &$transform: whether or not to expand variables and templates
-       in the message (bool)
+  in the message (bool)
 
-'OldChangesListRecentChangesLine': Customize entire Recent Changes line,
-or return false to omit the line from RecentChanges and Watchlist special pages.
+'OldChangesListRecentChangesLine': Customize entire recent changes line, or
+return false to omit the line from RecentChanges and Watchlist special pages.
 &$changeslist: The OldChangesList instance.
 &$s: HTML of the form "<li>...</li>" containing one RC entry.
 &$rc: The RecentChange object.
+&$classes: array of css classes for the <li> element
 
-'OpenSearchUrls': Called when constructing the OpenSearch description XML.
-Hooks can alter or append to the array of URLs for search & suggestion formats.
+'OpenSearchUrls': Called when constructing the OpenSearch description XML. Hooks
+can alter or append to the array of URLs for search & suggestion formats.
 &$urls: array of associative arrays with Url element attributes
 
 'OtherBlockLogLink': Get links to the block log from extensions which blocks
-       users and/or IP addresses too
+users and/or IP addresses too.
 $otherBlockLink: An array with links to other block logs
 $ip: The requested IP address or username
 
-'OutputPageBeforeHTML': a page has been processed by the parser and
-the resulting HTML is about to be displayed.
+'OutputPageBeforeHTML': A page has been processed by the parser and the
+resulting HTML is about to be displayed.
 $parserOutput: the parserOutput (object) that corresponds to the page
 $text: the text that will be displayed, in HTML (string)
 
-'OutputPageBodyAttributes': called when OutputPage::headElement is creating the body
-tag to allow for extensions to add attributes to the body of the page they might
-need. Or to allow building extensions to add body classes that aren't of high
-enough demand to be included in core.
+'OutputPageBodyAttributes': Called when OutputPage::headElement is creating the
+body tag to allow for extensions to add attributes to the body of the page they
+might need. Or to allow building extensions to add body classes that aren't of
+high enough demand to be included in core.
 $out: The OutputPage which called the hook, can be used to get the real title
 $sk: The Skin that called OutputPage::headElement
 &$bodyAttrs: An array of attributes for the body tag passed to Html::openElement
 
 'OutputPageCheckLastModified': when checking if the page has been modified
-since the last visit
+since the last visit.
 &$modifiedTimes: array of timestamps.
        The following keys are set: page, user, epoch
 
@@ -1578,16 +1609,16 @@ since the last visit
 $out: OutputPage instance (object)
 $parserOutput: parserOutput instance being added in $out
 
-'OutputPageMakeCategoryLinks': links are about to be generated for the page's
+'OutputPageMakeCategoryLinks': Links are about to be generated for the page's
 categories. Implementations should return false if they generate the category
 links, so the default link generation is skipped.
 $out: OutputPage instance (object)
 $categories: associative array, keys are category names, values are category
-       types ("normal" or "hidden")
+  types ("normal" or "hidden")
 $links: array, intended to hold the result. Must be an associative array with
-       category types as keys and arrays of HTML links as values.
+  category types as keys and arrays of HTML links as values.
 
-'PageContentInsertComplete': After a new article is created
+'PageContentInsertComplete': After a new article is created.
 $wikiPage: WikiPage created
 $user: User creating the article
 $content: New content as a Content object
@@ -1598,13 +1629,13 @@ $section: (No longer used)
 $flags: Flags passed to WikiPage::doEditContent()
 $revision: New Revision of the article
 
-'PageContentLanguage': allows changing the language in which the content of
-page is written. Defaults to the wiki content language ($wgContLang).
+'PageContentLanguage': Allows changing the language in which the content of a
+page is written. Defaults to the wiki content language ($wgContLang).
 $title: Title object
 &$pageLang: the page content language (either an object or a language code)
 $wgLang: the user language
 
-'PageContentSave': before an article is saved.
+'PageContentSave': Before an article is saved.
 $wikiPage: the WikiPage (object) being saved
 $user: the user (object) saving the article
 $content: the new article content, as a Content object
@@ -1613,7 +1644,7 @@ $isminor: minor flag
 $iswatch: watch flag
 $section: section #
 
-'PageContentSaveComplete': After an article has been updated
+'PageContentSaveComplete': After an article has been updated.
 $wikiPage: WikiPage modified
 $user: User performing the modification
 $content: New content, as a Content object
@@ -1629,58 +1660,62 @@ $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
 
-'PageHistoryLineEnding' : right before the end <li> is added to a history line
+'PageHistoryLineEnding' : Right before the end <li> is added to a history line.
 $row: the revision row for this line
 $s: the string representing this parsed line
 $classes: array containing the <li> element classes
 
-'PageHistoryPager::getQueryInfo': when a history pager query parameter set
-is constructed
+'PageHistoryPager::getQueryInfo': when a history pager query parameter set is
+constructed.
 $pager: the pager
 $queryInfo: the query parameters
 
-'PageRenderingHash': alter the parser cache option hash key
-A parser extension which depends on user options should install
-this hook and append its values to the key.
+'PageRenderingHash': Alter the parser cache option hash key. A parser extension
+which depends on user options should install this hook and append its values to
+the key.
 $hash: reference to a hash key string which can be modified
 
 'ParserAfterParse': Called from Parser::parse() just after the call to
-Parser::internalParse() returns
+Parser::internalParse() returns.
 $parser: parser object
 $text: text being parsed
 $stripState: stripState used (object)
 
-'ParserAfterStrip': Same as ParserBeforeStrip
+'ParserAfterStrip': Called at end of parsing time.
+TODO: No more strip, deprecated ?
+$parser: parser object
+$text: text being parsed
+$stripState: stripState used (object)
 
 'ParserAfterTidy': Called after Parser::tidy() in Parser::parse()
 $parser: Parser object being used
 $text: text that'll be returned
 
-'ParserBeforeInternalParse': called at the beginning of Parser::internalParse()
+'ParserBeforeInternalParse': Called at the beginning of Parser::internalParse().
 $parser: Parser object
 $text: text to parse
 $stripState: StripState instance being used
 
-'ParserBeforeStrip': Called at start of parsing time
-(no more strip, deprecated ?)
+'ParserBeforeStrip': Called at start of parsing time.
+TODO: No more strip, deprecated ?
 $parser: parser object
 $text: text being parsed
 $stripState: stripState used (object)
 
-'ParserBeforeTidy': called before tidy and custom tags replacements
+'ParserBeforeTidy': Called before tidy and custom tags replacements.
 $parser: Parser object being used
 $text: actual text
 
-'ParserClearState': called at the end of Parser::clearState()
+'ParserClearState': Called at the end of Parser::clearState().
 $parser: Parser object being cleared
 
-'ParserCloned': called when the parser is cloned
+'ParserCloned': Called when the parser is cloned.
 $parser: Newly-cloned Parser object
 
-'ParserFirstCallInit': called when the parser initialises for the first time
+'ParserFirstCallInit': Called when the parser initialises for the first time.
 &$parser: Parser object being cleared
 
-'ParserGetVariableValueSwitch': called when the parser need the value of a
+'ParserGetVariableValueSwitch': Called when the parser need the value of a
 custom magic word
 $parser: Parser object
 $varCache: array to store the value in case of multiples calls of the
@@ -1689,18 +1724,18 @@ $index: index (string) of the magic
 $ret: value of the magic word (the hook should set it)
 $frame: PPFrame object to use for expanding any template variables
 
-'ParserGetVariableValueTs': use this to change the value of the time for the
-{{LOCAL...}} magic word
+'ParserGetVariableValueTs': Use this to change the value of the time for the
+{{LOCAL...}} magic word.
 $parser: Parser object
 $time: actual time (timestamp)
 
-'ParserGetVariableValueVarCache': use this to change the value of the
-variable cache or return false to not use it
+'ParserGetVariableValueVarCache': use this to change the value of the variable
+cache or return false to not use it.
 $parser: Parser object
 $varCache: varaiable cache (array)
 
-'ParserLimitReport': called at the end of Parser:parse() when the parser will
-include comments about size of the text parsed
+'ParserLimitReport': Called at the end of Parser:parse() when the parser will
+include comments about size of the text parsed.
 $parser: Parser object
 $limitReport: text that will be included (without comment tags)
 
@@ -1712,27 +1747,26 @@ $file: file object that will be used to create the image
 $parser: Parser object that called the hook
 
 'ParserSectionCreate': Called each time the parser creates a document section
-from wikitext.  Use this to apply per-section modifications to HTML (like
+from wikitext. Use this to apply per-section modifications to HTML (like
 wrapping the section in a DIV).  Caveat: DIVs are valid wikitext, and a DIV
-can begin in one section and end in another.  Make sure your code can handle
-that case gracefully.  See the EditSectionClearerLink extension for an
-example.
+can begin in one section and end in another. Make sure your code can handle
+that case gracefully. See the EditSectionClearerLink extension for an example.
 $parser: the calling Parser instance
 $section: the section number, zero-based, but section 0 is usually empty
 &$sectionContent: ref to the content of the section. modify this.
 $showEditLinks: boolean describing whether this section has an edit link
 
-'ParserTestParser': called when creating a new instance of Parser in
-maintenance/parserTests.inc
+'ParserTestParser': Called when creating a new instance of Parser in
+maintenance/parserTests.inc.
 $parser: Parser object created
 
 'ParserTestGlobals': Allows to define globals for parser tests.
 &$globals: Array with all the globals which should be set for parser tests.
-       The arrays keys serve as the globals names, its values are the globals values.
+  The arrays keys serve as the globals names, its values are the globals values.
 
-'ParserTestTables': alter the list of tables to duplicate when parser tests
-are run. Use when page save hooks require the presence of custom tables
-to ensure that tests continue to run properly.
+'ParserTestTables': Alter the list of tables to duplicate when parser tests are
+run. Use when page save hooks require the presence of custom tables to ensure
+that tests continue to run properly.
 &$tables: array of table names
 
 'PersonalUrls': Alter the user-specific navigation links (e.g. "my page,
@@ -1740,21 +1774,22 @@ my talk page, my contributions" etc).
 &$personal_urls: Array of link specifiers (see SkinTemplate.php)
 &$title: Title object representing the current page
 
-'PingLimiter': Allows extensions to override the results of User::pingLimiter()
+'PingLimiter': Allows extensions to override the results of User::pingLimiter().
 &$user : User performing the action
 $action : Action being performed
 &$result : Whether or not the action should be prevented
 Change $result and return false to give a definitive answer, otherwise
 the built-in rate limiting checks are used, if enabled.
 
-'PlaceNewSection': Override placement of new sections.
+'PlaceNewSection': Override placement of new sections. Return false and put the
+merged text into $text to override the default behavior.
 $wikipage : WikiPage object
 $oldtext : the text of the article before editing
 $subject : subject of the new section
 &$text : text of the new section
-Return false and put the merged text into $text to override the default behavior.
 
-'PreferencesGetLegend': Override the text used for the <legend> of a preferences section
+'PreferencesGetLegend': Override the text used for the <legend> of a
+preferences section.
 $form: the PreferencesForm object. This is a ContextSource as well
 $key: the section name
 &$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may be overridden
@@ -1766,71 +1801,82 @@ $search : search term (not guaranteed to be conveniently normalized)
 $limit : maximum number of results to return
 &$results : out param: array of page names (strings)
 
-'PrefsEmailAudit': called when user changes his email address
+'PrefsEmailAudit': Called when user changes their email address.
 $user: User (object) changing his email address
 $oldaddr: old email address (string)
 $newaddr: new email address (string)
 
-'PrefsPasswordAudit': called when user changes his password
+'PrefsPasswordAudit': Called when user changes his password.
 $user: User (object) changing his passoword
 $newPass: new password
 $error: error (string) 'badretype', 'wrongpassword', 'error' or 'success'
 
-'ProtectionForm::buildForm': called after all protection type fieldsets are made in the form
+'ProtectionForm::buildForm': Called after all protection type fieldsets are made
+in the form.
 $article: the title being (un)protected
 $output: a string of the form HTML so far
 
-'ProtectionForm::save': called when a protection form is submitted
+'ProtectionForm::save': Called when a protection form is submitted.
 $article: the title being (un)protected
-$errorMsg: an html message string of an error or an array of message name and its parameters
+$errorMsg: an html message string of an error or an array of message name and
+  its parameters
 
-'ProtectionForm::showLogExtract': called after the protection log extract is shown
+'ProtectionForm::showLogExtract': Called after the protection log extract is
+shown.
 $article: the page the form is shown for
 $out: OutputPage object
 
-'RawPageViewBeforeOutput': Right before the text is blown out in action=raw
+'RawPageViewBeforeOutput': Right before the text is blown out in action=raw.
 &$obj: RawPage object
 &$text: The text that's going to be the output
 
-'RecentChange_save': called at the end of RecentChange::save()
+'RecentChange_save': Called at the end of RecentChange::save().
 $recentChange: RecentChange object
 
-'RedirectSpecialArticleRedirectParams': lets you alter the set of
-parameter names such as "oldid" that are preserved when using
-redirecting special pages such as Special:MyPage and Special:MyTalk.
+'RedirectSpecialArticleRedirectParams': Lets you alter the set of parameter
+names such as "oldid" that are preserved when using redirecting special pages
+such as Special:MyPage and Special:MyTalk.
 &$redirectParams: An array of parameters preserved by redirecting special pages.
 
-'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin instance.
-Can be used by an extension override what skin is used in certain contexts.
+'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin
+instance. Can be used by an extension override what skin is used in certain
+contexts.
 IContextSource $context: The RequestContext the skin is being created for.
-&$skin: A variable reference you may set a Skin instance or string key on to override the skin that will be used for the context.
+&$skin: A variable reference you may set a Skin instance or string key on to
+  override the skin that will be used for the context.
 
-'ResourceLoaderGetConfigVars': called at the end of
+'ResourceLoaderGetConfigVars': Called at the end of
 ResourceLoaderStartUpModule::getConfig(). Use this to export static
-configuration variables to JavaScript. Things that depend on the current
-page/request state must be added through MakeGlobalVariablesScript instead.
+configuration variables to JavaScript. Things that depend on the current page
+or request state must be added through MakeGlobalVariablesScript instead.
 &$vars: array( variable name => value )
 
-'ResourceLoaderGetStartupModules': Run once the startup module is being generated. This allows you
-to add modules to the startup module. This hook should be used sparingly since any module added here
-will be loaded on all pages. This hook is useful if you want to make code available to module loader
+'ResourceLoaderGetStartupModules': Run once the startup module is being
+generated. This allows you to add modules to the startup module. This hook
+should be used sparingly since any module added here will be loaded on all
+pages. This hook is useful if you want to make code available to module loader
 scripts.
 
-'ResourceLoaderRegisterModules': Right before modules information is required, such as when responding to a resource
+'ResourceLoaderRegisterModules': Right before modules information is required,
+such as when responding to a resource
 loader request or generating HTML output.
 &$resourceLoader: ResourceLoader object
 
-'ResourceLoaderTestModules': let you add new JavaScript testing modules. This is called after the addition of 'qunit' and MediaWiki testing resources.
-&testModules: array of JavaScript testing modules. The 'qunit' framework, included in core, is fed using tests/qunit/QUnitTestResources.php.
+'ResourceLoaderTestModules': Let you add new JavaScript testing modules. This is
+called after the addition of 'qunit' and MediaWiki testing resources.
+&testModules: array of JavaScript testing modules. The 'qunit' framework,
+  included in core, is fed using tests/qunit/QUnitTestResources.php.
 &ResourceLoader object
+
 To add a new qunit module named 'myext.tests':
 testModules['qunit']['myext.tests'] = array(
        'script' => 'extension/myext/tests.js',
        'dependencies' => <any module dependency you might have>
 );
-For qunit framework, the mediawiki.tests.qunit.testrunner dependency will be added to any module.
+For QUnit framework, the mediawiki.tests.qunit.testrunner dependency will be
+added to any module.
 
-'RevisionInsertComplete': called after a revision is inserted into the DB
+'RevisionInsertComplete': Called after a revision is inserted into the database.
 &$revision: the Revision
 $data: the data stored in old_text.  The meaning depends on $flags: if external
   is set, it's the URL of the revision text in external storage; otherwise,
@@ -1839,13 +1885,14 @@ $data: the data stored in old_text.  The meaning depends on $flags: if external
 $flags: a comma-delimited list of strings representing the options used.  May
   include: utf8 (this will always be set for new revisions); gzip; external.
 
-'SearchUpdate': Prior to search update completion
+'SearchUpdate': Prior to search update completion.
 $id : Page id
 $namespace : Page namespace
 $title : Page title
 $text : Current text being indexed
 
-'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before the normal operations
+'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before
+the normal operations.
 $allSearchTerms : Array of the search terms in all content languages
 &$titleResult : Outparam; the value to return. A Title object or null.
 
@@ -1855,11 +1902,13 @@ runs after.
 $term : Search term string
 &$title : Outparam; set to $title object and return false for a match
 
-'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches if nothing was found
+'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches
+if nothing was found.
 $term : Search term string
 &$title : Outparam; set to $title object and return false for a match
 
-'SearchGetNearMatchComplete': A chance to modify exact-title-matches in "go" searches
+'SearchGetNearMatchComplete': A chance to modify exact-title-matches in "go"
+searches.
 $term : Search term string
 &$title : Current Title object that is being returned (null if none found).
 
@@ -1877,11 +1926,11 @@ $title : Current Title object being displayed in search results.
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
-'SeleniumSettings': Undocumented.
+'SeleniumSettings': TODO
 
 'SetupAfterCache': Called in Setup.php, after cache objects are set
 
-'ShowMissingArticle': Called when generating the output for a non-existent page
+'ShowMissingArticle': Called when generating the output for a non-existent page.
 $article: The article object corresponding to the page
 
 'ShowRawCssJs': Customise the output of raw CSS and JavaScript in page views.
@@ -1909,50 +1958,52 @@ $terms: Search terms, for highlighting
 &$size: HTML of page size. May be modified.
 &$date: HTML of of page modification date. May be modified.
 &$related: HTML of additional info for the matching page. May be modified.
-&$html: May be set to the full HTML that should be used to represent the search hit. Must include
-the <li> ... </li> tags. Will only be used if the hook function returned false.
+&$html: May be set to the full HTML that should be used to represent the search
+  hit. Must include the <li> ... </li> tags. Will only be used if the hook
+  function returned false.
 
-'SiteNoticeBefore': Before the sitenotice/anonnotice is composed
+'SiteNoticeBefore': Before the sitenotice/anonnotice is composed. Return true to
+allow the normal method of notice selection/rendering to work, or change the
+value of $siteNotice and return false to alter it.
 &$siteNotice: HTML returned as the sitenotice
 $skin: Skin object
-Return true to allow the normal method of notice selection/rendering to work,
-or change the value of $siteNotice and return false to alter it.
 
-'SiteNoticeAfter': After the sitenotice/anonnotice is composed
-&$siteNotice: HTML sitenotice
+'SiteNoticeAfter': After the sitenotice/anonnotice is composed.
+&$siteNotice: HTML sitenotice. Alter the contents of $siteNotice to add to/alter
+  the sitenotice/anonnotice.
 $skin: Skin object
-Alter the contents of $siteNotice to add to/alter the sitenotice/anonnotice.
 
-'SkinAfterBottomScripts': At the end of Skin::bottomScripts()
+'SkinAfterBottomScripts': At the end of Skin::bottomScripts().
 $skin: Skin object
-&$text: bottomScripts Text
-Append to $text to add additional text/scripts after the stock bottom scripts.
+&$text: bottomScripts Text. Append to $text to add additional text/scripts after
+  the stock bottom scripts.
 
 'SkinAfterContent': Allows extensions to add text after the page content and
-article metadata.
+article metadata. This hook should work in all skins. Set the &$data variable to
+the text you're going to add.
 &$data: (string) Text to be printed out directly (without parsing)
 $skin: Skin object
-This hook should work in all skins. Just set the &$data variable to the text
-you're going to add.
 
-'SkinBuildSidebar': At the end of Skin::buildSidebar()
+'SkinBuildSidebar': At the end of Skin::buildSidebar().
 $skin: Skin object
 &$bar: Sidebar contents
 Modify $bar to add or modify sidebar portlets.
 
-'SkinCopyrightFooter': Allow for site and per-namespace customization of copyright notice.
+'SkinCopyrightFooter': Allow for site and per-namespace customization of
+copyright notice.
 $title: displayed page title
 $type: 'normal' or 'history' for old/diff views
-&$msg: overridable message; usually 'copyright' or 'history_copyright'. This message must be in HTML format, not wikitext!
+&$msg: overridable message; usually 'copyright' or 'history_copyright'. This
+  message must be in HTML format, not wikitext!
 &$link: overridable HTML link to be passed into the message as $1
 &$forContent: overridable flag if copyright footer is shown in content language.
 
-'SkinGetPoweredBy'
-&$text: additional 'powered by' icons in HTML.
-Note: Modern skin does not use the MediaWiki icon but plain text instead
+'SkinGetPoweredBy': TODO
+&$text: additional 'powered by' icons in HTML. Note: Modern skin does not use
+the MediaWiki icon but plain text instead.
 $skin: Skin object
 
-'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle()
+'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle().
 &$subpages: Subpage links HTML
 $skin: Skin object
 $out: OutputPage object
@@ -1961,25 +2012,30 @@ subPageSubtitle() generates.
 If true is returned, $subpages will be ignored and the rest of
 subPageSubtitle() will run.
 
-'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink': after creating the
-"permanent link" tab
+'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink': After creating the "permanent
+link" tab.
 $sktemplate: SkinTemplate object
 $nav_urls: array of tabs
 
-Alter the structured navigation links in SkinTemplates, there are three of these hooks called in different spots.
-'SkinTemplateNavigation': Called on content pages after the tabs have been added but before before variants have been added
-'SkinTemplateNavigation::SpecialPage': Called on special pages after the special tab is added but before variants have been added
-'SkinTemplateNavigation::Universal': Called on both content and special pages after variants have been added
+To alter the structured navigation links in SkinTemplates, there are three
+hooks called in different spots:
+
+'SkinTemplateNavigation': Called on content pages after the tabs have been
+added, but before variants have been added.
+'SkinTemplateNavigation::SpecialPage': Called on special pages after the special
+tab is added but before variants have been added.
+'SkinTemplateNavigation::Universal': Called on both content and special pages
+after variants have been added.
 &$sktemplate: SkinTemplate object
-&$links: Structured navigation links
-This is used to alter the navigation for skins which use buildNavigationUrls such as Vector.
+&$links: Structured navigation links. This is used to alter the navigation for
+  skins which use buildNavigationUrls such as Vector.
 
-'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage()
-starts page output
+'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage() starts
+page output.
 &$sktemplate: SkinTemplate object
 &$tpl: Template engine object
 
-'SkinTemplatePreventOtherActiveTabs': use this to prevent showing active tabs
+'SkinTemplatePreventOtherActiveTabs': Use this to prevent showing active tabs.
 $sktemplate: SkinTemplate object
 $res: set to true to prevent active tabs
 
@@ -1996,55 +2052,56 @@ $checkEdit: Whether or not the action=edit query should be added if appropriate.
 &$text: Link text.
 &$result: Complete assoc. array if you want to return true.
 
-'SkinTemplateTabs': Undocumented.
+'SkinTemplateTabs': TODO
 
 'SkinTemplateToolboxEnd': Called by SkinTemplate skins after toolbox links have
-been rendered (useful for adding more)
+been rendered (useful for adding more).
 $sk: The QuickTemplate based skin template running the hook.
 $dummy: Called when SkinTemplateToolboxEnd is used from a BaseTemplate skin,
-  extensions that add support for BaseTemplateToolbox should watch for this dummy
-  parameter with "$dummy=false" in their code and return without echoing any html
-  to avoid creating duplicate toolbox items.
+  extensions that add support for BaseTemplateToolbox should watch for this
+  dummy parameter with "$dummy=false" in their code and return without echoing
+  any HTML to avoid creating duplicate toolbox items.
 
-'SoftwareInfo': Called by Special:Version for returning information about
-the software
-$software: The array of software in format 'name' => 'version'.
-       See SpecialVersion::softwareInformation()
+'SoftwareInfo': Called by Special:Version for returning information about the
+software.
+$software: The array of software in format 'name' => 'version'. See
+  SpecialVersion::softwareInformation().
 
 'SpecialContributionsBeforeMainOutput': Before the form on Special:Contributions
 $id: User identifier
 
-'SpecialListusersDefaultQuery': called right before the end of
-UsersPager::getDefaultQuery()
+'SpecialListusersDefaultQuery': Called right before the end of
+UsersPager::getDefaultQuery().
 $pager: The UsersPager instance
 $query: The query array to be returned
 
-'SpecialListusersFormatRow': called right before the end of
-UsersPager::formatRow()
+'SpecialListusersFormatRow': Called right before the end of
+UsersPager::formatRow().
 $item: HTML to be returned. Will be wrapped in <li></li> after the hook finishes
 $row: Database row object
 
-'SpecialListusersHeader': called before closing the <fieldset> in
-UsersPager::getPageHeader()
+'SpecialListusersHeader': Called before closing the <fieldset> in
+UsersPager::getPageHeader().
 $pager: The UsersPager instance
 $out: The header HTML
 
-'SpecialListusersHeaderForm': called before adding the submit button in
-UsersPager::getPageHeader()
+'SpecialListusersHeaderForm': Called before adding the submit button in
+UsersPager::getPageHeader().
 $pager: The UsersPager instance
 $out: The header HTML
 
-'SpecialListusersQueryInfo': called right before the end of
+'SpecialListusersQueryInfo': Called right before the end of.
 UsersPager::getQueryInfo()
 $pager: The UsersPager instance
 $query: The query array to be returned
 
-'SpecialMovepageAfterMove': called after moving a page
+'SpecialMovepageAfterMove': Called after moving a page.
 $movePage: MovePageForm object
 $oldTitle: old title (object)
 $newTitle: new title (object)
 
-'SpecialNewpagesConditions': called when building sql query for Special:NewPages
+'SpecialNewpagesConditions': Called when building sql query for
+Special:NewPages.
 &$special: NewPagesPager object (subclass of ReverseChronologicalPager)
 $opts: FormOptions object containing special page options
 &$conds: array of WHERE conditionals for query
@@ -2052,50 +2109,55 @@ $opts: FormOptions object containing special page options
 &$fields: array of columns to select
 &$join_conds: join conditions for the tables
 
-'SpecialNewPagesFilters': called after building form options at NewPages
+'SpecialNewPagesFilters': Called after building form options at NewPages.
 $special: the special page object
-&$filters: associative array of filter definitions. The keys are the HTML name/URL parameters.
-Each key maps to an associative array with a 'msg' (message key) and a 'default' value.
+&$filters: associative array of filter definitions. The keys are the HTML
+  name/URL parameters. Each key maps to an associative array with a 'msg'
+  (message key) and a 'default' value.
 
-'SpecialPage_initList': called when setting up SpecialPage::$mList, use this
-hook to remove a core special page
+'SpecialPage_initList': Called when setting up SpecialPage::$mList, use this
+hook to remove a core special page.
 $list: list (array) of core special pages
 
-'SpecialPageAfterExecute': called after SpecialPage::execute
+'SpecialPageAfterExecute': Called after SpecialPage::execute.
 $special: the SpecialPage object
 $subPage: the subpage string or null if no subpage was specified
 
-'SpecialPageBeforeExecute': called before SpecialPage::execute
+'SpecialPageBeforeExecute': Called before SpecialPage::execute.
 $special: the SpecialPage object
 $subPage: the subpage string or null if no subpage was specified
 
-'SpecialPasswordResetOnSubmit': when executing a form submission on Special:PasswordReset
-$users: array of User objects
+'SpecialPasswordResetOnSubmit': When executing a form submission on
+Special:PasswordReset.
+$users: array of User objects.
 $data: array of data submitted by the user
-&$error: string, error code (message name) used to describe to error (out paramater).
-       The hook needs to return false when setting this, otherwise it will have no effect.
+&$error: string, error code (message key) used to describe to error (out
+  parameter). The hook needs to return false when setting this, otherwise it
+  will have no effect.
 
-'SpecialRandomGetRandomTitle': called during the execution of Special:Random,
-use this to change some selection criteria or substitute a different title
+'SpecialRandomGetRandomTitle': Called during the execution of Special:Random,
+use this to change some selection criteria or substitute a different title.
 &$randstr: The random number from wfRandom()
 &$isRedir: Boolean, whether to select a redirect or non-redirect
 &$namespaces: An array of namespace indexes to get the title from
 &$extra: An array of extra SQL statements
 &$title: If the hook returns false, a Title object to use instead of the
-result from the normal query
+  result from the normal query
 
-'SpecialRecentChangesFilters': called after building form options at RecentChanges
+'SpecialRecentChangesFilters': Called after building form options at
+RecentChanges.
 $special: the special page object
-&$filters: associative array of filter definitions. The keys are the HTML name/URL parameters.
-Each key maps to an associative array with a 'msg' (message key) and a 'default' value.
+&$filters: associative array of filter definitions. The keys are the HTML
+  name/URL parameters. Each key maps to an associative array with a 'msg'
+  (message key) and a 'default' value.
 
-'SpecialRecentChangesPanel': called when building form options in
-SpecialRecentChanges
+'SpecialRecentChangesPanel': Called when building form options in
+SpecialRecentChanges.
 &$extraOpts: array of added items, to which can be added
 $opts: FormOptions for this request
 
-'SpecialRecentChangesQuery': called when building sql query for
-SpecialRecentChanges and SpecialRecentChangesLinked
+'SpecialRecentChangesQuery': Called when building SQL query for
+SpecialRecentChanges and SpecialRecentChangesLinked.
 &$conds: array of WHERE conditionals for query
 &$tables: array of tables to be queried
 &$join_conds: join conditions for the tables
@@ -2103,222 +2165,247 @@ $opts: FormOptions for this request
 &$query_options: array of options for the database request
 &$select: Array of columns to select
 
-'SpecialSearchCreateLink': called when making the message to create a page or
-go to the existing page
+'SpecialSearchCreateLink': Called when making the message to create a page or
+go to the existing page.
 $t: title object searched for
 &$params: an array of the default message name and page title (as parameter)
 
-'SpecialSearchGo': called when user clicked the "Go"
+'SpecialSearchGo': Valled when user clicked the "Go".
 &$title: title object generated from the text entered by the user
 &$term: the search term entered by the user
 
-'SpecialSearchNogomatch': called when user clicked the "Go" button but the
-target doesn't exist
+'SpecialSearchNogomatch': Called when user clicked the "Go" button but the
+target doesn't exist.
 &$title: title object generated from the text entered by the user
 
-'SpecialSearchPowerBox': the equivalent of SpecialSearchProfileForm for
-the advanced form, a.k.a. power search box
+'SpecialSearchPowerBox': The equivalent of SpecialSearchProfileForm for
+the advanced form, a.k.a. power search box.
 &$showSections: an array to add values with more options to
 $term: the search term (not a title object)
 $opts: an array of hidden options (containing 'redirs' and 'profile')
 
-'SpecialSearchProfiles': allows modification of search profiles
+'SpecialSearchProfiles': Allows modification of search profiles.
 &$profiles: profiles, which can be modified.
 
-'SpecialSearchProfileForm': allows modification of search profile forms
+'SpecialSearchProfileForm': Allows modification of search profile forms.
 $search: special page object
 &$form: String: form html
 $profile: String: current search profile
 $term: String: search term
 $opts: Array: key => value of hidden options for inclusion in custom forms
 
-'SpecialSearchSetupEngine': allows passing custom data to search engine
-$search: special page object
+'SpecialSearchSetupEngine': Allows passing custom data to search engine.
+$search: SpecialSearch special page object
 $profile: String: current search profile
 $engine: the search engine
 
-'SpecialSearchResults': called before search result display when there
-are matches
+'SpecialSearchResultsPrepend': Called immediately before returning HTML
+on the search results page.  Useful for including an external search
+provider.  To disable the output of MediaWiki search output, return
+false.
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+$term: Search term specified by the user
+
+'SpecialSearchResultsAppend': Called after all search results HTML has
+been output.  Note that in some cases, this hook will not be called (no
+results, too many results, SpecialSearchResultsPrepend returned false,
+etc).
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+$term: Search term specified by the user
+
+'SpecialSearchResults': Called before search result display when there are
+matches.
 $term: string of search term
 &$titleMatches: empty or SearchResultSet object
 &$textMatches: empty or SearchResultSet object
 
-'SpecialSearchNoResults': called before search result display when there are
-no matches
+'SpecialSearchNoResults': Called before search result display when there are no
+matches.
 $term: string of search term
 
-'SpecialStatsAddExtra': add extra statistic at the end of Special:Statistics
+'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
 &$extraStats: Array to save the new stats
-              ( $extraStats['<name of statistic>'] => <value>; )
+  ( $extraStats['<name of statistic>'] => <value>; )
 
 'SpecialUploadComplete': Called after successfully uploading a file from
-Special:Upload
+Special:Upload.
 $form: The SpecialUpload object
 
-'SpecialVersionExtensionTypes': called when generating the extensions credits,
-use this to change the tables headers
+'SpecialVersionExtensionTypes': Called when generating the extensions credits,
+use this to change the tables headers.
 $extTypes: associative array of extensions types
 
-'SpecialVersionVersionUrl': called when building the URL for Special:Version
+'SpecialVersionVersionUrl': Called when building the URL for Special:Version.
 $wgVersion: Current $wgVersion for you to use
 &$versionUrl: Raw url to link to (eg: release notes)
 
-'SpecialWatchlistFilters': called after building form options at Watchlist
+'SpecialWatchlistFilters': Called after building form options at Watchlist.
 $special: the special page object
-&$filters: associative array of filter definitions. The keys are the HTML name/URL parameters.
-Each key maps to an associative array with a 'msg' (message key) and a 'default' value.
+&$filters: associative array of filter definitions. The keys are the HTML
+  name/URL parameters. Each key maps to an associative array with a 'msg'
+  (message key) and a 'default' value.
 
-'SpecialWatchlistQuery': called when building sql query for SpecialWatchlist
+'SpecialWatchlistQuery': Called when building sql query for SpecialWatchlist.
 &$conds: array of WHERE conditionals for query
 &$tables: array of tables to be queried
 &$join_conds: join conditions for the tables
 &$fields: array of query fields
 
-'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 extensions that alter page view behavior radically to abort that redirect or handle it manually.
+'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
+extensions that alter page view behavior radically to abort that redirect or
+handle it manually.
 $request: WebRequest
 $title: Title of the currently found title obj
 $output: OutputPage object
 
-'ThumbnailBeforeProduceHTML': called before an image HTML is about to be rendered (by ThumbnailImage:toHtml method)
+'ThumbnailBeforeProduceHTML': Called before an image HTML is about to be
+rendered (by ThumbnailImage:toHtml method).
 $thumbnail: the ThumbnailImage object
 &$attribs: image attibute array
 &$linkAttribs: image link attribute array
 
-'TitleArrayFromResult': called when creating an TitleArray object from a
-database result
+'TitleArrayFromResult': Called when creating an TitleArray object from a
+database result.
 &$titleArray: set this to an object to override the default object returned
 $res: database result used to create the object
 
 'TitleGetRestrictionTypes': Allows extensions to modify the types of protection
-  that can be applied.
+that can be applied.
 $title: The title in question.
 &$types: The types of protection available.
 
-'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page
+'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page.
 $title: Title object that is being checked
-$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page. Hooks may change this value to override the return value of Title::isCssOrJsPage()
-
-'TitleIsAlwaysKnown': Called when determining if a page exists.
-Allows overriding default behaviour for determining if a page exists.
-If $isKnown is kept as null, regular checks happen. If it's a boolean, this value is returned by the isKnown method.
+$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page.
+  Hooks may change this value to override the return value of
+  Title::isCssOrJsPage().
+
+'TitleIsAlwaysKnown': Called when determining if a page exists. Allows
+overriding default behaviour for determining if a page exists. If $isKnown is
+kept as null, regular checks happen. If it's a boolean, this value is returned
+by the isKnown method.
 $title: Title object that is being checked
 &$isKnown: Boolean|null; whether MediaWiki currently thinks this page is known
 
-'TitleIsMovable': Called when determining if it is possible to move a page.
-Note that this hook is not called for interwiki pages or pages in immovable namespaces: for these, isMovable() always returns false.
+'TitleIsMovable': Called when determining if it is possible to move a page. Note
+that this hook is not called for interwiki pages or pages in immovable
+namespaces: for these, isMovable() always returns false.
 $title: Title object that is being checked
-$result: Boolean; whether MediaWiki currently thinks this page is movable. Hooks may change this value to override the return value of Title::isMovable()
+$result: Boolean; whether MediaWiki currently thinks this page is movable.
+  Hooks may change this value to override the return value of
+  Title::isMovable().
 
 'TitleIsWikitextPage': Called when determining if a page is a wikitext or should
-be handled by seperate handler (via ArticleViewCustom)
+be handled by seperate handler (via ArticleViewCustom).
 $title: Title object that is being checked
-$result: Boolean; whether MediaWiki currently thinks this is a wikitext page. Hooks may change this value to override the return value of Title::isWikitextPage()
+$result: Boolean; whether MediaWiki currently thinks this is a wikitext page.
+  Hooks may change this value to override the return value of
+  Title::isWikitextPage()
 
-'TitleMoveComplete': after moving an article (title)
+'TitleMoveComplete': After moving an article (title).
 $old: old title
 $nt: new title
 $user: user who did the move
 $pageid: database ID of the page that's been moved
 $redirid: database ID of the created redirect
 
-'TitleReadWhitelist': called at the end of read permissions checks, just before
-       adding the default error message if nothing allows the user to read the page.
-       If a handler wants a title to *not* be whitelisted, it should also return false.
+'TitleReadWhitelist': Called at the end of read permissions checks, just before
+adding the default error message if nothing allows the user to read the page. If
+a handler wants a title to *not* be whitelisted, it should also return false.
 $title: Title object being checked against
 $user: Current user object
 &$whitelisted: Boolean value of whether this title is whitelisted
 
-'UndeleteForm::showHistory': called in UndeleteForm::showHistory, after a
+'UndeleteForm::showHistory': Called in UndeleteForm::showHistory, after a
 PageArchive object has been created but before any further processing is done.
 &$archive: PageArchive object
 $title: Title object of the page that we're viewing
 
-'UndeleteForm::showRevision': called in UndeleteForm::showRevision, after a
+'UndeleteForm::showRevision': Called in UndeleteForm::showRevision, after a
 PageArchive object has been created but before any further processing is done.
 &$archive: PageArchive object
 $title: Title object of the page that we're viewing
 
-'UndeleteForm::undelete': called un UndeleteForm::undelete, after checking that
+'UndeleteForm::undelete': Called un UndeleteForm::undelete, after checking that
 the site is not in read-only mode, that the Title object is not null and after
 a PageArchive object has been constructed but before performing any further
 processing.
 &$archive: PageArchive object
 $title: Title object of the page that we're about to undelete
 
-'UndeleteShowRevision': called when showing a revision in Special:Undelete
+'UndeleteShowRevision': Called when showing a revision in Special:Undelete.
 $title: title object related to the revision
 $rev: revision (object) that will be viewed
 
-'UnknownAction': An unknown "action" has occured (useful for defining
-                your own actions)
+'UnknownAction': An unknown "action" has occured (useful for defining your own
+actions).
 $action: action name
 $article: article "acted on"
 
-'UnitTestsList': Called when building a list of files with PHPUnit tests
+'UnitTestsList': Called when building a list of files with PHPUnit tests.
 &$files: list of files
 
-'UnwatchArticle': before a watch is removed from an article
+'UnwatchArticle': Before a watch is removed from an article.
 $user: user watching
 $page: WikiPage object to be removed
 
-'UnwatchArticleComplete': after a watch is removed from an article
+'UnwatchArticleComplete': After a watch is removed from an article.
 $user: user that watched
 $page: WikiPage object that was watched
 
-'UpdateUserMailerFormattedPageStatus': before notification email gets sent
+'UpdateUserMailerFormattedPageStatus': Before notification email gets sent.
 $formattedPageStatus: list of valid page states
 
-'UploadForm:initial': before the upload form is generated
+'UploadForm:initial': Before the upload form is generated. You might set the
+member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject
+text (HTML) either before or after the editform.
 $form: UploadForm object
-You might set the member-variables $uploadFormTextTop and
-$uploadFormTextAfterSummary to inject text (HTML) either before
-or after the editform.
 
-'UploadForm:BeforeProcessing': at the beginning of processUpload()
+'UploadForm:BeforeProcessing': At the beginning of processUpload(). Lets you
+poke at member variables like $mUploadDescription before the file is saved. Do
+not use this hook to break upload processing. This will return the user to a
+blank form with no error message; use UploadVerification and UploadVerifyFile
+instead.
 $form: UploadForm object
-Lets you poke at member variables like $mUploadDescription before the
-file is saved.
-Do not use this hook to break upload processing. This will return the user to
-a blank form with no error message; use UploadVerification and
-UploadVerifyFile instead
 
-'UploadCreateFromRequest': when UploadBase::createFromRequest has been called
+'UploadCreateFromRequest': When UploadBase::createFromRequest has been called.
 $type: (string) the requested upload type
 &$className: the class name of the Upload instance to be created
 
-'UploadComplete': when Upload completes an upload
+'UploadComplete': when Upload completes an upload.
 &$upload: an UploadBase child instance
 
-'UploadFormInitDescriptor': after the descriptor for the upload form as been
-       assembled
+'UploadFormInitDescriptor': After the descriptor for the upload form as been
+assembled.
 $descriptor: (array) the HTMLForm descriptor
 
 'UploadFormSourceDescriptors': after the standard source inputs have been
 added to the descriptor
 $descriptor: (array) the HTMLForm descriptor
 
-'UploadVerification': additional chances to reject an uploaded file. Consider
-                      using UploadVerifyFile instead.
+'UploadVerification': Additional chances to reject an uploaded file. Consider
+using UploadVerifyFile instead.
 string $saveName: destination file name
 string $tempName: filesystem path to the temporary file for checks
-string &$error: output: message key for message to show if upload canceled
-       by returning false. May also be an array, where the first element
-       is the message key and the remaining elements are used as parameters to
-       the message.
+string &$error: output: message key for message to show if upload canceled by
+  returning false. May also be an array, where the first element is the message
+  key and the remaining elements are used as parameters to the message.
 
 'UploadVerifyFile': extra file verification, based on mime type, etc. Preferred
-                    in most cases over UploadVerification.
+in most cases over UploadVerification.
 object $upload: an instance of UploadBase, with all info about the upload
-string $mime: the uploaded file's mime type, as detected by MediaWiki. Handlers
-       will typically only apply for specific mime types.
+string $mime: The uploaded file's mime type, as detected by MediaWiki. Handlers
+  will typically only apply for specific mime types.
 object &$error: output: true if the file is valid. Otherwise, an indexed array
-       representing the problem with the file, where the first element
-       is the message key and the remaining elements are used as parameters to
-       the message.
+  representing the problem with the file, where the first element is the message
+  key and the remaining elements are used as parameters to the message.
 
-'UploadComplete': Upon completion of a file upload
+'UploadComplete': Upon completion of a file upload.
 $uploadBase: UploadBase (or subclass) object. File can be accessed by
-       $uploadBase->getLocalFile().
+  $uploadBase->getLocalFile().
 
 'User::mailPasswordInternal': before creation and mailing of a user's new
 temporary password
@@ -2326,254 +2413,258 @@ $user: the user who sent the message out
 $ip: IP of the user who sent the message out
 $u: the account whose new password will be set
 
-'UserAddGroup': called when adding a group; return false to override
+'UserAddGroup': Called when adding a group; return false to override
 stock group addition.
 $user: the user object that is to have a group added
 &$group: the group to add, can be modified
 
-'UserArrayFromResult': called when creating an UserArray object from a
-database result
+'UserArrayFromResult': Called when creating an UserArray object from a database
+result.
 &$userArray: set this to an object to override the default object returned
 $res: database result used to create the object
 
-'userCan': To interrupt/advise the "user can do X to Y article" check.
-If you want to display an error message, try getUserPermissionsErrors.
+'userCan': To interrupt/advise the "user can do X to Y article" check. If you
+want to display an error message, try getUserPermissionsErrors.
 $title: Title object being checked against
 $user : Current user object
 $action: Action being checked
 $result: Pointer to result returned if hook returns false. If null is returned,
-       userCan checks are continued by internal code.
+  userCan checks are continued by internal code.
 
-'UserCanSendEmail': To override User::canSendEmail() permission check
+'UserCanSendEmail': To override User::canSendEmail() permission check.
 $user: User (object) whose permission is being checked
 &$canSend: bool set on input, can override on output
 
-'UserClearNewTalkNotification': called when clearing the
-"You have new messages!" message, return false to not delete it
+'UserClearNewTalkNotification': Called when clearing the "You have new
+messages!" message, return false to not delete it.
 $user: User (object) that'll clear the message
 
-'UserComparePasswords': called when checking passwords, return false to
-override the default password checks
+'UserComparePasswords': Called when checking passwords, return false to
+override the default password checks.
 &$hash: String of the password hash (from the database)
 &$password: String of the plaintext password the user entered
 &$userId: Integer of the user's ID or Boolean false if the user ID was not
-       supplied
+  supplied
 &$result: If the hook returns false, this Boolean value will be checked to
-       determine if the password was valid
+  determine if the password was valid
 
 'UserCreateForm': change to manipulate the login form
 $template: SimpleTemplate instance for the form
 
-'UserCryptPassword': called when hashing a password, return false to implement
-your own hashing method
+'UserCryptPassword': Called when hashing a password, return false to implement
+your own hashing method.
 &$password: String of the plaintext password to encrypt
 &$salt: String of the password salt or Boolean false if no salt is provided
-&$wgPasswordSalt: Boolean of whether the salt is used in the default
-       hashing method
+&$wgPasswordSalt: Boolean of whether the salt is used in the default hashing
+  method
 &$hash: If the hook returns false, this String will be used as the hash
 
-'UserEffectiveGroups': Called in User::getEffectiveGroups()
+'UserEffectiveGroups': Called in User::getEffectiveGroups().
 $user: User to get groups for
 &$groups: Current effective groups
 
-'UserGetAllRights': after calculating a list of all available rights
+'UserGetAllRights': After calculating a list of all available rights.
 &$rights: Array of rights, which may be added to.
 
-'UserGetDefaultOptions': after fetching the core default, this hook is ran
-right before returning the options to the caller. WARNING: this hook is
-called for every call to User::getDefaultOptions(), which means it's
-potentially called dozens or hundreds of times. You may want to cache
-the results of non-trivial operations in your hook function for this reason.
+'UserGetDefaultOptions': After fetching the core default, this hook is run right
+before returning the options to the caller. Warning: This hook is called for
+every call to User::getDefaultOptions(), which means it's potentially called
+dozens or hundreds of times. You may want to cache the results of non-trivial
+operations in your hook function for this reason.
 &$defaultOptions: Array of preference keys and their default values.
 
-'UserGetEmail': called when getting an user email address
+'UserGetEmail': Called when getting an user email address.
 $user: User object
 &$email: email, change this to override local email
 
-'UserGetEmailAuthenticationTimestamp': called when getting the timestamp of
-email authentification
+'UserGetEmailAuthenticationTimestamp': Called when getting the timestamp of
+email authentification.
 $user: User object
 &$timestamp: timestamp, change this to override local email authentification
-       timestamp
+  timestamp
 
-'UserGetImplicitGroups': Called in User::getImplicitGroups()
+'UserGetImplicitGroups': Called in User::getImplicitGroups().
 &$groups: List of implicit (automatically-assigned) groups
 
-'UserGetLanguageObject': Called when getting user's interface language object
+'UserGetLanguageObject': Called when getting user's interface language object.
 $user: User object
 &$code: Langauge code that will be used to create the object
+$context: RequestContext object
 
-'UserGetReservedNames': allows to modify $wgReservedUsernames at run time
+'UserGetReservedNames': Allows to modify $wgReservedUsernames at run time.
 &$reservedUsernames: $wgReservedUsernames
 
-'UserGetRights': Called in User::getRights()
+'UserGetRights': Called in User::getRights().
 $user: User to get rights for
 &$rights: Current rights
 
-'UserIsBlockedFrom': Check if a user is blocked from a specific page (for specific block
-       exemptions).
+'UserIsBlockedFrom': Check if a user is blocked from a specific page (for
+specific block exemptions).
 $user: User in question
 $title: Title of the page in question
 &$blocked: Out-param, whether or not the user is blocked from that page.
-&$allowUsertalk: If the user is blocked, whether or not the block allows users to edit their
-                  own user talk pages.
+&$allowUsertalk: If the user is blocked, whether or not the block allows users
+  to edit their own user talk pages.
 
 'UserIsBlockedGlobally': Check if user is blocked on all wikis.
 &$user: User object
 $ip: User's IP address
 &$blocked: Whether the user is blocked, to be modified by the hook
 
-'UserLoadAfterLoadFromSession': called to authenticate users on
-external/environmental means; occurs after session is loaded
+'UserLoadAfterLoadFromSession': Called to authenticate users on external or
+environmental means; occurs after session is loaded.
 $user: user object being loaded
 
-'UserLoadDefaults': called when loading a default user
+'UserLoadDefaults': Called when loading a default user.
 $user: user object
 $name: user name
 
-'UserLoadFromDatabase': called when loading a user from the database
+'UserLoadFromDatabase': Called when loading a user from the database.
 $user: user object
 &$s: database query object
 
-'UserLoadFromSession': called to authenticate users on external/environmental
-means; occurs before session is loaded
+'UserLoadFromSession': Called to authenticate users on external/environmental
+means; occurs before session is loaded.
 $user: user object being loaded
 &$result: set this to a boolean value to abort the normal authentification
-       process
+  process
 
-'UserLoadOptions': when user options/preferences are being loaded from
-the database.
+'UserLoadOptions': When user options/preferences are being loaded from the
+database.
 $user: User object
 &$options: Options, can be modified.
 
-'UserLoginComplete': after a user has logged in
+'UserLoginComplete': After a user has logged in.
 $user: the user object that was created on login
 $inject_html: Any HTML to inject after the "logged in" message.
 
 'UserLoginForm': change to manipulate the login form
 $template: SimpleTemplate instance for the form
 
-'UserLogout': before a user logs out
+'UserLogout': Before a user logs out.
 $user: the user object that is about to be logged out
 
-'UserLogoutComplete': after a user has logged out
+'UserLogoutComplete': After a user has logged out.
 $user: the user object _after_ logout (won't have name, ID, etc.)
 $inject_html: Any HTML to inject after the "logged out" message.
 $oldName: name of the user before logout (string)
 
-'UserRemoveGroup': called when removing a group; return false to override
-stock group removal.
+'UserRemoveGroup': Called when removing a group; return false to override stock
+group removal.
 $user: the user object that is to have a group removed
 &$group: the group to be removed, can be modified
 
-'UserRights': After a user's group memberships are changed
+'UserRights': After a user's group memberships are changed.
 $user  : User object that was changed
 $add   : Array of strings corresponding to groups added
 $remove: Array of strings corresponding to groups removed
 
-'UserRetrieveNewTalks': called when retrieving "You have new messages!"
-message(s)
+'UserRetrieveNewTalks': Called when retrieving "You have new messages!"
+message(s).
 $user: user retrieving new talks messages
 $talks: array of new talks page(s)
 
-'UserSaveSettings': called when saving user settings
+'UserSaveSettings': Called when saving user settings.
 $user: User object
 
 'UserSaveOptions': Called just before saving user preferences/options.
 $user: User object
 &$options: Options, modifiable
 
-'UserSetCookies': called when setting user cookies
+'UserSetCookies': Called when setting user cookies.
 $user: User object
 &$session: session array, will be added to $_SESSION
 &$cookies: cookies array mapping cookie name to its value
 
-'UserSetEmail': called when changing user email address
+'UserSetEmail': Called when changing user email address.
 $user: User object
 &$email: new email, change this to override new email address
 
-'UserSetEmailAuthenticationTimestamp': called when setting the timestamp
-of email authentification
+'UserSetEmailAuthenticationTimestamp': Called when setting the timestamp of
+email authentification.
 $user: User object
 &$timestamp: new timestamp, change this to override local email
 authentification timestamp
 
-'UserToolLinksEdit': Called when generating a list of user tool links, eg "Foobar (Talk | Contribs | Block)"
+'UserToolLinksEdit': Called when generating a list of user tool links, e.g.
+"Foobar (Talk | Contribs | Block)".
 $userId: User id of the current user
 $userText: User name of the current user
 &$items: Array of user tool links as HTML fragments
 
-'WantedPages::getQueryInfo': called in WantedPagesPage::getQueryInfo(), can be
-used to alter the SQL query which gets the list of wanted pages
+'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
+used to alter the SQL query which gets the list of wanted pages.
 &$wantedPages: WantedPagesPage object
 &$query: query array, see QueryPage::getQueryInfo() for format documentation
 
-'WatchArticle': before a watch is added to an article
+'WatchArticle': Before a watch is added to an article.
 $user: user that will watch
 $page: WikiPage object to be watched
 
-'WatchArticleComplete': after a watch is added to an article
+'WatchArticleComplete': After a watch is added to an article.
 $user: user that watched
 $page: WikiPage object watched
 
 'WatchlistEditorBuildRemoveLine': when building remove lines in
-       Special:Watchlist/edit
+Special:Watchlist/edit.
 &$tools: array of extra links
 $title: Title object
 $redirect: whether the page is a redirect
 $skin: Skin object
 
-'WebRequestPathInfoRouter': While building the PathRouter to parse the REQUEST_URI.
+'WebRequestPathInfoRouter': While building the PathRouter to parse the
+REQUEST_URI.
 $router: The PathRouter instance
 
 'WikiExporter::dumpStableQuery': Get the SELECT query for "stable" revisions
-dumps
-One, and only one hook should set this, and return false.
+dumps. One, and only one hook should set this, and return false.
 &$tables: Database tables to use in the SELECT query
 &$opts: Options to use for the query
 &$join: Join conditions
 
 'WikiPageDeletionUpdates': manipulate the list of DataUpdates to be applied when
-       a page is deleted. Called in WikiPage::getDeletionUpdates().
-       Note that updates specific to a content model should be provided by the
-       respective Content's getDeletionUpdates() method.
+a page is deleted. Called in WikiPage::getDeletionUpdates(). Note that updates
+specific to a content model should be provided by the respective Content's
+getDeletionUpdates() method.
 $page: the WikiPage
 $content: the Content to generate updates for
 &$updates: the array of DataUpdate objects. Hook function may want to add to it.
 
-'wfShellWikiCmd': Called when generating a shell-escaped command line
-       string to run a MediaWiki cli script.
+'wfShellWikiCmd': Called when generating a shell-escaped command line string to
+run a MediaWiki cli script.
 &$script: MediaWiki cli script path
 &$parameters: Array of arguments and options to the script
 &$options: Associative array of options, may contain the 'php' and 'wrapper'
-       keys
+  keys
 
-'wgQueryPages': called when initialising $wgQueryPages, use this to add new
-query pages to be updated with maintenance/updateSpecialPages.php
+'wgQueryPages': Called when initialising $wgQueryPages, use this to add new
+query pages to be updated with maintenance/updateSpecialPages.php.
 $query: $wgQueryPages itself
 
-'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow extra
- metadata to be added.
+'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow
+extra metadata to be added.
 $obj: The XmlDumpWriter object.
 &$out: The output string.
 $row: The database row for the page.
 $title: The title of the page.
 
-'XmlDumpWriterWriteRevision': Called at the end of a revision in an XML dump, to add extra
- metadata.
+'XmlDumpWriterWriteRevision': Called at the end of a revision in an XML dump, to
+add extra metadata.
 $obj: The XmlDumpWriter object.
 &$out: The text being output.
 $row: The database row for the revision.
 $text: The revision text.
 
-'XMPGetInfo': Called when obtaining the list of XMP tags to extract. Can be used to add
-       additional tags to extract.
-&$items: Array containing information on which items to extract. See XMPInfo for details on the format.
+'XMPGetInfo': Called when obtaining the list of XMP tags to extract. Can be used
+to add additional tags to extract.
+&$items: Array containing information on which items to extract. See XMPInfo for
+  details on the format.
 
-'XMPGetResults': Called just before returning the results array of parsing xmp data. Can be
-       used to post-process the results.
-&$data: Array of metadata sections (such as $data['xmp-general']) each section is an array of
-       metadata tags returned (each tag is either a value, or an array of values).
+'XMPGetResults': Called just before returning the results array of parsing xmp
+data. Can be used to post-process the results.
+&$data: Array of metadata sections (such as $data['xmp-general']) each section
+  is an array of metadata tags returned (each tag is either a value, or an array
+  of values).
 
 More hooks might be available but undocumented, you can execute
 'php maintenance/findHooks.php' to find hidden ones.
diff --git a/includes/ArrayUtils.php b/includes/ArrayUtils.php
new file mode 100644 (file)
index 0000000..4ff31b8
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+class ArrayUtils {
+       /**
+        * Sort the given array in a pseudo-random order which depends only on the
+        * given key and each element value. This is typically used for load
+        * balancing between servers each with a local cache.
+        *
+        * Keys are preserved. The input array is modified in place.
+        *
+        * Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
+        * strings, md5() is only 10% slower than hash('joaat',...) etc.,
+        * since the function call overhead dominates. So there's not much
+        * justification for breaking compatibility with installations
+        * compiled with ./configure --disable-hash.
+        * 
+        * @param $array The array to sort
+        * @param $key The string key
+        * @param $separator A separator used to delimit the array elements and the
+        *     key. This can be chosen to provide backwards compatibility with 
+        *     various consistent hash implementations that existed before this
+        *     function was introduced.
+        */
+       static function consistentHashSort( &$array, $key, $separator = "\000" ) {
+               $hashes = array();
+               foreach ( $array as $elt ) {
+                       $hashes[$elt] = md5( $elt . $separator . $key );
+               }
+               uasort( $array, function ( $a, $b ) use ( $hashes ) {
+                       return strcmp( $hashes[$a], $hashes[$b] );
+               } );
+       }
+}
+
index 5a887b6..10cbac7 100644 (file)
@@ -280,15 +280,13 @@ class Article extends Page {
                                $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
                                $content = new MessageContent( $message, null, 'parsemag' );
                        }
-                       wfProfileOut( __METHOD__ );
-
-                       return $content;
                } else {
                        $this->fetchContentObject();
-                       wfProfileOut( __METHOD__ );
-
-                       return $this->mContentObject;
+                       $content = $this->mContentObject;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $content;
        }
 
        /**
@@ -403,7 +401,7 @@ class Article extends Page {
         *
         * @note code that wants to retrieve page content from the database should use WikiPage::getContent().
         *
-        * @return Content|null
+        * @return Content|null|boolean false
         *
         * @since 1.21
         */
@@ -864,15 +862,21 @@ class Article extends Page {
 
                $ns = $this->getTitle()->getNamespace();
 
-               if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
-                       # Don't index user and user talk pages for blocked users (bug 11443)
-                       if ( !$this->getTitle()->isSubpage() ) {
-                               if ( Block::newFromTarget( null, $this->getTitle()->getText() ) instanceof Block ) {
-                                       return array(
-                                               'index'  => 'noindex',
-                                               'follow' => 'nofollow'
-                                       );
-                               }
+               # Don't index user and user talk pages for blocked users (bug 11443)
+               if ( ( $ns == NS_USER || $ns == NS_USER_TALK ) && !$this->getTitle()->isSubpage() ) {
+                       $specificTarget = null;
+                       $vagueTarget = null;
+                       $titleText = $this->getTitle()->getText();
+                       if ( IP::isValid( $titleText ) ) {
+                               $vagueTarget = $titleText;
+                       } else {
+                               $specificTarget = $titleText;
+                       }
+                       if ( Block::newFromTarget( $specificTarget, $vagueTarget ) instanceof Block ) {
+                               return array(
+                                       'index'  => 'noindex',
+                                       'follow' => 'nofollow'
+                               );
                        }
                }
 
@@ -988,9 +992,7 @@ class Article extends Page {
                                }
 
                                // Add a <link rel="canonical"> tag
-                               $outputPage->addLink( array( 'rel' => 'canonical',
-                                       'href' => $this->getTitle()->getLocalURL() )
-                               );
+                               $outputPage->setCanonicalUrl( $this->getTitle()->getLocalURL() );
 
                                // Tell the output object that the user arrived at this article through a redirect
                                $outputPage->setRedirectedFrom( $this->mRedirectedFrom );
index ecfe208..c188975 100644 (file)
@@ -33,6 +33,7 @@ $wgAutoloadLocalClasses = array(
        'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
        'AjaxResponse' => 'includes/AjaxResponse.php',
        'AlphabeticPager' => 'includes/Pager.php',
+       'ArrayUtils' => 'includes/ArrayUtils.php',
        'Article' => 'includes/Article.php',
        'AtomFeed' => 'includes/Feed.php',
        'AuthPlugin' => 'includes/AuthPlugin.php',
@@ -114,6 +115,7 @@ $wgAutoloadLocalClasses = array(
        'HistoryBlobStub' => 'includes/HistoryBlob.php',
        'Hooks' => 'includes/Hooks.php',
        'Html' => 'includes/Html.php',
+       'HTMLApiField' => 'includes/HTMLForm.php',
        'HTMLCheckField' => 'includes/HTMLForm.php',
        'HTMLEditTools' => 'includes/HTMLForm.php',
        'HTMLFloatField' => 'includes/HTMLForm.php',
@@ -216,6 +218,7 @@ $wgAutoloadLocalClasses = array(
        'Sanitizer' => 'includes/Sanitizer.php',
        'DataUpdate' => 'includes/DataUpdate.php',
        'SqlDataUpdate' => 'includes/SqlDataUpdate.php',
+       'ScopedCallback' => 'includes/ScopedCallback.php',
        'ScopedPHPTimeout' => 'includes/ScopedPHPTimeout.php',
        'SiteConfiguration' => 'includes/SiteConfiguration.php',
        'SiteStats' => 'includes/SiteStats.php',
@@ -331,6 +334,7 @@ $wgAutoloadLocalClasses = array(
        'ApiBase' => 'includes/api/ApiBase.php',
        'ApiBlock' => 'includes/api/ApiBlock.php',
        'ApiComparePages' => 'includes/api/ApiComparePages.php',
+       'ApiCreateAccount' => 'includes/api/ApiCreateAccount.php',
        'ApiDelete' => 'includes/api/ApiDelete.php',
        'ApiDisabled' => 'includes/api/ApiDisabled.php',
        'ApiEditPage' => 'includes/api/ApiEditPage.php',
@@ -879,11 +883,12 @@ $wgAutoloadLocalClasses = array(
        # includes/site
        'MediaWikiSite' => 'includes/site/MediaWikiSite.php',
        'Site' => 'includes/site/Site.php',
-       'SiteArray' => 'includes/site/SiteArray.php',
+       'SiteObject' => 'includes/site/Site.php',
+       'SiteArray' => 'includes/site/SiteList.php',
        'SiteList' => 'includes/site/SiteList.php',
-       'SiteObject' => 'includes/site/SiteObject.php',
-       'Sites' => 'includes/site/Sites.php',
-       'SitesTable' => 'includes/site/SitesTable.php',
+       'SiteSQLStore' => 'includes/site/SiteSQLStore.php',
+       'Sites' => 'includes/site/SiteSQLStore.php',
+       'SiteStore' => 'includes/site/SiteStore.php',
 
        # includes/specials
        'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
index 4c878b6..b81cf3a 100644 (file)
@@ -576,6 +576,13 @@ class Block {
         * @return Array: block IDs of retroactive autoblocks made
         */
        protected static function defaultRetroactiveAutoblock( Block $block, array &$blockIds ) {
+               global $wgPutIPinRC;
+
+               // No IPs are in recentchanges table, so nothing to select
+               if( !$wgPutIPinRC ) {
+                       return;
+               }
+
                $dbr = wfGetDB( DB_SLAVE );
 
                $options = array( 'ORDER BY' => 'rc_timestamp DESC' );
@@ -587,7 +594,7 @@ class Block {
                $res = $dbr->select( 'recentchanges', array( 'rc_ip' ), $conds,
                        __METHOD__ ,  $options );
 
-               if ( !$dbr->numRows( $res ) ) {
+               if ( !$res->numRows() ) {
                        # No results, don't autoblock anything
                        wfDebug( "No IP found to retroactively autoblock\n" );
                } else {
@@ -689,7 +696,7 @@ class Block {
                wfDebug( "Autoblocking {$this->getTarget()}@" . $autoblockIP . "\n" );
                $autoblock->setTarget( $autoblockIP );
                $autoblock->setBlocker( $this->getBlocker() );
-               $autoblock->mReason = wfMessage( 'autoblocker', $this->getTarget(), $this->mReason )->inContentLanguage()->text();
+               $autoblock->mReason = wfMessage( 'autoblocker', $this->getTarget(), $this->mReason )->inContentLanguage()->plain();
                $timestamp = wfTimestampNow();
                $autoblock->mTimestamp = $timestamp;
                $autoblock->mAuto = 1;
@@ -990,9 +997,11 @@ class Block {
         * Purge expired blocks from the ipblocks table
         */
        public static function purgeExpired() {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'ipblocks',
-                       array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
+               if ( !wfReadOnly() ) {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->delete( 'ipblocks',
+                               array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
+               }
        }
 
        /**
@@ -1050,7 +1059,7 @@ class Block {
                        # passed by some callers (bug 29116)
                        return null;
 
-               } elseif( in_array( $type, array( Block::TYPE_USER, Block::TYPE_IP, Block::TYPE_RANGE ) ) ) {
+               } elseif( in_array( $type, array( Block::TYPE_USER, Block::TYPE_IP, Block::TYPE_RANGE, null ) ) ) {
                        $block = new Block();
                        $block->fromMaster( $fromMaster );
 
@@ -1066,12 +1075,13 @@ class Block {
        }
 
        /**
-        * From an existing Block, get the target and the type of target.  Note that it is
-        * always safe to treat the target as a string; for User objects this will return
-        * User::__toString() which in turn gives User::getName().
+        * From an existing Block, get the target and the type of target.
+        * Note that, except for null, it is always safe to treat the target
+        * as a string; for User objects this will return User::__toString()
+        * which in turn gives User::getName().
         *
-        * @param $target String|Int|User
-        * @return array( User|String, Block::TYPE_ constant )
+        * @param $target String|Int|User|null
+        * @return array( User|String|null, Block::TYPE_ constant|null )
         */
        public static function parseTarget( $target ) {
                # We may have been through this before
index b3741f8..7678ffe 100644 (file)
@@ -312,7 +312,10 @@ class CategoryViewer extends ContextSource {
                                ),
                                array(
                                        'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ),
-                                       'category' => array( 'LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY )
+                                       'category' => array( 'LEFT JOIN', array(
+                                               'cat_title = page_title',
+                                               'page_namespace' => NS_CATEGORY
+                                       ))
                                )
                        );
 
index a2fff57..e98fcac 100644 (file)
@@ -682,7 +682,7 @@ class OldChangesList extends ChangesList {
                        $classes[] = Sanitizer::escapeClass( 'watchlist-'.$rc->mAttribs['rc_namespace'].'-'.$rc->mAttribs['rc_title'] );
                }
 
-               if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc ) ) ) {
+               if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc, &$classes ) ) ) {
                        wfProfileOut( __METHOD__ );
                        return false;
                }
index fdbcaa7..d68d991 100644 (file)
@@ -1264,6 +1264,12 @@ $wgSMTP = false;
  */
 $wgAdditionalMailParams = null;
 
+/**
+ * For parts of the system that have been updated to provide HTML email content, send
+ * both text and HTML parts as the body of the email
+ */
+$wgAllowHTMLEmail = false;
+
 /**
  * True: from page editor if s/he opted-in. False: Enotif mails appear to come
  * from $wgEmergencyContact
@@ -2363,7 +2369,7 @@ $wgDisableLangConversion = false;
 /** Whether to enable language variant conversion for links. */
 $wgDisableTitleConversion = false;
 
-/** Whether to enable cononical language links in meta data. */
+/** Whether to enable canonical language links in meta data. */
 $wgCanonicalLanguageLinks = true;
 
 /** Default variant code, if false, the default will be the language code */
@@ -2463,17 +2469,6 @@ $wgLocaltimezone = null;
  */
 $wgLocalTZoffset = null;
 
-/**
- * If set to true, this will roll back a few bug fixes introduced in 1.19,
- * emulating the 1.18 behaviour, to avoid introducing bug 34832. In 1.19,
- * language variant conversion is disabled in interface messages. Setting this
- * to true re-enables it.
- *
- * @todo This variable should be removed (implicitly false) in 1.20 or earlier.
- */
-$wgBug34832TransitionalRollback = true;
-
-
 /** @} */ # End of language/charset settings
 
 /*************************************************************************//**
@@ -2826,12 +2821,21 @@ $wgSend404Code = true;
 /**
  * The $wgShowRollbackEditCount variable is used to show how many edits will be
  * rollback. The numeric value of the varible are the limit up to are counted.
- * If the value is false or 0, the edits are not counted.
+ * If the value is false or 0, the edits are not counted. Disabling this will
+ * furthermore prevent MediaWiki from hiding some useless rollback links.
  *
  * @since 1.20
  */
 $wgShowRollbackEditCount = 10;
 
+/**
+ * Output a <link rel="canonical"> tag on every page indicating the canonical
+ * server which should be used, i.e. $wgServer or $wgCanonicalServer. Since
+ * detection of the current server is unreliable, the link is sent
+ * unconditionally.
+ */
+$wgEnableCanonicalServerLink = false;
+
 /** @} */ # End of output format settings }
 
 /*************************************************************************//**
@@ -3213,11 +3217,13 @@ $wgNamespacesWithSubpages = array(
        NS_TALK           => true,
        NS_USER           => true,
        NS_USER_TALK      => true,
+       NS_PROJECT        => true,
        NS_PROJECT_TALK   => true,
        NS_FILE_TALK      => true,
        NS_MEDIAWIKI      => true,
        NS_MEDIAWIKI_TALK => true,
        NS_TEMPLATE_TALK  => true,
+       NS_HELP           => true,
        NS_HELP_TALK      => true,
        NS_CATEGORY_TALK  => true
 );
@@ -4291,6 +4297,7 @@ $wgRateLimitsExcludedIPs = array();
 /**
  * Log IP addresses in the recentchanges table; can be accessed only by
  * extensions (e.g. CheckUser) or a DB admin
+ * Used for retroactive autoblocks
  */
 $wgPutIPinRC = true;
 
@@ -4640,6 +4647,13 @@ $wgAggregateStatsID = false;
  */
 $wgDisableCounters = false;
 
+/**
+ * InfoAction retrieves a list of transclusion links (both to and from).
+ * This number puts a limit on that query in the case of highly transcluded
+ * templates.
+ */
+$wgPageInfoTransclusionLimit = 50;
+
 /**
  * Set this to an integer to only do synchronous site_stats updates
  * one every *this many* updates. The other requests go into pending
@@ -5441,7 +5455,8 @@ $wgJobClasses = array(
 
 /**
 
- * Jobs that must be explicitly requested, i.e. aren't run by job runners unless special flags are set.
+ * Jobs that must be explicitly requested, i.e. aren't run by job runners unless
+ * special flags are set. The values here are keys of $wgJobClasses.
  *
  * These can be:
  * - Very long-running jobs.
@@ -5979,6 +5994,22 @@ $wgEnableAPI = true;
  */
 $wgEnableWriteAPI = true;
 
+/**
+ *
+ *     WARNING: SECURITY THREAT - debug use only
+ *
+ * Disables many security checks in the API for debugging purposes.
+ * This flag should never be used on the production servers, as it introduces
+ * a number of potential security holes. Even when enabled, the validation
+ * will still be performed, but instead of failing, API will return a warning.
+ * Also, there will always be a warning notifying that this flag is set.
+ * At this point, the flag allows GET requests to go through for modules
+ * requiring POST.
+ *
+ * @since 1.21
+ */
+$wgDebugAPI = false;
+
 /**
  * API module extensions.
  * Associative array mapping module name to class name.
@@ -6096,10 +6127,16 @@ $wgMaxShellMemory = 102400;
 $wgMaxShellFileSize = 102400;
 
 /**
- * Maximum CPU time in seconds for shell processes under linux
+ * Maximum CPU time in seconds for shell processes under Linux
  */
 $wgMaxShellTime = 180;
 
+/**
+ * Maximum wall clock time (i.e. real time, of the kind the clock on the wall
+ * would measure) in seconds for shell processes under Linux
+ */
+$wgMaxShellWallClockTime = 180;
+
 /**
  * Executable path of the PHP cli binary (php/php5). Should be set up on install.
  */
@@ -6160,6 +6197,15 @@ $wgUpdateRowsPerJob = 500;
  */
 $wgUpdateRowsPerQuery = 100;
 
+/**
+ * Do not purge all the pages that use a page when it is edited
+ * if there are more than this many such pages. This is used to
+ * avoid invalidating a large portion of the squid/parser cache.
+ *
+ * This setting should factor in any squid/parser cache expiry settings.
+ */
+$wgMaxBacklinksInvalidate = false;
+
 /** @} */ # End job queue }
 
 /************************************************************************//**
@@ -6358,8 +6404,9 @@ $wgRequirePasswordforEmailChange = true;
  *
  * @since 1.20
  */
-$wgSiteTypes = array();
-$wgSiteTypes['mediawiki'] = 'MediaWikiSite';
+$wgSiteTypes = array(
+       'mediawiki' => 'MediaWikiSite',
+);
 
 /**
  * For really cool vim folding this needs to be at the end:
index cf2b878..ce8077d 100644 (file)
@@ -577,13 +577,15 @@ class EditPage {
        }
 
        /**
-        * Does this EditPage class support section editing?
-        * This is used by EditPage subclasses to indicate their ui cannot handle section edits
+        * Returns whether section editing is supported for the current page.
+        * Subclasses may override this to replace the default behavior, which is
+        * to check ContentHandler::supportsSections.
         *
-        * @return bool
+        * @return bool true if this edit page supports sections, false otherwise.
         */
        protected function isSectionEditSupported() {
-               return true;
+               $contentHandler = ContentHandler::getForTitle( $this->mTitle );
+               return $contentHandler->supportsSections();
        }
 
        /**
@@ -597,6 +599,11 @@ class EditPage {
 
                # Section edit can come from either the form or a link
                $this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
+
+               if ( $this->section !== null && $this->section !== '' && !$this->isSectionEditSupported() ) {
+                       throw new ErrorPageError( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
+               }
+
                $this->isNew = !$this->mTitle->exists() || $this->section == 'new';
 
                if ( $request->wasPosted() ) {
@@ -617,8 +624,11 @@ class EditPage {
                                wfProfileOut( get_class( $this ) . "::importContentFormData" );
                        }
 
+                       # Trim spaces on user supplied text
+                       $summary = trim( $request->getText( 'wpSummary' ) );
+
                        # Truncate for whole multibyte characters
-                       $this->summary = $wgContLang->truncate( $request->getText( 'wpSummary' ), 255 );
+                       $this->summary = $wgContLang->truncate( $summary, 255 );
 
                        # If the summary consists of a heading, e.g. '==Foobar==', extract the title from the
                        # header syntax, e.g. 'Foobar'. This is mainly an issue when we are using wpSummary for
@@ -1218,6 +1228,54 @@ class EditPage {
                }
        }
 
+       /**
+        * Run hooks that can filter edits just before they get saved.
+        *
+        * @param Content $content the Content to filter.
+        * @param Status  $status for reporting the outcome to the caller
+        * @param User    $user the user performing the edit
+        *
+        * @return bool
+        */
+       protected function runPostMergeFilters( Content $content, Status $status, User $user ) {
+               // Run old style post-section-merge edit filter
+               if ( !ContentHandler::runLegacyHooks( 'EditFilterMerged',
+                       array( $this, $content, &$this->hookError, $this->summary ) ) ) {
+
+                       # Error messages etc. could be handled within the hook...
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR;
+                       return false;
+               } elseif ( $this->hookError != '' ) {
+                       # ...or the hook could be expecting us to produce an error
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       return false;
+               }
+
+               // Run new style post-section-merge edit filter
+               if ( !wfRunHooks( 'EditFilterMergedContent',
+                       array( $this->mArticle->getContext(), $content, $status, $this->summary,
+                               $user, $this->minoredit ) ) ) {
+
+                       # Error messages etc. could be handled within the hook...
+                       // XXX: $status->value may already be something informative...
+                       $this->hookError = $status->getWikiText();
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR;
+                       return false;
+               } elseif ( !$status->isOK() ) {
+                       # ...or the hook could be expecting us to produce an error
+                       // FIXME this sucks, we should just use the Status object throughout
+                       $this->hookError = $status->getWikiText();
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * Attempt submission (no UI)
         *
@@ -1235,7 +1293,7 @@ class EditPage {
 
                $status = Status::newGood();
 
-               wfProfileIn( __METHOD__  );
+               wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-checks' );
 
                if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) {
@@ -1243,7 +1301,7 @@ class EditPage {
                        $status->fatal( 'hookaborted' );
                        $status->value = self::AS_HOOK_ERROR;
                        wfProfileOut( __METHOD__ . '-checks' );
-                       wfProfileOut( __METHOD__  );
+                       wfProfileOut( __METHOD__ );
                        return $status;
                }
 
@@ -1253,6 +1311,7 @@ class EditPage {
                } catch ( MWContentSerializationException $ex ) {
                        $status->fatal( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
                        $status->value = self::AS_PARSE_ERROR;
+                       wfProfileOut( __METHOD__ . '-checks' );
                        wfProfileOut( __METHOD__ );
                        return $status;
                }
@@ -1265,7 +1324,7 @@ class EditPage {
                                $status->setResult( false, $code );
 
                                wfProfileOut( __METHOD__ . '-checks' );
-                               wfProfileOut( __METHOD__  );
+                               wfProfileOut( __METHOD__ );
 
                                return $status;
                }
@@ -1386,17 +1445,7 @@ class EditPage {
                                return $status;
                        }
 
-                       // Run post-section-merge edit filter
-                       if ( !wfRunHooks( 'EditFilterMerged', array( $this, $this->textbox1, &$this->hookError, $this->summary ) ) ) {
-                               # Error messages etc. could be handled within the hook...
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR;
-                               wfProfileOut( __METHOD__ );
-                               return $status;
-                       } elseif ( $this->hookError != '' ) {
-                               # ...or the hook could be expecting us to produce an error
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       if ( !$this->runPostMergeFilters( $textbox_content, $status, $wgUser ) ) {
                                wfProfileOut( __METHOD__ );
                                return $status;
                        }
@@ -1510,20 +1559,7 @@ class EditPage {
                                return $status;
                        }
 
-                       // Run post-section-merge edit filter
-                       $hook_args = array( $this, $content, &$this->hookError, $this->summary );
-
-                       if ( !ContentHandler::runLegacyHooks( 'EditFilterMerged', $hook_args )
-                               || !wfRunHooks( 'EditFilterMergedContent', $hook_args ) ) {
-                               # Error messages etc. could be handled within the hook...
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR;
-                               wfProfileOut( __METHOD__ );
-                               return $status;
-                       } elseif ( $this->hookError != '' ) {
-                               # ...or the hook could be expecting us to produce an error
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       if ( !$this->runPostMergeFilters( $content, $status, $wgUser ) ) {
                                wfProfileOut( __METHOD__ );
                                return $status;
                        }
@@ -1624,12 +1660,7 @@ class EditPage {
                        $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
                                                                                                                        false, null, $this->contentFormat );
 
-               if ( $doEditStatus->isOK() ) {
-                               $result['redirect'] = $content->isRedirect();
-                       $this->updateWatchlist();
-                       wfProfileOut( __METHOD__ );
-                       return $status;
-               } else {
+               if ( !$doEditStatus->isOK() ) {
                        // Failure from doEdit()
                        // Show the edit conflict page for certain recognized errors from doEdit(),
                        // but don't show it for errors from extension hooks
@@ -1644,6 +1675,11 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return $doEditStatus;
                }
+
+               $result['redirect'] = $content->isRedirect();
+               $this->updateWatchlist();
+               wfProfileOut( __METHOD__ );
+               return $status;
        }
 
        /**
@@ -1735,10 +1771,10 @@ class EditPage {
                        $editContent = $result;
                        wfProfileOut( __METHOD__ );
                        return true;
-               } else {
-                       wfProfileOut( __METHOD__ );
-                       return false;
                }
+
+               wfProfileOut( __METHOD__ );
+               return false;
        }
 
        /**
index 8411bc4..598be05 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Helper class to keep track of options when mixing links and form elements.
  *
- * Copyright © 2008, Niklas Laxstiröm
+ * Copyright © 2008, Niklas Laxström
  * Copyright © 2011, Antoine Musso
  *
  * This program is free software; you can redistribute it and/or modify
index 28cc001..2292e31 100644 (file)
@@ -1235,11 +1235,15 @@ function wfLogProfilingData() {
  *
  * @param $key String
  * @param $count Int
+ * @return void
  */
 function wfIncrStats( $key, $count = 1 ) {
        global $wgStatsMethod;
 
        $count = intval( $count );
+       if ( $count == 0 ) {
+               return;
+       }
 
        if( $wgStatsMethod == 'udp' ) {
                global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID;
@@ -2437,7 +2441,7 @@ define( 'TS_ISO_8601_BASIC', 9 );
  * @param $outputtype Mixed: A timestamp in one of the supported formats, the
  *                    function will autodetect which format is supplied and act
  *                    accordingly.
- * @param $ts Mixed: the timestamp to convert or 0 for the current timestamp
+ * @param $ts Mixed: optional timestamp to convert, default 0 for the current time
  * @return Mixed: String / false The same date in the format specified in $outputtype or false
  */
 function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
@@ -2767,12 +2771,13 @@ function wfEscapeShellArg( ) {
  *                 (non-zero is usually failure)
  * @param $environ Array optional environment variables which should be
  *                 added to the executed command environment.
- * @param $limits Array optional array with limits(filesize, memory, time)
+ * @param $limits Array optional array with limits(filesize, memory, time, walltime)
  *                 this overwrites the global wgShellMax* limits.
  * @return string collected stdout as a string (trailing newlines stripped)
  */
 function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
-       global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime;
+       global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
+               $wgMaxShellWallClockTime;
 
        static $disabled;
        if ( is_null( $disabled ) ) {
@@ -2820,14 +2825,19 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
 
        if ( php_uname( 's' ) == 'Linux' ) {
                $time = intval ( isset($limits['time']) ? $limits['time'] : $wgMaxShellTime );
+               if ( isset( $limits['walltime'] ) ) {
+                       $wallTime = intval( $limits['walltime'] );
+               } elseif ( isset( $limits['time'] ) ) {
+                       $wallTime = $time;
+               } else {
+                       $wallTime = intval( $wgMaxShellWallClockTime );
+               }
                $mem = intval ( isset($limits['memory']) ? $limits['memory'] : $wgMaxShellMemory );
                $filesize = intval ( isset($limits['filesize']) ? $limits['filesize'] : $wgMaxShellFileSize );
 
-               if ( $time > 0 && $mem > 0 ) {
-                       $script = "$IP/bin/ulimit4.sh";
-                       if ( is_executable( $script ) ) {
-                               $cmd = '/bin/bash ' . escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd );
-                       }
+               if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
+                       $cmd = '/bin/bash ' . escapeshellarg( "$IP/bin/ulimit5.sh" ) .
+                               " $time $mem $filesize $wallTime " . escapeshellarg( $cmd );
                }
        }
        wfDebug( "wfShellExec: $cmd\n" );
index ef24b62..952022f 100644 (file)
@@ -96,6 +96,7 @@ class HTMLForm extends ContextSource {
 
        // A mapping of 'type' inputs onto standard HTMLFormField subclasses
        static $typeMappings = array(
+               'api' => 'HTMLApiField',
                'text' => 'HTMLTextField',
                'textarea' => 'HTMLTextAreaField',
                'select' => 'HTMLSelectField',
@@ -2429,3 +2430,21 @@ class HTMLEditTools extends HTMLFormField {
                return $msg;
        }
 }
+
+class HTMLApiField extends HTMLFormField {
+       public function getTableRow( $value ) {
+               return '';
+       }
+
+       public function getDiv( $value ) {
+               return $this->getTableRow( $value );
+       }
+
+       public function getRaw( $value ) {
+               return $this->getTableRow( $value );
+       }
+
+       public function getInputHTML( $value ) {
+               return '';
+       }
+}
index 05c27fe..55c2ae5 100644 (file)
@@ -232,8 +232,6 @@ class HistoryBlobStub {
         * @return string
         */
        function getText() {
-               $fname = 'HistoryBlobStub::getText';
-
                if( isset( self::$blobCache[$this->mOldId] ) ) {
                        $obj = self::$blobCache[$this->mOldId];
                } else {
@@ -244,10 +242,9 @@ class HistoryBlobStub {
                        }
                        $flags = explode( ',', $row->old_flags );
                        if( in_array( 'external', $flags ) ) {
-                               $url=$row->old_text;
+                               $url = $row->old_text;
                                $parts = explode( '://', $url, 2 );
                                if ( !isset( $parts[1] ) || $parts[1] == '' ) {
-                                       wfProfileOut( $fname );
                                        return false;
                                }
                                $row->old_text = ExternalStore::fetchFromUrl($url);
index ab27a74..b1092df 100644 (file)
@@ -328,10 +328,13 @@ class MWHttpRequest {
        public function proxySetup() {
                global $wgHTTPProxy;
 
-               if ( $this->proxy || !$this->noProxy ) {
+               // If there is an explicit proxy set and proxies are not disabled, then use it
+               if ( $this->proxy && !$this->noProxy ) {
                        return;
                }
 
+               // Otherwise, fallback to $wgHTTPProxy/http_proxy (when set) if this is not a machine
+               // local URL and proxies are not disabled
                if ( Http::isLocalURL( $this->url ) || $this->noProxy ) {
                        $this->proxy = '';
                } elseif ( $wgHTTPProxy ) {
index c831f64..4965054 100644 (file)
@@ -327,7 +327,8 @@ class ImagePage extends Article {
                        $height_orig = $this->displayImg->getHeight( $page );
                        $height = $height_orig;
 
-                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
+                       $filename = wfEscapeWikiText( $this->displayImg->getName() );
+                       $linktext = $filename;
 
                        wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
 
@@ -351,7 +352,7 @@ class ImagePage extends Article {
                                                # Note that $height <= $maxHeight now, but might not be identical
                                                # because of rounding.
                                        }
-                                       $msgbig = wfMessage( 'show-big-image' )->escaped();
+                                       $linktext = wfMessage( 'show-big-image' )->escaped();
                                        if ( $this->displayImg->getRepo()->canTransformVia404() ) {
                                                $thumbSizes = $wgImageLimits;
                                        } else {
@@ -397,7 +398,6 @@ class ImagePage extends Article {
                                $params['height'] = $height;
                                $thumbnail = $this->displayImg->transform( $params );
 
-                               $showLink = true;
                                $anchorclose = Html::rawElement( 'div', array( 'class' => 'mw-filepage-resolutioninfo' ), $msgsmall );
 
                                $isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
@@ -471,48 +471,39 @@ class ImagePage extends Article {
                                                "<hr />$thumb1\n$thumb2<br style=\"clear: both\" /></div></td></tr></table>"
                                        );
                                }
-                       } else {
+                       } elseif ( $this->displayImg->isSafeFile() ) {
                                # if direct link is allowed but it's not a renderable image, show an icon.
-                               if ( $this->displayImg->isSafeFile() ) {
-                                       $icon = $this->displayImg->iconThumb();
-
-                                       $out->addHTML( '<div class="fullImageLink" id="file">' .
-                                               $icon->toHtml( array( 'file-link' => true ) ) .
-                                               "</div>\n" );
-                               }
+                               $icon = $this->displayImg->iconThumb();
 
-                               $showLink = true;
+                               $out->addHTML( '<div class="fullImageLink" id="file">' .
+                                       $icon->toHtml( array( 'file-link' => true ) ) .
+                                       "</div>\n" );
                        }
 
-                       if ( $showLink ) {
-                               $filename = wfEscapeWikiText( $this->displayImg->getName() );
-                               $linktext = $filename;
-                               if ( isset( $msgbig ) ) {
-                                       $linktext = wfEscapeWikiText( $msgbig );
-                               }
-                               $medialink = "[[Media:$filename|$linktext]]";
-
-                               if ( !$this->displayImg->isSafeFile() ) {
-                                       $warning = wfMessage( 'mediawarning' )->plain();
-                                       // dirmark is needed here to separate the file name, which
-                                       // most likely ends in Latin characters, from the description,
-                                       // which may begin with the file type. In RTL environment
-                                       // this will get messy.
-                                       // The dirmark, however, must not be immediately adjacent
-                                       // to the filename, because it can get copied with it.
-                                       // See bug 25277.
-                                       $out->addWikiText( <<<EOT
+                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
+
+                       $medialink = "[[Media:$filename|$linktext]]";
+
+                       if ( !$this->displayImg->isSafeFile() ) {
+                               $warning = wfMessage( 'mediawarning' )->plain();
+                               // dirmark is needed here to separate the file name, which
+                               // most likely ends in Latin characters, from the description,
+                               // which may begin with the file type. In RTL environment
+                               // this will get messy.
+                               // The dirmark, however, must not be immediately adjacent
+                               // to the filename, because it can get copied with it.
+                               // See bug 25277.
+                               $out->addWikiText( <<<EOT
 <div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
 <div class="mediaWarning">$warning</div>
 EOT
-                                               );
-                               } else {
-                                       $out->addWikiText( <<<EOT
+                                       );
+                       } else {
+                               $out->addWikiText( <<<EOT
 <div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
 </div>
 EOT
-                                       );
-                               }
+                               );
                        }
 
                        // Add cannot animate thumbnail warning
@@ -614,7 +605,7 @@ EOT
 
                /* Add canonical to head if there is no local page for this shared file */
                if( $descUrl && $this->mPage->getID() == 0 ) {
-                       $out->addLink( array( 'rel' => 'canonical', 'href' => $descUrl ) );
+                       $out->setCanonicalUrl( $descUrl );
                }
 
                $wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
@@ -796,9 +787,14 @@ EOT
 
                        $link = Linker::linkKnown( Title::makeTitle( $element->page_namespace, $element->page_title ) );
                        if ( !isset( $redirects[$element->page_title] ) ) {
+                               # No redirects
                                $liContents = $link;
+                       } elseif ( count( $redirects[$element->page_title] ) === 0 ) {
+                               # Redirect without usages
+                               $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams( $link, '' )->parse();
                        } else {
-                               $ul = "<ul class='mw-imagepage-redirectstofile'>\n";
+                               # Redirect with usages
+                               $li = '';
                                foreach ( $redirects[$element->page_title] as $row ) {
                                        $currentCount++;
                                        if ( $currentCount > $limit ) {
@@ -806,13 +802,18 @@ EOT
                                        }
 
                                        $link2 = Linker::linkKnown( Title::makeTitle( $row->page_namespace, $row->page_title ) );
-                                       $ul .= Html::rawElement(
+                                       $li .= Html::rawElement(
                                                'li',
                                                array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
                                                $link2
                                                ) . "\n";
                                }
-                               $ul .= '</ul>';
+
+                               $ul = Html::rawElement(
+                                       'ul',
+                                       array( 'class' => 'mw-imagepage-redirectstofile'),
+                                       $li
+                                       ) . "\n";
                                $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams(
                                        $link, $ul )->parse();
                        }
index 05a9905..bc0bb77 100644 (file)
@@ -947,10 +947,10 @@ class Linker {
                        return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
                                htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
                                $encLabel . '</a>';
-               } else {
-                       wfProfileOut( __METHOD__ );
-                       return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
                }
+
+               wfProfileOut( __METHOD__ );
+               return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
        }
 
        /**
@@ -1038,9 +1038,11 @@ class Linker {
         * @param $escape Boolean: do we escape the link text?
         * @param $linktype String: type of external link. Gets added to the classes
         * @param $attribs Array of extra attributes to <a>
+        * @param $title Title|null Title object used for title specific link attributes
         * @return string
         */
-       public static function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array() ) {
+       public static function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array(), $title = null ) {
+               global $wgTitle;
                $class = "external";
                if ( $linktype ) {
                        $class .= " $linktype";
@@ -1053,6 +1055,11 @@ class Linker {
                if ( $escape ) {
                        $text = htmlspecialchars( $text );
                }
+
+               if ( !$title ) {
+                       $title = $wgTitle;
+               }
+               $attribs['rel'] = Parser::getExternalLinkRel( $url, $title );
                $link = '';
                $success = wfRunHooks( 'LinkerMakeExternalLink',
                        array( &$url, &$text, &$link, &$attribs, $linktype ) );
@@ -1756,19 +1763,101 @@ class Linker {
         * changes, so this allows sysops to combat a busy vandal without bothering
         * other users.
         *
+        * If the option verify is set this function will return the link only in case the
+        * revision can be reverted. Please note that due to performance limitations
+        * it might be assumed that a user isn't the only contributor of a page while
+        * (s)he is, which will lead to useless rollback links. Furthermore this wont
+        * work if $wgShowRollbackEditCount is disabled, so this can only function
+        * as an additional check.
+        *
+        * If the option noBrackets is set the rollback link wont be enclosed in []
+        *
         * @param $rev Revision object
         * @param $context IContextSource context to use or null for the main context.
+        * @param $options array
         * @return string
         */
-       public static function generateRollback( $rev, IContextSource $context = null ) {
+       public static function generateRollback( $rev, IContextSource $context = null, $options = array( 'verify' ) ) {
                if ( $context === null ) {
                        $context = RequestContext::getMain();
                }
+               $editCount = false;
+               if ( in_array( 'verify', $options ) ) {
+                       $editCount = self::getRollbackEditCount( $rev, true );
+                       if ( $editCount === false ) {
+                               return '';
+                       }
+               }
+
+               $inner = self::buildRollbackLink( $rev, $context, $editCount );
 
-               return '<span class="mw-rollback-link">'
-                       . $context->msg( 'brackets' )->rawParams(
-                               self::buildRollbackLink( $rev, $context ) )->plain()
-                       . '</span>';
+               if ( !in_array( 'noBrackets', $options ) ) {
+                       $inner = $context->msg( 'brackets' )->rawParams( $inner )->plain();
+               }
+
+               return '<span class="mw-rollback-link">' . $inner . '</span>';
+       }
+
+       /**
+        * This function will return the number of revisions which a rollback
+        * would revert and, if $verify is set it will verify that a revision
+        * can be reverted (that the user isn't the only contributor and the
+        * revision we might rollback to isn't deleted). These checks can only
+        * function as an additional check as this function only checks against
+        * the last $wgShowRollbackEditCount edits.
+        *
+        * Returns null if $wgShowRollbackEditCount is disabled or false if $verify
+        * is set and the user is the only contributor of the page.
+        *
+        * @param $rev Revision object
+        * @param $verify Bool Try to verfiy that this revision can really be rolled back
+        * @return integer|bool|null
+        */
+       public static function getRollbackEditCount( $rev, $verify ) {
+               global $wgShowRollbackEditCount;
+               if ( !is_int( $wgShowRollbackEditCount ) || !$wgShowRollbackEditCount > 0 ) {
+                       // Nothing has happened, indicate this by returning 'null'
+                       return null;
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+
+               // Up to the value of $wgShowRollbackEditCount revisions are counted
+               $res = $dbr->select(
+                       'revision',
+                       array( 'rev_user_text', 'rev_deleted' ),
+                       // $rev->getPage() returns null sometimes
+                       array( 'rev_page' => $rev->getTitle()->getArticleID() ),
+                       __METHOD__,
+                       array(
+                               'USE INDEX' => array( 'revision' => 'page_timestamp' ),
+                               'ORDER BY' => 'rev_timestamp DESC',
+                               'LIMIT' => $wgShowRollbackEditCount + 1
+                       )
+               );
+
+               $editCount = 0;
+               $moreRevs = false;
+               foreach ( $res as $row ) {
+                       if ( $rev->getRawUserText() != $row->rev_user_text ) {
+                               if ( $verify && ( $row->rev_deleted & Revision::DELETED_TEXT || $row->rev_deleted & Revision::DELETED_USER ) ) {
+                                       // If the user or the text of the revision we might rollback to is deleted in some way we can't rollback
+                                       // Similar to the sanity checks in WikiPage::commitRollback
+                                       return false;
+                               }
+                               $moreRevs = true;
+                               break;
+                       }
+                       $editCount++;
+               }
+
+               if ( $verify && $editCount <= $wgShowRollbackEditCount && !$moreRevs ) {
+                       // We didn't find at least $wgShowRollbackEditCount revisions made by the current user
+                       // and there weren't any other revisions. That means that the current user is the only
+                       // editor, so we can't rollback
+                       return false;
+               }
+               return $editCount;
        }
 
        /**
@@ -1776,9 +1865,10 @@ class Linker {
         *
         * @param $rev Revision object
         * @param $context IContextSource context to use or null for the main context.
+        * @param $editCount integer Number of edits that would be reverted
         * @return String: HTML fragment
         */
-       public static function buildRollbackLink( $rev, IContextSource $context = null ) {
+       public static function buildRollbackLink( $rev, IContextSource $context = null, $editCount = false ) {
                global $wgShowRollbackEditCount, $wgMiserMode;
 
                // To config which pages are effected by miser mode
@@ -1810,25 +1900,8 @@ class Linker {
                }
 
                if( !$disableRollbackEditCount && is_int( $wgShowRollbackEditCount ) && $wgShowRollbackEditCount > 0 ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-
-                       // Up to the value of $wgShowRollbackEditCount revisions are counted
-                       $res = $dbr->select( 'revision',
-                               array( 'rev_id', 'rev_user_text' ),
-                               // $rev->getPage() returns null sometimes
-                               array( 'rev_page' => $rev->getTitle()->getArticleID() ),
-                               __METHOD__,
-                               array(  'USE INDEX' => 'page_timestamp',
-                                       'ORDER BY' => 'rev_timestamp DESC',
-                                       'LIMIT' => $wgShowRollbackEditCount + 1 )
-                       );
-
-                       $editCount = 0;
-                       while( $row = $dbr->fetchObject( $res ) ) {
-                               if( $rev->getUserText() != $row->rev_user_text ) {
-                                       break;
-                               }
-                               $editCount++;
+                       if ( !is_numeric( $editCount ) ) {
+                               $editCount = self::getRollbackEditCount( $rev, false );
                        }
 
                        if( $editCount > $wgShowRollbackEditCount ) {
@@ -1858,13 +1931,19 @@ class Linker {
        /**
         * Returns HTML for the "templates used on this page" list.
         *
+        * Make an HTML list of templates, and then add a "More..." link at
+        * the bottom. If $more is null, do not add a "More..." link. If $more
+        * is a Title, make a link to that title and use it. If $more is a string,
+        * directly paste it in as the link.
+        *
         * @param $templates Array of templates from Article::getUsedTemplate
         * or similar
-        * @param $preview Boolean: whether this is for a preview
-        * @param $section Boolean: whether this is for a section edit
+        * @param bool $preview Whether this is for a preview
+        * @param bool $section Whether this is for a section edit
+        * @param Title|string|null $more A link for "More..." of the templates
         * @return String: HTML output
         */
-       public static function formatTemplates( $templates, $preview = false, $section = false ) {
+       public static function formatTemplates( $templates, $preview = false, $section = false, $more = null ) {
                wfProfileIn( __METHOD__ );
 
                $outText = '';
@@ -1921,9 +2000,16 @@ class Linker {
                                        . wfMessage( 'word-separator' )->escaped()
                                        . $protected . '</li>';
                        }
+
+                       if ( $more instanceof Title ) {
+                               $outText .= '<li>' . self::link( $more, wfMessage( 'moredotdotdot' ) ) . '</li>';
+                       } elseif ( $more ) {
+                               $outText .= "<li>$more</li>";
+                       }
+
                        $outText .= '</ul>';
                }
-               wfProfileOut( __METHOD__  );
+               wfProfileOut( __METHOD__ );
                return $outText;
        }
 
@@ -1949,7 +2035,7 @@ class Linker {
                        }
                        $outText .= '</ul>';
                }
-               wfProfileOut( __METHOD__  );
+               wfProfileOut( __METHOD__ );
                return $outText;
        }
 
index 976f144..8f10b8b 100644 (file)
@@ -480,7 +480,24 @@ class Message {
         * @return String
         */
        public function __toString() {
-               return $this->toString();
+               // PHP doesn't allow __toString to throw exceptions and will
+               // trigger a fatal error if it does. So, catch any exceptions.
+
+               try {
+                       return $this->toString();
+               } catch ( Exception $ex ) {
+                       try {
+                               trigger_error( "Exception caught in " . __METHOD__ . " (message " . $this->key . "): "
+                                       . $ex, E_USER_WARNING );
+                       } catch ( Exception $ex ) {
+                               // Doh! Cause a fatal error after all?
+                       }
+
+                       if ( $this->format === 'plain' ) {
+                               return '<' . $this->key . '>';
+                       }
+                       return '&lt;' . $this->key . '&gt;';
+               }
        }
 
        /**
index 09561bd..6322be7 100644 (file)
@@ -80,42 +80,45 @@ class MessageBlobStore {
                        return false;
                }
 
-               $dbw = wfGetDB( DB_MASTER );
-               $success = $dbw->insert( 'msg_resource', array(
-                               'mr_lang' => $lang,
-                               'mr_resource' => $name,
-                               'mr_blob' => $blob,
-                               'mr_timestamp' => $dbw->timestamp()
-                       ),
-                       __METHOD__,
-                       array( 'IGNORE' )
-               );
-
-               if ( $success ) {
-                       if ( $dbw->affectedRows() == 0 ) {
-                               // Blob was already present, fetch it
-                               $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array(
-                                               'mr_resource' => $name,
-                                               'mr_lang' => $lang,
-                                       ),
-                                       __METHOD__
-                               );
-                       } else {
-                               // Update msg_resource_links
-                               $rows = array();
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $success = $dbw->insert( 'msg_resource', array(
+                                       'mr_lang' => $lang,
+                                       'mr_resource' => $name,
+                                       'mr_blob' => $blob,
+                                       'mr_timestamp' => $dbw->timestamp()
+                               ),
+                               __METHOD__,
+                               array( 'IGNORE' )
+                       );
 
-                               foreach ( $module->getMessages() as $key ) {
-                                       $rows[] = array(
-                                               'mrl_resource' => $name,
-                                               'mrl_message' => $key
+                       if ( $success ) {
+                               if ( $dbw->affectedRows() == 0 ) {
+                                       // Blob was already present, fetch it
+                                       $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array(
+                                                       'mr_resource' => $name,
+                                                       'mr_lang' => $lang,
+                                               ),
+                                               __METHOD__
+                                       );
+                               } else {
+                                       // Update msg_resource_links
+                                       $rows = array();
+
+                                       foreach ( $module->getMessages() as $key ) {
+                                               $rows[] = array(
+                                                       'mrl_resource' => $name,
+                                                       'mrl_message' => $key
+                                               );
+                                       }
+                                       $dbw->insert( 'msg_resource_links', $rows,
+                                               __METHOD__, array( 'IGNORE' )
                                        );
                                }
-                               $dbw->insert( 'msg_resource_links', $rows,
-                                       __METHOD__, array( 'IGNORE' )
-                               );
                        }
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
-
                return $blob;
        }
 
@@ -141,48 +144,51 @@ class MessageBlobStore {
                $oldBlob = $row->mr_blob;
                $newBlob = self::generateMessageBlob( $module, $lang );
 
-               $newRow = array(
-                       'mr_resource' => $name,
-                       'mr_lang' => $lang,
-                       'mr_blob' => $newBlob,
-                       'mr_timestamp' => $dbw->timestamp()
-               );
+               try {
+                       $newRow = array(
+                               'mr_resource' => $name,
+                               'mr_lang' => $lang,
+                               'mr_blob' => $newBlob,
+                               'mr_timestamp' => $dbw->timestamp()
+                       );
 
-               $dbw->replace( 'msg_resource',
-                       array( array( 'mr_resource', 'mr_lang' ) ),
-                       $newRow, __METHOD__
-               );
+                       $dbw->replace( 'msg_resource',
+                               array( array( 'mr_resource', 'mr_lang' ) ),
+                               $newRow, __METHOD__
+                       );
 
-               // Figure out which messages were added and removed
-               $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) );
-               $newMessages = array_keys( FormatJson::decode( $newBlob, true ) );
-               $added = array_diff( $newMessages, $oldMessages );
-               $removed = array_diff( $oldMessages, $newMessages );
+                       // Figure out which messages were added and removed
+                       $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) );
+                       $newMessages = array_keys( FormatJson::decode( $newBlob, true ) );
+                       $added = array_diff( $newMessages, $oldMessages );
+                       $removed = array_diff( $oldMessages, $newMessages );
 
-               // Delete removed messages, insert added ones
-               if ( $removed ) {
-                       $dbw->delete( 'msg_resource_links', array(
-                                       'mrl_resource' => $name,
-                                       'mrl_message' => $removed
-                               ), __METHOD__
-                       );
-               }
+                       // Delete removed messages, insert added ones
+                       if ( $removed ) {
+                               $dbw->delete( 'msg_resource_links', array(
+                                               'mrl_resource' => $name,
+                                               'mrl_message' => $removed
+                                       ), __METHOD__
+                               );
+                       }
 
-               $newLinksRows = array();
+                       $newLinksRows = array();
 
-               foreach ( $added as $message ) {
-                       $newLinksRows[] = array(
-                               'mrl_resource' => $name,
-                               'mrl_message' => $message
-                       );
-               }
+                       foreach ( $added as $message ) {
+                               $newLinksRows[] = array(
+                                       'mrl_resource' => $name,
+                                       'mrl_message' => $message
+                               );
+                       }
 
-               if ( $newLinksRows ) {
-                       $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__,
-                                array( 'IGNORE' ) // just in case
-                       );
+                       if ( $newLinksRows ) {
+                               $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__,
+                                       array( 'IGNORE' ) // just in case
+                               );
+                       }
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
-
                return $newBlob;
        }
 
@@ -192,50 +198,58 @@ class MessageBlobStore {
         * @param $key String: message key
         */
        public static function updateMessage( $key ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Keep running until the updates queue is empty.
-               // Due to update conflicts, the queue might not be emptied
-               // in one iteration.
-               $updates = null;
-               do {
-                       $updates = self::getUpdatesForMessage( $key, $updates );
-
-                       foreach ( $updates as $k => $update ) {
-                               // Update the row on the condition that it
-                               // didn't change since we fetched it by putting
-                               // the timestamp in the WHERE clause.
-                               $success = $dbw->update( 'msg_resource',
-                                       array(
-                                               'mr_blob' => $update['newBlob'],
-                                               'mr_timestamp' => $dbw->timestamp() ),
-                                       array(
-                                               'mr_resource' => $update['resource'],
-                                               'mr_lang' => $update['lang'],
-                                               'mr_timestamp' => $update['timestamp'] ),
-                                       __METHOD__
-                               );
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+
+                       // Keep running until the updates queue is empty.
+                       // Due to update conflicts, the queue might not be emptied
+                       // in one iteration.
+                       $updates = null;
+                       do {
+                               $updates = self::getUpdatesForMessage( $key, $updates );
+
+                               foreach ( $updates as $k => $update ) {
+                                       // Update the row on the condition that it
+                                       // didn't change since we fetched it by putting
+                                       // the timestamp in the WHERE clause.
+                                       $success = $dbw->update( 'msg_resource',
+                                               array(
+                                                       'mr_blob' => $update['newBlob'],
+                                                       'mr_timestamp' => $dbw->timestamp() ),
+                                               array(
+                                                       'mr_resource' => $update['resource'],
+                                                       'mr_lang' => $update['lang'],
+                                                       'mr_timestamp' => $update['timestamp'] ),
+                                               __METHOD__
+                                       );
 
-                               // Only requeue conflicted updates.
-                               // If update() returned false, don't retry, for
-                               // fear of getting into an infinite loop
-                               if ( !( $success && $dbw->affectedRows() == 0 ) ) {
-                                       // Not conflicted
-                                       unset( $updates[$k] );
+                                       // Only requeue conflicted updates.
+                                       // If update() returned false, don't retry, for
+                                       // fear of getting into an infinite loop
+                                       if ( !( $success && $dbw->affectedRows() == 0 ) ) {
+                                               // Not conflicted
+                                               unset( $updates[$k] );
+                                       }
                                }
-                       }
-               } while ( count( $updates ) );
+                       } while ( count( $updates ) );
 
-               // No need to update msg_resource_links because we didn't add
-               // or remove any messages, we just changed their contents.
+                       // No need to update msg_resource_links because we didn't add
+                       // or remove any messages, we just changed their contents.
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
+               }
        }
 
        public static function clear() {
                // TODO: Give this some more thought
                // TODO: Is TRUNCATE better?
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'msg_resource', '*', __METHOD__ );
-               $dbw->delete( 'msg_resource_links', '*', __METHOD__ );
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->delete( 'msg_resource', '*', __METHOD__ );
+                       $dbw->delete( 'msg_resource_links', '*', __METHOD__ );
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
+               }
        }
 
        /**
index c06b770..5b0f36c 100644 (file)
@@ -43,6 +43,7 @@ class OutputPage extends ContextSource {
        var $mKeywords = array();
 
        var $mLinktags = array();
+       var $mCanonicalUrl = false;
 
        /// Additional stylesheets. Looks like this is for extensions. Might be replaced by resource loader.
        var $mExtStyles = array();
@@ -316,7 +317,9 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add a new \<link\> tag to the page header
+        * Add a new \<link\> tag to the page header.
+        *
+        * Note: use setCanonicalUrl() for rel=canonical.
         *
         * @param $linkarr Array: associative array of attributes.
         */
@@ -336,6 +339,14 @@ class OutputPage extends ContextSource {
                $this->addLink( $linkarr );
        }
 
+       /**
+        * Set the URL to be used for the <link rel=canonical>. This should be used
+        * in preference to addLink(), to avoid duplicate link tags.
+        */
+       function setCanonicalUrl( $url ) {
+               $this->mCanonicalUrl = $url;
+       }
+
        /**
         * Get the value of the "rel" attribute for metadata links
         *
@@ -1424,6 +1435,9 @@ class OutputPage extends ContextSource {
         */
        public function addWikiText( $text, $linestart = true, $interface = true ) {
                $title = $this->getTitle(); // Work arround E_STRICT
+               if ( !$title ) {
+                       throw new MWException( 'Title is null' );
+               }
                $this->addWikiTextTitle( $text, $title, $linestart, /*tidy*/false, $interface );
        }
 
@@ -3040,6 +3054,8 @@ $templates
 
                $tags = array();
 
+               $canonicalUrl = $this->mCanonicalUrl;
+
                if ( $addContentType ) {
                        if ( $wgHtml5 ) {
                                # More succinct than <meta http-equiv=Content-Type>, has the
@@ -3184,10 +3200,7 @@ $templates
                                                );
                                        }
                                } else {
-                                       $tags['canonical'] = Html::element( 'link', array(
-                                               'rel' => 'canonical',
-                                               'href' => $this->getTitle()->getCanonicalUrl()
-                                       ) );
+                                       $canonicalUrl = $this->getTitle()->getLocalURL();
                                }
                        }
                }
@@ -3256,6 +3269,24 @@ $templates
                                }
                        }
                }
+
+               # Canonical URL
+               global $wgEnableCanonicalServerLink;
+               if ( $wgEnableCanonicalServerLink ) {
+                       if ( $canonicalUrl !== false ) {
+                               $canonicalUrl = wfExpandUrl( $canonicalUrl, PROTO_CANONICAL );
+                       } else {
+                               $reqUrl = $this->getRequest()->getRequestURL();
+                               $canonicalUrl = wfExpandUrl( $reqUrl, PROTO_CANONICAL );
+                       }
+               }
+               if ( $canonicalUrl !== false ) {
+                       $tags[] = Html::element( 'link', array(
+                               'rel' => 'canonical',
+                               'href' => $canonicalUrl
+                       ) );
+               }
+
                return $tags;
        }
 
@@ -3484,11 +3515,15 @@ $templates
         * Transform "media" attribute based on request parameters
         *
         * @param $media String: current value of the "media" attribute
-        * @return String: modified value of the "media" attribute
+        * @return String: modified value of the "media" attribute, or null to skip
+        * this stylesheet
         */
        public static function transformCssMedia( $media ) {
                global $wgRequest, $wgHandheldForIPhone;
 
+               // http://www.w3.org/TR/css3-mediaqueries/#syntax
+               $screenMediaQueryRegex = '/^(?:only\s+)?screen\b/i';
+
                // Switch in on-screen display for media testing
                $switches = array(
                        'printable' => 'print',
@@ -3498,8 +3533,20 @@ $templates
                        if( $wgRequest->getBool( $switch ) ) {
                                if( $media == $targetMedia ) {
                                        $media = '';
-                               } elseif( $media == 'screen' ) {
-                                       return null;
+                               } elseif( preg_match( $screenMediaQueryRegex, $media ) === 1 ) {
+                                       // This regex will not attempt to understand a comma-separated media_query_list
+                                       //
+                                       // Example supported values for $media: 'screen', 'only screen', 'screen and (min-width: 982px)' ),
+                                       // 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 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
+                                       // client do the query.
+                                       if( $targetMedia == 'print' || $media == 'screen' ) {
+                                               return null;
+                                       }
                                }
                        }
                }
index 96d9e6d..9878396 100644 (file)
@@ -1240,6 +1240,13 @@ class Preferences {
                        $formDescriptor = array_diff_key( $formDescriptor, $removeKeys );
                }
 
+               // Remove type=api preferences. They are not intended for rendering in the form.
+               foreach ( $formDescriptor as $name => $info ) {
+                       if ( isset( $info['type'] ) && $info['type'] === 'api' ) {
+                               unset( $formDescriptor[$name] );
+                       }
+               }
+
                /**
                 * @var $htmlForm PreferencesForm
                 */
@@ -1406,9 +1413,8 @@ class Preferences {
                        $formData[$pref] = $user->getOption( $pref, null, true );
                }
 
-               //  Keeps old preferences from interfering due to back-compat
-               //  code, etc.
-               $user->resetOptions();
+               // Keep old preferences from interfering due to back-compat code, etc.
+               $user->resetOptions( 'unused', $form->getContext() );
 
                foreach ( $formData as $key => $value ) {
                        $user->setOption( $key, $value );
index e844a1e..fe871b9 100644 (file)
@@ -207,6 +207,7 @@ class ProtectionForm {
                global $wgOut;
 
                $wgOut->setRobotPolicy( 'noindex,nofollow' );
+               $wgOut->addBacklinkSubtitle( $this->mTitle );
 
                if ( is_array( $err ) ) {
                        $wgOut->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err );
@@ -214,6 +215,18 @@ class ProtectionForm {
                        $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
                }
 
+               if ( $this->mTitle->getRestrictionTypes() === array() ) {
+                       // No restriction types available for the current title
+                       // this might happen if an extension alters the available types
+                       $wgOut->setPageTitle( wfMessage( 'protect-norestrictiontypes-title', $this->mTitle->getPrefixedText() ) );
+                       $wgOut->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
+
+                       // Show the log in case protection was possible once
+                       $this->showLogExtract( $wgOut );
+                       // return as there isn't anything else we can do
+                       return;
+               }
+
                list( $cascadeSources, /* $restrictions */ ) = $this->mTitle->getCascadeProtectionSources();
                if ( $cascadeSources && count($cascadeSources) > 0 ) {
                        $titles = '';
@@ -236,7 +249,6 @@ class ProtectionForm {
                                wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
                }
 
-               $wgOut->addBacklinkSubtitle( $this->mTitle );
                $wgOut->addHTML( $this->buildForm() );
                $this->showLogExtract( $wgOut );
        }
index 87fa428..56df21e 100644 (file)
@@ -235,6 +235,9 @@ class RecentChange {
                        unset( $this->mAttribs['rc_ip'] );
                }
 
+               # Trim spaces on user supplied text
+               $this->mAttribs['rc_comment'] = trim( $this->mAttribs['rc_comment'] );
+
                # Make sure summary is truncated (whole multibyte characters)
                $this->mAttribs['rc_comment'] = $wgContLang->truncate( $this->mAttribs['rc_comment'], 255 );
 
diff --git a/includes/ScopedCallback.php b/includes/ScopedCallback.php
new file mode 100644 (file)
index 0000000..1d5b26b
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ * This file deals with RAII style scoped callbacks.
+ *
+ * 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
+ */
+
+/**
+ * Class for asserting that a callback happens when an dummy object leaves scope
+ */
+class ScopedCallback {
+       /** @var Closure */
+       protected $callback;
+
+       /**
+        * @param $callback Closure
+        */
+       public function __construct( Closure $callback ) {
+               $this->callback = $callback;
+       }
+
+       function __destruct() {
+               call_user_func( $this->callback );
+       }
+}
index 7fb17a7..90cd131 100644 (file)
@@ -345,7 +345,7 @@ class LegacyTemplate extends BaseTemplate {
                                        $s .= $this->deleteThisPage();
                                }
 
-                               if ( $wgUser->isAllowed( 'protect' ) ) {
+                               if ( $wgUser->isAllowed( 'protect' ) && $title->getRestrictionTypes() ) {
                                        $s .= $sep . $this->protectThisPage();
                                }
 
@@ -610,7 +610,7 @@ class LegacyTemplate extends BaseTemplate {
                $diff = $wgRequest->getVal( 'diff' );
                $title = $this->getSkin()->getTitle();
 
-               if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
+               if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) && $title->getRestrictionTypes() ) {
                        if ( $title->isProtected() ) {
                                $text = wfMessage( 'unprotectthispage' )->text();
                                $query = array( 'action' => 'unprotect' );
index da4af61..58d443a 100644 (file)
@@ -690,12 +690,14 @@ class SkinTemplate extends Skin {
        }
 
        /**
-        * TODO document
-        * @param  $title Title
-        * @param  $message String message key
-        * @param  $selected Bool
-        * @param  $query String
-        * @param  $checkEdit Bool
+        * Builds an array with tab definition
+        *
+        * @param Title $title page where the tab links to
+        * @param string|array $message message key or an array of message keys (will fall back)
+        * @param boolean $selected display the tab as selected
+        * @param string $query query string attached to tab URL
+        * @param boolean $checkEdit check if $title exists and mark with .new if one doesn't
+        *
         * @return array
         */
        function tabAction( $title, $message, $selected, $query = '', $checkEdit = false ) {
@@ -705,7 +707,11 @@ class SkinTemplate extends Skin {
                }
                if( $checkEdit && !$title->isKnown() ) {
                        $classes[] = 'new';
-                       $query = 'action=edit&redlink=1';
+                       if ( $query !== '' ) {
+                               $query = 'action=edit&redlink=1&' . $query;
+                       } else {
+                               $query = 'action=edit&redlink=1';
+                       }
                }
 
                // wfMessageFallback will nicely accept $message as an array of fallbacks
@@ -957,7 +963,7 @@ class SkinTemplate extends Skin {
                                        }
                                }
 
-                               if ( $title->getNamespace() !== NS_MEDIAWIKI && $title->quickUserCan( 'protect', $user ) ) {
+                               if ( $title->getNamespace() !== NS_MEDIAWIKI && $title->quickUserCan( 'protect', $user ) && $title->getRestrictionTypes() ) {
                                        $mode = $title->isProtected() ? 'unprotect' : 'protect';
                                        $content_navigation['actions'][$mode] = array(
                                                'class' => ( $onPage && $action == $mode ) ? 'selected' : false,
index fa1bca4..4a45b44 100644 (file)
@@ -336,7 +336,7 @@ class SpecialPageFactory {
         * Find the object with a given name and return it (or NULL)
         *
         * @param $name String Special page name, may be localised and/or an alias
-        * @return SpecialPage object or null if the page doesn't exist
+        * @return SpecialPage|null SpecialPage object or null if the page doesn't exist
         */
        public static function getPage( $name ) {
                list( $realName, /*...*/ ) = self::resolveAlias( $name );
@@ -371,12 +371,10 @@ class SpecialPageFactory {
                        global $wgUser;
                        $user = $wgUser;
                }
-               $context = RequestContext::newExtraneousContext( Title::newMainPage() );
-               $context->setUser( $user );
                foreach ( self::getList() as $name => $rec ) {
                        $page = self::getPage( $name );
                        if ( $page ) { // not null
-                               $page->setContext( $context );
+                               $page->setContext( RequestContext::getMain() );
                                if ( $page->isListed()
                                        && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
                                ) {
index a20367d..442bc22 100644 (file)
@@ -689,7 +689,7 @@ class Title {
                }
 
                if( !$this->mContentModel ) {
-                       throw new MWException( "failed to determin content model!" );
+                       throw new MWException( 'Failed to determine content model!' );
                }
 
                return $this->mContentModel;
@@ -1838,10 +1838,9 @@ class Title {
         * @return Array list of errors
         */
        private function checkSpecialsAndNSPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
-               # Only 'createaccount' and 'execute' can be performed on
-               # special pages, which don't actually exist in the DB.
-               $specialOKActions = array( 'createaccount', 'execute', 'read' );
-               if ( NS_SPECIAL == $this->mNamespace && !in_array( $action, $specialOKActions ) ) {
+               # Only 'createaccount' can be performed on special pages,
+               # which don't actually exist in the DB.
+               if ( NS_SPECIAL == $this->mNamespace && $action !== 'createaccount' ) {
                        $errors[] = array( 'ns-specialprotected' );
                }
 
@@ -2986,6 +2985,7 @@ class Title {
                        return $this->mLatestID = 0;
                }
                $linkCache = LinkCache::singleton();
+               $linkCache->addLinkObj( $this );
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'revision' );
                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
@@ -3503,9 +3503,11 @@ class Title {
                if ( !$wgContentHandlerUseDB &&
                                $this->getContentModel() !== $nt->getContentModel() ) {
                        // can't move a page if that would change the page's content model
-                       $errors[] = array( 'bad-target-model',
-                                                       ContentHandler::getLocalizedName( $this->getContentModel() ),
-                                                       ContentHandler::getLocalizedName( $nt->getContentModel() ) );
+                       $errors[] = array(
+                               'bad-target-model',
+                               ContentHandler::getLocalizedName( $this->getContentModel() ),
+                               ContentHandler::getLocalizedName( $nt->getContentModel() )
+                       );
                }
 
                // Image-specific checks
@@ -4030,7 +4032,7 @@ class Title {
                        array()
                );
 
-               if ( $dbr->numRows( $res ) > 0 ) {
+               if ( $res->numRows() > 0 ) {
                        foreach ( $res as $row ) {
                                // $data[] = Title::newFromText($wgContLang->getNSText ( NS_CATEGORY ).':'.$row->cl_to);
                                $data[$wgContLang->getNSText( NS_CATEGORY ) . ':' . $row->cl_to] = $this->getFullText();
index fad9af8..dbe9a64 100644 (file)
@@ -293,6 +293,7 @@ class User {
                                wfRunHooks( 'UserLoadAfterLoadFromSession', array( $this ) );
                                break;
                        default:
+                               wfProfileOut( __METHOD__ );
                                throw new MWException( "Unrecognised value for User->mFrom: \"{$this->mFrom}\"" );
                }
                wfProfileOut( __METHOD__ );
@@ -2309,12 +2310,137 @@ class User {
        }
 
        /**
-        * Reset all options to the site defaults
+        * Return a list of the types of user options currently returned by
+        * User::getOptionKinds().
+        *
+        * Currently, the option kinds are:
+        * - 'registered' - preferences which are registered in core MediaWiki or
+        *                  by extensions using the UserGetDefaultOptions hook.
+        * - 'registered-multiselect' - as above, using the 'multiselect' type.
+        * - 'userjs' - preferences with names starting with 'userjs-', intended to
+        *              be used by user scripts.
+        * - 'unused' - preferences about which MediaWiki doesn't know anything.
+        *              These are usually legacy options, removed in newer versions.
+        *
+        * The API (and possibly others) use this function to determine the possible
+        * option types for validation purposes, so make sure to update this when a
+        * new option kind is added.
+        *
+        * @see User::getOptionKinds
+        * @return array Option kinds
+        */
+       public static function listOptionKinds() {
+               return array(
+                       'registered',
+                       'registered-multiselect',
+                       'userjs',
+                       'unused'
+               );
+       }
+
+       /**
+        * Return an associative array mapping preferences keys to the kind of a preference they're
+        * used for. Different kinds are handled differently when setting or reading preferences.
+        *
+        * See User::listOptionKinds for the list of valid option types that can be provided.
+        *
+        * @see User::listOptionKinds
+        * @param $context IContextSource
+        * @param $options array assoc. array with options keys to check as keys. Defaults to $this->mOptions.
+        * @return array the key => kind mapping data
         */
-       public function resetOptions() {
+       public function getOptionKinds( IContextSource $context, $options = null ) {
+               $this->loadOptions();
+               if ( $options === null ) {
+                       $options = $this->mOptions;
+               }
+
+               $prefs = Preferences::getPreferences( $this, $context );
+               $mapping = array();
+
+               // Multiselect options are stored in the database with one key per
+               // option, each having a boolean value. Extract those keys.
+               $multiselectOptions = array();
+               foreach ( $prefs as $name => $info ) {
+                       if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
+                                       ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
+                               $opts = HTMLFormField::flattenOptions( $info['options'] );
+                               $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
+
+                               foreach ( $opts as $value ) {
+                                       $multiselectOptions["$prefix$value"] = true;
+                               }
+
+                               unset( $prefs[$name] );
+                       }
+               }
+
+               // $value is ignored
+               foreach ( $options as $key => $value ) {
+                       if ( isset( $prefs[$key] ) ) {
+                               $mapping[$key] = 'registered';
+                       } elseif( isset( $multiselectOptions[$key] ) ) {
+                               $mapping[$key] = 'registered-multiselect';
+                       } elseif ( substr( $key, 0, 7 ) === 'userjs-' ) {
+                               $mapping[$key] = 'userjs';
+                       } else {
+                               $mapping[$key] = 'unused';
+                       }
+               }
+
+               return $mapping;
+       }
+
+       /**
+        * Reset certain (or all) options to the site defaults
+        *
+        * The optional parameter determines which kinds of preferences will be reset.
+        * Supported values are everything that can be reported by getOptionKinds()
+        * and 'all', which forces a reset of *all* preferences and overrides everything else.
+        *
+        * @param $resetKinds array|string which kinds of preferences to reset. Defaults to
+        *                                 array( 'registered', 'registered-multiselect', 'unused' )
+        *                                 for backwards-compatibility.
+        * @param $context IContextSource|null context source used when $resetKinds
+        *                                     does not contain 'all', passed to getOptionKinds().
+        *                                     Defaults to RequestContext::getMain() when null.
+        */
+       public function resetOptions(
+               $resetKinds = array( 'registered', 'registered-multiselect', 'unused' ),
+               IContextSource $context = null
+       ) {
                $this->load();
+               $defaultOptions = self::getDefaultOptions();
 
-               $this->mOptions = self::getDefaultOptions();
+               if ( !is_array( $resetKinds ) ) {
+                       $resetKinds = array( $resetKinds );
+               }
+
+               if ( in_array( 'all', $resetKinds ) ) {
+                       $newOptions = $defaultOptions;
+               } else {
+                       if ( $context === null ) {
+                               $context = RequestContext::getMain();
+                       }
+
+                       $optionKinds = $this->getOptionKinds( $context );
+                       $resetKinds = array_intersect( $resetKinds, self::listOptionKinds() );
+                       $newOptions = array();
+
+                       // Use default values for the options that should be deleted, and
+                       // copy old values for the ones that shouldn't.
+                       foreach ( $this->mOptions as $key => $value ) {
+                               if ( in_array( $optionKinds[$key], $resetKinds ) ) {
+                                       if ( array_key_exists( $key, $defaultOptions ) ) {
+                                               $newOptions[$key] = $defaultOptions[$key];
+                                       }
+                               } else {
+                                       $newOptions[$key] = $value;
+                               }
+                       }
+               }
+
+               $this->mOptions = $newOptions;
                $this->mOptionsLoaded = true;
        }
 
@@ -3187,7 +3313,7 @@ class User {
                # bug 13611: if the IP address the user is trying to create an account from is
                # blocked with createaccount disabled, prevent new account creation there even
                # when the user is logged in
-               if( $this->mBlockedFromCreateAccount === false ){
+               if ( $this->mBlockedFromCreateAccount === false && !$this->isAllowed( 'ipblock-exempt' ) ) {
                        $this->mBlockedFromCreateAccount = Block::newFromTarget( null, $this->getRequest()->getIP() );
                }
                return $this->mBlockedFromCreateAccount instanceof Block && $this->mBlockedFromCreateAccount->prevents( 'createaccount' )
@@ -4091,38 +4217,60 @@ class User {
        }
 
        /**
-        * Add a newuser log entry for this user. Before 1.19 the return value was always true.
+        * Add a newuser log entry for this user.
+        * Before 1.19 the return value was always true.
+        *
+        * @param $action string|bool: account creation type.
+        *   - String, one of the following values:
+        *     - 'create' for an anonymous user creating an account for himself.
+        *       This will force the action's performer to be the created user itself,
+        *       no matter the value of $wgUser
+        *     - 'create2' for a logged in user creating an account for someone else
+        *     - 'byemail' when the created user will receive its password by e-mail
+        *   - Boolean means whether the account was created by e-mail (deprecated):
+        *     - true will be converted to 'byemail'
+        *     - false will be converted to 'create' if this object is the same as
+        *       $wgUser and to 'create2' otherwise
         *
-        * @param $byEmail Boolean: account made by email?
         * @param $reason String: user supplied reason
         *
         * @return int|bool True if not $wgNewUserLog; otherwise ID of log item or 0 on failure
         */
-       public function addNewUserLogEntry( $byEmail = false, $reason = '' ) {
+       public function addNewUserLogEntry( $action = false, $reason = '' ) {
                global $wgUser, $wgContLang, $wgNewUserLog;
                if( empty( $wgNewUserLog ) ) {
                        return true; // disabled
                }
 
-               if( $this->getName() == $wgUser->getName() ) {
-                       $action = 'create';
-               } else {
+               if ( $action === true || $action === 'byemail' ) {
                        $action = 'create2';
-                       if ( $byEmail ) {
-                               if ( $reason === '' ) {
-                                       $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
-                               } else {
-                                       $reason = $wgContLang->commaList( array(
-                                               $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
-                               }
+                       if ( $reason === '' ) {
+                               $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
+                       } else {
+                               $reason = $wgContLang->commaList( array(
+                                       $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
                        }
+               } elseif ( $action === false ) {
+                       if ( $this->getName() == $wgUser->getName() ) {
+                               $action = 'create';
+                       } else {
+                               $action = 'create2';
+                       }
+               }
+
+               if ( $action === 'create' ) {
+                       $performer = $this;
+               } else {
+                       $performer = $wgUser;
                }
+
                $log = new LogPage( 'newusers' );
                return (int)$log->addEntry(
                        $action,
                        $this->getUserPage(),
                        $reason,
-                       array( $this->getId() )
+                       array( $this->getId() ),
+                       $performer
                );
        }
 
index b8b6aa8..324e7ce 100644 (file)
@@ -21,6 +21,7 @@
  * @author <brion@pobox.com>
  * @author <mail@tgries.de>
  * @author Tim Starling
+ * @author Luke Welling lwelling@wikimedia.org
  */
 
 
@@ -112,6 +113,10 @@ class UserMailer {
         * @param $headers array Associative Array: keys are header field names,
         *                 values are ... values.
         * @param $endl String: The end of line character.  Defaults to "\n"
+        *
+        * Note RFC2822 says newlines must be CRLF (\r\n)
+        * but php mail naively "corrects" it and requires \n for the "correction" to work
+        *
         * @return String
         */
        static function arrayToHeaderString( $headers, $endl = "\n" ) {
@@ -149,19 +154,47 @@ class UserMailer {
         * @param $to MailAddress: recipient's email (or an array of them)
         * @param $from MailAddress: sender's email
         * @param $subject String: email's subject.
-        * @param $body String: email's text.
+        * @param $body String: email's text or Array of two strings to be the text and html bodies
         * @param $replyto MailAddress: optional reply-to email (default: null).
         * @param $contentType String: optional custom Content-Type (default: text/plain; charset=UTF-8)
         * @throws MWException
         * @return Status object
         */
        public static function send( $to, $from, $subject, $body, $replyto = null, $contentType = 'text/plain; charset=UTF-8' ) {
-               global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams;
-
+               global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams, $wgAllowHTMLEmail;
+               $mime = null;
                if ( !is_array( $to ) ) {
                        $to = array( $to );
                }
 
+               // mail body must have some content
+               $minBodyLen = 10;
+               // arbitrary but longer than Array or Object to detect casting error
+
+               // body must either be a string or an array with text and body
+               if (
+                       !(
+                               !is_array( $body ) &&
+                               strlen( $body ) >= $minBodyLen
+                       )
+                       &&
+                       !(
+                               is_array( $body ) &&
+                               isset( $body['text'] ) &&
+                               isset( $body['html'] ) &&
+                               strlen( $body['text'] ) >= $minBodyLen &&
+                               strlen( $body['html'] ) >= $minBodyLen
+                       )
+               ) {
+                       // if it is neither we have a problem
+                       return Status::newFatal( 'user-mail-no-body' );
+               }
+
+               if ( !$wgAllowHTMLEmail && is_array( $body ) ) {
+                       // HTML not wanted.  Dump it.
+                       $body = $body['text'];
+               }
+
                wfDebug( __METHOD__ . ': sending mail to ' . implode( ', ', $to ) . "\n" );
 
                # Make sure we have at least one address
@@ -211,18 +244,53 @@ class UserMailer {
                }
 
                $headers['Date'] = date( 'r' );
-               $headers['MIME-Version'] = '1.0';
-               $headers['Content-type'] = ( is_null( $contentType ) ?
-                       'text/plain; charset=UTF-8' : $contentType );
-               $headers['Content-transfer-encoding'] = '8bit';
-
                $headers['Message-ID'] = self::makeMsgId();
                $headers['X-Mailer'] = 'MediaWiki mailer';
 
+               # Line endings need to be different on Unix and Windows due to
+               # the bug described at http://trac.wordpress.org/ticket/2603
+               if ( wfIsWindows() ) {
+                       $endl = "\r\n";
+               } else {
+                       $endl = "\n";
+               }
+
+               if ( is_array( $body ) ) {
+                       // we are sending a multipart message
+                       wfDebug( "Assembling mulitpart 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" );
+                       }
+                       else {
+                               require_once( 'Mail/mime.php' );
+                               if ( wfIsWindows() ) {
+                                       $body['text'] = str_replace( "\n", "\r\n", $body['text'] );
+                                       $body['html'] = str_replace( "\n", "\r\n", $body['html'] );
+                               }
+                               $mime = new Mail_mime( array( 'eol' => $endl ) );
+                               $mime->setTXTBody( $body['text'] );
+                               $mime->setHTMLBody( $body['html'] );
+                               $body = $mime->get();  // must call get() before headers()
+                               $headers = $mime->headers( $headers );
+                       }
+               }
+               if ( !isset( $mime ) ) {
+                       // sending text only, either deliberately or as a fallback
+                       if ( wfIsWindows() ) {
+                               $body = str_replace( "\n", "\r\n", $body );
+                       }
+                       $headers['MIME-Version'] = '1.0';
+                       $headers['Content-type'] = ( is_null( $contentType ) ?
+                               'text/plain; charset=UTF-8' : $contentType );
+                       $headers['Content-transfer-encoding'] = '8bit';
+               }
+
                $ret = wfRunHooks( 'AlternateUserMailer', array( $headers, $to, $from, $subject, $body ) );
                if ( $ret === false ) {
+                       // the hook implementation will return false to skip regular mail sending
                        return Status::newGood();
                } elseif ( $ret !== true ) {
+                       // the hook implementation will return a string to pass an error message
                        return Status::newFatal( 'php-mail-error', $ret );
                }
 
@@ -231,7 +299,7 @@ class UserMailer {
                        # PEAR MAILER
                        #
 
-                       if ( ! stream_resolve_include_path( 'Mail.php' ) ) {
+                       if ( !stream_resolve_include_path( 'Mail.php' ) ) {
                                throw new MWException( 'PEAR mail package is not installed' );
                        }
                        require_once( 'Mail.php' );
@@ -272,16 +340,6 @@ class UserMailer {
                        #
                        # PHP mail()
                        #
-
-                       # Line endings need to be different on Unix and Windows due to
-                       # the bug described at http://trac.wordpress.org/ticket/2603
-                       if ( wfIsWindows() ) {
-                               $body = str_replace( "\n", "\r\n", $body );
-                               $endl = "\r\n";
-                       } else {
-                               $endl = "\n";
-                       }
-
                        if( count($to) > 1 ) {
                                $headers['To'] = 'undisclosed-recipients:;';
                        }
@@ -295,6 +353,7 @@ class UserMailer {
                        set_error_handler( 'UserMailer::errorHandler' );
 
                        $safeMode = wfIniGetBool( 'safe_mode' );
+
                        foreach ( $to as $recip ) {
                                if ( $safeMode ) {
                                        $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
@@ -342,6 +401,12 @@ class UserMailer {
        /**
         * Converts a string into quoted-printable format
         * @since 1.17
+        *
+        * From PHP5.3 there is a built in function quoted_printable_encode()
+        * This method does not duplicate that.
+        * This method is doing Q encoding inside encoded-words as defined by RFC 2047
+        * This is for email headers.
+        * The built in quoted_printable_encode() is for email bodies
         * @return string
         */
        public static function quotedPrintable( $string, $charset = '' ) {
@@ -650,10 +715,14 @@ class EmailNotification {
                                        ->inContentLanguage()->text();
                        }
                        $keys['$OLDID']   = $this->oldid;
+                       // @deprecated Remove in MediaWiki 1.23.
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
                } else {
                        # clear $OLDID placeholder in the message template
                        $keys['$OLDID']   = '';
                        $keys['$NEWPAGE'] = '';
+                       // @deprecated Remove in MediaWiki 1.23.
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
                }
 
                $keys['$PAGETITLE'] = $this->title->getPrefixedText();
@@ -681,11 +750,11 @@ class EmailNotification {
 
                # Now build message's subject and body
                $this->subject = wfMessage( 'enotif_subject_' . $this->pageStatus )->inContentLanguage()
-                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->escaped();
+                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->text();
 
                $keys['$PAGEINTRO'] = wfMessage( 'enotif_body_intro_' . $this->pageStatus )
                        ->inContentLanguage()->params( $pageTitle, $keys['$PAGEEDITOR'], $pageTitleUrl )
-                       ->escaped();
+                       ->text();
 
                $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
                $body = strtr( $body, $keys );
index 8cf25bb..68d22a8 100644 (file)
@@ -192,7 +192,14 @@ class WebRequest {
         * @return array
         */
        public static function detectProtocolAndStdPort() {
-               return ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ? array( 'https', 443 ) : array( 'http', 80 );
+               if ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ||
+                       ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
+                       $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) ) {
+                       $arr = array( 'https', 443 );
+               } else {
+                       $arr = array( 'http', 80 );
+               }
+               return $arr;
        }
 
        /**
@@ -1307,6 +1314,10 @@ class FauxRequest extends WebRequest {
                return $this->wasPosted;
        }
 
+       public function getCookie( $key, $prefix = null, $default = null ) {
+               return $default;
+       }
+
        public function checkSessionCookie() {
                return false;
        }
index 2b12dd7..7604241 100644 (file)
@@ -616,39 +616,22 @@ class MediaWiki {
                }
 
                $group = JobQueueGroup::singleton();
-               $types = $group->getDefaultQueueTypes();
-               shuffle( $types ); // avoid starvation
-
-               // Scan the queues for a job N times...
                do {
-                       $jobFound = false; // found a job in any queue?
-                       // Find a queue with a job on it and run it...
-                       foreach ( $types as $i => $type ) {
-                               $queue = $group->get( $type );
-                               if ( $queue->isEmpty() ) {
-                                       unset( $types[$i] ); // don't keep checking this queue
-                                       continue;
-                               }
-                               $job = $queue->pop();
-                               if ( $job ) {
-                                       $jobFound = true;
-                                       $output = $job->toString() . "\n";
-                                       $t = - microtime( true );
-                                       $success = $job->run();
-                                       $queue->ack( $job ); // done
-                                       $t += microtime( true );
-                                       $t = round( $t * 1000 );
-                                       if ( !$success ) {
-                                               $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
-                                       } else {
-                                               $output .= "Success, Time: $t ms\n";
-                                       }
-                                       wfDebugLog( 'jobqueue', $output );
-                                       break;
+                       $job = $group->pop( JobQueueGroup::USE_CACHE ); // job from any queue
+                       if ( $job ) {
+                               $output = $job->toString() . "\n";
+                               $t = - microtime( true );
+                               $success = $job->run();
+                               $group->ack( $job ); // done
+                               $t += microtime( true );
+                               $t = round( $t * 1000 );
+                               if ( !$success ) {
+                                       $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
                                } else {
-                                       unset( $types[$i] ); // don't keep checking this queue
+                                       $output .= "Success, Time: $t ms\n";
                                }
+                               wfDebugLog( 'jobqueue', $output );
                        }
-               } while ( --$n && $jobFound );
+               } while ( --$n && $job );
        }
 }
index 7620b3a..e2cd5d9 100644 (file)
@@ -229,8 +229,8 @@ class WikiPage extends Page implements IDBAccessObject {
         */
        protected function clearCacheFields() {
                $this->mCounter = null;
-               $this->mRedirectTarget = null; # Title object if set
-               $this->mLastRevision = null; # Latest revision
+               $this->mRedirectTarget = null; // Title object if set
+               $this->mLastRevision = null; // Latest revision
                $this->mTouched = '19700101000000';
                $this->mTimestamp = '';
                $this->mIsRedirect = false;
@@ -339,8 +339,8 @@ class WikiPage extends Page implements 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.
-                       # Note that DB also stores the master position in the session and checks it.
+                       // Use a "last rev inserted" timestamp key to dimish 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
                                if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
@@ -377,7 +377,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        $this->mTitle->loadFromRow( $data );
 
-                       # Old-fashioned restrictions
+                       // Old-fashioned restrictions
                        $this->mTitle->loadRestrictions( $data->page_restrictions );
 
                        $this->mCounter     = intval( $data->page_counter );
@@ -463,7 +463,7 @@ class WikiPage extends Page implements IDBAccessObject {
         */
        public function getContentModel() {
                if ( $this->exists() ) {
-                       # look at the revision's actual content model
+                       // look at the revision's actual content model
                        $rev = $this->getRevision();
 
                        if ( $rev !== null ) {
@@ -474,7 +474,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # use the default model for this page
+               // use the default model for this page
                return $this->mTitle->getContentModel();
        }
 
@@ -630,7 +630,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @return String|false The text of the current revision
         * @deprecated as of 1.21, getContent() should be used instead.
         */
-       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) { #@todo: deprecated, replace usage!
+       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) { // @todo: deprecated, replace usage!
                ContentHandler::deprecated( __METHOD__, '1.21' );
 
                $this->loadLastEdit();
@@ -812,7 +812,7 @@ class WikiPage extends Page implements IDBAccessObject {
                $hasLinks = null;
 
                if ( $wgArticleCountMethod === 'link' ) {
-                       # nasty special case to avoid re-parsing to detect links
+                       // nasty special case to avoid re-parsing to detect links
 
                        if ( $editInfo ) {
                                // ParserOutput::getLinks() is a 2D array of page links, so
@@ -845,7 +845,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        return $this->mRedirectTarget;
                }
 
-               # Query the redirect table
+               // Query the redirect table
                $dbr = wfGetDB( DB_SLAVE );
                $row = $dbr->selectRow( 'redirect',
                        array( 'rd_namespace', 'rd_title', 'rd_fragment', 'rd_interwiki' ),
@@ -860,7 +860,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $row->rd_fragment, $row->rd_interwiki );
                }
 
-               # This page doesn't have an entry in the redirect table
+               // This page doesn't have an entry in the redirect table
                return $this->mRedirectTarget = $this->insertRedirect();
        }
 
@@ -958,7 +958,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @return UserArrayFromResult
         */
        public function getContributors() {
-               # @todo FIXME: This is expensive; cache this info somewhere.
+               // @todo FIXME: This is expensive; cache this info somewhere.
 
                $dbr = wfGetDB( DB_SLAVE );
 
@@ -1122,13 +1122,13 @@ class WikiPage extends Page implements IDBAccessObject {
                        return;
                }
 
-               # Don't update page view counters on views from bot users (bug 14044)
+               // Don't update page view counters on views from bot users (bug 14044)
                if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->mTitle->exists() ) {
                        DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
                        DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
                }
 
-               # Update newtalk / watchlist notification status
+               // Update newtalk / watchlist notification status
                $user->clearNotification( $this->mTitle );
        }
 
@@ -1158,7 +1158,7 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       //@todo: move this logic to MessageCache
+                       // @todo: move this logic to MessageCache
 
                        if ( $this->mTitle->exists() ) {
                                // NOTE: use transclusion text for messages.
@@ -1197,12 +1197,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        'page_title'        => $this->mTitle->getDBkey(),
                        'page_counter'      => 0,
                        'page_restrictions' => '',
-                       'page_is_redirect'  => 0, # Will set this shortly...
+                       'page_is_redirect'  => 0, // Will set this shortly...
                        'page_is_new'       => 1,
                        'page_random'       => wfRandom(),
                        'page_touched'      => $dbw->timestamp(),
-                       'page_latest'       => 0, # Fill this in shortly...
-                       'page_len'          => 0, # Fill this in shortly...
+                       'page_latest'       => 0, // Fill this in shortly...
+                       'page_len'          => 0, // Fill this in shortly...
                ), __METHOD__, 'IGNORE' );
 
                $affected = $dbw->affectedRows();
@@ -1243,7 +1243,7 @@ class WikiPage extends Page implements IDBAccessObject {
                $conditions = array( 'page_id' => $this->getId() );
 
                if ( !is_null( $lastRevision ) ) {
-                       # An extra check against threads stepping on each other
+                       // An extra check against threads stepping on each other
                        $conditions['page_latest'] = $lastRevision;
                }
 
@@ -1272,7 +1272,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $this->setCachedLastEditTime( $now );
                        $this->mLatest = $revision->getId();
                        $this->mIsRedirect = (bool)$rt;
-                       # Update the LinkCache.
+                       // Update the LinkCache.
                        LinkCache::singleton()->addGoodLinkObj( $this->getId(), $this->mTitle, $len, $this->mIsRedirect,
                                                                                                        $this->mLatest, $revision->getContentModel() );
                }
@@ -1346,7 +1346,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $prev = $row->rev_id;
                        $lastRevIsRedirect = (bool)$row->page_is_redirect;
                } else {
-                       # No or missing previous revision; mark the page as new
+                       // No or missing previous revision; mark the page as new
                        $prev = 0;
                        $lastRevIsRedirect = null;
                }
@@ -1426,7 +1426,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        throw new MWException( "sections not supported for content model " . $this->getContentHandler()->getModelID() );
                }
 
-               # could even make section title, but that's not required.
+               // could even make section title, but that's not required.
                $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() );
 
                $newContent = $this->replaceSectionContent( $section, $sectionContent, $sectionTitle, $edittime );
@@ -1491,7 +1491,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                return null;
                        }
 
-                       //FIXME: $oldContent might be null?
+                       // FIXME: $oldContent might be null?
                        $newContent = $oldContent->replaceSection( $section, $sectionContent, $sectionTitle );
                }
 
@@ -1625,7 +1625,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                                                   User $user = null, $serialisation_format = null ) {
                global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
 
-               # Low-level sanity check
+               // Low-level sanity check
                if ( $this->mTitle->getText() === '' ) {
                        throw new MWException( 'Something is trying to edit an article with an empty title' );
                }
@@ -1649,7 +1649,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $flags = $this->checkFlags( $flags );
 
-               # handle hook
+               // handle hook
                $hook_args = array( &$this, &$user, &$content, &$summary,
                                                        $flags & EDIT_MINOR, null, null, &$flags, &$status );
 
@@ -1666,7 +1666,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        return $status;
                }
 
-               # Silently ignore EDIT_MINOR if not allowed
+               // Silently ignore EDIT_MINOR if not allowed
                $isminor = ( $flags & EDIT_MINOR ) && $user->isAllowed( 'minoredit' );
                $bot = $flags & EDIT_FORCE_BOT;
 
@@ -1679,7 +1679,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $handler = $content->getContentHandler();
 
-               # Provide autosummaries if one is not provided and autosummaries are enabled.
+               // Provide autosummaries if one is not provided and autosummaries are enabled.
                if ( $wgUseAutomaticEditSummaries && $flags & EDIT_AUTOSUMMARY && $summary == '' ) {
                        if ( !$old_content ) $old_content = null;
                        $summary = $handler->getAutosummary( $old_content, $content, $flags );
@@ -1695,18 +1695,18 @@ class WikiPage extends Page implements IDBAccessObject {
                $this->mTimestamp = $now;
 
                if ( $flags & EDIT_UPDATE ) {
-                       # Update article, but only if changed.
+                       // Update article, but only if changed.
                        $status->value['new'] = false;
 
                        if ( !$oldid ) {
-                               # Article gone missing
+                               // Article gone missing
                                wfDebug( __METHOD__ . ": EDIT_UPDATE specified but article doesn't exist\n" );
                                $status->fatal( 'edit-gone-missing' );
 
                                wfProfileOut( __METHOD__ );
                                return $status;
                        } elseif ( !$old_content ) {
-                               # Sanity check for bug 37225
+                               // Sanity check for bug 37225
                                wfProfileOut( __METHOD__ );
                                throw new MWException( "Could not find text for current revision {$oldid}." );
                        }
@@ -1724,7 +1724,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                'timestamp'  => $now,
                                'content_model' => $content->getModel(),
                                'content_format' => $serialisation_format,
-                       ) ); #XXX: pass content object?!
+                       ) ); // XXX: pass content object?!
 
                        $changed = !$content->equals( $old_content );
 
@@ -1747,17 +1747,17 @@ class WikiPage extends Page implements IDBAccessObject {
 
                                $revisionId = $revision->insertOn( $dbw );
 
-                               # Update page
-                               #
-                               # Note that we use $this->mLatest instead of fetching a value from the master DB
-                               # during the course of this function. This makes sure that EditPage can detect
-                               # edit conflicts reliably, either by $ok here, or by $article->getTimestamp()
-                               # before this function is called. A previous function used a separate query, this
-                               # creates a window where concurrent edits can cause an ignored edit conflict.
+                               // Update page
+                               //
+                               // Note that we use $this->mLatest instead of fetching a value from the master DB
+                               // during the course of this function. This makes sure that EditPage can detect
+                               // edit conflicts reliably, either by $ok here, or by $article->getTimestamp()
+                               // before this function is called. A previous function used a separate query, this
+                               // creates a window where concurrent edits can cause an ignored edit conflict.
                                $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
 
                                if ( !$ok ) {
-                                       # Belated edit conflict! Run away!!
+                                       // Belated edit conflict! Run away!!
                                        $status->fatal( 'edit-conflict' );
 
                                        $dbw->rollback( __METHOD__ );
@@ -1767,18 +1767,18 @@ class WikiPage extends Page implements IDBAccessObject {
                                }
 
                                wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
-                               # Update recentchanges
+                               // Update recentchanges
                                if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                                       # Mark as patrolled if the user can do so
+                                       // Mark as patrolled if the user can do so
                                        $patrolled = $wgUseRCPatrol && !count(
                                                $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                                       # Add RC row to the DB
+                                       // Add RC row to the DB
                                        $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
                                                $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
                                                $revisionId, $patrolled
                                        );
 
-                                       # Log auto-patrolled edits
+                                       // Log auto-patrolled edits
                                        if ( $patrolled ) {
                                                PatrolLog::record( $rc, true, $user );
                                        }
@@ -1791,7 +1791,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $revision->setId( $this->getLatest() );
                        }
 
-                       # Update links tables, site stats, etc.
+                       // Update links tables, site stats, etc.
                        $this->doEditUpdates(
                                $revision,
                                $user,
@@ -1809,7 +1809,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $this->mTitle->invalidateCache();
                        }
                } else {
-                       # Create new article
+                       // Create new article
                        $status->value['new'] = true;
 
                        $dbw->begin( __METHOD__ );
@@ -1826,8 +1826,8 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        $status->merge( $prepStatus );
 
-                       # Add the page record; stake our claim on this title!
-                       # This will return false if the article already exists
+                       // Add the page record; stake our claim on this title!
+                       // This will return false if the article already exists
                        $newid = $this->insertOn( $dbw );
 
                        if ( $newid === false ) {
@@ -1838,7 +1838,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                return $status;
                        }
 
-                       # Save the revision text...
+                       // Save the revision text...
                        $revision = new Revision( array(
                                'page'       => $newid,
                                'title'      => $this->getTitle(), // for determining the default content model
@@ -1854,28 +1854,28 @@ class WikiPage extends Page implements IDBAccessObject {
                        ) );
                        $revisionId = $revision->insertOn( $dbw );
 
-                       # Bug 37225: use accessor to get the text as Revision may trim it
+                       // Bug 37225: use accessor to get the text as Revision may trim it
                        $content = $revision->getContent(); // sanity; get normalized version
 
                        if ( $content ) {
                                $newsize = $content->getSize();
                        }
 
-                       # Update the page record with revision data
+                       // Update the page record with revision data
                        $this->updateRevisionOn( $dbw, $revision, 0 );
 
                        wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
 
-                       # Update recentchanges
+                       // Update recentchanges
                        if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                               # Mark as patrolled if the user can do so
+                               // Mark as patrolled if the user can do so
                                $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && !count(
                                        $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                               # Add RC row to the DB
+                               // Add RC row to the DB
                                $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot,
                                        '', $newsize, $revisionId, $patrolled );
 
-                               # Log auto-patrolled edits
+                               // Log auto-patrolled edits
                                if ( $patrolled ) {
                                        PatrolLog::record( $rc, true, $user );
                                }
@@ -1883,7 +1883,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $user->incEditCount();
                        $dbw->commit( __METHOD__ );
 
-                       # Update links, etc.
+                       // Update links, etc.
                        $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
 
                        $hook_args = array( &$this, &$user, $content, $summary,
@@ -1893,7 +1893,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        wfRunHooks( 'PageContentInsertComplete', $hook_args );
                }
 
-               # Do updates right now unless deferral was requested
+               // Do updates right now unless deferral was requested
                if ( !( $flags & EDIT_DEFER_UPDATES ) ) {
                        DeferredUpdates::doUpdates();
                }
@@ -1907,7 +1907,7 @@ class WikiPage extends Page implements IDBAccessObject {
                ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
                wfRunHooks( 'PageContentSaveComplete', $hook_args );
 
-               # Promote user to any groups they meet the criteria for
+               // Promote user to any groups they meet the criteria for
                $user->addAutopromoteOnceGroups( 'onEdit' );
 
                wfProfileOut( __METHOD__ );
@@ -1974,7 +1974,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        && $this->mPreparedEdit->newContent->equals( $content )
                        && $this->mPreparedEdit->revid == $revid
                        && $this->mPreparedEdit->format == $serialization_format
-                       #XXX: also check $user here?
+                       // XXX: also check $user here?
                ) {
                        // Already prepared
                        return $this->mPreparedEdit;
@@ -1995,7 +1995,7 @@ class WikiPage extends Page implements IDBAccessObject {
                $edit->newContent = $content;
                $edit->oldContent = $this->getContent( Revision::RAW );
 
-               #NOTE: B/C for hooks! don't use these fields!
+               // NOTE: B/C for hooks! don't use these fields!
                $edit->newText = $edit->newContent ? ContentHandler::getContentText( $edit->newContent ) : '';
                $edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
                $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialization_format ) : '';
@@ -2028,8 +2028,8 @@ class WikiPage extends Page implements IDBAccessObject {
                $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
                $content = $revision->getContent();
 
-               # Parse the text
-               # Be careful not to double-PST: $text is usually already PST-ed once
+               // Parse the text
+               // Be careful not to double-PST: $text is usually already PST-ed once
                if ( !$this->mPreparedEdit || $this->mPreparedEdit->output->getFlag( 'vary-revision' ) ) {
                        wfDebug( __METHOD__ . ": No prepared edit or vary-revision is set...\n" );
                        $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
@@ -2038,13 +2038,13 @@ class WikiPage extends Page implements IDBAccessObject {
                        $editInfo = $this->mPreparedEdit;
                }
 
-               # Save it to the parser cache
+               // Save it to the parser cache
                if ( $wgEnableParserCache ) {
                        $parserCache = ParserCache::singleton();
                        $parserCache->save( $editInfo->output, $this, $editInfo->popts );
                }
 
-               # Update the links tables and other secondary data
+               // Update the links tables and other secondary data
                if ( $content ) {
                        $updates = $content->getSecondaryDataUpdates( $this->getTitle(), null, true, $editInfo->output );
                        DataUpdate::runUpdates( $updates );
@@ -2062,7 +2062,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
                                $dbw->delete(
                                        'recentchanges',
-                                       array( "rc_timestamp < '$cutoff'" ),
+                                       array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
                                        __METHOD__
                                );
                        }
@@ -2093,11 +2093,11 @@ class WikiPage extends Page implements IDBAccessObject {
 
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, $good, $total ) );
                DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content->getTextForSearchIndex() ) );
-               #@TODO: let the search engine decide what to do with the content object
+               // @TODO: let the search engine decide what to do with the content object
 
-               # If this is another user's talk page, update newtalk.
-               # Don't do this if $options['changed'] = false (null-edits) nor if
-               # it's a minor edit and the user doesn't want notifications for those.
+               // If this is another user's talk page, update newtalk.
+               // Don't do this if $options['changed'] = false (null-edits) nor if
+               // it's a minor edit and the user doesn't want notifications for those.
                if ( $options['changed']
                        && $this->mTitle->getNamespace() == NS_USER_TALK
                        && $shortTitle != $user->getTitleKey()
@@ -2119,7 +2119,7 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       #XXX: could skip pseudo-messages like js/css here, based on content model.
+                       // XXX: could skip pseudo-messages like js/css here, based on content model.
                        $msgtext = $content ? $content->getWikitextForTransclusion() : null;
                        if ( $msgtext === false || $msgtext === null ) $msgtext = '';
 
@@ -2178,7 +2178,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        'length'     => $content->getSize(),
                        'comment'    => $comment,
                        'minor_edit' => $minor ? 1 : 0,
-               ) ); #XXX: set the content object?
+               ) ); // XXX: set the content object?
                $revision->insertOn( $dbw );
                $this->updateRevisionOn( $dbw, $revision );
 
@@ -2216,8 +2216,8 @@ class WikiPage extends Page implements IDBAccessObject {
                // Take this opportunity to purge out expired restrictions
                Title::purgeExpiredRestrictions();
 
-               # @todo FIXME: Same limitations as described in ProtectionForm.php (line 37);
-               # we expect a single selection, but the schema allows otherwise.
+               // @todo FIXME: Same limitations as described in ProtectionForm.php (line 37);
+               // we expect a single selection, but the schema allows otherwise.
                $isProtected = false;
                $protect = false;
                $changed = false;
@@ -2234,7 +2234,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $protect = true;
                        }
 
-                       # Get current restrictions on $action
+                       // Get current restrictions on $action
                        $current = implode( '', $this->mTitle->getRestrictions( $action ) );
                        if ( $current != '' ) {
                                $isProtected = true;
@@ -2243,9 +2243,9 @@ class WikiPage extends Page implements IDBAccessObject {
                        if ( $limit[$action] != $current ) {
                                $changed = true;
                        } elseif ( $limit[$action] != '' ) {
-                               # Only check expiry change if the action is actually being
-                               # protected, since expiry does nothing on an not-protected
-                               # action.
+                               // Only check expiry change if the action is actually being
+                               // protected, since expiry does nothing on an not-protected
+                               // action.
                                if ( $this->mTitle->getRestrictionExpiry( $action ) != $expiry[$action] ) {
                                        $changed = true;
                                }
@@ -2256,12 +2256,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        $changed = true;
                }
 
-               # If nothing's changed, do nothing
+               // If nothing's changed, do nothing
                if ( !$changed ) {
                        return Status::newGood();
                }
 
-               if ( !$protect ) { # No protection at all means unprotection
+               if ( !$protect ) { // No protection at all means unprotection
                        $revCommentMsg = 'unprotectedarticle';
                        $logAction = 'unprotect';
                } elseif ( $isProtected ) {
@@ -2310,21 +2310,21 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               if ( $id ) { # Protection of existing page
+               if ( $id ) { // Protection of existing page
                        if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
                                return Status::newGood();
                        }
 
-                       # Only restrictions with the 'protect' right can cascade...
-                       # Otherwise, people who cannot normally protect can "protect" pages via transclusion
+                       // Only restrictions with the 'protect' right can cascade...
+                       // Otherwise, people who cannot normally protect can "protect" pages via transclusion
                        $editrestriction = isset( $limit['edit'] ) ? array( $limit['edit'] ) : $this->mTitle->getRestrictions( 'edit' );
 
-                       # The schema allows multiple restrictions
+                       // The schema allows multiple restrictions
                        if ( !in_array( 'protect', $editrestriction ) && !in_array( 'sysop', $editrestriction ) ) {
                                $cascade = false;
                        }
 
-                       # Update restrictions table
+                       // Update restrictions table
                        foreach ( $limit as $action => $restrictions ) {
                                if ( $restrictions != '' ) {
                                        $dbw->replace( 'page_restrictions', array( array( 'pr_page', 'pr_type' ) ),
@@ -2342,7 +2342,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                }
                        }
 
-                       # Prepare a null revision to be added to the history
+                       // Prepare a null revision to be added to the history
                        $editComment = $wgContLang->ucfirst(
                                wfMessage(
                                        $revCommentMsg,
@@ -2363,12 +2363,12 @@ class WikiPage extends Page implements IDBAccessObject {
                                )->inContentLanguage()->text();
                        }
 
-                       # Insert a null revision
+                       // Insert a null revision
                        $nullRevision = Revision::newNullRevision( $dbw, $id, $editComment, true );
                        $nullRevId = $nullRevision->insertOn( $dbw );
 
                        $latest = $this->getLatest();
-                       # Update page record
+                       // Update page record
                        $dbw->update( 'page',
                                array( /* SET */
                                        'page_touched' => $dbw->timestamp(),
@@ -2381,8 +2381,8 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
                        wfRunHooks( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
-               } else { # Protection of non-existing page (also known as "title protection")
-                       # Cascade protection is meaningless in this case
+               } else { // Protection of non-existing page (also known as "title protection")
+                       // Cascade protection is meaningless in this case
                        $cascade = false;
 
                        if ( $limit['create'] != '' ) {
@@ -2416,7 +2416,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $logParams = array( $protectDescription, $cascade ? 'cascade' : '' );
                }
 
-               # Update the protection log
+               // Update the protection log
                $log = new LogPage( 'protect' );
                $log->addEntry( $logAction, $this->mTitle, trim( $reason ), $logParams, $user );
 
@@ -2579,7 +2579,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        ), __METHOD__
                );
 
-               # Now that it's safely backed up, delete it
+               // Now that it's safely backed up, delete it
                $dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
                $ok = ( $dbw->affectedRows() > 0 ); // getArticleID() uses slave, could be laggy
 
@@ -2591,7 +2591,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $this->doDeleteUpdates( $id, $content );
 
-               # Log the deletion, if the page was suppressed, log it at Oversight instead
+               // Log the deletion, if the page was suppressed, log it at Oversight instead
                $logtype = $suppress ? 'suppress' : 'delete';
 
                $logEntry = new ManualLogEntry( $logtype, 'delete' );
@@ -2618,20 +2618,20 @@ class WikiPage extends Page implements IDBAccessObject {
         *        This may be needed because $this->getContent() may already return null when the page proper was deleted.
         */
        public function doDeleteUpdates( $id, Content $content = null ) {
-               # update site status
+               // update site status
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$this->isCountable(), -1 ) );
 
-               # remove secondary indexes, etc
+               // remove secondary indexes, etc
                $updates = $this->getDeletionUpdates( $content );
                DataUpdate::runUpdates( $updates );
 
-               # Clear caches
+               // Clear caches
                WikiPage::onArticleDelete( $this->mTitle );
 
-               # Reset this object
+               // Reset this object
                $this->clear();
 
-               # Clear the cached article id so the interface doesn't act like we exist
+               // Clear the cached article id so the interface doesn't act like we exist
                $this->mTitle->resetArticleID( 0 );
        }
 
@@ -2664,7 +2664,7 @@ class WikiPage extends Page implements IDBAccessObject {
        ) {
                $resultDetails = null;
 
-               # Check permissions
+               // Check permissions
                $editErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $user );
                $rollbackErrors = $this->mTitle->getUserPermissionsErrors( 'rollback', $user );
                $errors = array_merge( $editErrors, wfArrayDiff2( $rollbackErrors, $editErrors ) );
@@ -2677,7 +2677,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $errors[] = array( 'actionthrottledtext' );
                }
 
-               # If there were errors, bail out now
+               // If there were errors, bail out now
                if ( !empty( $errors ) ) {
                        return $errors;
                }
@@ -2710,16 +2710,16 @@ class WikiPage extends Page implements IDBAccessObject {
                        return array( array( 'readonlytext' ) );
                }
 
-               # Get the last editor
+               // Get the last editor
                $current = $this->getRevision();
                if ( is_null( $current ) ) {
-                       # Something wrong... no page?
+                       // Something wrong... no page?
                        return array( array( 'notanarticle' ) );
                }
 
                $from = str_replace( '_', ' ', $fromP );
-               # User name given should match up with the top revision.
-               # If the user was deleted then $from should be empty.
+               // User name given should match up with the top revision.
+               // If the user was deleted then $from should be empty.
                if ( $from != $current->getUserText() ) {
                        $resultDetails = array( 'current' => $current );
                        return array( array( 'alreadyrolled',
@@ -2729,8 +2729,8 @@ class WikiPage extends Page implements IDBAccessObject {
                        ) );
                }
 
-               # Get the last edit not by this guy...
-               # Note: these may not be public values
+               // Get the last edit not by this guy...
+               // Note: these may not be public values
                $user = intval( $current->getRawUser() );
                $user_text = $dbw->addQuotes( $current->getRawUserText() );
                $s = $dbw->selectRow( 'revision',
@@ -2742,21 +2742,21 @@ class WikiPage extends Page implements IDBAccessObject {
                                'ORDER BY' => 'rev_timestamp DESC' )
                        );
                if ( $s === false ) {
-                       # No one else ever edited this page
+                       // No one else ever edited this page
                        return array( array( 'cantrollback' ) );
                } elseif ( $s->rev_deleted & Revision::DELETED_TEXT || $s->rev_deleted & Revision::DELETED_USER ) {
-                       # Only admins can see this text
+                       // Only admins can see this text
                        return array( array( 'notvisiblerev' ) );
                }
 
                $set = array();
                if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
-                       # Mark all reverted edits as bot
+                       // Mark all reverted edits as bot
                        $set['rc_bot'] = 1;
                }
 
                if ( $wgUseRCPatrol ) {
-                       # Mark all reverted edits as patrolled
+                       // Mark all reverted edits as patrolled
                        $set['rc_patrolled'] = 1;
                }
 
@@ -2770,7 +2770,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        );
                }
 
-               # Generate the edit summary if necessary
+               // Generate the edit summary if necessary
                $target = Revision::newFromId( $s->rev_id );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
@@ -2780,7 +2780,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Allow the custom summary to use the same args as the default message
+               // Allow the custom summary to use the same args as the default message
                $args = array(
                        $target->getUserText(), $from, $s->rev_id,
                        $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
@@ -2792,10 +2792,13 @@ class WikiPage extends Page implements IDBAccessObject {
                        $summary = wfMsgReplaceArgs( $summary, $args );
                }
 
-               # Truncate for whole multibyte characters.
+               // Trim spaces on user supplied text
+               $summary = trim( $summary );
+
+               // Truncate for whole multibyte characters.
                $summary = $wgContLang->truncate( $summary, 255 );
 
-               # Save
+               // Save
                $flags = EDIT_UPDATE;
 
                if ( $guser->isAllowed( 'minoredit' ) ) {
@@ -2806,7 +2809,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $flags |= EDIT_FORCE_BOT;
                }
 
-               # Actually store the edit
+               // Actually store the edit
                $status = $this->doEditContent( $target->getContent(), $summary, $flags, $target->getId(), $guser );
 
                if ( !$status->isOK() ) {
@@ -2843,7 +2846,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $title Title object
         */
        public static function onArticleCreate( $title ) {
-               # Update existence markers on article/talk tabs...
+               // Update existence markers on article/talk tabs...
                if ( $title->isTalkPage() ) {
                        $other = $title->getSubjectPage();
                } else {
@@ -2864,7 +2867,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $title Title
         */
        public static function onArticleDelete( $title ) {
-               # Update existence markers on article/talk tabs...
+               // Update existence markers on article/talk tabs...
                if ( $title->isTalkPage() ) {
                        $other = $title->getSubjectPage();
                } else {
@@ -2877,21 +2880,21 @@ class WikiPage extends Page implements IDBAccessObject {
                $title->touchLinks();
                $title->purgeSquid();
 
-               # File cache
+               // File cache
                HTMLFileCache::clearFileCache( $title );
 
-               # Messages
+               // Messages
                if ( $title->getNamespace() == NS_MEDIAWIKI ) {
                        MessageCache::singleton()->replace( $title->getDBkey(), false );
                }
 
-               # Images
+               // Images
                if ( $title->getNamespace() == NS_FILE ) {
                        $update = new HTMLCacheUpdate( $title, 'imagelinks' );
                        $update->doUpdate();
                }
 
-               # User talk pages
+               // User talk pages
                if ( $title->getNamespace() == NS_USER_TALK ) {
                        $user = User::newFromName( $title->getText(), false );
                        if ( $user ) {
@@ -2899,7 +2902,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Image redirects
+               // Image redirects
                RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title );
        }
 
@@ -2913,14 +2916,13 @@ class WikiPage extends Page implements IDBAccessObject {
                // Invalidate caches of articles which include this page
                DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
 
-
                // Invalidate the caches of all pages which redirect here
                DeferredUpdates::addHTMLCacheUpdate( $title, 'redirect' );
 
-               # Purge squid for this page only
+               // Purge squid for this page only
                $title->purgeSquid();
 
-               # Clear file cache for this page only
+               // Clear file cache for this page only
                HTMLFileCache::clearFileCache( $title );
        }
 
@@ -2966,7 +2968,7 @@ class WikiPage extends Page implements IDBAccessObject {
        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
        */
        public static function getAutosummary( $oldtext, $newtext, $flags ) {
-               # NOTE: stub for backwards-compatibility. assumes the given text is wikitext. will break horribly if it isn't.
+               // NOTE: stub for backwards-compatibility. assumes the given text is wikitext. will break horribly if it isn't.
 
                ContentHandler::deprecated( __METHOD__, '1.21' );
 
@@ -2999,15 +3001,15 @@ class WikiPage extends Page implements IDBAccessObject {
                $ns = $this->mTitle->getNamespace();
                $dbw = wfGetDB( DB_MASTER );
 
-               # First make sure the rows exist.  If one of the "deleted" ones didn't
-               # exist, we might legitimately not create it, but it's simpler to just
-               # create it and then give it a negative value, since the value is bogus
-               # anyway.
-               #
-               # Sometimes I wish we had INSERT ... ON DUPLICATE KEY UPDATE.
+               // First make sure the rows exist.  If one of the "deleted" ones didn't
+               // exist, we might legitimately not create it, but it's simpler to just
+               // create it and then give it a negative value, since the value is bogus
+               // anyway.
+               //
+               // Sometimes I wish we had INSERT ... ON DUPLICATE KEY UPDATE.
                $insertCats = array_merge( $added, $deleted );
                if ( !$insertCats ) {
-                       # Okay, nothing to do
+                       // Okay, nothing to do
                        return;
                }
 
@@ -3068,7 +3070,7 @@ class WikiPage extends Page implements IDBAccessObject {
                // that cascaded protections apply as soon as the changes
                // are visible.
 
-               # Get templates from templatelinks
+               // Get templates from templatelinks
                $id = $this->mTitle->getArticleID();
 
                $tlTemplates = array();
@@ -3084,7 +3086,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $tlTemplates["{$row->tl_namespace}:{$row->tl_title}"] = true;
                }
 
-               # Get templates from parser output.
+               // Get templates from parser output.
                $poTemplates = array();
                foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
                        foreach ( $templates as $dbk => $id ) {
@@ -3092,12 +3094,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Get the diff
+               // Get the diff
                $templates_diff = array_diff_key( $poTemplates, $tlTemplates );
 
                if ( count( $templates_diff ) > 0 ) {
-                       # Whee, link updates time.
-                       # Note: we are only interested in links here. We don't need to get other DataUpdate items from the parser output.
+                       // Whee, link updates time.
+                       // Note: we are only interested in links here. We don't need to get other DataUpdate items from the parser output.
                        $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
                        $u->doUpdate();
                }
@@ -3306,7 +3308,7 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @param $content Content|String: content to parse or null to load it; may also be given as a wikitext string, for BC
         */
        function __construct( Page $page, ParserOptions $parserOptions, $revid, $useParserCache, $content = null ) {
-               if ( is_string($content) ) { #BC: old style call
+               if ( is_string($content) ) { // BC: old style call
                        $modelId = $page->getRevision()->getContentModel();
                        $format = $page->getRevision()->getContentFormat();
                        $content = ContentHandler::makeContent( $content, $page->getTitle(), $modelId, $format );
@@ -3362,7 +3364,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                if ( $this->content !== null ) {
                        $content = $this->content;
                } elseif ( $isCurrent ) {
-                       #XXX: why use RAW audience here, and PUBLIC (default) below?
+                       // XXX: why use RAW audience here, and PUBLIC (default) below?
                        $content = $this->page->getContent( Revision::RAW );
                } else {
                        $rev = Revision::newFromTitle( $this->page->getTitle(), $this->revid );
@@ -3370,7 +3372,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                        if ( $rev === null ) {
                                $content = null;
                        } else {
-                               #XXX: why use PUBLIC audience here (default), and RAW above?
+                               // XXX: why use PUBLIC audience here (default), and RAW above?
                                $content = $rev->getContent();
                        }
                }
@@ -3383,7 +3385,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                $this->parserOutput = $content->getParserOutput( $this->page->getTitle(), $this->revid, $this->parserOptions );
                $time += microtime( true );
 
-               # Timing hack
+               // Timing hack
                if ( $time > 3 ) {
                        wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
                                $this->page->getTitle()->getPrefixedDBkey() ) );
index d68ae2b..051fa42 100644 (file)
@@ -154,7 +154,7 @@ class HistoryAction extends FormlessAction {
                 * Option to show only revisions that have been (partially) hidden via RevisionDelete
                 */
                if ( $request->getBool( 'deleted' ) ) {
-                       $conds = array( "rev_deleted != '0'" );
+                       $conds = array( 'rev_deleted != 0' );
                } else {
                        $conds = array();
                }
@@ -222,7 +222,7 @@ class HistoryAction extends FormlessAction {
                }
 
                if ( $offset ) {
-                       $offsets = array( "rev_timestamp $oper '$offset'" );
+                       $offsets = array( 'rev_timestamp $oper ' . $dbr->addQuotes( $dbr->timestamp( $offset ) ) );
                } else {
                        $offsets = array();
                }
@@ -231,7 +231,7 @@ class HistoryAction extends FormlessAction {
 
                return $dbr->select( 'revision',
                        Revision::selectFields(),
-                       array_merge( array( "rev_page=$page_id" ), $offsets ),
+                       array_merge( array( 'rev_page' => $page_id ), $offsets ),
                        __METHOD__,
                        array( 'ORDER BY' => "rev_timestamp $dirs",
                                'USE INDEX' => 'page_timestamp', 'LIMIT' => $limit )
@@ -626,9 +626,12 @@ class HistoryPager extends ReverseChronologicalPager {
                # Rollback and undo links
                if ( $prevRev && $this->getTitle()->quickUserCan( 'edit', $user ) ) {
                        if ( $latest && $this->getTitle()->quickUserCan( 'rollback', $user ) ) {
-                               $this->preventClickjacking();
-                               $tools[] = '<span class="mw-rollback-link">' .
-                                       Linker::buildRollbackLink( $rev, $this->getContext() ) . '</span>';
+                               // Get a rollback link without the brackets
+                               $rollbackLink = Linker::generateRollback( $rev, $this->getContext(), array( 'verify', 'noBrackets' ) );
+                               if ( $rollbackLink ) {
+                                       $this->preventClickjacking();
+                                       $tools[] = $rollbackLink;
+                               }
                        }
 
                        if ( !$rev->isDeleted( Revision::DELETED_TEXT )
index f1799a4..1cca95c 100644 (file)
@@ -165,14 +165,14 @@ class InfoAction extends FormlessAction {
         * @return array
         */
        protected function pageInfo() {
-               global $wgContLang, $wgRCMaxAge, $wgMemc, $wgUnwatchedPageThreshold;
+               global $wgContLang, $wgRCMaxAge, $wgMemc, $wgUnwatchedPageThreshold, $wgPageInfoTransclusionLimit;
 
                $user = $this->getUser();
                $lang = $this->getLanguage();
                $title = $this->getTitle();
                $id = $title->getArticleID();
 
-               $memcKey = wfMemcKey( 'infoaction', $title->getPrefixedText(), $this->page->getLatest() );
+               $memcKey = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $this->page->getLatest() );
                $pageCounts = $wgMemc->get( $memcKey );
                if ( $pageCounts === false ) {
                        // Get page information that would be too "expensive" to retrieve by normal means
@@ -310,6 +310,24 @@ class InfoAction extends FormlessAction {
                        );
                }
 
+               if ( $title->inNamespace( NS_CATEGORY ) ) {
+                       $category = Category::newFromTitle( $title );
+                       $pageInfo['category-info'] = array(
+                               array(
+                                       $this->msg( 'pageinfo-category-pages' ),
+                                       $lang->formatNum( $category->getPageCount() )
+                               ),
+                               array(
+                                       $this->msg( 'pageinfo-category-subcats' ),
+                                       $lang->formatNum( $category->getSubcatCount() )
+                               ),
+                               array(
+                                       $this->msg( 'pageinfo-category-files' ),
+                                       $lang->formatNum( $category->getFileCount() )
+                               )
+                       );
+               }
+
                // Page protection
                $pageInfo['header-restrictions'] = array();
 
@@ -368,6 +386,22 @@ class InfoAction extends FormlessAction {
                $pageInfo['header-edits'] = array();
 
                $firstRev = $this->page->getOldestRevision();
+               $lastRev = $this->page->getRevision();
+               $batch = new LinkBatch;
+
+               $firstRevUser = $firstRev->getUserText( Revision::FOR_THIS_USER );
+               if ( $firstRevUser !== '' ) {
+                       $batch->add( NS_USER, $firstRevUser );
+                       $batch->add( NS_USER_TALK, $firstRevUser );
+               }
+
+               $lastRevUser = $lastRev->getUserText( Revision::FOR_THIS_USER );
+               if ( $lastRevUser !== '' ) {
+                       $batch->add( NS_USER, $lastRevUser );
+                       $batch->add( NS_USER_TALK, $lastRevUser );
+               }
+
+               $batch->execute();
 
                // Page creator
                $pageInfo['header-edits'][] = array(
@@ -389,7 +423,7 @@ class InfoAction extends FormlessAction {
                // Latest editor
                $pageInfo['header-edits'][] = array(
                        $this->msg( 'pageinfo-lastuser' ),
-                       Linker::revUserTools( $this->page->getRevision() )
+                       Linker::revUserTools( $lastRev )
                );
 
                // Date of latest edit
@@ -442,11 +476,17 @@ class InfoAction extends FormlessAction {
 
                $localizedList = Html::rawElement( 'ul', array(), implode( '', $listItems ) );
                $hiddenCategories = $this->page->getHiddenCategories();
-               $transcludedTemplates = $title->getTemplateLinksFrom();
 
-               if ( count( $listItems ) > 0
-                       || count( $hiddenCategories ) > 0
-                       || count( $transcludedTemplates ) > 0 ) {
+               if (
+                       count( $listItems ) > 0 ||
+                       count( $hiddenCategories ) > 0 ||
+                       $pageCounts['transclusion']['from'] > 0 ||
+                       $pageCounts['transclusion']['to'] > 0
+               ) {
+                       $options = array( 'LIMIT' => $wgPageInfoTransclusionLimit );
+                       $transcludedTemplates = $title->getTemplateLinksFrom( $options );
+                       $transcludedTargets = $title->getTemplateLinksTo( $options );
+
                        // Page properties
                        $pageInfo['header-properties'] = array();
 
@@ -468,11 +508,44 @@ class InfoAction extends FormlessAction {
                        }
 
                        // Transcluded templates
-                       if ( count( $transcludedTemplates ) > 0 ) {
+                       if ( $pageCounts['transclusion']['from'] > 0 ) {
+                               if ( $pageCounts['transclusion']['from'] > count( $transcludedTemplates ) ) {
+                                       $more = $this->msg( 'morenotlisted' )->escaped();
+                               } else {
+                                       $more = null;
+                               }
+
                                $pageInfo['header-properties'][] = array(
                                        $this->msg( 'pageinfo-templates' )
-                                               ->numParams( count( $transcludedTemplates ) ),
-                                       Linker::formatTemplates( $transcludedTemplates )
+                                               ->numParams( $pageCounts['transclusion']['from'] ),
+                                       Linker::formatTemplates(
+                                               $transcludedTemplates,
+                                               false,
+                                               false,
+                                               $more )
+                               );
+                       }
+
+                       if ( $pageCounts['transclusion']['to'] > 0 ) {
+                               if ( $pageCounts['transclusion']['to'] > count( $transcludedTargets ) ) {
+                                       $more = Linker::link(
+                                               $whatLinksHere,
+                                               $this->msg( 'moredotdotdot' )->escaped(),
+                                               array(),
+                                               array( 'hidelinks' => 1, 'hideredirs' => 1 )
+                                       );
+                               } else {
+                                       $more = null;
+                               }
+
+                               $pageInfo['header-properties'][] = array(
+                                       $this->msg( 'pageinfo-transclusions' )
+                                               ->numParams( $pageCounts['transclusion']['to'] ),
+                                       Linker::formatTemplates(
+                                               $transcludedTargets,
+                                               false,
+                                               false,
+                                               $more )
                                );
                        }
                }
@@ -544,8 +617,8 @@ class InfoAction extends FormlessAction {
                        'revision',
                        'COUNT(rev_page)',
                        array(
-                               'rev_page' => $id ,
-                               "rev_timestamp >= $threshold"
+                               'rev_page' => $id,
+                               "rev_timestamp >= " . $dbr->addQuotes( $threshold )
                        ),
                        __METHOD__
                );
@@ -557,7 +630,7 @@ class InfoAction extends FormlessAction {
                        'COUNT(DISTINCT rev_user_text)',
                        array(
                                'rev_page' => $id,
-                               "rev_timestamp >= $threshold"
+                               "rev_timestamp >= " . $dbr->addQuotes( $threshold )
                        ),
                        __METHOD__
                );
@@ -590,6 +663,24 @@ class InfoAction extends FormlessAction {
                                + $result['subpages']['nonredirects'];
                }
 
+               // Counts for the number of transclusion links (to/from)
+               $result['transclusion']['to'] = (int) $dbr->selectField(
+                       'templatelinks',
+                       'COUNT(tl_from)',
+                       array(
+                               'tl_namespace' => $title->getNamespace(),
+                               'tl_title' => $title->getDBkey()
+                       ),
+                       __METHOD__
+               );
+
+               $result['transclusion']['from'] = (int) $dbr->selectField(
+                       'templatelinks',
+                       'COUNT(*)',
+                       array( 'tl_from' => $title->getArticleID() ),
+                       __METHOD__
+               );
+
                wfProfileOut( __METHOD__ );
                return $result;
        }
index 1b176e7..78525e0 100644 (file)
@@ -112,8 +112,12 @@ abstract class ApiBase extends ContextSource {
         * Typically includes the class name, the svn revision, timestamp, and
         * last author. Usually done with SVN's Id keyword
         * @return string
+        * @deprecated since 1.21, version string is no longer supported
         */
-       public abstract function getVersion();
+       public function getVersion() {
+               wfDeprecated( __METHOD__, '1.21' );
+               return '';
+       }
 
        /**
         * Get the name of the module being executed by this instance
@@ -299,23 +303,6 @@ abstract class ApiBase extends ContextSource {
                        }
 
                        $msg .= $this->makeHelpArrayToString( $lnPrfx, "Help page", $this->getHelpUrls() );
-
-                       if ( $this->getMain()->getShowVersions() ) {
-                               $versions = $this->getVersion();
-                               $pattern = '/(\$.*) ([0-9a-z_]+\.php) (.*\$)/i';
-                               $callback = array( $this, 'makeHelpMsg_callback' );
-
-                               if ( is_array( $versions ) ) {
-                                       foreach ( $versions as &$v ) {
-                                               $v = preg_replace_callback( $pattern, $callback, $v );
-                                       }
-                                       $versions = implode( "\n  ", $versions );
-                               } else {
-                                       $versions = preg_replace_callback( $pattern, $callback, $versions );
-                               }
-
-                               $msg .= "Version:\n  $versions\n";
-                       }
                }
 
                return $msg;
@@ -340,13 +327,15 @@ abstract class ApiBase extends ContextSource {
                        return '';
                }
                if ( !is_array( $input ) ) {
-                       $input = array(
-                               $input
-                       );
+                       $input = array( $input );
                }
 
                if ( count( $input ) > 0 ) {
-                       $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n  ";
+                       if ( $title ) {
+                               $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n  ";
+                       } else {
+                               $msg = '  ';
+                       }
                        $msg .= implode( $prefix, $input ) . "\n";
                        return $msg;
                }
@@ -486,44 +475,6 @@ abstract class ApiBase extends ContextSource {
                }
        }
 
-       /**
-        * Callback for preg_replace_callback() call in makeHelpMsg().
-        * Replaces a source file name with a link to ViewVC
-        *
-        * @param $matches array
-        * @return string
-        */
-       public function makeHelpMsg_callback( $matches ) {
-               global $wgAutoloadClasses, $wgAutoloadLocalClasses;
-
-               $file = '';
-               if ( isset( $wgAutoloadLocalClasses[get_class( $this )] ) ) {
-                       $file = $wgAutoloadLocalClasses[get_class( $this )];
-               } elseif ( isset( $wgAutoloadClasses[get_class( $this )] ) ) {
-                       $file = $wgAutoloadClasses[get_class( $this )];
-               }
-
-               // Do some guesswork here
-               $path = strstr( $file, 'includes/api/' );
-               if ( $path === false ) {
-                       $path = strstr( $file, 'extensions/' );
-               } else {
-                       $path = 'phase3/' . $path;
-               }
-
-               // Get the filename from $matches[2] instead of $file
-               // If they're not the same file, they're assumed to be in the
-               // same directory
-               // This is necessary to make stuff like ApiMain::getVersion()
-               // returning the version string for ApiBase work
-               if ( $path ) {
-                       return "{$matches[0]}\n   https://svn.wikimedia.org/" .
-                                       "viewvc/mediawiki/trunk/" . dirname( $path ) .
-                                       "/{$matches[2]}";
-               }
-               return $matches[0];
-       }
-
        /**
         * Returns the description string for this module
         * @return mixed string or array of strings
@@ -1152,11 +1103,11 @@ abstract class ApiBase extends ContextSource {
         * @return string
         */
        function validateTimestamp( $value, $paramName ) {
-               $value = wfTimestamp( TS_UNIX, $value );
-               if ( $value === 0 ) {
+               $unixTimestamp = wfTimestamp( TS_UNIX, $value );
+               if ( $unixTimestamp === false ) {
                        $this->dieUsage( "Invalid value '$value' for timestamp parameter $paramName", "badtimestamp_{$paramName}" );
                }
-               return wfTimestamp( TS_MW, $value );
+               return wfTimestamp( TS_MW, $unixTimestamp );
        }
 
        /**
@@ -1387,6 +1338,26 @@ abstract class ApiBase extends ContextSource {
                $this->dieUsage( $parsed['info'], $parsed['code'] );
        }
 
+       /**
+        * Will only set a warning instead of failing if the global $wgDebugAPI
+        * is set to true. Otherwise behaves exactly as dieUsageMsg().
+        * @param $error (array|string) Element of a getUserPermissionsErrors()-style array
+        * @since 1.21
+        */
+       public function dieUsageMsgOrDebug( $error ) {
+               global $wgDebugAPI;
+               if( $wgDebugAPI !== true ) {
+                       $this->dieUsageMsg( $error );
+               } else {
+                       if( is_string( $error ) ) {
+                               $error = array( $error );
+                       }
+                       $parsed = $this->parseMsg( $error );
+                       $this->setWarning( '$wgDebugAPI: ' . $parsed['code']
+                               . ' - ' . $parsed['info'] );
+               }
+       }
+
        /**
         * Return the error message related to a certain array
         * @param $error array Element of a getUserPermissionsErrors()-style array
@@ -1689,12 +1660,4 @@ abstract class ApiBase extends ContextSource {
                }
                print "\n</pre>\n";
        }
-
-       /**
-        * Returns a string that identifies the version of this class.
-        * @return string
-        */
-       public static function getBaseVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 4779067..b58be11 100644 (file)
@@ -265,8 +265,4 @@ class ApiBlock extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Block';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6741259..230ed33 100644 (file)
@@ -172,8 +172,4 @@ class ApiComparePages extends ApiBase {
                        'api.php?action=compare&fromrev=1&torev=2' => 'Create a diff between revision 1 and 2',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
diff --git a/includes/api/ApiCreateAccount.php b/includes/api/ApiCreateAccount.php
new file mode 100644 (file)
index 0000000..8c49c17
--- /dev/null
@@ -0,0 +1,269 @@
+<?php
+/**
+ * Created on August 7, 2012
+ *
+ * Copyright © 2012 Tyler Romeo <tylerromeo@gmail.com>
+ *
+ * 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
+ */
+
+/**
+ * Unit to authenticate account registration attempts to the current wiki.
+ *
+ * @ingroup API
+ */
+class ApiCreateAccount extends ApiBase {
+       public function execute() {
+               $params = $this->extractRequestParams();
+
+               $result = array();
+
+               // Init session if necessary
+               if ( session_id() == '' ) {
+                       wfSetupSession();
+               }
+
+               if( $params['mailpassword'] && !$params['email'] ) {
+                       $this->dieUsageMsg( 'noemail' );
+               }
+
+               $context = new DerivativeContext( $this->getContext() );
+               $context->setRequest( new DerivativeRequest(
+                       $this->getContext()->getRequest(),
+                       array(
+                               'type' => 'signup',
+                               'uselang' => $params['language'],
+                               'wpName' => $params['name'],
+                               'wpPassword' => $params['password'],
+                               'wpRetype' => $params['password'],
+                               'wpDomain' => $params['domain'],
+                               'wpEmail' => $params['email'],
+                               'wpRealName' => $params['realname'],
+                               'wpCreateaccountToken' => $params['token'],
+                               'wpCreateaccount' => $params['mailpassword'] ? null : '1',
+                               'wpCreateaccountMail' => $params['mailpassword'] ? '1' : null
+                       )
+               ) );
+
+               $loginForm = new LoginForm();
+               $loginForm->setContext( $context );
+               $loginForm->load();
+
+               $status = $loginForm->addNewaccountInternal();
+               $result = array();
+               if( $status->isGood() ) {
+                       // Success!
+                       $user = $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
+                       global $wgLoginLanguageSelector, $wgEmailAuthentication;
+                       if( $wgLoginLanguageSelector && $params['language'] ) {
+                               $user->setOption( 'language', $params['language'] );
+                       }
+
+                       if( $params['mailpassword'] ) {
+                               // If mailpassword was set, disable the password and send an email.
+                               $user->setPassword( null );
+                               $status->merge( $loginForm->mailPasswordInternal( $user, false, 'createaccount-title', 'createaccount-text' ) );
+                       } elseif( $wgEmailAuthentication && Sanitizer::validateEmail( $user->getEmail() ) ) {
+                               // Send out an email authentication message if needed
+                               $status->merge( $user->sendConfirmationMail() );
+                       }
+
+                       // Save settings (including confirmation token)
+                       $user->saveSettings();
+
+                       wfRunHooks( 'AddNewAccount', array( $user, $params['mailpassword'] ) );
+
+                       if ( $params['mailpassword'] ) {
+                               $logAction = 'byemail';
+                       } elseif ( $this->getUser()->isLoggedIn() ) {
+                               $logAction = 'create2';
+                       } else {
+                               $logAction = 'create';
+                       }
+                       $user->addNewUserLogEntry( $logAction, (string)$params['reason'] );
+
+                       // Add username, id, and token to result.
+                       $result['username'] = $user->getName();
+                       $result['userid'] = $user->getId();
+                       $result['token'] = $user->getToken();
+               }
+
+               $apiResult = $this->getResult();
+
+               if( $status->hasMessage( 'sessionfailure' ) ) {
+                       // Token was incorrect, so add it to result, but don't throw an exception.
+                       $result['token'] = LoginForm::getCreateaccountToken();
+                       $result['result'] = 'needtoken';
+               } elseif( !$status->isOK() ) {
+                       // There was an error. Die now.
+                       // Cannot use dieUsageMsg() directly because extensions
+                       // might return custom error messages.
+                       $errors = $status->getErrorsArray();
+                       if( $errors[0] instanceof Message ) {
+                               $code = 'aborted';
+                               $desc = $errors[0];
+                       } else {
+                               $code = array_shift( $errors[0] );
+                               $desc = wfMessage( $code, $errors[0] );
+                       }
+                       $this->dieUsage( $desc, $code );
+               } elseif( !$status->isGood() ) {
+                       // Status is not good, but OK. This means warnings.
+                       $result['result'] = 'warning';
+
+                       // Add any warnings to the result
+                       $warnings = $status->getErrorsByType( 'warning' );
+                       if( $warnings ) {
+                               foreach( $warnings as &$warning ) {
+                                       $apiResult->setIndexedTagName( $warning['params'], 'param' );
+                               }
+                               $apiResult->setIndexedTagName( $warnings, 'warning' );
+                               $result['warnings'] = $warnings;
+                       }
+               } else {
+                       // Everything was fine.
+                       $result['result'] = 'success';
+               }
+
+               $apiResult->addValue( null, 'createaccount', $result );
+       }
+
+       public function getDescription() {
+               return 'Create a new user account.';
+       }
+
+       public function mustBePosted() {
+               return true;
+       }
+
+       public function isReadMode() {
+               return false;
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function getAllowedParams() {
+               global $wgEmailConfirmToEdit;
+               return array(
+                       'name' => array(
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'password' => null,
+                       'domain' => null,
+                       'token' => null,
+                       'email' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => $wgEmailConfirmToEdit
+                       ),
+                       'realname' => null,
+                       'mailpassword' => array(
+                               ApiBase::PARAM_TYPE => 'boolean',
+                               ApiBase::PARAM_DFLT => false
+                       ),
+                       'reason' => null,
+                       'language' => null
+               );
+       }
+
+       public function getParamDescription() {
+               $p = $this->getModulePrefix();
+               return array(
+                       'name' => 'User Name',
+                       'password' => "Password (ignored if {$p}mailpassword is set)",
+                       'domain' => 'Domain (optional)',
+                       'token' => 'Account creation token obtained in first request',
+                       'email' => 'Email address of user',
+                       'realname' => 'Real Name of user',
+                       'mailpassword' => 'Whether to generate and mail a random password to the user',
+                       'reason' => "Optional reason for creating the account (used when {$p}mailpassword is set)",
+                       'language' => 'Language code to set for the user.'
+               );
+       }
+
+       public function getResultProperties() {
+               return array(
+                       'createaccount' => array(
+                               'result' => array(
+                                       ApiBase::PROP_TYPE => array(
+                                               'success',
+                                               'warning',
+                                               'needtoken'
+                                       )
+                               ),
+                               'username' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'userid' => array(
+                                       ApiBase::PROP_TYPE => 'int',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'token' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                       )
+               );
+       }
+
+       public function getPossibleErrors() {
+               $localErrors = array(
+                       'wrongpassword',
+                       'sessionfailure',
+                       'sorbs_create_account_reason',
+                       'noname',
+                       'userexists',
+                       'password-name-match',
+                       'password-login-forbidden',
+                       'noemailtitle',
+                       'invalidemailaddress',
+                       'externaldberror'
+               );
+
+               $errors = parent::getPossibleErrors();
+               // All local errors are from LoginForm, which means they're actually message keys.
+               foreach( $localErrors as $error ) {
+                       $errors[] = array( 'code' => $error, 'info' => wfMessage( $error )->parse() );
+               }
+
+               // 'passwordtooshort' has parameters. :(
+               global $wgMinimalPasswordLength;
+               $errors[] = array(
+                       'code' => 'passwordtooshort',
+                       'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )->parse()
+               );
+               return $errors;
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=createaccount&name=testuser&password=test123',
+                       'api.php?action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Account creation';
+       }
+}
index 964e0ae..cfa8035 100644 (file)
@@ -267,8 +267,4 @@ class ApiDelete extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Delete';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 13975ae..ebcfa01 100644 (file)
@@ -63,8 +63,4 @@ class ApiDisabled extends ApiBase {
        public function getExamples() {
                return array();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cae4a21..74d3e14 100644 (file)
@@ -68,12 +68,12 @@ class ApiEditPage extends ApiBase {
                                $redirValues = array();
                                foreach ( $titles as $id => $newTitle ) {
 
-                                       if ( !isset( $titles[ $id - 1 ] ) ) {
-                                               $titles[ $id - 1 ] = $oldTitle;
+                                       if ( !isset( $titles[$id - 1] ) ) {
+                                               $titles[$id - 1] = $oldTitle;
                                        }
 
                                        $redirValues[] = array(
-                                               'from' => $titles[ $id - 1 ]->getPrefixedText(),
+                                               'from' => $titles[$id - 1]->getPrefixedText(),
                                                'to' => $newTitle->getPrefixedText()
                                        );
 
@@ -649,8 +649,4 @@ class ApiEditPage extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Edit';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 4fa0343..ba8edc0 100644 (file)
@@ -160,8 +160,4 @@ class ApiEmailUser extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:E-mail';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 160f5b9..f740cf8 100644 (file)
@@ -130,8 +130,4 @@ class ApiExpandTemplates extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Parsing_wikitext#expandtemplates';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index fb6a06f..2f02674 100644 (file)
@@ -51,7 +51,7 @@ class ApiFeedContributions extends ApiBase {
                        $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                }
 
-               if( !isset( $wgFeedClasses[ $params['feedformat'] ] ) ) {
+               if( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
                        $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                }
 
@@ -213,8 +213,4 @@ class ApiFeedContributions extends ApiBase {
                        'api.php?action=feedcontributions&user=Reedy',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6ccb02f..7a91641 100644 (file)
@@ -62,7 +62,7 @@ class ApiFeedWatchlist extends ApiBase {
                                $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                        }
 
-                       if( !isset( $wgFeedClasses[ $params['feedformat'] ] ) ) {
+                       if( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
                                $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                        }
                        if ( !is_null( $params['wlexcludeuser'] ) ) {
@@ -233,8 +233,4 @@ class ApiFeedWatchlist extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watchlist_feed';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 092b003..1e463e5 100644 (file)
@@ -195,8 +195,4 @@ class ApiFileRevert extends ApiBase {
                                => 'Revert Wiki.png to the version of 20110305152740',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 8ad9b8c..e8edb3d 100644 (file)
@@ -308,10 +308,6 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
        public function getDescription() {
                return $this->getIsHtml() ? ' (pretty-print in HTML)' : '';
        }
-
-       public static function getBaseVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 /**
@@ -381,8 +377,4 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
                        ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
                }
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 3d2a39c..f280a29 100644 (file)
@@ -48,8 +48,4 @@ class ApiFormatDbg extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in PHP\'s var_export() format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 0f055e1..db66083 100644 (file)
@@ -52,8 +52,4 @@ class ApiFormatDump extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in PHP\'s var_dump() format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index acbc7d3..19c5e5f 100644 (file)
@@ -90,8 +90,4 @@ class ApiFormatJson extends ApiFormatBase {
                        return 'Output data in JSON format' . parent::getDescription();
                }
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b3bde37..bee1ac9 100644 (file)
@@ -44,8 +44,4 @@ class ApiFormatNone extends ApiFormatBase {
        public function getDescription() {
                return 'Output nothing' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index fac2ca5..99a047a 100644 (file)
@@ -45,8 +45,4 @@ class ApiFormatPhp extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in serialized PHP format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 184f0a3..d278efa 100644 (file)
@@ -66,8 +66,4 @@ class ApiFormatRaw extends ApiFormatBase {
                }
                $this->printText( $data['text'] );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 7141459..3e1f592 100644 (file)
@@ -48,8 +48,4 @@ class ApiFormatTxt extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in PHP\'s print_r() format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 65056e4..fd1b327 100644 (file)
@@ -112,8 +112,4 @@ class ApiFormatWddx extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in WDDX format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5ccf185..8dbeae4 100644 (file)
@@ -205,7 +205,13 @@ class ApiFormatXml extends ApiFormatBase {
                                // ignore
                                break;
                        default:
-                               $retval .= $indstr . Xml::element( $elemName, null, $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 );
+                               }
                                break;
                }
                return $retval;
@@ -248,8 +254,4 @@ class ApiFormatXml extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in XML format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 9a8e3bc..700d4a5 100644 (file)
@@ -37,8 +37,4 @@ class ApiFormatYaml extends ApiFormatJson {
        public function getDescription() {
                return 'Output data in YAML format' . ApiFormatBase::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2b5de21..28bb2e9 100644 (file)
@@ -151,8 +151,4 @@ class ApiHelp extends ApiBase {
                        'https://www.mediawiki.org/wiki/API:Quick_start_guide',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 637c1ff..f5636bd 100644 (file)
@@ -186,10 +186,6 @@ class ApiImport extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Import';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 /**
index 1f91fe9..3df952f 100644 (file)
@@ -278,8 +278,4 @@ class ApiLogin extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Login';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b2f634d..00dd625 100644 (file)
@@ -75,8 +75,4 @@ class ApiLogout extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Logout';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 1e8c84e..70c31c1 100644 (file)
@@ -51,6 +51,7 @@ class ApiMain extends ApiBase {
        private static $Modules = array(
                'login' => 'ApiLogin',
                'logout' => 'ApiLogout',
+               'createaccount' => 'ApiCreateAccount',
                'query' => 'ApiQuery',
                'expandtemplates' => 'ApiExpandTemplates',
                'parse' => 'ApiParse',
@@ -131,7 +132,7 @@ class ApiMain extends ApiBase {
        private $mPrinter;
 
        private $mModules, $mModuleNames, $mFormats, $mFormatNames;
-       private $mResult, $mAction, $mShowVersions, $mEnableWrite;
+       private $mResult, $mAction, $mEnableWrite;
        private $mInternalMode, $mSquidMaxage, $mModule;
 
        private $mCacheMode = 'private';
@@ -187,7 +188,6 @@ class ApiMain extends ApiBase {
                $this->mFormatNames = array_keys( $this->mFormats );
 
                $this->mResult = new ApiResult( $this );
-               $this->mShowVersions = false;
                $this->mEnableWrite = $enableWrite;
 
                $this->mSquidMaxage = - 1; // flag for executeActionWithErrorHandling()
@@ -384,7 +384,7 @@ class ApiMain extends ApiBase {
                                }
                        }
 
-                       // Handle any kind of exception by outputing properly formatted error message.
+                       // Handle any kind of exception by outputting properly formatted error message.
                        // If this fails, an unhandled exception should be thrown so that global error
                        // handler will process and log it.
 
@@ -622,7 +622,6 @@ class ApiMain extends ApiBase {
                        if ( $this->mPrinter->getWantsHelp() || $this->mAction == 'help' ) {
                                ApiResult::setContent( $errMessage, $this->makeHelpMsg() );
                        }
-
                } else {
                        global $wgShowSQLErrors, $wgShowExceptionDetails;
                        // Something is seriously wrong
@@ -639,6 +638,10 @@ class ApiMain extends ApiBase {
                        ApiResult::setContent( $errMessage, $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : '' );
                }
 
+               // Remember all the warnings to re-add them later
+               $oldResult = $result->getData();
+               $warnings = isset( $oldResult['warnings'] ) ? $oldResult['warnings'] : null;
+
                $result->reset();
                $result->disableSizeCheck();
                // Re-add the id
@@ -646,11 +649,13 @@ class ApiMain extends ApiBase {
                if ( !is_null( $requestid ) ) {
                        $result->addValue( null, 'requestid', $requestid );
                }
-
                if ( $wgShowHostnames ) {
                        // servedby is especially useful when debugging errors
                        $result->addValue( null, 'servedby', wfHostName() );
                }
+               if ( $warnings !== null ) {
+                       $result->addValue( null, 'warnings', $warnings );
+               }
 
                $result->addValue( null, 'error', $errMessage );
 
@@ -680,7 +685,6 @@ class ApiMain extends ApiBase {
 
                $params = $this->extractRequestParams();
 
-               $this->mShowVersions = $params['version'];
                $this->mAction = $params['action'];
 
                if ( !is_string( $this->mAction ) ) {
@@ -786,9 +790,10 @@ class ApiMain extends ApiBase {
         * @param $params Array an array with the request parameters
         */
        protected function setupExternalResponse( $module, $params ) {
-               // Ignore mustBePosted() for internal calls
-               if ( $module->mustBePosted() && !$this->getRequest()->wasPosted() ) {
-                       $this->dieUsageMsg( array( 'mustbeposted', $this->mAction ) );
+               if ( !$this->getRequest()->wasPosted() && $module->mustBePosted() ) {
+                       // Module requires POST. GET request might still be allowed
+                       // if $wgDebugApi is true, otherwise fail.
+                       $this->dieUsageMsgOrDebug( array( 'mustbeposted', $this->mAction ) );
                }
 
                // See if custom printer is used
@@ -875,7 +880,7 @@ class ApiMain extends ApiBase {
                if ( !$table ) {
                        $chars = ';@$!*(),/:';
                        for ( $i = 0; $i < strlen( $chars ); $i++ ) {
-                               $table[ rawurlencode( $chars[$i] ) ] = $chars[$i];
+                               $table[rawurlencode( $chars[$i] )] = $chars[$i];
                        }
                }
                return strtr( rawurlencode( $s ), $table );
@@ -926,6 +931,11 @@ class ApiMain extends ApiBase {
         * @param $isError bool
         */
        protected function printResult( $isError ) {
+               global $wgDebugAPI;
+               if( $wgDebugAPI !== false ) {
+                       $this->getResult()->setWarning( 'SECURITY WARNING: $wgDebugAPI is enabled' );
+               }
+
                $this->getResult()->cleanUpUTF8();
                $printer = $this->mPrinter;
                $printer->profileIn();
@@ -967,7 +977,6 @@ class ApiMain extends ApiBase {
                                ApiBase::PARAM_DFLT => 'help',
                                ApiBase::PARAM_TYPE => $this->mModuleNames
                        ),
-                       'version' => false,
                        'maxlag'  => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
@@ -994,7 +1003,6 @@ class ApiMain extends ApiBase {
                return array(
                        'format' => 'The format of the output',
                        'action' => 'What action you would like to perform. See below for module help',
-                       'version' => 'When showing help, include version for each module',
                        'maxlag' => array(
                                'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
                                'To save actions causing any more site replication lag, this parameter can make the client',
@@ -1110,8 +1118,7 @@ class ApiMain extends ApiBase {
                $this->setHelp();
                // Get help text from cache if present
                $key = wfMemcKey( 'apihelp', $this->getModuleName(),
-                       SpecialVersion::getVersion( 'nodb' ) .
-                       $this->getShowVersions() );
+                       SpecialVersion::getVersion( 'nodb' ) );
                if ( $wgAPICacheHelpTimeout > 0 ) {
                        $cached = $wgMemc->get( $key );
                        if ( $cached ) {
@@ -1139,6 +1146,7 @@ class ApiMain extends ApiBase {
                foreach ( array_keys( $this->mModules ) as $moduleName ) {
                        $module = new $this->mModules[$moduleName] ( $this, $moduleName );
                        $msg .= self::makeHelpMsgHeader( $module, 'action' );
+
                        $msg2 = $module->makeHelpMsg();
                        if ( $msg2 !== false ) {
                                $msg .= $msg2;
@@ -1149,9 +1157,8 @@ class ApiMain extends ApiBase {
                $msg .= "\n$astriks Permissions $astriks\n\n";
                foreach ( self::$mRights as $right => $rightMsg ) {
                        $groups = User::getGroupsWithPermission( $right );
-                       $msg .= "* " . $right . " *\n  " . wfMsgReplaceArgs( $rightMsg[ 'msg' ], $rightMsg[ 'params' ] ) .
+                       $msg .= "* " . $right . " *\n  " . wfMsgReplaceArgs( $rightMsg['msg'], $rightMsg['params'] ) .
                                                "\nGranted to:\n  " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
-
                }
 
                $msg .= "\n$astriks Formats  $astriks\n\n";
@@ -1201,25 +1208,11 @@ class ApiMain extends ApiBase {
        /**
         * Check whether the user wants us to show version information in the API help
         * @return bool
+        * @deprecated since 1.21, always returns false
         */
        public function getShowVersions() {
-               return $this->mShowVersions;
-       }
-
-       /**
-        * Returns the version information of this file, plus it includes
-        * the versions for all files that are not callable proper API modules
-        *
-        * @return array
-        */
-       public function getVersion() {
-               $vers = array();
-               $vers[] = 'MediaWiki: ' . SpecialVersion::getVersion() . "\n    https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/";
-               $vers[] = __CLASS__ . ': $Id$';
-               $vers[] = ApiBase::getBaseVersion();
-               $vers[] = ApiFormatBase::getBaseVersion();
-               $vers[] = ApiQueryBase::getBaseVersion();
-               return $vers;
+               wfDeprecated( __METHOD__, '1.21' );
+               return false;
        }
 
        /**
index 6c53e99..bbf4089 100644 (file)
@@ -129,7 +129,7 @@ class ApiMove extends ApiBase {
                        }
                }
 
-               $watch = "preferences";
+               $watch = 'preferences';
                if ( isset( $params['watchlist'] ) ) {
                        $watch = $params['watchlist'];
                } elseif ( $params['watch'] ) {
@@ -302,8 +302,4 @@ class ApiMove extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Move';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index ef56274..6403bd6 100644 (file)
@@ -123,8 +123,4 @@ class ApiOpenSearch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Opensearch';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 01a3760..eff05de 100644 (file)
@@ -54,7 +54,7 @@ class ApiOptions extends ApiBase {
                }
 
                if ( $params['reset'] ) {
-                       $user->resetOptions();
+                       $user->resetOptions( $params['resetkinds'] );
                        $changed = true;
                }
 
@@ -74,35 +74,34 @@ class ApiOptions extends ApiBase {
                }
 
                $prefs = Preferences::getPreferences( $user, $this->getContext() );
-
-               // Multiselect options are stored in the database with one key per
-               // option, each having a boolean value. Extract those keys.
-               $multiselectOptions = array();
-               foreach ( $prefs as $name => $info ) {
-                       if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
-                                       ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
-                               $options = HTMLFormField::flattenOptions( $info['options'] );
-                               $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
-
-                               foreach ( $options as $value ) {
-                                       $multiselectOptions["$prefix$value"] = true;
-                               }
-
-                               unset( $prefs[$name] );
-                       }
-               }
+               $prefsKinds = $user->getOptionKinds( $this->getContext(), $changes );
 
                foreach ( $changes as $key => $value ) {
-                       if ( isset( $prefs[$key] ) ) {
-                               $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
-                               $validation = $field->validate( $value, $user->getOptions() );
-                       } elseif( isset( $multiselectOptions[$key] ) ) {
-                               // A key for a multiselect option.
-                               $validation = true;
-                               $value = (bool)$value;
-                       } else {
-                               $this->setWarning( "Not a valid preference: $key" );
-                               continue;
+                       switch ( $prefsKinds[$key] ) {
+                               case 'registered':
+                                       // Regular option.
+                                       $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
+                                       $validation = $field->validate( $value, $user->getOptions() );
+                                       break;
+                               case 'registered-multiselect':
+                                       // A key for a multiselect option.
+                                       $validation = true;
+                                       $value = $value !== null ? (bool) $value : null;
+                                       break;
+                               case 'userjs':
+                                       // Allow non-default preferences prefixed with 'userjs-', to be set by user scripts
+                                       if ( strlen( $key ) > 255 ) {
+                                               $validation = "key too long (no more than 255 bytes allowed)";
+                                       } elseif ( preg_match( "/[^a-zA-Z0-9_-]/", $key ) !== 0 ) {
+                                               $validation = "invalid key (only a-z, A-Z, 0-9, _, - allowed)";
+                                       } else {
+                                               $validation = true;
+                                       }
+                                       break;
+                               case 'unused':
+                               default:
+                                       $validation = "not a valid preference";
+                                       break;
                        }
                        if ( $validation === true ) {
                                $user->setOption( $key, $value );
@@ -129,12 +128,20 @@ class ApiOptions extends ApiBase {
        }
 
        public function getAllowedParams() {
+               $optionKinds = User::listOptionKinds();
+               $optionKinds[] = 'all';
+
                return array(
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'reset' => false,
+                       'resetkinds' => array(
+                               ApiBase::PARAM_TYPE => $optionKinds,
+                               ApiBase::PARAM_DFLT => 'all',
+                               ApiBase::PARAM_ISMULTI => true
+                       ),
                        'change' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -162,15 +169,20 @@ class ApiOptions extends ApiBase {
        public function getParamDescription() {
                return array(
                        'token' => 'An options token previously obtained through the action=tokens',
-                       'reset' => 'Resets all preferences to the site defaults',
-                       'change' => 'List of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters',
+                       'reset' => 'Resets preferences to the site defaults',
+                       'resetkinds' => 'List of types of options to reset when the "reset" option is set',
+                       'change' => 'List of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value',
                        'optionname' => 'A name of a option which should have an optionvalue set',
                        'optionvalue' => 'A value of the option specified by the optionname, can contain pipe characters',
                );
        }
 
        public function getDescription() {
-               return 'Change preferences of the current user';
+               return array(
+                       'Change preferences of the current user',
+                       'Only options which are registered in core or in one of installed extensions,',
+                       'or as options with keys prefixed with \'userjs-\' (intended to be used by user scripts), can be set.'
+               );
        }
 
        public function getPossibleErrors() {
@@ -199,8 +211,4 @@ class ApiOptions extends ApiBase {
                        'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 0f5be6b..e2f4dae 100644 (file)
@@ -705,9 +705,10 @@ class ApiPageSet extends ApiQueryBase {
                                if ( $this->mConvertTitles &&
                                                count( $wgContLang->getVariants() ) > 1  &&
                                                !$titleObj->exists() ) {
-                                       // Language::findVariantLink will modify titleObj into
+                                       // Language::findVariantLink will modify titleText and titleObj into
                                        // the canonical variant if possible
-                                       $wgContLang->findVariantLink( $title, $titleObj );
+                                       $titleText = is_string( $title ) ? $title : $titleObj->getPrefixedText();
+                                       $wgContLang->findVariantLink( $titleText, $titleObj );
                                        $titleWasConverted = $unconvertedTitle !== $titleObj->getPrefixedText();
                                }
 
@@ -728,7 +729,11 @@ class ApiPageSet extends ApiQueryBase {
                        // namespace is localized or the capitalization is
                        // different
                        if ( $titleWasConverted ) {
-                               $this->mConvertedTitles[$title] = $titleObj->getPrefixedText();
+                               $this->mConvertedTitles[$unconvertedTitle] = $titleObj->getPrefixedText();
+                               // In this case the page can't be Special.
+                               if ( is_string( $title ) && $title !== $unconvertedTitle ) {
+                                       $this->mNormalizedTitles[$title] = $unconvertedTitle;
+                               }
                        } elseif ( is_string( $title ) && $title !== $titleObj->getPrefixedText() ) {
                                $this->mNormalizedTitles[$title] = $titleObj->getPrefixedText();
                        }
@@ -786,8 +791,4 @@ class ApiPageSet extends ApiQueryBase {
                        array( 'code' => 'multisource', 'info' => "Cannot use 'revids' at the same time as 'dataSource'" ),
                ) );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 343a262..42c490e 100644 (file)
@@ -114,10 +114,10 @@ class ApiParamInfo extends ApiBase {
                $result = $this->getResult();
                $retval['classname'] = get_class( $obj );
                $retval['description'] = implode( "\n", (array)$obj->getFinalDescription() );
-
                $retval['examples'] = '';
 
-               $retval['version'] = implode( "\n", (array)$obj->getVersion() );
+               // version is deprecated since 1.21, but needs to be returned for v1
+               $retval['version'] = '';
                $retval['prefix'] = $obj->getModulePrefix();
 
                if ( $obj->isReadMode() ) {
@@ -366,8 +366,4 @@ class ApiParamInfo extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Parameter_information';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 08764a5..143540b 100644 (file)
@@ -450,14 +450,14 @@ class ApiParse extends ApiBase {
                        $text = Language::fetchLanguageName( $nt->getInterwiki() );
 
                        $langs[] = Html::element( 'a',
-                               array( 'href' => $nt->getFullURL(), 'title' => $nt->getText(), 'class' => "external" ),
+                               array( 'href' => $nt->getFullURL(), 'title' => $nt->getText(), 'class' => 'external' ),
                                $text == '' ? $l : $text );
                }
 
                $s .= implode( wfMessage( 'pipe-separator' )->escaped(), $langs );
 
                if ( $wgContLang->isRTL() ) {
-                       $s = Html::rawElement( 'span', array( 'dir' => "LTR" ), $s );
+                       $s = Html::rawElement( 'span', array( 'dir' => 'LTR' ), $s );
                }
 
                return $s;
@@ -671,8 +671,4 @@ class ApiParse extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Parsing_wikitext#parse';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cb5e081..336068f 100644 (file)
@@ -120,8 +120,4 @@ class ApiPatrol extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Patrol';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b3ca67e..fa6da52 100644 (file)
@@ -234,8 +234,4 @@ class ApiProtect extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Protect';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index dbfa89c..e1ba759 100644 (file)
@@ -187,8 +187,4 @@ class ApiPurge extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Purge';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 56b0f4e..e5e6ca4 100644 (file)
@@ -776,12 +776,4 @@ class ApiQuery extends ApiBase {
                        'https://www.mediawiki.org/wiki/API:Lists',
                );
        }
-
-       public function getVersion() {
-               $psModule = new ApiPageSet( $this );
-               $vers = array();
-               $vers[] = __CLASS__ . ': $Id$';
-               $vers[] = $psModule->getVersion();
-               return $vers;
-       }
 }
index c2beaec..496a0eb 100644 (file)
@@ -60,10 +60,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 1 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 1 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $cont_from = $db->addQuotes( $cont[0] );
                        $this->addWhere( "cat_title $op= $cont_from" );
@@ -224,12 +221,6 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                return 'Enumerate all categories';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&list=allcategories&acprop=size',
@@ -240,8 +231,4 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allcategories';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2319263..bbc5272 100644 (file)
@@ -113,10 +113,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        // Pagination
                        if ( !is_null( $params['continue'] ) ) {
                                $cont = explode( '|', $params['continue'] );
-                               if ( count( $cont ) != 1 ) {
-                                       $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                               'original value returned by the previous query', '_badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 1 );
                                $op = ( $ascendingOrder ? '>' : '<' );
                                $continueFrom = $db->addQuotes( $cont[0] );
                                $this->addWhere( "img_name $op= $continueFrom" );
@@ -385,7 +382,6 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        array( 'code' => 'mimesearchdisabled', 'info' => 'MIME search disabled in Miser Mode' ),
                        array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
                        array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -409,8 +405,4 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allimages';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b37dbbf..e355f8b 100644 (file)
@@ -104,15 +104,11 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        $continueArr = explode( '|', $params['continue'] );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        if ( $params['unique'] ) {
-                               if ( count( $continueArr ) != 1 ) {
-                                       $this->dieUsage( 'Invalid continue parameter', 'badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $continueArr ) != 1 );
                                $continueTitle = $db->addQuotes( $continueArr[0] );
                                $this->addWhere( "{$pfx}title $op= $continueTitle" );
                        } else {
-                               if ( count( $continueArr ) != 2 ) {
-                                       $this->dieUsage( 'Invalid continue parameter', 'badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $continueArr ) != 2 );
                                $continueTitle = $db->addQuotes( $continueArr[0] );
                                $continueFrom = intval( $continueArr[1] );
                                $this->addWhere(
@@ -159,7 +155,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                if ( $params['unique'] ) {
                                        $this->setContinueEnumParameter( 'continue', $row->pl_title );
                                } else {
-                                       $this->setContinueEnumParameter( 'continue', $row->pl_title . "|" . $row->pl_from );
+                                       $this->setContinueEnumParameter( 'continue', $row->pl_title . '|' . $row->pl_from );
                                }
                                break;
                        }
@@ -178,7 +174,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                        if ( $params['unique'] ) {
                                                $this->setContinueEnumParameter( 'continue', $row->pl_title );
                                        } else {
-                                               $this->setContinueEnumParameter( 'continue', $row->pl_title . "|" . $row->pl_from );
+                                               $this->setContinueEnumParameter( 'continue', $row->pl_title . '|' . $row->pl_from );
                                        }
                                        break;
                                }
@@ -279,7 +275,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $link = $this->descriptionLink;
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'code' => 'params', 'info' => "{$m} cannot return corresponding page ids in unique {$link}s mode" ),
-                       array( 'code' => 'badcontinue', 'info' => 'Invalid continue parameter' ),
                ) );
        }
 
@@ -302,8 +297,4 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return "https://www.mediawiki.org/wiki/API:All{$this->descriptionLink}s";
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f5e1146..fcc3dba 100644 (file)
@@ -143,7 +143,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                                }
 
                                if ( $customiseFilterEnabled ) {
-                                       $messageIsCustomised = isset( $customisedMessages['pages'][ $langObj->ucfirst( $message ) ] );
+                                       $messageIsCustomised = isset( $customisedMessages['pages'][$langObj->ucfirst( $message )] );
                                        if ( $customised === $messageIsCustomised ) {
                                                if ( $customised ) {
                                                        $a['customised'] = '';
@@ -291,8 +291,4 @@ class ApiQueryAllMessages extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Meta#allmessages_.2F_am';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a5abae7..0c6692a 100644 (file)
@@ -69,10 +69,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 1 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 1 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $cont_from = $db->addQuotes( $cont[0] );
                        $this->addWhere( "page_title $op= $cont_from" );
@@ -336,7 +333,6 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'code' => 'params', 'info' => 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator' ),
                        array( 'code' => 'params', 'info' => 'prlevel may not be used without prtype' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -359,8 +355,4 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allpages';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 79f6469..37f2b0f 100644 (file)
@@ -444,8 +444,4 @@ class ApiQueryAllUsers extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allusers';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 06db87b..0df2899 100644 (file)
@@ -406,20 +406,14 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                // null stuff out now so we know what's set and what isn't
                $this->rootTitle = $this->contID = $this->redirID = null;
                $rootNs = intval( $continueList[0] );
-               if ( $rootNs === 0 && $continueList[0] !== '0' ) {
-                       // Illegal continue parameter
-                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', '_badcontinue' );
-               }
+               $this->dieContinueUsageIf( $rootNs === 0 && $continueList[0] !== '0' );
+
                $this->rootTitle = Title::makeTitleSafe( $rootNs, $continueList[1] );
+               $this->dieContinueUsageIf( !$this->rootTitle );
 
-               if ( !$this->rootTitle ) {
-                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', '_badcontinue' );
-               }
                $contID = intval( $continueList[2] );
+               $this->dieContinueUsageIf( $contID === 0 && $continueList[2] !== '0' );
 
-               if ( $contID === 0 && $continueList[2] !== '0' ) {
-                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', '_badcontinue' );
-               }
                $this->contID = $contID;
                $id2 = isset( $continueList[3] ) ? $continueList[3] : null;
                $redirID = intval( $id2 );
@@ -455,12 +449,12 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
-                       'dir' => array(\r
-                               ApiBase::PARAM_DFLT => 'ascending',\r
-                               ApiBase::PARAM_TYPE => array(\r
-                                       'ascending',\r
-                                       'descending'\r
-                               )\r
+                       'dir' => array(
+                               ApiBase::PARAM_DFLT => 'ascending',
+                               ApiBase::PARAM_TYPE => array(
+                                       'ascending',
+                                       'descending'
+                               )
                        ),
                        'filterredir' => array(
                                ApiBase::PARAM_DFLT => 'all',
@@ -535,7 +529,6 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'code' => 'bad_image_title', 'info' => "The title for {$this->getModuleName()} query must be an image" ),
-                               array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                        )
                );
        }
@@ -562,8 +555,4 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return $this->helpUrl;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5f4d9f9..02d071b 100644 (file)
@@ -374,6 +374,19 @@ abstract class ApiQueryBase extends ApiBase {
                $result->enableSizeCheck();
        }
 
+       /**
+        * Die with the $prefix.'badcontinue' error. This call is common enough to make it into the base method.
+        * @param $condition boolean will only die if this value is true
+        * @since 1.21
+        */
+       protected function dieContinueUsageIf( $condition ) {
+               if ( $condition ) {
+                       $this->dieUsage(
+                               'Invalid continue param. You should pass the original value returned by the previous query',
+                               'badcontinue' );
+               }
+       }
+
        /**
         * Get the Query database connection (read-only)
         * @return DatabaseBase
@@ -549,18 +562,21 @@ abstract class ApiQueryBase extends ApiBase {
         * @return array
         */
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
+               $errors = parent::getPossibleErrors();
+               $errors = array_merge( $errors, array(
                        array( 'invalidtitle', 'title' ),
                        array( 'invalidtitle', 'key' ),
                ) );
-       }
-
-       /**
-        * Get version string for use in the API help output
-        * @return string
-        */
-       public static function getBaseVersion() {
-               return __CLASS__ . ': $Id$';
+               $params = $this->getFinalParams();
+               if ( array_key_exists( 'continue', $params ) ) {
+                       $errors = array_merge( $errors, array(
+                               array(
+                                       'code' => 'badcontinue',
+                                       'info' => 'Invalid continue param. You should pass the original value returned by the previous query'
+                               ),
+                       ) );
+               }
+               return $errors;
        }
 }
 
index 7cc1755..0d2fa0d 100644 (file)
@@ -404,8 +404,4 @@ class ApiQueryBlocks extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Blocks';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 309c2ce..2b48eb0 100644 (file)
@@ -85,10 +85,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $clfrom = intval( $cont[0] );
                        $clto = $this->getDB()->addQuotes( $cont[1] );
@@ -276,8 +273,4 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categories_.2F_cl';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 31517fa..fbe555c 100644 (file)
@@ -146,8 +146,4 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 55ce023..6a392bd 100644 (file)
@@ -106,11 +106,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                } else {
                        if ( $params['continue'] ) {
                                $cont = explode( '|', $params['continue'], 3 );
-                               if ( count( $cont ) != 3 ) {
-                                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned '.
-                                               'by the previous query', '_badcontinue'
-                                       );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 3 );
 
                                // Remove the types to skip from $queryTypes
                                $contTypeIndex = array_search( $cont[0], $queryTypes );
@@ -118,7 +114,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
                                // Add a WHERE clause for sortkey and from
                                // pack( "H*", $foo ) is used to convert hex back to binary
-                               $escSortkey = $this->getDB()->addQuotes( pack( "H*", $cont[1] ) );
+                               $escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
                                $from = intval( $cont[2] );
                                $op = $dir == 'newer' ? '>' : '<';
                                // $contWhere is used further down
@@ -403,7 +399,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'code' => 'invalidcategory', 'info' => 'The category name you entered is not valid' ),
-                               array( 'code' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                        )
                );
        }
@@ -418,8 +413,4 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Categorymembers';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 8903e46..27d95ee 100644 (file)
@@ -160,10 +160,9 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
                if ( !is_null( $params['continue'] ) && ( $mode == 'all' || $mode == 'revs' ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', 'badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
                        $ns = intval( $cont[0] );
+                       $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
                        $title = $db->addQuotes( $cont[1] );
                        $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
                        $op = ( $dir == 'newer' ? '>' : '<' );
@@ -397,7 +396,6 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revision information' ),
                        array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together' ),
                        array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revision content' ),
-                       array( 'code' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                        array( 'code' => 'badparams', 'info' => "The 'from' parameter cannot be used in modes 1 or 2" ),
                        array( 'code' => 'badparams', 'info' => "The 'to' parameter cannot be used in modes 1 or 2" ),
                        array( 'code' => 'badparams', 'info' => "The 'prefix' parameter cannot be used in modes 1 or 2" ),
@@ -423,8 +421,4 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Deletedrevs';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6715969..c0929a0 100644 (file)
@@ -61,8 +61,4 @@ class ApiQueryDisabled extends ApiQueryBase {
        public function getExamples() {
                return array();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f088062..3b04426 100644 (file)
@@ -66,10 +66,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                $skipUntilThisDup = false;
                if ( isset( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $fromImage = $cont[0];
                        $skipUntilThisDup = $cont[1];
                        // Filter out any images before $fromImage
@@ -204,12 +201,6 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                return 'List all files that are duplicates of the given file(s) based on hash values';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles',
@@ -220,8 +211,4 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#duplicatefiles_.2F_df';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6081601..98380d6 100644 (file)
@@ -272,8 +272,4 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Exturlusage';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 1449a96..c4a39d6 100644 (file)
@@ -166,8 +166,4 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#extlinks_.2F_el';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 7ec47fa..8718371 100644 (file)
@@ -77,10 +77,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 1 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 1 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $cont_from = $db->addQuotes( $cont[0] );
                        $this->addWhere( "fa_name $op= $cont_from" );
@@ -366,7 +363,6 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        array( 'code' => 'hashsearchdisabled', 'info' => 'Search by hash disabled in Miser Mode' ),
                        array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
                        array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -378,8 +374,4 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        ),
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index c5012f0..b47d31f 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
 
                        $db = $this->getDB();
                        $op = $params['dir'] == 'descending' ? '<' : '>';
@@ -233,7 +230,6 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'prefix' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -243,8 +239,4 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                        'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 30c7f5a..fc77b4e 100644 (file)
@@ -58,10 +58,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $db = $this->getDB();
                        $iwlfrom = intval( $cont[0] );
@@ -187,7 +184,6 @@ class ApiQueryIWLinks extends ApiQueryBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'prefix' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -196,8 +192,4 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        'api.php?action=query&prop=iwlinks&titles=Main%20Page' => 'Get interwiki links from the [[Main Page]]',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2be3393..b368af8 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        if ( !is_null( $params['continue'] ) ) {
                                $skip = true;
                                $cont = explode( '|', $params['continue'] );
-                               if ( count( $cont ) != 2 ) {
-                                       $this->dieUsage( 'Invalid continue param. You should pass the original ' .
-                                                       'value returned by the previous query', '_badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
                                $fromTitle = strval( $cont[0] );
                                $fromTimestamp = $cont[1];
                                // Filter out any titles before $fromTitle
@@ -79,15 +76,14 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        } else {
                                $images = RepoGroup::singleton()->findFiles( $titles );
                        }
-                       $resolveRedirects = $this->getPageSet()->isResolvingRedirects();
-                       foreach ( $images as $img ) {
-                               // Skip redirects
-                               if ( $img->getOriginalTitle()->isRedirect() && !$resolveRedirects ) {
+                       foreach ( $titles as $title ) {
+                               if ( !isset( $images[$title] ) ) {
                                        continue;
                                }
 
                                $start = $skip ? $fromTimestamp : $params['start'];
-                               $pageId = $pageIds[NS_FILE][ $img->getTitle()->getDBkey() ];
+                               $pageId = $pageIds[NS_FILE][$title];
+                               $img = $images[$title];
 
                                $fit = $result->addValue(
                                        array( 'query', 'pages', intval( $pageId ) ),
@@ -706,8 +702,4 @@ class ApiQueryImageInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#imageinfo_.2F_ii';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6052a75..aa7359b 100644 (file)
@@ -62,10 +62,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                $this->addWhereFld( 'il_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $ilfrom = intval( $cont[0] );
                        $ilto = $this->getDB()->addQuotes( $cont[1] );
@@ -185,12 +182,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                return 'Returns all images contained on the given page(s)';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&prop=images&titles=Main%20Page' => 'Get a list of images used in the [[Main Page]]',
@@ -201,8 +192,4 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#images_.2F_im';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e5cea96..94b6ad8 100644 (file)
@@ -118,11 +118,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'edit' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'edit' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['edit'] ) ) {
+                       ApiQueryInfo::$cachedTokens['edit'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'edit' ];
+               return ApiQueryInfo::$cachedTokens['edit'];
        }
 
        public static function getDeleteToken( $pageid, $title ) {
@@ -132,11 +132,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'delete' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'delete' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['delete'] ) ) {
+                       ApiQueryInfo::$cachedTokens['delete'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'delete' ];
+               return ApiQueryInfo::$cachedTokens['delete'];
        }
 
        public static function getProtectToken( $pageid, $title ) {
@@ -146,11 +146,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'protect' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'protect' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['protect'] ) ) {
+                       ApiQueryInfo::$cachedTokens['protect'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'protect' ];
+               return ApiQueryInfo::$cachedTokens['protect'];
        }
 
        public static function getMoveToken( $pageid, $title ) {
@@ -160,11 +160,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'move' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'move' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['move'] ) ) {
+                       ApiQueryInfo::$cachedTokens['move'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'move' ];
+               return ApiQueryInfo::$cachedTokens['move'];
        }
 
        public static function getBlockToken( $pageid, $title ) {
@@ -174,11 +174,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'block' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'block' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['block'] ) ) {
+                       ApiQueryInfo::$cachedTokens['block'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'block' ];
+               return ApiQueryInfo::$cachedTokens['block'];
        }
 
        public static function getUnblockToken( $pageid, $title ) {
@@ -193,11 +193,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'email' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'email' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['email'] ) ) {
+                       ApiQueryInfo::$cachedTokens['email'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'email' ];
+               return ApiQueryInfo::$cachedTokens['email'];
        }
 
        public static function getImportToken( $pageid, $title ) {
@@ -207,11 +207,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'import' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'import' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['import'] ) ) {
+                       ApiQueryInfo::$cachedTokens['import'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'import' ];
+               return ApiQueryInfo::$cachedTokens['import'];
        }
 
        public static function getWatchToken( $pageid, $title ) {
@@ -221,11 +221,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'watch' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'watch' ] = $wgUser->getEditToken( 'watch' );
+               if ( !isset( ApiQueryInfo::$cachedTokens['watch'] ) ) {
+                       ApiQueryInfo::$cachedTokens['watch'] = $wgUser->getEditToken( 'watch' );
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'watch' ];
+               return ApiQueryInfo::$cachedTokens['watch'];
        }
 
        public static function getOptionsToken( $pageid, $title ) {
@@ -235,11 +235,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'options' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'options' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['options'] ) ) {
+                       ApiQueryInfo::$cachedTokens['options'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'options' ];
+               return ApiQueryInfo::$cachedTokens['options'];
        }
 
        public function execute() {
@@ -268,10 +268,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        // Throw away any titles we're gonna skip so they don't
                        // clutter queries
                        $cont = explode( '|', $this->params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the original ' .
-                                               'value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $conttitle = Title::makeTitleSafe( $cont[0], $cont[1] );
                        foreach ( $this->everything as $pageid => $title ) {
                                if ( Title::compare( $title, $conttitle ) >= 0 ) {
@@ -349,7 +346,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
                        $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
                        $pageInfo['counter'] = $wgDisableCounters
-                               ? ""
+                               ? ''
                                : intval( $this->pageCounter[$pageid] );
                        $pageInfo['length'] = intval( $this->pageLength[$pageid] );
 
@@ -809,12 +806,6 @@ class ApiQueryInfo extends ApiQueryBase {
                return 'Get basic page information such as namespace, title, last touched date, ...';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&prop=info&titles=Main%20Page',
@@ -825,8 +816,4 @@ class ApiQueryInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#info_.2F_in';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 3920407..7a4880a 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
 
                        $db = $this->getDB();
                        $op = $params['dir'] == 'descending' ? '<' : '>';
@@ -233,7 +230,6 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'lang' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -243,8 +239,4 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                        'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 3109a09..0aaa588 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
                $this->addWhereFld( 'll_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $llfrom = intval( $cont[0] );
                        $lllang = $this->getDB()->addQuotes( $cont[1] );
@@ -179,7 +176,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'lang' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -192,8 +188,4 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#langlinks_.2F_ll';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 9e4b7eb..138d79b 100644 (file)
@@ -112,10 +112,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $plfrom = intval( $cont[0] );
                        $plns = intval( $cont[1] );
@@ -250,8 +247,4 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return $this->helpUrl;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 9ef2c22..6b77898 100644 (file)
@@ -58,7 +58,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                $this->fld_details = isset( $prop['details'] );
                $this->fld_tags = isset( $prop['tags'] );
 
-               $hideLogs = LogEventsList::getExcludeClause( $db, 'user' );
+               $hideLogs = LogEventsList::getExcludeClause( $db, 'user', $this->getUser() );
                if ( $hideLogs !== false ) {
                        $this->addWhere( $hideLogs );
                }
@@ -70,7 +70,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        'user' => array( 'JOIN',
                                'user_id=log_user' ),
                        'page' => array( 'LEFT JOIN',
-                               array(  'log_namespace=page_namespace',
+                               array( 'log_namespace=page_namespace',
                                        'log_title=page_title' ) ) ) );
                $index = array( 'logging' => 'times' ); // default, may change
 
@@ -209,15 +209,15 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        $noredirKey = '5::noredir';
                                }
 
-                               if ( isset( $params[ $targetKey ] ) ) {
-                                       $title = Title::newFromText( $params[ $targetKey ] );
+                               if ( isset( $params[$targetKey] ) ) {
+                                       $title = Title::newFromText( $params[$targetKey] );
                                        if ( $title ) {
                                                $vals2 = array();
                                                ApiQueryBase::addTitleInfo( $vals2, $title, 'new_' );
                                                $vals[$type] = $vals2;
                                        }
                                }
-                               if ( isset( $params[ $noredirKey ] ) && $params[ $noredirKey ] ) {
+                               if ( isset( $params[$noredirKey] ) && $params[$noredirKey] ) {
                                        $vals[$type]['suppressedredirect'] = '';
                                }
                                $params = null;
@@ -377,7 +377,9 @@ class ApiQueryLogEvents extends ApiQueryBase {
                if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
                        // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
-               } elseif ( LogEventsList::getExcludeClause( $this->getDB(), 'user' ) === LogEventsList::getExcludeClause( $this->getDB(), 'public' ) ) { // Output can only contain public data.
+               } elseif ( LogEventsList::getExcludeClause( $this->getDB(), 'user', $this->getUser() )
+                       === LogEventsList::getExcludeClause( $this->getDB(), 'public' )
+               ) { // Output can only contain public data.
                        return 'public';
                } else {
                        return 'anon-public-user-private';
@@ -543,8 +545,4 @@ class ApiQueryLogEvents extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Logevents';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 1eef67e..189e15a 100644 (file)
@@ -146,8 +146,4 @@ class ApiQueryPageProps extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#pageprops_.2F_pp';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 0205005..4aa0000 100644 (file)
@@ -264,8 +264,4 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Protectedtitles';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a8be26d..182bc2c 100644 (file)
@@ -220,8 +220,4 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                        'api.php?action=query&list=querypage&qppage=Ancientpages'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index ddf5841..99854c1 100644 (file)
@@ -183,8 +183,4 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        public function getExamples() {
                return 'api.php?action=query&list=random&rnnamespace=0&rnlimit=2';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id: ApiQueryRandom.php overlordq$';
-       }
 }
index 84c2332..f7a22bd 100644 (file)
@@ -341,6 +341,9 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        case RC_LOG:
                                $vals['type'] = 'log';
                                break;
+                       case RC_EXTERNAL:
+                               $vals['type'] = 'external';
+                               break;
                        case RC_MOVE_OVER_REDIRECT:
                                $vals['type'] = 'move over redirect';
                                break;
@@ -477,6 +480,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                return RC_NEW;
                        case 'log':
                                return RC_LOG;
+                       case 'external':
+                               return RC_EXTERNAL;
                }
        }
 
@@ -573,6 +578,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'edit',
+                                       'external',
                                        'new',
                                        'log'
                                )
@@ -730,8 +736,4 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Recentchanges';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 33000e1..27ea6be 100644 (file)
@@ -338,10 +338,7 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                        if ( !is_null( $params['continue'] ) ) {
                                $cont = explode( '|', $params['continue'] );
-                               if ( count( $cont ) != 2 ) {
-                                       $this->dieUsage( 'Invalid continue param. You should pass the original ' .
-                                                       'value returned by the previous query', '_badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
                                $pageid = intval( $cont[0] );
                                $revid = intval( $cont[1] );
                                $this->addWhere(
@@ -493,7 +490,7 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                $content = null;
                global $wgParser;
-               if ( $this->fld_content || !is_null( $this->difftotext ) ) {
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
                        $content = $revision->getContent();
                        // Expand templates after getting section content because
                        // template-added sections don't count and Parser::preprocess()
@@ -857,8 +854,4 @@ class ApiQueryRevisions extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#revisions_.2F_rv';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cfd08a8..8618339 100644 (file)
@@ -168,7 +168,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                        }
                                }
                                if ( isset( $prop['hasrelated'] ) && $result->hasRelated() ) {
-                                       $vals['hasrelated'] = "";
+                                       $vals['hasrelated'] = '';
                                }
 
                                // Add item to results and see whether it fits
@@ -359,8 +359,4 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Search';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index bb22448..a6a6dff 100644 (file)
@@ -667,8 +667,4 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Meta#siteinfo_.2F_si';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a310d10..1b97317 100644 (file)
@@ -138,9 +138,5 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
-
 }
 
index de30d06..e0637ff 100644 (file)
@@ -195,8 +195,4 @@ class ApiQueryTags extends ApiQueryBase {
                        'api.php?action=query&list=tags&tgprop=displayname|description|hitcount'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f30b132..4d1edf1 100644 (file)
@@ -160,10 +160,7 @@ class ApiQueryContributions extends ApiQueryBase {
                // Handle continue parameter
                if ( $this->multiUserMode && !is_null( $this->params['continue'] ) ) {
                        $continue = explode( '|', $this->params['continue'] );
-                       if ( count( $continue ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the original ' .
-                                       'value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $continue ) != 2 );
                        $db = $this->getDB();
                        $encUser = $db->addQuotes( $continue[0] );
                        $encTS = $db->addQuotes( $db->timestamp( $continue[1] ) );
@@ -546,8 +543,4 @@ class ApiQueryContributions extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Usercontribs';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6690665..963c8f8 100644 (file)
@@ -303,8 +303,4 @@ class ApiQueryUserInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Meta#userinfo_.2F_ui';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index edcbc1a..03a0b79 100644 (file)
@@ -124,7 +124,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                $this->addWhereFld( 'user_name', $goodNames );
                                $this->addTables( 'user_groups' );
                                $this->addJoinConds( array( 'user_groups' => array( 'INNER JOIN', 'ug_user=user_id' ) ) );
-                               $this->addFields( array('user_name', 'ug_group') );
+                               $this->addFields( array( 'user_name', 'ug_group' ) );
                                $userGroupsRes = $this->select( __METHOD__ );
 
                                foreach( $userGroupsRes as $row ) {
@@ -396,8 +396,4 @@ class ApiQueryUsers extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Users';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a1a3372..dd50624 100644 (file)
@@ -116,7 +116,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                ) );
 
                $userId = $user->getId();
-               $this->addJoinConds( array( 'watchlist' => array('INNER JOIN',
+               $this->addJoinConds( array( 'watchlist' => array( 'INNER JOIN',
                        array(
                                'wl_user' => $userId,
                                'wl_namespace=rc_namespace',
@@ -518,8 +518,4 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watchlist';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6b24aef..2cb4d9e 100644 (file)
@@ -71,11 +71,9 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
 
                if ( isset( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $ns = intval( $cont[0] );
+                       $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
                        $title = $this->getDB()->addQuotes( $cont[1] );
                        $op = $params['dir'] == 'ascending' ? '>' : '<';
                        $this->addWhere(
@@ -224,8 +222,4 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                        'api.php?action=query&generator=watchlistraw&gwrshow=changed&prop=revisions',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 91e2081..5f752b3 100644 (file)
@@ -367,8 +367,4 @@ class ApiResult extends ApiBase {
        public function execute() {
                ApiBase::dieDebug( __METHOD__, 'execute() is not supported on Result object' );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 677df16..402bab1 100644 (file)
@@ -205,8 +205,4 @@ class ApiRollback extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Rollback';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f0e1fad..752a6be 100644 (file)
@@ -155,10 +155,6 @@ class ApiRsd extends ApiBase {
                }
                return $outputData;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 class ApiFormatXmlRsd extends ApiFormatXml {
@@ -170,8 +166,4 @@ class ApiFormatXmlRsd extends ApiFormatXml {
        public function getMimeType() {
                return 'application/rsd+xml';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index c122f59..68160fa 100644 (file)
@@ -278,8 +278,4 @@ class ApiSetNotificationTimestamp extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:SetNotificationTimestamp';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2c9b482..2be2b24 100644 (file)
@@ -151,8 +151,4 @@ class ApiTokens extends ApiBase {
                        'api.php?action=tokens&type=email|move' => 'Retrieve an email token and a move token'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e34771f..5802a98 100644 (file)
@@ -178,8 +178,4 @@ class ApiUnblock extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Block';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2ee8641..b1eeff3 100644 (file)
@@ -176,8 +176,4 @@ class ApiUndelete extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Undelete';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index d68c515..1d7ba0f 100644 (file)
@@ -51,6 +51,9 @@ class ApiUpload extends ApiBase {
                // Parameter handling
                $this->mParams = $this->extractRequestParams();
                $request = $this->getMain()->getRequest();
+               // Check if async mode is actually supported
+               $this->mParams['async'] = ( $this->mParams['async'] && !wfIsWindows() );
+               $this->mParams['async'] = false; // XXX: disabled per bug 44080
                // Add the uploaded file to the params array
                $this->mParams['file'] = $request->getFileName( 'file' );
                $this->mParams['chunk'] = $request->getFileName( 'chunk' );
@@ -62,17 +65,15 @@ class ApiUpload extends ApiBase {
 
                // Select an upload module
                if ( !$this->selectUploadModule() ) {
-                       // This is not a true upload, but a status request or similar
-                       return;
-               }
-               if ( !isset( $this->mUpload ) ) {
+                       return; // not a true upload, but a status request or similar
+               } elseif ( !isset( $this->mUpload ) ) {
                        $this->dieUsage( 'No upload module set', 'nomodule' );
                }
 
                // First check permission to upload
                $this->checkPermissions( $user );
 
-               // Fetch the file
+               // Fetch the file (usually a no-op)
                $status = $this->mUpload->fetchFile();
                if ( !$status->isGood() ) {
                        $errors = $status->getErrorsArray();
@@ -89,6 +90,8 @@ class ApiUpload extends ApiBase {
                        if ( !$this->mUpload->getTitle() ) {
                                $this->dieUsage( 'Invalid file title supplied', 'internal-error' );
                        }
+               } elseif ( $this->mParams['async'] ) {
+                       // defer verification to background process
                } else {
                        $this->verifyUpload();
                }
@@ -96,15 +99,15 @@ class ApiUpload extends ApiBase {
                // Check if the user has the rights to modify or overwrite the requested title
                // (This check is irrelevant if stashing is already requested, since the errors
                //  can always be fixed by changing the title)
-               if ( ! $this->mParams['stash'] ) {
+               if ( !$this->mParams['stash'] ) {
                        $permErrors = $this->mUpload->verifyTitlePermissions( $user );
                        if ( $permErrors !== true ) {
                                $this->dieRecoverableError( $permErrors[0], 'filename' );
                        }
                }
+
                // Get the result based on the current upload context:
                $result = $this->getContextResult();
-
                if ( $result['result'] === 'Success' ) {
                        $result['imageinfo'] = $this->mUpload->getImageInfo( $this->getResult() );
                }
@@ -135,6 +138,7 @@ class ApiUpload extends ApiBase {
                // performUpload will return a formatted properly for the API with status
                return $this->performUpload( $warnings );
        }
+
        /**
         * Get Stash Result, throws an expetion if the file could not be stashed.
         * @param $warnings array Array of Api upload warnings
@@ -156,6 +160,7 @@ class ApiUpload extends ApiBase {
                }
                return $result;
        }
+
        /**
         * Get Warnings Result
         * @param $warnings array Array of Api upload warnings
@@ -175,6 +180,7 @@ class ApiUpload extends ApiBase {
                }
                return $result;
        }
+
        /**
         * Get the result of a chunk upload.
         * @param $warnings array Array of Api upload warnings
@@ -206,7 +212,7 @@ class ApiUpload extends ApiBase {
                        if( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
                                if ( $this->mParams['async'] && !wfIsWindows() ) {
                                        $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
-                                       if ( $progress && $progress['result'] !== 'Failed' ) {
+                                       if ( $progress && $progress['result'] === 'Poll' ) {
                                                $this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
                                        }
                                        UploadBase::setSessionStatus(
@@ -218,6 +224,7 @@ class ApiUpload extends ApiBase {
                                        $cmd = wfShellWikiCmd(
                                                "$IP/includes/upload/AssembleUploadChunks.php",
                                                array(
+                                                       '--wiki', wfWikiID(),
                                                        '--filename', $this->mParams['filename'],
                                                        '--filekey', $this->mParams['filekey'],
                                                        '--userid', $this->getUser()->getId(),
@@ -225,7 +232,9 @@ class ApiUpload extends ApiBase {
                                                        '--quiet'
                                                )
                                        ) . " < " . wfGetNull() . " > " . wfGetNull() . " 2>&1 &";
-                                       wfShellExec( $cmd, $retVal ); // start a process in the background
+                                       // Start a process in the background. Enforce the time limits via PHP
+                                       // since ulimit4.sh seems to often not work for this particular usage.
+                                       wfShellExec( $cmd, $retVal, array(), array( 'time' => 0, 'memory' => 0 ) );
                                        if ( $retVal == 0 ) {
                                                $result['result'] = 'Poll';
                                        } else {
@@ -263,7 +272,7 @@ class ApiUpload extends ApiBase {
         * @throws MWException
         * @return String file key
         */
-       function performStash() {
+       private function performStash() {
                try {
                        $stashFile = $this->mUpload->stashFile();
 
@@ -288,7 +297,7 @@ class ApiUpload extends ApiBase {
         * @param $data array Optional extra data to pass to the user
         * @throws UsageException
         */
-       function dieRecoverableError( $error, $parameter, $data = array() ) {
+       private function dieRecoverableError( $error, $parameter, $data = array() ) {
                try {
                        $data['filekey'] = $this->performStash();
                        $data['sessionkey'] = $data['filekey'];
@@ -317,6 +326,7 @@ class ApiUpload extends ApiBase {
                                'filekey', 'file', 'url', 'statuskey' );
                }
 
+               // Status report for "upload to stash"/"upload from stash"
                if ( $this->mParams['filekey'] && $this->mParams['checkstatus'] ) {
                        $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
                        if ( !$progress ) {
@@ -324,6 +334,9 @@ class ApiUpload extends ApiBase {
                        } elseif ( !$progress['status']->isGood() ) {
                                $this->dieUsage( $progress['status']->getWikiText(), 'stashfailed' );
                        }
+                       if ( isset( $progress['status']->value['verification'] ) ) {
+                               $this->checkVerification( $progress['status']->value['verification'] );
+                       }
                        unset( $progress['status'] ); // remove Status object
                        $this->getResult()->addValue( null, $this->getModuleName(), $progress );
                        return false;
@@ -374,8 +387,11 @@ class ApiUpload extends ApiBase {
                        }
 
                        $this->mUpload = new UploadFromStash( $this->getUser() );
-
-                       $this->mUpload->initialize( $this->mParams['filekey'], $this->mParams['filename'] );
+                       // This will not download the temp file in initialize() in async mode.
+                       // We still have enough information to call checkWarnings() and such.
+                       $this->mUpload->initialize(
+                               $this->mParams['filekey'], $this->mParams['filename'], !$this->mParams['async']
+                       );
                } elseif ( isset( $this->mParams['file'] ) ) {
                        $this->mUpload = new UploadFromFile();
                        $this->mUpload->initialize(
@@ -437,12 +453,19 @@ class ApiUpload extends ApiBase {
         * Performs file verification, dies on error.
         */
        protected function verifyUpload( ) {
-               global $wgFileExtensions;
-
                $verification = $this->mUpload->verifyUpload( );
                if ( $verification['status'] === UploadBase::OK ) {
                        return;
+               } else {
+                       return $this->checkVerification( $verification );
                }
+       }
+
+       /**
+        * Performs file verification, dies on error.
+        */
+       protected function checkVerification( array $verification ) {
+               global $wgFileExtensions;
 
                // TODO: Move them to ApiBase's message map
                switch( $verification['status'] ) {
@@ -552,6 +575,8 @@ class ApiUpload extends ApiBase {
         * @return array
         */
        protected function performUpload( $warnings ) {
+               global $IP;
+
                // Use comment as initial page text by default
                if ( is_null( $this->mParams['text'] ) ) {
                        $this->mParams['text'] = $this->mParams['comment'];
@@ -566,29 +591,63 @@ class ApiUpload extends ApiBase {
                }
 
                // No errors, no warnings: do the upload
-               $status = $this->mUpload->performUpload( $this->mParams['comment'],
-                       $this->mParams['text'], $watch, $this->getUser() );
-
-               if ( !$status->isGood() ) {
-                       $error = $status->getErrorsArray();
-
-                       if ( count( $error ) == 1 && $error[0][0] == 'async' ) {
-                               // The upload can not be performed right now, because the user
-                               // requested so
-                               return array(
-                                       'result' => 'Queued',
-                                       'statuskey' => $error[0][1],
-                               );
+               if ( $this->mParams['async'] ) {
+                       $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+                       if ( $progress && $progress['result'] === 'Poll' ) {
+                               $this->dieUsage( "Upload from stash already in progress.", 'publishfailed' );
+                       }
+                       UploadBase::setSessionStatus(
+                               $this->mParams['filekey'],
+                               array( 'result' => 'Poll', 'stage' => 'queued', 'status' => Status::newGood() )
+                       );
+                       $retVal = 1;
+                       $cmd = wfShellWikiCmd(
+                               "$IP/includes/upload/PublishStashedFile.php",
+                               array(
+                                       '--wiki', wfWikiID(),
+                                       '--filename', $this->mParams['filename'],
+                                       '--filekey', $this->mParams['filekey'],
+                                       '--userid', $this->getUser()->getId(),
+                                       '--comment', $this->mParams['comment'],
+                                       '--text', $this->mParams['text'],
+                                       '--watch', $watch,
+                                       '--sessionid', session_id(),
+                                       '--quiet'
+                               )
+                       ) . " < " . wfGetNull() . " > " . wfGetNull() . " 2>&1 &";
+                       // Start a process in the background. Enforce the time limits via PHP
+                       // since ulimit4.sh seems to often not work for this particular usage.
+                       wfShellExec( $cmd, $retVal, array(), array( 'time' => 0, 'memory' => 0 ) );
+                       if ( $retVal == 0 ) {
+                               $result['result'] = 'Poll';
                        } else {
-                               $this->getResult()->setIndexedTagName( $error, 'error' );
+                               UploadBase::setSessionStatus( $this->mParams['filekey'], false );
+                               $this->dieUsage(
+                                       "Failed to start PublishStashedFile.php", 'publishfailed' );
+                       }
+               } else {
+                       $status = $this->mUpload->performUpload( $this->mParams['comment'],
+                               $this->mParams['text'], $watch, $this->getUser() );
 
-                               $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
+                       if ( !$status->isGood() ) {
+                               $error = $status->getErrorsArray();
+
+                               if ( count( $error ) == 1 && $error[0][0] == 'async' ) {
+                                       // The upload can not be performed right now, because the user
+                                       // requested so
+                                       return array(
+                                               'result' => 'Queued',
+                                               'statuskey' => $error[0][1],
+                                       );
+                               } else {
+                                       $this->getResult()->setIndexedTagName( $error, 'error' );
+
+                                       $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
+                               }
                        }
+                       $result['result'] = 'Success';
                }
 
-               $file = $this->mUpload->getLocalFile();
-
-               $result['result'] = 'Success';
                $result['filename'] = $file->getName();
                if ( $warnings && count( $warnings ) > 0 ) {
                        $result['warnings'] = $warnings;
@@ -756,6 +815,7 @@ class ApiUpload extends ApiBase {
                                array( 'code' => 'filename-tooshort', 'info' => 'The filename is too short' ),
                                array( 'code' => 'overwrite', 'info' => 'Overwriting an existing file is not allowed' ),
                                array( 'code' => 'stashfailed', 'info' => 'Stashing temporary file failed' ),
+                               array( 'code' => 'publishfailed', 'info' => 'Publishing of stashed file failed' ),
                                array( 'code' => 'internal-error', 'info' => 'An internal error occurred' ),
                                array( 'code' => 'asynccopyuploaddisabled', 'info' => 'Asynchronous copy uploads disabled' ),
                                array( 'fileexists-forbidden' ),
@@ -784,8 +844,4 @@ class ApiUpload extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Upload';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cbb66a4..0c6ebb1 100644 (file)
@@ -141,8 +141,4 @@ class ApiUserrights extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:User_group_membership';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 275275e..16da176 100644 (file)
@@ -151,8 +151,4 @@ class ApiWatch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watch';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 791ae3e..88e7928 100644 (file)
@@ -46,6 +46,8 @@ class HTMLCacheUpdate implements DeferrableUpdate {
        }
 
        public function doUpdate() {
+               global $wgMaxBacklinksInvalidate;
+
                wfProfileIn( __METHOD__ );
 
                $job = new HTMLCacheUpdateJob(
@@ -58,7 +60,9 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                );
 
                $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 200 );
-               if ( $count >= 200 ) { // many backlinks
+               if ( $wgMaxBacklinksInvalidate !== false && $count > $wgMaxBacklinksInvalidate ) {
+                       wfDebug( "Skipped HTML cache invalidation of {$this->mTitle->getPrefixedText()}." );
+               } elseif ( $count >= 200 ) { // many backlinks
                        JobQueueGroup::singleton()->push( $job );
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                } else { // few backlinks ($count might be off even if 0)
index 6b48fa4..bcc8446 100644 (file)
@@ -65,7 +65,7 @@ class SquidUpdate {
                                'pl_from=page_id' ),
                        __METHOD__ );
                $blurlArr = $title->getSquidURLs();
-               if ( $dbr->numRows( $res ) <= $wgMaxSquidPurgeTitles ) {
+               if ( $res->numRows() <= $wgMaxSquidPurgeTitles ) {
                        foreach ( $res as $BL ) {
                                $tobj = Title::makeTitle( $BL->page_namespace, $BL->page_title ) ;
                                $blurlArr[] = $tobj->getInternalURL();
index 7b91607..ccc9b2c 100644 (file)
@@ -788,7 +788,7 @@ abstract class ContentHandler {
         *    boolean false if no revision occurred
         *
         * @XXX &$hasHistory is extremely ugly, it's here because
-        * WikiPage::getAutoDeleteReason() and Article::getReason()
+        * WikiPage::getAutoDeleteReason() and Article::generateReason()
         * have it / want it.
         */
        public function getAutoDeleteReason( Title $title, &$hasHistory ) {
index d5a6d15..4a02f0b 100644 (file)
@@ -28,7 +28,6 @@
  * member variable and provide accessors to it.
  */
 abstract class ContextSource implements IContextSource {
-
        /**
         * @var IContextSource
         */
@@ -42,7 +41,7 @@ abstract class ContextSource implements IContextSource {
        public function getContext() {
                if ( $this->context === null ) {
                        $class = get_class( $this );
-                       wfDebug( __METHOD__  . " ($class): called and \$context is null. Using RequestContext::getMain() for sanity\n" );
+                       wfDebug( __METHOD__ . " ($class): called and \$context is null. Using RequestContext::getMain() for sanity\n" );
                        $this->context = RequestContext::getMain();
                }
                return $this->context;
@@ -52,7 +51,7 @@ abstract class ContextSource implements IContextSource {
         * Set the IContextSource object
         *
         * @since 1.18
-        * @param $context IContextSource
+        * @param IContextSource $context
         */
        public function setContext( IContextSource $context ) {
                $this->context = $context;
@@ -107,7 +106,7 @@ abstract class ContextSource implements IContextSource {
         * Get the OutputPage object
         *
         * @since 1.18
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                return $this->getContext()->getOutput();
@@ -159,7 +158,7 @@ abstract class ContextSource implements IContextSource {
         * Parameters are the same as wfMessage()
         *
         * @since 1.18
-        * @return Message object
+        * @return Message
         */
        public function msg( /* $args */ ) {
                $args = func_get_args();
index a4e3272..b9a7006 100644 (file)
@@ -30,7 +30,6 @@
  *     a different Title instance set on it.
  */
 class DerivativeContext extends ContextSource {
-
        /**
         * @var WebRequest
         */
@@ -68,7 +67,7 @@ class DerivativeContext extends ContextSource {
 
        /**
         * Constructor
-        * @param $context IContextSource Context to inherit from
+        * @param IContextSource $context Context to inherit from
         */
        public function __construct( IContextSource $context ) {
                $this->setContext( $context );
@@ -77,7 +76,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the WebRequest object
         *
-        * @param $r WebRequest object
+        * @param WebRequest $r
         */
        public function setRequest( WebRequest $r ) {
                $this->request = $r;
@@ -99,7 +98,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the Title object
         *
-        * @param $t Title object
+        * @param Title $t
         */
        public function setTitle( Title $t ) {
                $this->title = $t;
@@ -140,7 +139,7 @@ class DerivativeContext extends ContextSource {
         * Set the WikiPage object
         *
         * @since 1.19
-        * @param $p WikiPage object
+        * @param WikiPage $p
         */
        public function setWikiPage( WikiPage $p ) {
                $this->wikipage = $p;
@@ -166,7 +165,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the OutputPage object
         *
-        * @param $o OutputPage
+        * @param OutputPage $o
         */
        public function setOutput( OutputPage $o ) {
                $this->output = $o;
@@ -175,7 +174,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                if ( !is_null( $this->output ) ) {
@@ -188,7 +187,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the User object
         *
-        * @param $u User
+        * @param User $u
         */
        public function setUser( User $u ) {
                $this->user = $u;
@@ -211,7 +210,7 @@ class DerivativeContext extends ContextSource {
         * Set the Language object
         *
         * @deprecated 1.19 Use setLanguage instead
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         */
        public function setLang( $l ) {
                wfDeprecated( __METHOD__, '1.19' );
@@ -221,7 +220,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the Language object
         *
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         * @throws MWException
         * @since 1.19
         */
@@ -263,7 +262,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the Skin object
         *
-        * @param $s Skin
+        * @param Skin $s
         */
        public function setSkin( Skin $s ) {
                $this->skin = clone $s;
@@ -282,6 +281,4 @@ class DerivativeContext extends ContextSource {
                        return $this->getContext()->getSkin();
                }
        }
-
 }
-
index 476035b..0399081 100644 (file)
@@ -27,7 +27,6 @@
  * Interface for objects which can provide a context on request.
  */
 interface IContextSource {
-
        /**
         * Get the WebRequest object
         *
@@ -66,7 +65,7 @@ interface IContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput();
 
@@ -103,8 +102,7 @@ interface IContextSource {
        /**
         * Get a Message object with context set
         *
-        * @return Message object
+        * @return Message
         */
        public function msg();
 }
-
index e4de030..96d27b0 100644 (file)
@@ -28,7 +28,6 @@
  * Group all the pieces relevant to the context of a request into one instance
  */
 class RequestContext implements IContextSource {
-
        /**
         * @var WebRequest
         */
@@ -67,7 +66,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the WebRequest object
         *
-        * @param $r WebRequest object
+        * @param WebRequest $r
         */
        public function setRequest( WebRequest $r ) {
                $this->request = $r;
@@ -89,7 +88,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the Title object
         *
-        * @param $t Title object
+        * @param Title $t
         */
        public function setTitle( Title $t ) {
                $this->title = $t;
@@ -137,7 +136,7 @@ class RequestContext implements IContextSource {
         * Set the WikiPage object
         *
         * @since 1.19
-        * @param $p WikiPage object
+        * @param WikiPage $p
         */
        public function setWikiPage( WikiPage $p ) {
                $contextTitle = $this->getTitle();
@@ -180,7 +179,7 @@ class RequestContext implements IContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                if ( $this->output === null ) {
@@ -192,7 +191,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the User object
         *
-        * @param $u User
+        * @param User $u
         */
        public function setUser( User $u ) {
                $this->user = $u;
@@ -213,7 +212,7 @@ class RequestContext implements IContextSource {
        /**
         * Accepts a language code and ensures it's sane. Outputs a cleaned up language
         * code and replaces with $wgLanguageCode if not sane.
-        * @param $code string
+        * @param string $code Language code
         * @return string
         */
        public static function sanitizeLangCode( $code ) {
@@ -223,7 +222,7 @@ class RequestContext implements IContextSource {
                $code = strtolower( $code );
 
                # Validate $code
-               if( empty( $code ) || !Language::isValidCode( $code ) || ( $code === 'qqq' ) ) {
+               if ( empty( $code ) || !Language::isValidCode( $code ) || ( $code === 'qqq' ) ) {
                        wfDebug( "Invalid user language code\n" );
                        $code = $wgLanguageCode;
                }
@@ -235,7 +234,7 @@ class RequestContext implements IContextSource {
         * Set the Language object
         *
         * @deprecated 1.19 Use setLanguage instead
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         */
        public function setLang( $l ) {
                wfDeprecated( __METHOD__, '1.19' );
@@ -245,7 +244,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the Language object
         *
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         * @throws MWException
         * @since 1.19
         */
@@ -271,36 +270,47 @@ class RequestContext implements IContextSource {
        }
 
        /**
-        * Get the Language object
+        * Get the Language object.
+        * Initialization of user or request objects can depend on this.
         *
         * @return Language
         * @since 1.19
         */
        public function getLanguage() {
+               if ( isset( $this->recursion ) ) {
+                       throw new MWException( 'Recursion detected' );
+               }
+
                if ( $this->lang === null ) {
+                       $this->recursion = true;
+
                        global $wgLanguageCode, $wgContLang;
-                       $code = $this->getRequest()->getVal(
-                               'uselang',
-                               $this->getUser()->getOption( 'language' )
-                       );
+
+                       $request = $this->getRequest();
+                       $user = $this->getUser();
+
+                       $code = $request->getVal( 'uselang', $user->getOption( 'language' ) );
                        $code = self::sanitizeLangCode( $code );
 
-                       wfRunHooks( 'UserGetLanguageObject', array( $this->getUser(), &$code ) );
+                       wfRunHooks( 'UserGetLanguageObject', array( $user, &$code, $this ) );
 
-                       if( $code === $wgLanguageCode ) {
+                       if ( $code === $wgLanguageCode ) {
                                $this->lang = $wgContLang;
                        } else {
                                $obj = Language::factory( $code );
                                $this->lang = $obj;
                        }
+
+                       unset( $this->recursion );
                }
+
                return $this->lang;
        }
 
        /**
         * Set the Skin object
         *
-        * @param $s Skin
+        * @param Skin $s
         */
        public function setSkin( Skin $s ) {
                $this->skin = clone $s;
@@ -322,7 +332,7 @@ class RequestContext implements IContextSource {
                        // If the hook worked try to set a skin from it
                        if ( $skin instanceof Skin ) {
                                $this->skin = $skin;
-                       } elseif ( is_string($skin) ) {
+                       } elseif ( is_string( $skin ) ) {
                                $this->skin = Skin::newFromKey( $skin );
                        }
 
@@ -330,7 +340,7 @@ class RequestContext implements IContextSource {
                        // then go through the normal processing to load a skin
                        if ( $this->skin === null ) {
                                global $wgHiddenPrefs;
-                               if( !in_array( 'skin', $wgHiddenPrefs ) ) {
+                               if ( !in_array( 'skin', $wgHiddenPrefs ) ) {
                                        # get the user skin
                                        $userSkin = $this->getUser()->getOption( 'skin' );
                                        $userSkin = $this->getRequest()->getVal( 'useskin', $userSkin );
@@ -356,7 +366,7 @@ class RequestContext implements IContextSource {
         * Get a Message object with context set
         * Parameters are the same as wfMessage()
         *
-        * @return Message object
+        * @return Message
         */
        public function msg() {
                $args = func_get_args();
@@ -368,7 +378,7 @@ class RequestContext implements IContextSource {
        /**
         * Get the RequestContext object associated with the main request
         *
-        * @return RequestContext object
+        * @return RequestContext
         */
        public static function getMain() {
                static $instance = null;
@@ -388,11 +398,11 @@ class RequestContext implements IContextSource {
         *   language or a uselang param in the fauxrequest data may change the lang
         * - Skin will be based on the anonymous user, should be the wiki's default skin
         *
-        * @param $title Title Title to use for the extraneous request
-        * @param $request Mixed A WebRequest or data to use for a FauxRequest
+        * @param Title $title Title to use for the extraneous request
+        * @param WebRequest|array $request A WebRequest or data to use for a FauxRequest
         * @return RequestContext
         */
-       public static function newExtraneousContext( Title $title, $request=array() ) {
+       public static function newExtraneousContext( Title $title, $request = array() ) {
                $context = new self;
                $context->setTitle( $title );
                if ( $request instanceof WebRequest ) {
@@ -403,5 +413,4 @@ class RequestContext implements IContextSource {
                $context->user = User::newFromName( '127.0.0.1', false );
                return $context;
        }
-
 }
index a27bef5..20cf5b4 100644 (file)
@@ -33,7 +33,7 @@ abstract class DBAccessBase implements IDBAccessObject {
         * @var String|bool $wiki The target wiki's name. This must be an ID
         * that LBFactory can understand.
         */
-       protected $wiki;
+       protected $wiki = false;
 
        /**
         * @param String|bool $wiki The target wiki's name. This must be an ID
index ffc4de0..62a3d87 100644 (file)
@@ -2030,47 +2030,39 @@ abstract class DatabaseBase implements DatabaseType {
                # Split database and table into proper variables.
                # We reverse the explode so that database.table and table both output
                # the correct table.
-               $dbDetails = array_reverse( explode( '.', $name, 2 ) );
-               if ( isset( $dbDetails[1] ) ) {
-                       list( $table, $database ) = $dbDetails;
+               $dbDetails = explode( '.', $name, 2 );
+               if ( count( $dbDetails ) == 2 ) {
+                       list( $database, $table ) = $dbDetails;
+                       # We don't want any prefix added in this case
+                       $prefix = '';
                } else {
                        list( $table ) = $dbDetails;
-               }
-               $prefix = $this->mTablePrefix; # Default prefix
-
-               # A database name has been specified in input. We don't want any
-               # prefixes added.
-               if ( isset( $database ) ) {
-                       $prefix = '';
+                       if ( $wgSharedDB !== null # We have a shared database
+                               && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
+                               && in_array( $table, $wgSharedTables ) # A shared table is selected
+                       ) {
+                               $database = $wgSharedDB;
+                               $prefix   = $wgSharedPrefix === null ? $this->mTablePrefix : $wgSharedPrefix;
+                       } else {
+                               $database = null;
+                               $prefix = $this->mTablePrefix; # Default prefix
+                       }
                }
 
-               # Note that we use the long format because php will complain in in_array if
-               # the input is not an array, and will complain in is_array if it is not set.
-               if ( !isset( $database ) # Don't use shared database if pre selected.
-                && isset( $wgSharedDB ) # We have a shared database
-                && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
-                && isset( $wgSharedTables )
-                && is_array( $wgSharedTables )
-                && in_array( $table, $wgSharedTables ) ) { # A shared table is selected
-                       $database = $wgSharedDB;
-                       $prefix   = isset( $wgSharedPrefix ) ? $wgSharedPrefix : $prefix;
+               # Quote $table and apply the prefix if not quoted.
+               $tableName = "{$prefix}{$table}";
+               if ( $format == 'quoted' && !$this->isQuotedIdentifier( $tableName ) ) {
+                       $tableName = $this->addIdentifierQuotes( $tableName );
                }
 
-               # Quote the $database and $table and apply the prefix if not quoted.
-               if ( isset( $database ) ) {
+               # Quote $database and merge it with the table name if needed
+               if ( $database !== null ) {
                        if ( $format == 'quoted' && !$this->isQuotedIdentifier( $database ) ) {
                                $database = $this->addIdentifierQuotes( $database );
                        }
+                       $tableName = $database . '.' . $tableName;
                }
 
-               $table = "{$prefix}{$table}";
-               if ( $format == 'quoted' && !$this->isQuotedIdentifier( $table ) ) {
-                       $table = $this->addIdentifierQuotes( "{$table}" );
-               }
-
-               # Merge our database and table into our final table name.
-               $tableName = ( isset( $database ) ? "{$database}.{$table}" : "{$table}" );
-
                return $tableName;
        }
 
@@ -2593,7 +2585,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $fname String name of the calling function
         *
         * @throws DBUnexpectedError
-        * @return bool
+        * @return bool|ResultWrapper
         */
        public function delete( $table, $conds, $fname = 'DatabaseBase::delete' ) {
                if ( !$conds ) {
index 36a1126..04c22f1 100644 (file)
@@ -133,7 +133,7 @@ class DatabaseMysql extends DatabaseBase {
                                substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
 
                        wfProfileOut( __METHOD__ );
-                       $this->reportConnectionError( $error );
+                       return $this->reportConnectionError( $error );
                }
 
                if ( $dbName != '' ) {
@@ -146,7 +146,7 @@ class DatabaseMysql extends DatabaseBase {
                                        "from client host " . wfHostname() . "\n" );
 
                                wfProfileOut( __METHOD__ );
-                               $this->reportConnectionError( "Error selecting database $dbName" );
+                               return $this->reportConnectionError( "Error selecting database $dbName" );
                        }
                }
 
@@ -597,10 +597,9 @@ class DatabaseMysql extends DatabaseBase {
                if ( $res && $row = $this->fetchRow( $res ) ) {
                        wfProfileOut( $fname );
                        return $row[0];
-               } else {
-                       wfProfileOut( $fname );
-                       return false;
                }
+               wfProfileOut( $fname );
+               return false;
        }
 
        /**
index 67dbdfe..e46dbc0 100644 (file)
@@ -97,6 +97,8 @@ interface IORMTable {
         * Selects the the specified fields of the records matching the provided
         * conditions and returns them as DBDataObject. Field names get prefixed.
         *
+        * @see DatabaseBase::select()
+        *
         * @since 1.20
         *
         * @param array|string|null $fields
@@ -104,7 +106,8 @@ interface IORMTable {
         * @param array $options
         * @param string|null $functionName
         *
-        * @return ORMResult
+        * @return ORMResult The result set
+        * @throw DBQueryError if the query failed (even if the database was in ignoreErrors mode)
         */
        public function select( $fields = null, array $conditions = array(),
                                                        array $options = array(), $functionName = null );
@@ -136,6 +139,7 @@ interface IORMTable {
         * @param null|string $functionName
         *
         * @return ResultWrapper
+        * @throw DBQueryError if the query failed (even if the database was in ignoreErrors mode)
         */
        public function rawSelect( $fields = null, array $conditions = array(),
                                                           array $options = array(), $functionName = null );
index 8ba5f4f..2858cd9 100644 (file)
@@ -579,7 +579,7 @@ class LoadBalancer {
                wfProfileIn( __METHOD__ );
                if ( $wiki !== false ) {
                        $conn = $this->openForeignConnection( $i, $wiki );
-                       wfProfileOut( __METHOD__);
+                       wfProfileOut( __METHOD__ );
                        return $conn;
                }
                if ( isset( $this->mConns['local'][$i][0] ) ) {
index 5c730fb..6acc124 100644 (file)
@@ -31,7 +31,7 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
-abstract class ORMRow implements IORMRow {
+class ORMRow implements IORMRow {
 
        /**
         * The fields of the object.
index 1292963..8abfdb6 100644 (file)
@@ -19,6 +19,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @since 1.20
+ * Non-abstract since 1.21
  *
  * @file ORMTable.php
  * @ingroup ORM
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
-abstract class ORMTable extends DBAccessBase implements IORMTable {
+class ORMTable extends DBAccessBase implements IORMTable {
 
        /**
-        * Gets the db field prefix.
+        * Cache for instances, used by the singleton method.
         *
         * @since 1.20
+        * @deprecated since 1.21
         *
-        * @return string
+        * @var ORMTable[]
         */
-       protected abstract function getFieldPrefix();
+       protected static $instanceCache = array();
 
        /**
-        * Cache for instances, used by the singleton method.
+        * @since 1.21
         *
-        * @since 1.20
-        * @var array of DBTable
+        * @var string
         */
-       protected static $instanceCache = array();
+       protected $tableName;
+
+       /**
+        * @since 1.21
+        *
+        * @var string[]
+        */
+       protected $fields = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var string
+        */
+       protected $fieldPrefix = '';
+
+       /**
+        * @since 1.21
+        *
+        * @var string
+        */
+       protected $rowClass = 'ORMRow';
+
+       /**
+        * @since 1.21
+        *
+        * @var array
+        */
+       protected $defaults = array();
 
        /**
         * ID of the database connection to use for read operations.
         * Can be changed via @see setReadDb.
         *
         * @since 1.20
+        *
         * @var integer DB_ enum
         */
        protected $readDb = DB_SLAVE;
 
+       /**
+        * Constructor.
+        *
+        * @since 1.21
+        *
+        * @param string $tableName
+        * @param string[] $fields
+        * @param array $defaults
+        * @param string|null $rowClass
+        * @param string $fieldPrefix
+        */
+       public function __construct( $tableName = '', array $fields = array(), array $defaults = array(), $rowClass = null, $fieldPrefix = '' ) {
+               $this->tableName = $tableName;
+               $this->fields = $fields;
+               $this->defaults = $defaults;
+
+               if ( is_string( $rowClass ) ) {
+                       $this->rowClass = $rowClass;
+               }
+
+               $this->fieldPrefix = $fieldPrefix;
+       }
+
+       /**
+        * @see IORMTable::getName
+        *
+        * @since 1.21
+        *
+        * @return string
+        * @throws MWException
+        */
+       public function getName() {
+               if ( $this->tableName === '' ) {
+                       throw new MWException( 'The table name needs to be set' );
+               }
+
+               return $this->tableName;
+       }
+
+       /**
+        * Gets the db field prefix.
+        *
+        * @since 1.20
+        *
+        * @return string
+        */
+       protected function getFieldPrefix() {
+               return $this->fieldPrefix;
+       }
+
+       /**
+        * @see IORMTable::getRowClass
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       public function getRowClass() {
+               return $this->rowClass;
+       }
+
+       /**
+        * @see ORMTable::getFields
+        *
+        * @since 1.21
+        *
+        * @return array
+        * @throws MWException
+        */
+       public function getFields() {
+               if ( $this->fields === array() ) {
+                       throw new MWException( 'The table needs to have one or more fields' );
+               }
+
+               return $this->fields;
+       }
+
        /**
         * Returns a list of default field values.
         * field name => field value
@@ -64,7 +171,7 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * @return array
         */
        public function getDefaults() {
-               return array();
+               return $this->defaults;
        }
 
        /**
@@ -95,7 +202,8 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         */
        public function select( $fields = null, array $conditions = array(),
                                                        array $options = array(), $functionName  = null ) {
-               return new ORMResult( $this, $this->rawSelect( $fields, $conditions, $options, $functionName ) );
+               $res = $this->rawSelect( $fields, $conditions, $options, $functionName );
+               return new ORMResult( $this, $res );
        }
 
        /**
@@ -109,7 +217,8 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * @param array $options
         * @param string|null $functionName
         *
-        * @return array of self
+        * @return array of row objects
+        * @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode).
         */
        public function selectObjects( $fields = null, array $conditions = array(),
                                                                   array $options = array(), $functionName  = null ) {
@@ -130,11 +239,12 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * @since 1.20
         *
         * @param null|string|array $fields
-        * @param array $conditions
-        * @param array $options
-        * @param null|string $functionName
+        * @param array             $conditions
+        * @param array             $options
+        * @param null|string       $functionName
         *
         * @return ResultWrapper
+        * @throws DBQueryError if the quey failed (even if the database was in ignoreErrors mode).
         */
        public function rawSelect( $fields = null, array $conditions = array(),
                                                           array $options = array(), $functionName  = null ) {
@@ -154,7 +264,29 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
                        $options
                );
 
+               /* @var Exception $error */
+               $error = null;
+
+               if ( $result === false ) {
+                       // Database connection was in "ignoreErrors" mode. We don't like that.
+                       // So, we emulate the DBQueryError that should have been thrown.
+                       $error = new DBQueryError(
+                               $dbr,
+                               $dbr->lastError(),
+                               $dbr->lastErrno(),
+                               $dbr->lastQuery(),
+                               is_null( $functionName ) ? __METHOD__ : $functionName
+                       );
+               }
+
                $this->releaseConnection( $dbr );
+
+               if ( $error ) {
+                       // Note: construct the error before releasing the connection,
+                       // but throw it after.
+                       throw $error;
+               }
+
                return $result;
        }
 
@@ -227,7 +359,7 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
 
                $objects = $this->select( $fields, $conditions, $options, $functionName );
 
-               return $objects->isEmpty() ? false : $objects->current();
+               return ( !$objects || $objects->isEmpty() ) ? false : $objects->current();
        }
 
        /**
@@ -655,6 +787,7 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * Get an instance of this class.
         *
         * @since 1.20
+        * @deprecated since 1.21
         *
         * @return IORMTable
         */
@@ -768,4 +901,4 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
                return array_key_exists( $name, $this->getFields() );
        }
 
-}
+}
\ No newline at end of file
index 6fcf0e8..97553e6 100644 (file)
@@ -294,8 +294,11 @@ class DifferenceEngine extends ContextSource {
 
                        if ( $samePage && $this->mNewPage->quickUserCan( 'edit', $user ) ) {
                                if ( $this->mNewRev->isCurrent() && $this->mNewPage->userCan( 'rollback', $user ) ) {
-                                       $out->preventClickjacking();
-                                       $rollback = '&#160;&#160;&#160;' . Linker::generateRollback( $this->mNewRev, $this->getContext() );
+                                       $rollbackLink = Linker::generateRollback( $this->mNewRev, $this->getContext() );
+                                       if ( $rollbackLink ) {
+                                               $out->preventClickjacking();
+                                               $rollback = '&#160;&#160;&#160;' . $rollbackLink;
+                                       }
                                }
                                if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
                                        $undoLink = ' ' . $this->msg( 'parentheses' )->rawParams(
index 1b7c29d..55c1acf 100644 (file)
@@ -1,6 +1,10 @@
 <?php
 /**
- * Data storage in external repositories.
+ * @defgroup ExternalStorage ExternalStorage
+ */
+
+/**
+ * Interface for data storage in external repositories.
  *
  * 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
  */
 
 /**
- * @defgroup ExternalStorage ExternalStorage
- */
-
-/**
- * Constructor class for data kept in external repositories
+ * Constructor class for 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>". 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.
+ * This is useful since object names can be sequential IDs, UUIDs, or hashes.
+ * Callers are not responsible for unique name generation.
  *
  * External repositories might be populated by maintenance/async
  * scripts, thus partial moving of data may be possible, as well
  * @ingroup ExternalStorage
  */
 class ExternalStore {
-       var $mParams;
-
        /**
-        * @param $params array
+        * Get an external store object of the given type, with the given parameters
+        *
+        * @param $proto String: type of external storage, should be a value in $wgExternalStores
+        * @param $params Array: associative array of parameters for the ExternalStore object.
+        * @return ExternalStore|bool ExternalStore class or false on error
         */
-       function __construct( $params = array() ) {
-               $this->mParams = $params;
+       public static function getStoreObject( $proto, array $params = array() ) {
+               global $wgExternalStores;
+
+               if ( !$wgExternalStores || !in_array( $proto, $wgExternalStores ) ) {
+                       return false; // protocol not enabled
+               }
+
+               $class = 'ExternalStore' . ucfirst( $proto );
+               // Any custom modules should be added to $wgAutoLoadClasses for on-demand loading
+               return MWInit::classExists( $class ) ? new $class( $params ) : false;
        }
 
        /**
@@ -49,23 +66,16 @@ class ExternalStore {
         * @param $url String: The URL of the text to get
         * @param $params Array: associative array of parameters for the ExternalStore object.
         * @return string|bool The text stored or false on error
+        * @throws MWException
         */
-       static function fetchFromURL( $url, $params = array() ) {
-               global $wgExternalStores;
-
-               if( !$wgExternalStores ) {
-                       return false;
-               }
-
+       public static function fetchFromURL( $url, array $params = array() ) {
                $parts = explode( '://', $url, 2 );
-
                if ( count( $parts ) != 2 ) {
-                       return false;
+                       return false; // invalid URL
                }
 
                list( $proto, $path ) = $parts;
-
-               if ( $path == '' ) { // Bad URL
+               if ( $path == '' ) { // bad URL
                        return false;
                }
 
@@ -77,33 +87,6 @@ class ExternalStore {
                return $store->fetchFromURL( $url );
        }
 
-       /**
-        * Get an external store object of the given type, with the given parameters
-        *
-        * @param $proto String: type of external storage, should be a value in $wgExternalStores
-        * @param $params Array: associative array of parameters for the ExternalStore object.
-        * @return ExternalStore|bool ExternalStore class or false on error
-        */
-       static function getStoreObject( $proto, $params = array() ) {
-               global $wgExternalStores;
-               if( !$wgExternalStores ) {
-                       return false;
-               }
-
-               /* Protocol not enabled */
-               if( !in_array( $proto, $wgExternalStores ) ) {
-                       return false;
-               }
-
-               $class = 'ExternalStore' . ucfirst( $proto );
-               /* Any custom modules should be added to $wgAutoLoadClasses for on-demand loading */
-               if( !MWInit::classExists( $class ) ) {
-                       return false;
-               }
-
-               return new $class($params);
-       }
-
        /**
         * Store a data item to an external store, identified by a partial URL
         * The protocol part is used to identify the class, the rest is passed to the
@@ -112,14 +95,24 @@ class ExternalStore {
         * @param $data
         * @param $params array
         * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
         */
-       static function insert( $url, $data, $params = array() ) {
-               list( $proto, $params ) = explode( '://', $url, 2 );
+       public static function insert( $url, $data, array $params = array() ) {
+               $parts = explode( '://', $url, 2 );
+               if ( count( $parts ) != 2 ) {
+                       return false; // invalid URL
+               }
+
+               list( $proto, $path ) = $parts;
+               if ( $path == '' ) { // bad URL
+                       return false;
+               }
+
                $store = self::getStoreObject( $proto, $params );
                if ( $store === false ) {
                        return false;
                } else {
-                       return $store->store( $params, $data );
+                       return $store->store( $path, $data );
                }
        }
 
@@ -129,42 +122,41 @@ class ExternalStore {
         * itself. It also fails-over to the next possible clusters.
         *
         * @param $data String
-        * @param $storageParams Array: associative array of parameters for the ExternalStore object.
-        * @throws MWException|DBConnectionError|DBQueryError
+        * @param $params Array: associative array of parameters for the ExternalStore object.
         * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
         */
-       public static function insertToDefault( $data, $storageParams = array() ) {
+       public static function insertToDefault( $data, array $params = array() ) {
                global $wgDefaultExternalStore;
-               $tryStores = (array)$wgDefaultExternalStore;
+
                $error = false;
+               $tryStores = (array)$wgDefaultExternalStore;
                while ( count( $tryStores ) > 0 ) {
-                       $index = mt_rand(0, count( $tryStores ) - 1);
+                       $index = mt_rand( 0, count( $tryStores ) - 1 );
                        $storeUrl = $tryStores[$index];
                        wfDebug( __METHOD__.": trying $storeUrl\n" );
-                       list( $proto, $params ) = explode( '://', $storeUrl, 2 );
-                       $store = self::getStoreObject( $proto, $storageParams );
+                       list( $proto, $path ) = explode( '://', $storeUrl, 2 );
+                       $store = self::getStoreObject( $proto, $params );
                        if ( $store === false ) {
                                throw new MWException( "Invalid external storage protocol - $storeUrl" );
                        }
                        try {
-                               $url = $store->store( $params, $data ); // Try to save the object
-                       } catch ( DBConnectionError $error ) {
-                               $url = false;
-                       } catch( DBQueryError $error ) {
+                               $url = $store->store( $path, $data ); // Try to save the object
+                       } catch ( MWException $error ) {
                                $url = false;
                        }
-                       if ( $url ) {
+                       if ( strlen( $url ) ) {
                                return $url; // Done!
                        } else {
                                unset( $tryStores[$index] ); // Don't try this one again!
                                $tryStores = array_values( $tryStores ); // Must have consecutive keys
-                               wfDebugLog( 'ExternalStorage', "Unable to store text to external storage $storeUrl" );
+                               wfDebugLog( 'ExternalStorage',
+                                       "Unable to store text to external storage $storeUrl" );
                        }
                }
                // All stores failed
                if ( $error ) {
-                       // Rethrow the last connection error
-                       throw $error;
+                       throw $error; // rethrow the last error
                } else {
                        throw new MWException( "Unable to store text to external storage" );
                }
@@ -173,8 +165,8 @@ class ExternalStore {
        /**
         * @param $data
         * @param $wiki
-        *
-        * @return string
+        * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
         */
        public static function insertToForeignDefault( $data, $wiki ) {
                return self::insertToDefault( $data, array( 'wiki' => $wiki ) );
index 9450257..a4e6ef6 100644 (file)
@@ -46,6 +46,7 @@ class FSFileBackend extends FileBackendStore {
        protected $fileOwner; // string; required OS username to own files
        protected $currentUser; // string; OS username running this script
 
+       /** @var Array */
        protected $hadWarningErrors = array();
 
        /**
@@ -196,7 +197,9 @@ class FSFileBackend extends FileBackendStore {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
                                return $status;
                        }
+                       $this->trapWarnings();
                        $bytes = file_put_contents( $tempFile->getPath(), $params['content'] );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
                                return $status;
@@ -209,7 +212,9 @@ class FSFileBackend extends FileBackendStore {
                        $status->value = new FSFileOpHandle( $this, $params, 'Create', $cmd, $dest );
                        $tempFile->bind( $status->value );
                } else { // immediate write
+                       $this->trapWarnings();
                        $bytes = file_put_contents( $dest, $params['content'] );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
                                return $status;
@@ -251,9 +256,9 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Store', $cmd, $dest );
                } else { // immediate write
-                       wfSuppressWarnings();
+                       $this->trapWarnings();
                        $ok = copy( $params['src'], $dest );
-                       wfRestoreWarnings();
+                       $this->untrapWarnings();
                        // In some cases (at least over NFS), copy() returns true when it fails
                        if ( !$ok || ( filesize( $params['src'] ) !== filesize( $dest ) ) ) {
                                if ( $ok ) { // PHP bug
@@ -313,11 +318,15 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd, $dest );
                } else { // immediate write
+                       $this->trapWarnings();
                        $ok = copy( $source, $dest );
+                       $this->untrapWarnings();
                        // In some cases (at least over NFS), copy() returns true when it fails
                        if ( !$ok || ( filesize( $source ) !== filesize( $dest ) ) ) {
                                if ( $ok ) { // PHP bug
+                                       $this->trapWarnings();
                                        unlink( $dest ); // remove broken file
+                                       $this->untrapWarnings();
                                        trigger_error( __METHOD__ . ": copy() failed but returned true." );
                                }
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
@@ -373,7 +382,9 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Move', $cmd );
                } else { // immediate write
+                       $this->trapWarnings();
                        $ok = rename( $source, $dest );
+                       $this->untrapWarnings();
                        clearstatcache(); // file no longer at source
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
@@ -421,9 +432,9 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd );
                } else { // immediate write
-                       wfSuppressWarnings();
+                       $this->trapWarnings();
                        $ok = unlink( $source );
-                       wfRestoreWarnings();
+                       $this->untrapWarnings();
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
                                return $status;
@@ -453,15 +464,18 @@ class FSFileBackend extends FileBackendStore {
                $contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
                $existed = is_dir( $dir ); // already there?
-               if ( !wfMkdirParents( $dir ) ) { // make directory and its parents
+               // Create the directory and its parents as needed...
+               $this->trapWarnings();
+               if ( !wfMkdirParents( $dir ) ) {
                        $status->fatal( 'directorycreateerror', $params['dir'] ); // fails on races
                } elseif ( !is_writable( $dir ) ) {
                        $status->fatal( 'directoryreadonlyerror', $params['dir'] );
                } elseif ( !is_readable( $dir ) ) {
                        $status->fatal( 'directorynotreadableerror', $params['dir'] );
                }
+               $this->untrapWarnings();
+               // Respect any 'noAccess' or 'noListing' flags...
                if ( is_dir( $dir ) && !$existed ) {
-                       // Respect any 'noAccess' or 'noListing' flags...
                        $status->merge( $this->doSecureInternal( $fullCont, $dirRel, $params ) );
                }
                return $status;
@@ -478,19 +492,21 @@ class FSFileBackend extends FileBackendStore {
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
                // Seed new directories with a blank index.html, to prevent crawling...
                if ( !empty( $params['noListing'] ) && !file_exists( "{$dir}/index.html" ) ) {
+                       $this->trapWarnings();
                        $bytes = file_put_contents( "{$dir}/index.html", $this->indexHtmlPrivate() );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dir'] . '/index.html' );
-                               return $status;
                        }
                }
                // Add a .htaccess file to the root of the container...
                if ( !empty( $params['noAccess'] ) && !file_exists( "{$contRoot}/.htaccess" ) ) {
+                       $this->trapWarnings();
                        $bytes = file_put_contents( "{$contRoot}/.htaccess", $this->htaccessPrivate() );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $storeDir = "mwstore://{$this->name}/{$shortCont}";
                                $status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
-                               return $status;
                        }
                }
                return $status;
@@ -508,19 +524,21 @@ class FSFileBackend extends FileBackendStore {
                // Unseed new directories with a blank index.html, to allow crawling...
                if ( !empty( $params['listing'] ) && is_file( "{$dir}/index.html" ) ) {
                        $exists = ( file_get_contents( "{$dir}/index.html" ) === $this->indexHtmlPrivate() );
+                       $this->trapWarnings();
                        if ( $exists && !unlink( "{$dir}/index.html" ) ) { // reverse secure()
                                $status->fatal( 'backend-fail-delete', $params['dir'] . '/index.html' );
-                               return $status;
                        }
+                       $this->untrapWarnings();
                }
                // Remove the .htaccess file from the root of the container...
                if ( !empty( $params['access'] ) && is_file( "{$contRoot}/.htaccess" ) ) {
                        $exists = ( file_get_contents( "{$contRoot}/.htaccess" ) === $this->htaccessPrivate() );
+                       $this->trapWarnings();
                        if ( $exists && !unlink( "{$contRoot}/.htaccess" ) ) { // reverse secure()
                                $storeDir = "mwstore://{$this->name}/{$shortCont}";
                                $status->fatal( 'backend-fail-delete', "{$storeDir}/.htaccess" );
-                               return $status;
                        }
+                       $this->untrapWarnings();
                }
                return $status;
        }
@@ -534,11 +552,11 @@ class FSFileBackend extends FileBackendStore {
                list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
                $contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
-               wfSuppressWarnings();
+               $this->trapWarnings();
                if ( is_dir( $dir ) ) {
                        rmdir( $dir ); // remove directory if empty
                }
-               wfRestoreWarnings();
+               $this->untrapWarnings();
                return $status;
        }
 
@@ -668,9 +686,9 @@ class FSFileBackend extends FileBackendStore {
                                } else {
                                        $tmpPath = $tmpFile->getPath();
                                        // Copy the source file over the temp file
-                                       wfSuppressWarnings();
+                                       $this->trapWarnings();
                                        $ok = copy( $source, $tmpPath );
-                                       wfRestoreWarnings();
+                                       $this->untrapWarnings();
                                        if ( !$ok ) {
                                                $tmpFiles[$src] = null;
                                        } else {
@@ -733,9 +751,9 @@ class FSFileBackend extends FileBackendStore {
         * @return bool Success
         */
        protected function chmod( $path ) {
-               wfSuppressWarnings();
+               $this->trapWarnings();
                $ok = chmod( $path, $this->fileMode );
-               wfRestoreWarnings();
+               $this->untrapWarnings();
 
                return $ok;
        }
@@ -771,12 +789,11 @@ class FSFileBackend extends FileBackendStore {
        /**
         * Listen for E_WARNING errors and track whether any happen
         *
-        * @return bool
+        * @return void
         */
        protected function trapWarnings() {
                $this->hadWarningErrors[] = false; // push to stack
                set_error_handler( array( $this, 'handleWarning' ), E_WARNING );
-               return false; // invoke normal PHP error handler
        }
 
        /**
@@ -790,9 +807,12 @@ class FSFileBackend extends FileBackendStore {
        }
 
        /**
+        * @param $errno integer
+        * @param $errstr string
         * @return bool
         */
-       private function handleWarning() {
+       private function handleWarning( $errno, $errstr ) {
+               wfDebugLog( 'FSFileBackend', $errstr ); // more detailed error logging
                $this->hadWarningErrors[count( $this->hadWarningErrors ) - 1] = true;
                return true; // suppress from PHP handler
        }
index f4457de..3c097a1 100644 (file)
@@ -46,6 +46,10 @@ class SwiftFileBackend extends FileBackendStore {
        protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
        protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
 
+       // Rados Gateway specific options
+       protected $rgwS3AccessKey; // string; S3 access key
+       protected $rgwS3SecretKey; // string; S3 authentication key
+
        /** @var CF_Connection */
        protected $conn; // Swift connection handle
        protected $sessionStarted = 0; // integer UNIX timestamp
@@ -87,6 +91,16 @@ class SwiftFileBackend extends FileBackendStore {
         *   - cacheAuthInfo      : Whether to cache authentication tokens in APC, XCache, ect.
         *                          If those are not available, then the main cache will be used.
         *                          This is probably insecure in shared hosting environments.
+        *   - rgwS3AccessKey     : Ragos Gateway S3 "access key" value on the account.
+        *                          Do not set this until it has been set in the backend.
+        *                          This is used for generating expiring pre-authenticated URLs.
+        *                          Only use this when using rgw and to work around
+        *                          http://tracker.newdream.net/issues/3454.
+        *   - rgwS3SecretKey     : Ragos Gateway S3 "secret key" value on the account.
+        *                          Do not set this until it has been set in the backend.
+        *                          This is used for generating expiring pre-authenticated URLs.
+        *                          Only use this when using rgw and to work around
+        *                          http://tracker.newdream.net/issues/3454.
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -122,6 +136,12 @@ class SwiftFileBackend extends FileBackendStore {
                $this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
                        ? $config['swiftCDNPurgable']
                        : true;
+               $this->rgwS3AccessKey = isset( $config['rgwS3AccessKey'] )
+                       ? $config['rgwS3AccessKey']
+                       : '';
+               $this->rgwS3SecretKey = isset( $config['rgwS3SecretKey'] )
+                       ? $config['rgwS3SecretKey']
+                       : '';
                // Cache container information to mask latency
                $this->memCache = wfGetMainCache();
                // Process cache for container info
@@ -968,7 +988,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $objects = $container->list_objects( $limit, $after, $prefix );
                                foreach ( $objects as $object ) { // files
                                        $objectDir = $this->getParentDir( $object ); // directory of object
-                                       if ( $objectDir !== false ) { // file has a parent dir
+                                       if ( $objectDir !== false && $objectDir !== $dir ) {
                                                // Swift stores paths in UTF-8, using binary sorting.
                                                // See function "create_container_table" in common/db.py.
                                                // If a directory is not "greater" than the last one,
@@ -1180,7 +1200,9 @@ class SwiftFileBackend extends FileBackendStore {
         * @return string|null
         */
        public function getFileHttpUrl( array $params ) {
-               if ( $this->swiftTempUrlKey != '' ) { // temp urls enabled
+               if ( $this->swiftTempUrlKey != '' ||
+                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' ) )
+               {
                        list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                        if ( $srcRel === null ) {
                                return null; // invalid path
@@ -1188,7 +1210,31 @@ class SwiftFileBackend extends FileBackendStore {
                        try {
                                $sContObj = $this->getContainer( $srcCont );
                                $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
-                               return $obj->get_temp_url( $this->swiftTempUrlKey, 86400, "GET" );
+                               if ( $this->swiftTempUrlKey != '' ) {
+                                       return $obj->get_temp_url( $this->swiftTempUrlKey, 86400, "GET" );
+                               } else { // give S3 API URL for rgw
+                                       $expires = time() + 86400;
+                                       // Path for signature starts with the bucket
+                                       $spath = '/' . rawurlencode( $srcCont ) . '/' .
+                                               str_replace( '%2F', '/', rawurlencode( $srcRel ) );
+                                       // Calculate the hash
+                                       $signature = base64_encode( hash_hmac(
+                                               'sha1',
+                                               "GET\n\n\n{$expires}\n{$spath}",
+                                               $this->rgwS3SecretKey,
+                                               true // raw
+                                       ) );
+                                       // See http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html.
+                                       // Note: adding a newline for empty CanonicalizedAmzHeaders does not work.
+                                       return wfAppendQuery(
+                                               str_replace( '/swift/v1', '', // S3 API is the rgw default
+                                                       $sContObj->cfs_http->getStorageUrl() . $spath ),
+                                               array(
+                                                       'Signature'      => $signature,
+                                                       'Expires'        => $expires,
+                                                       'AWSAccessKeyId' => $this->rgwS3AccessKey )
+                                       );
+                               }
                        } catch ( NoSuchContainerException $e ) {
                        } catch ( CloudFilesException $e ) { // some other exception?
                                $this->handleException( $e, null, __METHOD__, $params );
@@ -1237,8 +1283,8 @@ class SwiftFileBackend extends FileBackendStore {
                $cfOps = $batch->execute();
                foreach ( $cfOps as $index => $cfOp ) {
                        $status = Status::newGood();
+                       $function = '_getResponse' . $fileOpHandles[$index]->call;
                        try { // catch exceptions; update status
-                               $function = '_getResponse' . $fileOpHandles[$index]->call;
                                $this->$function( $cfOp, $status, $fileOpHandles[$index]->params );
                                $this->purgeCDNCache( $fileOpHandles[$index]->affectedObjects );
                        } catch ( CloudFilesException $e ) { // some other exception?
@@ -1256,12 +1302,12 @@ class SwiftFileBackend extends FileBackendStore {
         *
         * $readGrps is a list of the possible criteria for a request to have
         * access to read a container. Each item is one of the following formats:
-        *   - account:user       : Grants access if the request is by the given user
-        *   - ".r:<regex>"       : Grants access if the request is from a referrer host that
-        *                          matches the expression and the request is not for a listing.
-        *                          Setting this to '*' effectively makes a container public.
-        *   -".rlistings:<regex>": Grants access if the request is from a referrer host that
-        *                          matches the expression and the request for a listing.
+        *   - account:user        : Grants access if the request is by the given user
+        *   - ".r:<regex>"        : Grants access if the request is from a referrer host that
+        *                           matches the expression and the request is not for a listing.
+        *                           Setting this to '*' effectively makes a container public.
+        *   -".rlistings:<regex>" : Grants access if the request is from a referrer host that
+        *                           matches the expression and the request for a listing.
         *
         * $writeGrps is a list of the possible criteria for a request to have
         * access to write to a container. Each item is of the following format:
index b8e25e7..610fc47 100644 (file)
@@ -111,7 +111,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
-                       return; // FIXME: Should return a Status object
+                       return $status;
                }
 
                // Fetch all the existing lock records...
index 9adcc99..bfb9197 100644 (file)
@@ -903,13 +903,14 @@ abstract class File {
                                $this->migrateThumbFile( $thumbName );
                                // Check if an up-to-date thumbnail already exists...
                                wfDebug( __METHOD__.": Doing stat for $thumbPath\n" );
-                               if ( $this->repo->fileExists( $thumbPath ) && !( $flags & self::RENDER_FORCE ) ) {
+                               if ( !( $flags & self::RENDER_FORCE ) && $this->repo->fileExists( $thumbPath ) ) {
                                        $timestamp = $this->repo->getFileTimestamp( $thumbPath );
                                        if ( $timestamp !== false && $timestamp >= $wgThumbnailEpoch ) {
                                                // XXX: Pass in the storage path even though we are not rendering anything
                                                // and the path is supposed to be an FS path. This is due to getScalerType()
                                                // getting called on the path and clobbering $thumb->getUrl() if it's false.
-                                               $thumb = $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+                                               $thumb = $this->handler->getTransform(
+                                                       $this, $thumbPath, $thumbUrl, $params );
                                                $thumb->setStoragePath( $thumbPath );
                                                break;
                                        }
index a9678b7..9babe5a 100644 (file)
@@ -996,6 +996,9 @@ class LocalFile extends File {
                        $options['headers'] = array();
                }
 
+               // Trim spaces on user supplied text
+               $comment = trim( $comment );
+
                // truncate nicely or the DB will do it for us
                // non-nicely (dangling multi-byte chars, non-truncated version in cache).
                $comment = $wgContLang->truncate( $comment, 255 );
index 2fe9676..ac3f7b6 100644 (file)
@@ -256,6 +256,19 @@ abstract class DatabaseUpdater {
                $this->extensionUpdates[] = array( 'dropField', $tableName, $columnName, $sqlPath, true );
        }
 
+       /**
+        * Drop an index from an extension table
+        *
+        * @since 1.21
+        *
+        * @param $tableName string The table name
+        * @param $indexName string The index name
+        * @param $sqlPath string The path to the SQL change path
+        */
+       public function dropExtensionIndex( $tableName, $indexName, $sqlPath ) {
+               $this->extensionUpdates[] = array( 'dropIndex', $tableName, $indexName, $sqlPath, true );
+       }
+
        /**
         *
         * @since 1.20
@@ -267,6 +280,32 @@ abstract class DatabaseUpdater {
                $this->extensionUpdates[] = array( 'dropTable', $tableName, $sqlPath, true );
        }
 
+       /**
+        * Rename an index on an extension table
+        *
+        * @since 1.21
+        *
+        * @param $tableName string The table name
+        * @param $oldIndexName string The old index name
+        * @param $newIndexName string The new index name
+        * @param $skipBothIndexExistWarning Boolean: Whether to warn if both the old and the new indexes exist. [facultative; by default, false]
+        * @param $sqlPath string The path to the SQL change path
+        */
+       public function renameExtensionIndex( $tableName, $oldIndexName, $newIndexName, $sqlPath, $skipBothIndexExistWarning = false ) {
+               $this->extensionUpdates[] = array( 'renameIndex', $tableName, $oldIndexName, $newIndexName, $skipBothIndexExistWarning, $sqlPath, true );
+       }
+
+       /**
+        * @since 1.21
+        *
+        * @param $tableName string The table name
+        * @param $fieldName string The field to be modified
+        * @param $sqlPath string The path to the SQL change path
+        */
+       public function modifyExtensionField( $tableName, $fieldName, $sqlPath) {
+               $this->extensionUpdates[] = array( 'modifyField', $tableName, $fieldName, $sqlPath, true );
+       }
+
        /**
         *
         * @since 1.20
@@ -569,6 +608,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Applies a SQL patch
+        *
         * @param $path String Path to the patch file
         * @param $isFullPath Boolean Whether to treat $path as a relative or not
         * @param $msg String Description of the patch
@@ -599,6 +639,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Add a new table to the database
+        *
         * @param $name String Name of the new table
         * @param $patch String Path to the patch file
         * @param $fullpath Boolean Whether to treat $patch path as a relative or not
@@ -619,6 +660,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Add a new field to an existing table
+        *
         * @param $table String Name of the table to modify
         * @param $field String Name of the new field
         * @param $patch String Path to the patch file
@@ -642,6 +684,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Add a new index to an existing table
+        *
         * @param $table String Name of the table to modify
         * @param $index String Name of the new index
         * @param $patch String Path to the patch file
@@ -655,7 +698,6 @@ abstract class DatabaseUpdater {
 
                if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
                        $this->output( "...skipping: '$table' table doesn't exist yet.\n" );
-                       return false;
                } else if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
                        $this->output( "...index $index already set on $table table.\n" );
                } else {
@@ -690,7 +732,7 @@ abstract class DatabaseUpdater {
         * Drop an index from an existing table
         *
         * @param $table String: Name of the table to modify
-        * @param $index String: Name of the old index
+        * @param $index String: Name of the index
         * @param $patch String: Path to the patch file
         * @param $fullpath Boolean: Whether to treat $patch path as a relative or not
         * @return Boolean false if this was skipped because schema changes are skipped
@@ -708,6 +750,48 @@ abstract class DatabaseUpdater {
                return true;
        }
 
+       /**
+        * Rename an index from an existing table
+        *
+        * @param $table String: Name of the table to modify
+        * @param $oldIndex String: Old name of the index
+        * @param $newIndex String: New name of the index
+        * @param $skipBothIndexExistWarning Boolean: Whether to warn if both the old and the new indexes exist.
+        * @param $patch String: Path to the patch file
+        * @param $fullpath Boolean: Whether to treat $patch path as a relative or not
+        * @return Boolean false if this was skipped because schema changes are skipped
+        */
+       protected function renameIndex( $table, $oldIndex, $newIndex, $skipBothIndexExistWarning, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
+               // First requirement: the table must exist
+               if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
+                       $this->output( "...skipping: '$table' table doesn't exist yet.\n" );
+                       return true;
+               }
+
+               // Second requirement: the new index must be missing
+               if ( $this->db->indexExists( $table, $newIndex, __METHOD__ ) ) {
+                       $this->output( "...index $newIndex already set on $table table.\n" );
+                       if ( !$skipBothIndexExistWarning && $this->db->indexExists( $table, $oldIndex, __METHOD__ ) ) {
+                               $this->output( "...WARNING: $oldIndex still exists, despite it has been renamed into $newIndex (which also exists).\n" .
+                                       "            $oldIndex should be manually removed if not needed anymore.\n" );
+                       }
+                       return true;
+               }
+
+               // Third requirement: the old index must exist
+               if ( !$this->db->indexExists( $table, $oldIndex, __METHOD__ ) ) {
+                       $this->output( "...skipping: index $oldIndex doesn't exist.\n" );
+                       return true;
+               }
+
+               // Requirements have been satisfied, patch can be applied
+               return $this->applyPatch( $patch, $fullpath, "Renaming index $oldIndex into $newIndex to table $table" );
+       }
+
        /**
         * If the specified table exists, drop it, or execute the
         * patch if one is provided.
index 32021d5..98fff92 100644 (file)
@@ -359,7 +359,7 @@ In '''UTF-8 mode''', MySQL will know what character set your data is in, and can
        'config-ns-other-default'         => 'MyWiki',
        'config-project-namespace-help'   => 'Following Wikipedia\'s example, many wikis keep their policy pages separate from their content pages, in a "\'\'\'project namespace\'\'\'".
 All page titles in this namespace start with a certain prefix, which you can specify here.
-Traditionally, this prefix is derived from the name of the wiki, but it cannot contain punctuation characters such as "#" or ":".',
+Usually, this prefix is derived from the name of the wiki, but it cannot contain punctuation characters such as "#" or ":".',
        'config-ns-invalid'               => 'The specified namespace "<nowiki>$1</nowiki>" is invalid.
 Specify a different project namespace.',
        'config-ns-conflict'               => 'The specified namespace "<nowiki>$1</nowiki>" conflicts with a default MediaWiki namespace.
@@ -391,7 +391,7 @@ You can now skip the remaining configuration and install the wiki right now.',
        'config-optional-continue'        => 'Ask me more questions.',
        'config-optional-skip'            => "I'm bored already, just install the wiki.",
        'config-profile'                  => 'User rights profile:',
-       'config-profile-wiki'             => 'Traditional wiki',
+       'config-profile-wiki'             => 'Open wiki',
        'config-profile-no-anon'          => 'Account creation required',
        'config-profile-fishbowl'         => 'Authorized editors only',
        'config-profile-private'          => 'Private wiki',
@@ -401,7 +401,7 @@ In MediaWiki, it is easy to review the recent changes, and to revert any damage
 However, many have found MediaWiki to be useful in a wide variety of roles, and sometimes it is not easy to convince everyone of the benefits of the wiki way.
 So you have the choice.
 
-A '''{{int:config-profile-wiki}}''' allows anyone to edit, without even logging in.
+The '''{{int:config-profile-wiki}}''' model allows anyone to edit, without even logging in.
 A wiki with '''{{int:config-profile-no-anon}}''' provides extra accountability, but may deter casual contributors.
 
 The '''{{int:config-profile-fishbowl}}''' scenario allows approved users to edit, but the public can view the pages, including history.
@@ -492,7 +492,7 @@ They may require additional configuration, but you can enable them now',
        'config-install-alreadydone'      => "'''Warning:''' You seem to have already installed MediaWiki and are trying to install it again.
 Please proceed to the next page.",
        'config-install-begin'            => 'By pressing "{{int:config-continue}}", you will begin the installation of MediaWiki.
-If you still want to make changes, press back.',
+If you still want to make changes, press "{{int:config-back}}".',
        'config-install-step-done'        => 'done',
        'config-install-step-failed'      => 'failed',
        'config-install-extensions'       => 'Including extensions',
@@ -608,8 +608,13 @@ Do not translate: <code>php5-mysql</code>.
 Parameters:
 * $1 is comma separated list of database types supported by MediaWiki.',
        '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}}',
+       'config-mbstring' => '{{Related|Config-fatal}}',
+       'config-ze1' => '{{Related|Config-fatal}}',
        'config-pcre' => 'PCRE is an initialism for "Perl-compatible regular expression". Perl is programming language whose [[:w:regular expression|regular expression]] syntax is popular and used in other languages using a library called PCRE.',
-       'config-pcre-no-utf8' => "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.",
+       'config-pcre-no-utf8' => "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.
+{{Related|Config-fatal}}",
        'config-memory-raised' => 'Parameters:
 * $1 is the configured <code>memory_limit</code>.
 * $2 is the value to which <code>memory_limit</code> was raised.',
@@ -626,6 +631,7 @@ Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
 * $1 is the default value for scriptpath.',
        '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-suhosin-max-value-length' => 'Message shown when PHP parameter suhosin.get.max_value_length 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.',
@@ -782,8 +788,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}}',
-       'mainpagetext' => 'Along with {{msg|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.',
-       'mainpagedocfooter' => 'Along with {{msg|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.
+       '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.',
 );
 
@@ -4008,7 +4014,7 @@ Mit MediaWiki ist es einfach die letzten Änderungen nachzuvollziehen und unbrau
 
 Allerdings finden etliche Menschen Wikis auch mit anderen Bearbeitungskonzepten sinnvoll. Manchmal ist es zudem nicht einfach alle Beteiligten von den Vorteilen des „Wiki-Prinzips” zu überzeugen. Darum ist diese Auswahl möglich.
 
-Ein '''{{int:config-profile-wiki}}''' ermöglicht es jedermann, sogar ohne über ein Benutzerkonto zu verfügen, Bearbeitungen vorzunehmen.
+Das Modell „'''{{int:config-profile-wiki}}'''“ ermöglicht es jedermann, sogar ohne über ein Benutzerkonto zu verfügen, Bearbeitungen vorzunehmen.
 Ein Wiki bei dem die '''{{int:config-profile-no-anon}}''' ist, fordert von den Benutzern eine höhere Verantwortung für ihre Bearbeitungen ein, könnte allerdings Personen abschrecken, die nur gelegentlich Bearbeitungen vornehmen wollen. Ein Wiki für '''{{int:config-profile-fishbowl}}''' gestattet es nur bestimmten Benutzern, Bearbeitungen vorzunehmen. Allerdings kann dabei die Allgemeinheit die Seiten immer noch betrachten und Änderungen nachvollziehen. Ein '''{{int:config-profile-private}}''' gestattet es nur ausgewählten Benutzern, Seiten zu betrachten sowie zu bearbeiten.
 
 Komplexere Konzepte zur Zugriffssteuerung können erst nach abgeschlossenem Installationsvorgang eingerichtet werden. Hierzu gibt es weitere Informationen auf der Website mit der [//www.mediawiki.org/wiki/Manual:User_rights entsprechenden Anleitung].",
@@ -4096,7 +4102,7 @@ Es könnten zusätzliche Konfigurierungen zu einzelnen Erweiterungen erforderlic
        'config-install-alreadydone' => "'''Warnung:''' Es wurde eine vorhandene MediaWiki-Installation gefunden.
 Es muss daher mit den nächsten Seite weitergemacht werden.",
        'config-install-begin' => 'Durch Drücken von „{{int:config-continue}}“ wird die Installation von MediaWiki gestartet.
-Sofern Änderungen vorgenommen werden sollen, kann man auf „← Zurück“ klicken.',
+Sofern Änderungen vorgenommen werden sollen, kann man auf „{{int:config-back}}“ klicken.',
        'config-install-step-done' => 'erledigt',
        'config-install-step-failed' => 'gescheitert',
        'config-install-extensions' => 'Programmerweiterungen',
@@ -4273,12 +4279,15 @@ $messages['dtp'] = array(
 
 /** Greek (Ελληνικά)
  * @author Glavkos
+ * @author Protnet
  * @author ZaDiak
  */
 $messages['el'] = array(
+       'config-desc' => 'Το πρόγραμμα εγκατάστασης για το MediaWiki',
+       'config-title' => 'Εγκατάσταση MediaWiki $1',
        'config-information' => 'Πληροφορίες',
        'config-your-language' => 'Η γλώσσα σας:',
-       'config-wiki-language' => 'Γλώσσα βίκι:',
+       'config-wiki-language' => 'Γλώσσα του wiki:',
        'config-back' => '← Πίσω',
        'config-continue' => 'Συνέχεια →',
        'config-page-language' => 'Γλώσσα',
@@ -4292,14 +4301,15 @@ $messages['el'] = array(
        'config-page-upgradedoc' => 'Αναβάθμιση',
        'config-page-existingwiki' => 'Υπάρχον βίκι',
        'config-restart' => 'Ναι, κάντε επανεκκίνηση',
-       'config-env-php' => 'Το PHP $1 εγκαταστάθηκε.',
+       'config-env-php' => 'H PHP $1 είναι εγκατεστημένη.',
        'config-db-type' => 'Τύπος βάσης δεδομένων:',
        'config-db-host' => 'Φιλοξενία βάσης δεδομένων:',
        'config-db-wiki-settings' => 'Αναγνώριση αυτού του βίκι',
        'config-db-name' => 'Όνομα βάσης δεδομένων:',
-       'config-db-install-account' => 'Λογαριασμός χρήστη προς εγκατάσταση',
+       'config-db-install-account' => 'Λογαριασμός χρήστη για την εγκατάσταση',
        'config-db-username' => 'Όνομα χρήστη βάσης δεδομένων:',
        'config-db-password' => 'Κωδικός πρόσβασης βάσης δεδομένων:',
+       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 δυαδικό',
        'config-header-mysql' => 'Ρυθμίσεις MySQL',
        'config-header-postgres' => 'Ρυθμίσεις PostgreSQL',
        'config-header-sqlite' => 'Ρυθμίσεις SQLite',
@@ -4308,10 +4318,10 @@ $messages['el'] = array(
        'config-invalid-db-type' => 'Μη έγκυρος τύπος βάσης δεδομένων',
        'config-mysql-utf8' => 'UTF-8',
        'config-site-name' => 'Όνομα του βίκι:',
-       'config-site-name-blank' => 'Î\95ιÏ\83άγεÏ\84ε Î­Î½Î± όνομα ιστοχώρου.',
+       'config-site-name-blank' => 'Î\95ιÏ\83αγάÏ\84ε όνομα ιστοχώρου.',
        'config-project-namespace' => 'Περιοχή ονόματος εγχειρήματος:',
        'config-ns-generic' => 'Εγχείρημα',
-       'config-ns-site-name' => 'Ίδιο με το όνομα βίκι: $1',
+       'config-ns-site-name' => 'Ίδιο με το όνομα του wiki: $1',
        'config-ns-other' => 'Άλλο (προσδιορίστε)',
        'config-admin-box' => 'Λογαριασμός διαχειριστή',
        'config-admin-name' => 'Το όνομά σας:',
@@ -4319,12 +4329,12 @@ $messages['el'] = array(
        'config-admin-password-confirm' => 'Επανάληψη κωδικού πρόσβασης:',
        'config-admin-email' => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου:',
        'config-optional-continue' => 'Να ερωτηθώ περισσότερες ερωτήσεις.',
-       'config-profile-wiki' => 'Παραδοσιακό βίκι',
+       'config-profile-wiki' => 'Παραδοσιακό wiki', # Fuzzy
        'config-profile-no-anon' => 'Απαιτείται η δημιουργία λογαριασμού',
-       'config-profile-private' => 'Ιδιωτικό βίκι',
+       'config-profile-private' => 'Ιδιωτικό wiki',
        'config-email-settings' => 'Ρυθμίσεις ηλεκτρονικού ταχυδρομείου',
-       'config-upload-settings' => 'Î\95Ï\80ιÏ\86οÏ\81Ï\84Ï\8eÏ\83ειÏ\82 εικόνων και άλλων αρχείων',
-       'config-upload-enable' => 'Î\95νεÏ\81γοÏ\80οιήÏ\83Ï\84ε Ï\84ην ÎµÏ\80ιÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η αρχείων',
+       'config-upload-settings' => 'Î\91νέβαÏ\83μα εικόνων και άλλων αρχείων',
+       'config-upload-enable' => 'Î\95νεÏ\81γοÏ\80οιήÏ\83Ï\84ε Ï\84ο Î±Î½Î­Î²Î±Ï\83μα αρχείων',
        'config-logo' => 'Διεύθυνση URL λογότυπου:',
        'config-cc-again' => 'Επιλέξτε ξανά...',
        'config-extensions' => 'Επεκτάσεις',
@@ -5767,7 +5777,7 @@ Vous pouvez passer la configuration restante et installer immédiatement le wiki
        'config-optional-continue' => 'Me poser davantage de questions.',
        'config-optional-skip' => 'J’en ai assez, installer simplement le wiki.',
        'config-profile' => 'Profil des droits d’utilisateurs :',
-       'config-profile-wiki' => 'Wiki traditionnel',
+       'config-profile-wiki' => 'Wiki ouvert',
        'config-profile-no-anon' => 'Création de compte requise',
        'config-profile-fishbowl' => 'Éditeurs autorisés seulement',
        'config-profile-private' => 'Wiki privé',
@@ -5777,7 +5787,7 @@ Avec MediaWiki, il est facile de vérifier les modifications récentes et de ré
 Cependant, de nombreuses autres utilisations ont été trouvées au logiciel et il n’est pas toujours facile de convaincre tout le monde des bénéfices de l’esprit wiki.
 Vous avez donc le choix.
 
-'''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.
+Le modèle '''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.
 '''{{int:config-profile-no-anon}}''' fournit plus de contrôle, par l’identification, mais peut rebuter les contributeurs occasionnels.
 
 '''{{int:config-profile-fishbowl}}''' autorise la modification par les utilisateurs approuvés, mais le public peut toujours lire les pages et leur historique.
@@ -5866,8 +5876,8 @@ Si vous ne le connaissez pas, la valeur par défaut est 11211.",
 Elles peuvent nécessiter une configuration supplémentaire, mais vous pouvez les activer maintenant',
        'config-install-alreadydone' => "'''Attention''': Vous semblez avoir déjà installé MediaWiki et tentez de l'installer à nouveau.
 S'il vous plaît, allez à la page suivante.",
-       'config-install-begin' => "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki.
-Si vous voulez apporter des modifications, appuyez sur Retour.",
+       'config-install-begin' => 'En appuyant sur {{int:config-continue}}, vous commencerez l\'installation de MediaWiki.
+Si vous voulez apporter des modifications, appuyez sur "{{int:config-back}}".',
        'config-install-step-done' => 'fait',
        'config-install-step-failed' => 'échec',
        'config-install-extensions' => 'Inclusion des extensions',
@@ -6585,7 +6595,7 @@ Neste paso pode saltar o resto da configuración e instalar o wiki agora mesmo.'
        'config-optional-continue' => 'Facédeme máis preguntas.',
        'config-optional-skip' => 'Xa estou canso. Instalade o wiki.',
        'config-profile' => 'Perfil dos dereitos de usuario:',
-       'config-profile-wiki' => 'Wiki tradicional',
+       'config-profile-wiki' => 'Wiki aberto',
        'config-profile-no-anon' => 'Necesítase a creación dunha conta',
        'config-profile-fishbowl' => 'Só os editores autorizados',
        'config-profile-private' => 'Wiki privado',
@@ -6594,7 +6604,7 @@ En MediaWiki, é doado revisar os cambios recentes e reverter calquera dano feit
 Porén, moita xente atopa MediaWiki útil nunha ampla variedade de papeis, e ás veces non é fácil convencer a todos dos beneficios que leva consigo o estilo wiki.
 Vostede decide.
 
-O tipo '''{{int:config-profile-wiki}}''' permite a edición por parte de calquera, mesmo sen rexistro.
+O modelo '''{{int:config-profile-wiki}}''' permite a edición por parte de calquera, mesmo sen rexistro.
 A opción '''{{int:config-profile-no-anon}}''' proporciona un control maior, pero pode desalentar os colaboradores casuais.
 
 O escenario '''{{int:config-profile-fishbowl}}''' restrinxe a edición aos usuarios aprobados, pero o público pode ollar as páxinas, incluíndo os historiais.
@@ -6685,7 +6695,7 @@ Quizais necesite algunha configuración adicional, pero pode activalas agora',
        'config-install-alreadydone' => "'''Atención:''' Semella que xa instalou MediaWiki e que o está a instalar de novo.
 Vaia ata a seguinte páxina.",
        'config-install-begin' => 'Ao premer en "{{int:config-continue}}", comezará a instalación de MediaWiki.
-Se aínda quere facer algún cambio, volva atrás.',
+Se aínda quere facer algún cambio, prema en "{{int:config-back}}".',
        'config-install-step-done' => 'feito',
        'config-install-step-failed' => 'erro',
        'config-install-extensions' => 'Incluíndo as extensións',
@@ -9681,6 +9691,15 @@ Controlla il tuo file php.ini ed assicurati che <code>session.save_path</code> 
        'config-welcome' => "=== Controllo dell'ambiente ===
 Vengono eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.
 Se hai bisogno di aiuto durante l'installazione, è necessario fornire i risultati di questi controlli.",
+       'config-sidebar' => '* [//www.mediawiki.org Pagina principale MediaWiki]
+* [//www.mediawiki.org/wiki/Aiuto:Guida ai contenuti per utenti]
+* [//www.mediawiki.org/wiki/Manuale:Guida ai contenuti per admin]
+* [//www.mediawiki.org/wiki/Manuale:FAQ FAQ]
+----
+* <doclink href=Readme>Leggimi</doclink>
+* <doclink href=ReleaseNotes>Note di versione</doclink>
+* <doclink href=Copying>Copie</doclink>
+* <doclink href=UpgradeDoc>Aggiornamenti</doclink>',
        'config-env-good' => "L'ambiente è stato controllato.
 È possibile installare MediaWiki.",
        'config-env-bad' => "L'ambiente è stato controllato.
@@ -9778,7 +9797,7 @@ Inserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing
        'config-almost-done' => 'Hai quasi finito!
 Adesso puoi saltare la rimanente parte della configurazione e semplicemente installare la wiki.',
        'config-optional-continue' => 'Fammi altre domande.',
-       'config-profile-wiki' => 'Wiki tradizionale',
+       'config-profile-wiki' => 'Wiki tradizionale', # Fuzzy
        'config-profile-no-anon' => 'Creazione utenza obbligatoria',
        'config-profile-fishbowl' => 'Solo editori autorizzati',
        'config-profile-private' => 'Wiki privata',
@@ -9837,7 +9856,8 @@ I seguenti collegamenti sono in lingua inglese:
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Impostazioni di configurazione]
 * [//www.mediawiki.org/wiki/Manual:FAQ Domande frequenti su MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]", # Fuzzy
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]",
 );
 
 /** Japanese (日本語)
@@ -9931,30 +9951,30 @@ MediaWikiのインストールはできません。',
        'config-unicode-using-intl' => 'Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。',
        'config-unicode-pure-php-warning' => "'''警告''': Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。
 高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
-       'config-unicode-update-warning' => "'''警告''':インストールされているバージョンのUnicode正規化ラッパーは、[http://site.icu-project.org/ ICUプロジェクト]のライブラリの古いバージョンを使用しています。
-Unicodeを少しでも利用する可能性があるなら、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]する必要があります。",
+       'config-unicode-update-warning' => "'''警告''': インストールされているバージョンの Unicode 正規化ラッパーは、[http://site.icu-project.org/ ICU プロジェクト]のライブラリの古いバージョンを使用しています。
+Unicode を少しでも利用する可能性がある場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]してください。",
        'config-no-db' => '適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。
 以下の種類のデータベースに対応しています: $1
 
 共有サーバーを使用している場合は、適切なデータベース ドライバーのインストールを、サーバーの管理者に依頼してください。
 PHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysql</code> を実行して、データベース クライアントを使用できるように再設定してください。
 Debian または Ubuntu のパッケージから PHP をインストールした場合は、php5-mysql モジュールもインストールする必要があります。',
-       'config-no-fts3' => "'''警告''':SQLiteは[//sqlite.org/fts3.html FTS3]モジュールなしでコンパイルされており、検索機能はこのバックエンドで利用不可能になります。",
+       'config-no-fts3' => "'''警告''': SQLite は [//sqlite.org/fts3.html FTS3] モジュールなしでコンパイルされており、このバックエンドでは検索機能は利用できなくなります。",
        'config-register-globals' => "'''警告:PHPの<code>[http://php.net/register_globals register_globals]</code>オプションが有効になっています。'''
 '''可能なら無効化してください。'''
 MediaWikiは動作しますが、サーバーは、潜在的なセキュリティ脆弱性を露呈します。",
-       'config-magic-quotes-runtime' => "'''致命的エラー:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]が動作しています!'''
+       'config-magic-quotes-runtime' => "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] が動作しています!'''
 このオプションは、予期せずデータ入力を破壊します。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-magic-quotes-sybase' => "'''致命的エラー:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]が動作しています!'''
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-magic-quotes-sybase' => "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] が動作しています!'''
 このオプションは、予期せずデータ入力を破壊します。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-mbstring' => "'''致命的エラー:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]が動作しています!'''
-このオプションは、エラーを引き起こし、予期せずデータ入力を破壊する可能性があります。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-ze1' => "'''致命的エラー:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]が動作しています!'''
-このオプションは、MediaWikiにおいて深刻なバグを引き起こします。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-mbstring' => "'''致命的エラー: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] が動作しています!'''
+このオプションは、エラーを引き起こし、予期せずデータを破壊するおそれがあります。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-ze1' => "'''致命的エラー: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] が動作しています!'''
+このオプションは、MediaWiki において深刻なバグを引き起こします。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
        'config-safe-mode' => "'''警告:''' PHPの[http://www.php.net/features.safe-mode セーフモード]が有効になっています。
 特に、ファイルのアップロードや<code>math</code>機能で、問題が発生するおそれがあります。",
        'config-xml-bad' => 'PHPのXMLモジュールが不足しています。
@@ -9971,7 +9991,7 @@ MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] がインストール済み',
        'config-apc' => '[http://www.php.net/apc APC] がインストール済み',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] がインストール済み',
-       'config-no-cache' => "'''警告:'''[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]、[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。
+       'config-no-cache' => "'''警告:''' [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]、[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。
 オブジェクトのキャッシュは有効化されません。",
        'config-diff3-bad' => 'GNU diff3 が見つかりません。',
        'config-imagemagick' => 'ImageMagickが見つかりました:<code>$1</code>。
@@ -9985,7 +10005,7 @@ MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
        'config-no-cli-uri' => "'''警告''': --scriptpath が指定されていないため、既定値 <code>$1</code> を使用します。",
        'config-using-server' => 'サーバー名「<nowiki>$1</nowiki>」を使用しています。',
        'config-using-uri' => 'サーバー URL「<nowiki>$1$2</nowiki>」を使用しています。',
-       'config-uploads-not-safe' => "'''警告:'''アップロードの既定ディレクトリ <code>$1</code> に、任意のスクリプト実行に関する脆弱性があります。
+       'config-uploads-not-safe' => "'''警告:''' アップロードの既定ディレクトリ <code>$1</code> に、任意のスクリプト実行に関する脆弱性があります。
 MediaWiki はアップロードされたファイルのセキュリティ上の脅威を確認しますが、アップロードを有効化する前に、[//www.mediawiki.org/wiki/Manual:Security#Upload_security このセキュリティ上の脆弱性を解決する]ことを強く推奨します。",
        'config-brokenlibxml' => 'このシステムで使われているPHPとlibxml2のバージョンのこの組み合わせにはバグがあります。具体的には、MediaWikiやその他のウェブアプリケーションでhiddenデータが破損する可能性があります。
 PHPを5.2.9かそれ以降のバージョンに、libxml2を2.7.3かそれ以降のバージョンにアップグレードしてください([//bugs.php.net/bug.php?id=45996 PHPでのバグ情報])。
@@ -10172,8 +10192,8 @@ chmod a+w $3</pre>',
        'config-ns-other' => 'その他 (指定してください)',
        'config-ns-other-default' => 'マイウィキ',
        'config-project-namespace-help' => "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。
-この名前空間のページのタイトルはすべて、ある接頭辞で始まります。それをここで指定することができます。
-この接頭辞はウィキの名前に由来するのが伝統的ですが、「#」や「:」のような区切り文字を含めることはできません。",
+この名前空間内のページのページ名はすべて特定の接頭辞で始まります。それをここで指定できます。
+通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
        'config-ns-invalid' => '"<nowiki>$1</nowiki>"のように指定された名前空間は無効です。
 違うプロジェクト名前空間を指定してください。',
        'config-admin-box' => '管理アカウント',
@@ -10200,21 +10220,21 @@ chmod a+w $3</pre>',
        'config-optional-continue' => '私にもっと質問してください。',
        'config-optional-skip' => 'もう飽きてしまったので、とにかくウィキをインストールしてください。',
        'config-profile' => '利用者権限のプロファイル:',
-       'config-profile-wiki' => '伝統的なウィキ',
+       'config-profile-wiki' => '伝統的なウィキ', # Fuzzy
        'config-profile-no-anon' => 'アカウントの作成が必要',
        'config-profile-fishbowl' => '承認された編集者のみ',
        'config-profile-private' => '非公開ウィキ',
-       'config-profile-help' => "ã\82¦ã\82£ã\82­ã\81¯ã\80\81ã\81\9fã\81\8fã\81\95ã\82\93ã\81®äººã\81\8cå\8f¯è\83½ã\81ªé\99\90ã\82\8aã\81\9dã\81®ã\82¦ã\82£ã\82­ã\82\92ç·¨é\9b\86ã\81§ã\81\8dã\82\8bã\81¨ã\81\8dã\80\81最も優れた働きをします。
-MediaWikiã\81§ã\81¯ã\80\81æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\82\92確èª\8dã\81\97ã\80\81ç¥\9eçµ\8c質ã\81ªã\80\81ã\82\82ã\81\97ã\81\8fã\81¯æ\82ªæ\84\8fã\82\92æ\8c\81ã\81£ã\81\9få\88©ç\94¨è\80\85ã\81\8bã\82\89ã\81®æ\90\8d害ã\82\92å·®ã\81\97æ\88»ã\81\99ã\81\93ã\81¨ã\81\8cã\80\81ç°¡å\8d\98ã\81«ã\81§ã\81\8dます。
+       'config-profile-help' => "ã\82¦ã\82£ã\82­ã\81¯ã\80\81ã\81§ã\81\8dã\82\8bã\81 ã\81\91å¤\9aã\81\8fã\81®äººã\81\8cç·¨é\9b\86ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81\99ã\82\8bã\81¨最も優れた働きをします。
+MediaWikiã\81§ã\81¯ã\80\81æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\82\92確èª\8dã\81\97ã\82\84ã\81\99ã\81\8fã\80\81ç¥\9eçµ\8c質ã\81ªã\80\81ã\81¾ã\81\9fã\81¯æ\82ªæ\84\8fã\82\92æ\8c\81ã\81£ã\81\9få\88©ç\94¨è\80\85ã\81\8bã\82\89ã\81®æ\90\8d害ã\82\92ç°¡å\8d\98ã\81«å·®ã\81\97æ\88»ã\81\9bます。
 
 しかし一方で、MediaWikiは、さらにさまざまな形態での利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。
 そこで、選択肢があります。
 
-'''{{int:config-profile-wiki}}'''は、ログインしなくても、誰でも編集できるものです。
-'''{{int:config-profile-no-anon}}'''なウィキは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。
+「'''{{int:config-profile-wiki}}'''」モデルでは、ログインしなくても、誰でも編集できます。
+「'''{{int:config-profile-no-anon}}'''」なウィキでは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。
 
-'''{{int:config-profile-fishbowl}}'''のウィキは、承認された利用者が編集でき、一方、一般の人はページ(とその履歴)を閲覧できます。
-'''{{int:config-profile-private}}'''は、承認された利用者のみがページを閲覧でき、そのグループが編集できます。
+「'''{{int:config-profile-fishbowl}}'''」シナリオでは、承認された利用者のみが編集でき、一般の人はページ (とその履歴) を閲覧できます。
+「'''{{int:config-profile-private}}'''」では、承認された利用者のみがページを閲覧でき、そのグループが編集できます。
 
 より複雑な利用者権限の設定は、インストール後に設定できます。詳細は[//www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。",
        'config-license' => '著作権とライセンス:',
@@ -10295,7 +10315,7 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
        'config-install-alreadydone' => "'''警告:''' 既にMediaWikiがインストール済みで、再びインストールし直そうとしています。
 次のページへ進んでください。",
        'config-install-begin' => '「{{int:config-continue}}」を押すと、MediaWiki のインストールを開始できます。
-変更したい設定がある場合は、「{{int:Config-back}}」を押してください。',
+変更したい設定がある場合は、「{{int:config-back}}」を押してください。',
        'config-install-step-done' => '実行',
        'config-install-step-failed' => '失敗した',
        'config-install-extensions' => '拡張機能を含む',
@@ -10313,12 +10333,12 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
        'config-install-user-missing-create' => '指定したユーザー「$1」は存在しません。
 アカウントを作成する場合は、下の「アカウント作成」をクリックしてください。',
        'config-install-tables' => 'テーブルの作成',
-       'config-install-tables-exist' => "'''警告''':MediaWikiテーブルは既に存在するようです。
-作成を飛ばします。",
+       'config-install-tables-exist' => "'''警告''': MediaWiki テーブルは既に存在するようです。
+作成を省略します。",
        'config-install-tables-failed' => "'''エラー''': テーブルの作成が、以下のエラーにより失敗しました: $1",
        'config-install-interwiki' => '既定のウィキ間テーブルの導入',
        'config-install-interwiki-list' => 'ファイル <code>interwiki.list</code> から読み取れませんでした。',
-       'config-install-interwiki-exists' => "'''警告'''ウィキ間テーブルは既に登録されているようです。
+       'config-install-interwiki-exists' => "'''警告'''ウィキ間テーブルは既に登録されているようです。
 既定のテーブルを無視します。",
        'config-install-stats' => '統計情報の初期化',
        'config-install-keys' => '秘密鍵の生成',
@@ -10828,7 +10848,7 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
 PHP 파일이 있는 곳을 우리가 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
 
 설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원본 데이터베이스에 접근하는 데 실패합니다.
-원본 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
+원본 사용자 데이터(이메일 주소, 해시한 비밀번호) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
 
 <code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
        'config-oracle-def-ts' => '기본 테이블공간:',
@@ -10907,7 +10927,7 @@ chmod a+w $3</pre>',
 이제 [$1 위키를 시작]할 수 있습니다.
 
 만약 <code>LocalSettings.php</code> 파일을 다시 만들기를 원하면 아래의 버튼을 클릭하세요.
\9d´ê²\83ì\9d\80 ì\9c\84í\82¤ì\97\90 ë¬¸ì \9cê°\80 ì\9e\88ì§\80 ì\95\8aë\8a\94 í\95\9c '''ê¶\8cì\9e¥í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤'''.",
+위키에 문제가 있지 않는 한 '''권장하지 않습니다'''.",
        'config-upgrade-done-no-regenerate' => '업그레이드가 완료되었습니다.
 
 이제 [$1 위키를 시작]할 수 있습니다.',
@@ -10984,7 +11004,7 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
        'config-optional-continue' => '더 많은 질문을 물어보세요.',
        'config-optional-skip' => '지겨워요, 그냥 위키를 설치할래요.',
        'config-profile' => '사용자 권한 프로필:',
-       'config-profile-wiki' => '평범한 위키',
+       'config-profile-wiki' => '평범한 위키', # Fuzzy
        'config-profile-no-anon' => '계정 만들기 필요',
        'config-profile-fishbowl' => '승인된 편집자만 이용 가능',
        'config-profile-private' => '비공개 위키',
@@ -11000,7 +11020,7 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
 '''{{int:config-profile-fishbowl}}''' 같은 경우는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 페이지를 볼 수 있습니다.
 '''{{int:config-profile-private}}'''는 승인된 사용자만 같은 그룹에서 편집할 수 있고 볼 수 있습니다.
 
-더 복잡한 사용자 권한을 설정하여 설치한 후 사용할 수 있도록 하려면 [//www.mediawiki.org/wiki/Manual:User_rights 관련 매뉴얼 항목]을 참고하세요.",
+더 복잡한 사용자 권한을 설정하여 설치한 후 사용할 수 있도록 하려면 [//www.mediawiki.org/wiki/Manual:User_rights 관련 매뉴얼 항목]을 참고하세요.", # Fuzzy
        'config-license' => '저작권 및 라이선스:',
        'config-license-none' => '라이선스 바닥글 없음',
        'config-license-cc-by-sa' => '크리에이티브 커먼즈 저작자표시-동일조건변경허락',
@@ -11085,7 +11105,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-install-alreadydone' => "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.
 다음 페이지에서 진행하세요.",
        'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
-그래도 바꾸는 것을 원한다면 뒤로를 누릅니다.',
+그래도 바꾸는 것을 원한다면 뒤로를 누릅니다.', # Fuzzy
        'config-install-step-done' => '완료',
        'config-install-step-failed' => '실패',
        'config-install-extensions' => '확장 기능을 포함하는 중',
@@ -12630,7 +12650,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => 'Постави ми повеќе прашања.',
        'config-optional-skip' => 'Веќе ми здосади, дај само инсталирај го викито.',
        'config-profile' => 'Профил на кориснички права:',
-       'config-profile-wiki' => 'ТÑ\80адиÑ\86ионално вики',
+       'config-profile-wiki' => 'Ð\9eÑ\82воÑ\80ено вики',
        'config-profile-no-anon' => 'Задолжително отворање сметка',
        'config-profile-fishbowl' => 'Само овластени уредници',
        'config-profile-private' => 'Приватно вики',
@@ -12640,7 +12660,7 @@ chmod a+w $3</pre>',
 Многумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот.
 Значи имате избор.
 
-'''{{int:config-profile-wiki}}''' — секој може да го уредува, дури и без најавување.
+'''{{int:config-profile-wiki}}''' — модел според кој секој може да уредува, дури и без најавување.
 Ако имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници.
 
 '''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја.
@@ -12731,7 +12751,7 @@ chmod a+w $3</pre>',
        'config-install-alreadydone' => "'''Предупредување:''' Изгледа дека веќе го имате инсталирано МедијаВики и сега сакате да го инсталирате повторно.
 Продолжете на следната страница.",
        'config-install-begin' => 'Стискајќи на „{{int:config-continue}}“ ќе ја започнете инсталацијата на МедијаВики.
-Ако сакате да направите измени во досегашното, стиснете на „Назад“.',
+Ако сакате да направите измени во досегашното, стиснете на „{{int:config-back}}“.',
        'config-install-step-done' => 'готово',
        'config-install-step-failed' => 'не успеа',
        'config-install-extensions' => 'Вклучувам додатоци',
@@ -12991,9 +13011,13 @@ $messages['ms'] = array(
        'config-desc' => 'Pemasang MediaWiki',
        'config-title' => 'Pasangan MediaWiki $1',
        'config-information' => 'Maklumat',
+       'config-localsettings-key' => 'Kunci naik taraf:',
+       'config-localsettings-badkey' => 'Kunci yang anda berikan tidak betul.',
+       'config-session-error' => 'Ralat ketika memulakan sesi: $1',
        'config-your-language' => 'Bahasa kamu:',
        'config-your-language-help' => 'Pilihkan bahasa untuk digunakan dalam proses pemasangan ini.',
        'config-wiki-language' => 'Bahasa wiki:',
+       'config-wiki-language-help' => 'Pilih bahasa utama wiki yang bakal dicipta ini.',
        'config-back' => '← Undur',
        'config-continue' => 'Teruskan →',
        'config-page-language' => 'Bahasa',
@@ -13005,8 +13029,12 @@ $messages['ms'] = array(
        'config-page-options' => 'Pilihan',
        'config-page-install' => 'Pasang',
        'config-page-complete' => 'Selesai!',
+       'config-page-restart' => 'Mulakan semula pemasangan',
+       'config-page-readme' => 'Baca saya',
+       'config-page-releasenotes' => 'Catatan keluaran',
        'config-page-copying' => 'Sedang menyalin',
        'config-page-upgradedoc' => 'Sedang menaik taraf',
+       'config-page-existingwiki' => 'Wiki sedia ada',
        'config-env-php' => 'PHP $1 dipasang.',
        'config-env-php-toolow' => 'PHP $1 dipasang.
 Bagaimanapun, MediaWiki memerlukan PHP $2 ke atas.',
@@ -14099,7 +14127,7 @@ Als u wilt kunt u de overige instellingen overslaan en de wiki nu installeren.',
        'config-optional-continue' => 'Stel me meer vragen.',
        'config-optional-skip' => 'Laat dat maar, installeer gewoon de wiki.',
        'config-profile' => 'Gebruikersrechtenprofiel:',
-       'config-profile-wiki' => 'Traditionele wiki',
+       'config-profile-wiki' => 'Open wiki',
        'config-profile-no-anon' => 'Gebruiker aanmaken verplicht',
        'config-profile-fishbowl' => 'Alleen voor geautoriseerde bewerkers',
        'config-profile-private' => 'Privéwiki',
@@ -14115,7 +14143,7 @@ Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkhei
 Het scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.
 In een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.
 
-Meer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [//www.mediawiki.org/wiki/Manual:User_rights handleiding].",
+Meer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [//www.mediawiki.org/wiki/Manual:User_rights handleiding].", # Fuzzy
        'config-license' => 'Auteursrechten en licentie:',
        'config-license-none' => 'Geen licentie in de voettekst',
        'config-license-cc-by-sa' => 'Creative Commons Naamsvermelding-Gelijk delen',
@@ -14202,7 +14230,7 @@ Mogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen n
        'config-install-alreadydone' => "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.
 Ga alstublieft door naar de volgende pagina.",
        'config-install-begin' => 'Als u nu op "{{int:config-continue}}" klikt, begint de installatie van MediaWiki.
-Als u nog wijzigingen wilt maken, klik dan op "Terug".',
+Als u nog wijzigingen wilt maken, klik dan op "Terug".', # Fuzzy
        'config-install-step-done' => 'afgerond',
        'config-install-step-failed' => 'mislukt',
        'config-install-extensions' => 'Inclusief uitbreidingen',
@@ -15569,7 +15597,7 @@ A peul adess sauté la configurassion rimanenta e instalé dlongh la wiki.",
        'config-optional-continue' => "Ciameme d'àutre chestion.",
        'config-optional-skip' => 'I son già anojà, instala mach la wiki.',
        'config-profile' => "Profil dij drit d'utent:",
-       'config-profile-wiki' => 'Wiki tradissional',
+       'config-profile-wiki' => 'Deurb wiki',
        'config-profile-no-anon' => 'A venta creé un cont',
        'config-profile-fishbowl' => 'Mach editor autorisà',
        'config-profile-private' => 'Wiki privà',
@@ -15579,7 +15607,7 @@ An MediaWiki, a l'é bel fé revisioné ij cambi recent, e buté andré minca da
 An tùit ij cas, an tanti a l'han trovà che MediaWiki a sia ùtil ant na gran varietà ëd manere, e dle vire a l'é pa bel fé convince cheidun dij vantagi dla wiki.
 Parèj a l'ha doe possibilità.
 
-Un '''{{int:config-profile-wiki}}''' a përmët a chicassìa ëd modifiché, bele sensa intré ant ël sistema.
+Ël model '''{{int:config-profile-wiki}}''' a përmët a chicassìa ëd modifiché, bele sensa intré ant ël sistema.
 Na wiki con  '''{{int:config-profile-no-anon}}''' a dà pì 'd contròl, ma a peul slontané dij contribudor casuaj.
 
 Ël senari '''{{int:config-profile-fishbowl}}''' a përmët a j'utent aprovà ëd modifiché, ma ël pùblich a peul vëdde le pàgine, comprèisa la stòria.
@@ -15668,8 +15696,8 @@ S'a conòsse nen la pòrta, cola predefinìa a l'é 11211.",
 A peulo avèj da manca ëd configurassion adissionaj, ma a peul abiliteje adess",
        'config-install-alreadydone' => "'''Avis''' A smija ch'a l'abie già instalà MediaWiki e ch'a preuva a instalelo torna.
 Për piasì, ch'a vada a la pàgina ch'a-i ven.",
-       'config-install-begin' => "An sgnacand \"{{int:config-continue}}\", a anandiërà l'istalassion ëd MediaWiki.
-S'a veul anco' fé dle modìfiche, ch'A sgnaca su andré.",
+       'config-install-begin' => 'An sgnacand "{{int:config-continue}}", a anandiërà l\'istalassion ëd MediaWiki.
+S\'a veul anco\' fé dle modìfiche, ch\'a sgnaca su "{{int:config-back}}".',
        'config-install-step-done' => 'fàit',
        'config-install-step-failed' => 'falì',
        'config-install-extensions' => "Comprende j'estension",
@@ -16639,10 +16667,23 @@ Puteți sări peste configurarea rămasă și să instalați wikiul chiar acum.'
  * @author Joetaras
  */
 $messages['roa-tara'] = array(
+       'config-desc' => "'U 'nstallatore de MediaUicchi",
+       'config-title' => 'Installazzione de MediaUicchi $1',
+       'config-information' => "'Mbormaziune",
+       'config-localsettings-key' => 'Chiave de aggiornamende:',
+       'config-page-language' => 'Lènghe',
+       'config-page-name' => 'Nome',
        'config-db-charset' => "'Nzieme de carattere d'u database",
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
        'config-charset-mysql4' => 'MySQL 4.0 backwards-compatible UTF-8',
+       'config-db-port' => "Porte d'u database:",
+       'config-db-schema' => 'Scheme pe MediaUicchi:',
+       'config-type-mysql' => 'MySQL',
+       'config-type-postgres' => 'PostgreSQL',
+       'config-type-sqlite' => 'SQLite',
+       'config-type-oracle' => 'Oracle',
+       'config-admin-email' => 'Indirizze e-mail:',
        'config-install-step-done' => 'fatte',
        'config-install-step-failed' => 'fallite',
        'config-install-extensions' => "'Ngludenne le estenziune",
@@ -17928,12 +17969,14 @@ MediaWiki kräver PHP $2 eller högre.',
        'config-diff3-bad' => 'GNU diff3 hittades inte.',
        'config-using-server' => 'Använder servernamn "<nowiki>$1</nowiki>".',
        'config-using-uri' => 'Använder server-URL "<nowiki>$1$2</nowiki>".',
+       'config-db-type' => 'Databastyp:',
        'config-db-wiki-settings' => 'Identifiera denna wiki',
        'config-db-name' => 'Databasnamn:',
        'config-db-name-oracle' => 'Databasschema:',
        'config-db-install-account' => 'Användarkonto för installation',
        'config-db-username' => 'Databas-användarnamn:',
        'config-db-password' => 'Databas-lösenord:',
+       'config-db-port' => 'Databasport:',
        'config-db-schema' => 'Schema för MediaWiki',
        'config-header-mysql' => 'MySQL-inställningar',
        'config-header-postgres' => 'PostgreSQL-inställningar',
@@ -17962,6 +18005,10 @@ Detta '''rekommenderas inte''' om du har problem med din wiki.",
        'config-upgrade-done-no-regenerate' => 'Uppgraderingen slutfördes.
 
 Du kan nu [$1 börja använda din wiki].',
+       'config-db-web-account-same' => 'Använd samma konto som för installation',
+       'config-db-web-create' => 'Skapa kontot om det inte redan finns',
+       'config-mysql-engine' => 'Lagringsmotor:',
+       'config-mysql-binary' => 'Binär',
        'config-mysql-utf8' => 'UTF-8',
        'config-site-name' => 'Namnet på wikin:',
        'config-site-name-blank' => 'Ange ett sidnamn.',
@@ -17988,7 +18035,7 @@ Ange ett annat användarnamn.',
 Du kan nu hoppa över återstående konfigurationer och installera wikin nu.',
        'config-optional-continue' => 'Ställ fler frågor till mig.',
        'config-optional-skip' => 'Jag är redan uttråkad, bara installera wiki.',
-       'config-profile-wiki' => 'Traditionell wiki',
+       'config-profile-wiki' => 'Öppen wiki',
        'config-profile-fishbowl' => 'Endast auktoriserade redigerare',
        'config-profile-private' => 'Privat wiki',
        'config-license' => 'Upphovsrätt och licens:',
@@ -18001,16 +18048,31 @@ Du kan nu hoppa över återstående konfigurationer och installera wikin nu.',
        'config-license-pd' => 'Allmän egendom',
        'config-license-cc-choose' => 'Välj en anpassad Creative Commons-licens',
        'config-email-settings' => 'E-postinställningar',
+       'config-email-watchlist' => 'Aktivera meddelanden för bevakningslistan',
+       'config-upload-settings' => 'Bild- och filuppladdningar',
        'config-upload-enable' => 'Aktivera filöverföringar',
+       'config-upload-deleted' => 'Mapp för raderade filer:',
        'config-logo' => 'Logotyp-URL:',
        'config-cc-again' => 'Välj igen...',
        'config-advanced-settings' => 'Avancerad konfiguration',
        'config-extensions' => 'Tillägg',
        'config-install-step-done' => 'klar',
        'config-install-step-failed' => 'misslyckades',
+       'config-install-database' => 'Konfigurerar databas',
+       'config-install-schema' => 'Skapar schema',
+       'config-install-user' => 'Skapar databasanvändare',
        'config-install-user-alreadyexists' => 'Användaren "$1" finns redan',
+       'config-install-user-create-failed' => 'Misslyckades att skapa användare "$1": $2',
+       'config-install-user-missing' => 'Den angivna användaren "$1" existerar inte.',
+       'config-install-tables' => 'Skapar tabeller',
+       'config-install-interwiki' => 'Lägger till standardtabell för interwiki',
        'config-install-interwiki-list' => 'Kunde inte läsa filen <code>interwiki.list</code>.',
+       'config-install-stats' => 'Initierar statistik',
+       'config-install-keys' => 'Genererar hemliga nycklar',
        'config-insecure-keys' => "'''Varning:''' {{PLURAL:$2|En säkerhetsnyckel|Säkerhetsnycklar}} ($1) som generades under installationen är inte helt {{PLURAL:$2|säker|säkra}} . Överväg att ändra {{PLURAL:$2|den|dem}} manuellt.",
+       'config-install-sysop' => 'Skapar administratörskonto',
+       'config-install-mainpage' => 'Skapa huvudsida med standardinnehåll',
+       'config-install-extension-tables' => 'Skapar tabeller för aktiverade tillägg',
        'config-install-done' => "'''Grattis!'''
 Du har installerat MediaWiki.
 
@@ -18033,10 +18095,10 @@ När det är klart, kan du '''[$2 gå in på din wiki]'''.",
        'mainpagedocfooter' => 'Information om hur wiki-programvaran används finns i [//meta.wikimedia.org/wiki/Help:Contents användarguiden].
 
 == Att komma igång ==
-
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista över konfigurationsinställningar]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mail list]', # Fuzzy
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mail list]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]',
 );
 
 /** Swahili (Kiswahili)
@@ -20004,7 +20066,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => '多问我一些问题吧。',
        'config-optional-skip' => '我已经不耐烦了,赶紧安装我的wiki。',
        'config-profile' => '用户权限配置:',
-       'config-profile-wiki' => '传统wiki',
+       'config-profile-wiki' => '开放的wiki',
        'config-profile-no-anon' => '需要注册帐号',
        'config-profile-fishbowl' => '编辑受限',
        'config-profile-private' => '非公开wiki',
@@ -20081,7 +20143,7 @@ GNU自由文档许可证是维基百科曾经使用过的许可证,并迄今
 
 您可能要对它们进行额外的配置,但您现在可以启用它们。',
        'config-install-alreadydone' => "'''警告:'''您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。",
-       'config-install-begin' => '点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击后退。',
+       'config-install-begin' => '点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击“{{int:config-back}}”。',
        'config-install-step-done' => '完成',
        'config-install-step-failed' => '失败',
        'config-install-extensions' => '正在启用扩展',
@@ -20141,7 +20203,8 @@ $3
 == 入门 ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置设置列表]
 * [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans MediaWiki常见问题]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]', # Fuzzy
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources 本地化MediaWiki到您的语言]',
 );
 
 /** Traditional Chinese (中文(繁體)‎)
index 7068528..da638de 100644 (file)
@@ -203,10 +203,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'revision',      'rev_sha1',         'patch-rev_sha1.sql' ),
                        array( 'addField', 'archive',       'ar_sha1',          'patch-ar_sha1.sql' ),
                        array( 'addIndex', 'page', 'page_redirect_namespace_len', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField',      'uploadstash',  'us_chunk_inx',         'patch-uploadstash_chunk.sql' ),
                        array( 'addfield', 'job',           'job_timestamp',    'patch-jobs-add-timestamp.sql' ),
-                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
 
                        // 1.20
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
@@ -228,6 +226,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'job',           'job_attempts',       'patch-job_attempts.sql' ),
                        array( 'doEnableProfiling' ),
                        array( 'addField', 'uploadstash',      'us_props',      'patch-uploadstash-us_props.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
                );
        }
 
index 86b52d6..8f43a6d 100644 (file)
@@ -59,12 +59,10 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1_field.sql' ),
                        array( 'doRemoveNotNullEmptyDefaults2' ),
                        array( 'addIndex', 'page', 'i03', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField', 'uploadstash', 'us_chunk_inx', 'patch-us_chunk_inx_field.sql' ),
                        array( 'addField', 'job', 'job_timestamp', 'patch-job_timestamp_field.sql' ),
                        array( 'addIndex', 'job', 'i02', 'patch-job_timestamp_index.sql' ),
                        array( 'doPageRestrictionsPKUKFix' ),
-                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
 
                        //1.20
                        array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
@@ -84,6 +82,8 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addField', 'job',           'job_token',         'patch-job_token.sql' ),
                        array( 'addField', 'job',           'job_attempts',       'patch-job_attempts.sql' ),
                        array( 'addField', 'uploadstash',      'us_props',      'patch-uploadstash-us_props.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
 
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
index 1d6bca0..b5cd640 100644 (file)
@@ -82,10 +82,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'revision',      'rev_sha1',         'patch-rev_sha1.sql' ),
                        array( 'addField', 'archive',       'ar_sha1',          'patch-ar_sha1.sql' ),
                        array( 'addIndex', 'page', 'page_redirect_namespace_len', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField',      'uploadstash',  'us_chunk_inx',         'patch-uploadstash_chunk.sql' ),
                        array( 'addfield', 'job',           'job_timestamp',    'patch-jobs-add-timestamp.sql' ),
-                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ug_group-length-increase.sql' ),
 
                        // 1.20
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
@@ -108,6 +106,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'job',           'job_attempts',      'patch-job_attempts.sql' ),
                        array( 'doEnableProfiling' ),
                        array( 'addField', 'uploadstash',      'us_props',      'patch-uploadstash-us_props.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
                );
        }
 
index eacf9a8..849eb86 100644 (file)
  * schema updates etc, which aren't wiki-related)
  */
 class Interwiki {
-
        // Cache - removes oldest entry when it hits limit
        protected static $smCache = array();
        const CACHE_LIMIT = 100; // 0 means unlimited, any other value is max number of entries.
 
        protected $mPrefix, $mURL, $mAPI, $mWikiID, $mLocal, $mTrans;
 
-       public function __construct( $prefix = null, $url = '', $api = '', $wikiId = '', $local = 0, $trans = 0 ) {
+       public function __construct( $prefix = null, $url = '', $api = '', $wikiId = '', $local = 0,
+               $trans = 0
+       ) {
                $this->mPrefix = $prefix;
                $this->mURL = $url;
                $this->mAPI = $api;
@@ -46,8 +47,8 @@ class Interwiki {
        /**
         * Check whether an interwiki prefix exists
         *
-        * @param $prefix String: interwiki prefix to use
-        * @return Boolean: whether it exists
+        * @param string $prefix Interwiki prefix to use
+        * @return bool Whether it exists
         */
        static public function isValidInterwiki( $prefix ) {
                $result = self::fetch( $prefix );
@@ -57,28 +58,28 @@ class Interwiki {
        /**
         * Fetch an Interwiki object
         *
-        * @param $prefix String: interwiki prefix to use
+        * @param string $prefix Interwiki prefix to use
         * @return Interwiki|null|bool
         */
        static public function fetch( $prefix ) {
                global $wgContLang;
-               if( $prefix == '' ) {
+               if ( $prefix == '' ) {
                        return null;
                }
                $prefix = $wgContLang->lc( $prefix );
-               if( isset( self::$smCache[$prefix] ) ) {
+               if ( isset( self::$smCache[$prefix] ) ) {
                        return self::$smCache[$prefix];
                }
                global $wgInterwikiCache;
-               if( $wgInterwikiCache ) {
+               if ( $wgInterwikiCache ) {
                        $iw = Interwiki::getInterwikiCached( $prefix );
                } else {
                        $iw = Interwiki::load( $prefix );
-                       if( !$iw ) {
+                       if ( !$iw ) {
                                $iw = false;
                        }
                }
-               if( self::CACHE_LIMIT && count( self::$smCache ) >= self::CACHE_LIMIT ) {
+               if ( self::CACHE_LIMIT && count( self::$smCache ) >= self::CACHE_LIMIT ) {
                        reset( self::$smCache );
                        unset( self::$smCache[key( self::$smCache )] );
                }
@@ -91,7 +92,7 @@ class Interwiki {
         *
         * @note More logic is explained in DefaultSettings.
         *
-        * @param $prefix String: interwiki prefix
+        * @param string $prefix Interwiki prefix
         * @return Interwiki object
         */
        protected static function getInterwikiCached( $prefix ) {
@@ -114,19 +115,19 @@ class Interwiki {
         *
         * @note More logic is explained in DefaultSettings.
         *
-        * @param $prefix String: database key
-        * @return String: the entry
+        * @param string $prefix Database key
+        * @return string The interwiki entry
         */
        protected static function getInterwikiCacheEntry( $prefix ) {
                global $wgInterwikiCache, $wgInterwikiScopes, $wgInterwikiFallbackSite;
                static $db, $site;
 
                wfDebug( __METHOD__ . "( $prefix )\n" );
-               if( !$db ) {
+               if ( !$db ) {
                        $db = CdbReader::open( $wgInterwikiCache );
                }
                /* Resolve site name */
-               if( $wgInterwikiScopes >= 3 && !$site ) {
+               if ( $wgInterwikiScopes >= 3 && !$site ) {
                        $site = $db->get( '__sites:' . wfWikiID() );
                        if ( $site == '' ) {
                                $site = $wgInterwikiFallbackSite;
@@ -146,15 +147,14 @@ class Interwiki {
                        $value = '';
                }
 
-
                return $value;
        }
 
        /**
         * Load the interwiki, trying first memcached then the DB
         *
-        * @param $prefix string The interwiki prefix
-        * @return Boolean: the prefix is valid
+        * @param string $prefix The interwiki prefix
+        * @return bool If $prefix is valid
         */
        protected static function load( $prefix ) {
                global $wgMemc, $wgInterwikiExpiry;
@@ -172,9 +172,9 @@ class Interwiki {
                        }
                }
 
-               if( $iwData && is_array( $iwData ) ) { // is_array is hack for old keys
+               if ( $iwData && is_array( $iwData ) ) { // is_array is hack for old keys
                        $iw = Interwiki::loadFromArray( $iwData );
-                       if( $iw ) {
+                       if ( $iw ) {
                                return $iw;
                        }
                }
@@ -203,11 +203,11 @@ class Interwiki {
        /**
         * Fill in member variables from an array (e.g. memcached result, Database::fetchRow, etc)
         *
-        * @param $mc array Associative array: row from the interwiki table
-        * @return Boolean|Interwiki whether everything was there
+        * @param array $mc Associative array: row from the interwiki table
+        * @return Interwiki|bool Interwiki object or false if $mc['iw_url'] is not set
         */
        protected static function loadFromArray( $mc ) {
-               if( isset( $mc['iw_url'] ) ) {
+               if ( isset( $mc['iw_url'] ) ) {
                        $iw = new Interwiki();
                        $iw->mURL = $mc['iw_url'];
                        $iw->mLocal = isset( $mc['iw_local'] ) ? $mc['iw_local'] : 0;
@@ -223,8 +223,8 @@ class Interwiki {
        /**
         * Fetch all interwiki prefixes from interwiki cache
         *
-        * @param $local null|string If not null, limits output to local/non-local interwikis
-        * @return Array List of prefixes
+        * @param null|string $local If not null, limits output to local/non-local interwikis
+        * @return array List of prefixes
         * @since 1.19
         */
        protected static function getAllPrefixesCached( $local ) {
@@ -232,11 +232,11 @@ class Interwiki {
                static $db, $site;
 
                wfDebug( __METHOD__ . "()\n" );
-               if( !$db ) {
+               if ( !$db ) {
                        $db = CdbReader::open( $wgInterwikiCache );
                }
                /* Resolve site name */
-               if( $wgInterwikiScopes >= 3 && !$site ) {
+               if ( $wgInterwikiScopes >= 3 && !$site ) {
                        $site = $db->get( '__sites:' . wfWikiID() );
                        if ( $site == '' ) {
                                $site = $wgInterwikiFallbackSite;
@@ -257,11 +257,11 @@ class Interwiki {
 
                $data = array();
 
-               foreach( $sources as $source ) {
+               foreach ( $sources as $source ) {
                        $list = $db->get( "__list:{$source}" );
                        foreach ( explode( ' ', $list ) as $iw_prefix ) {
                                $row = $db->get( "{$source}:{$iw_prefix}" );
-                               if( !$row ) {
+                               if ( !$row ) {
                                        continue;
                                }
 
@@ -273,8 +273,8 @@ class Interwiki {
 
                                $data[$iw_prefix] = array(
                                        'iw_prefix' => $iw_prefix,
-                                       'iw_url'    => $iw_url,
-                                       'iw_local'  => $iw_local,
+                                       'iw_url' => $iw_url,
+                                       'iw_local' => $iw_local,
                                );
                        }
                }
@@ -287,8 +287,8 @@ class Interwiki {
        /**
         * Fetch all interwiki prefixes from DB
         *
-        * @param $local string|null If not null, limits output to local/non-local interwikis
-        * @return Array List of prefixes
+        * @param string|null $local If not null, limits output to local/non-local interwikis
+        * @return array List of prefixes
         * @since 1.19
         */
        protected static function getAllPrefixesDB( $local ) {
@@ -318,8 +318,8 @@ class Interwiki {
        /**
         * Returns all interwiki prefixes
         *
-        * @param $local string|null If set, limits output to local/non-local interwikis
-        * @return Array List of prefixes
+        * @param string|null $local If set, limits output to local/non-local interwikis
+        * @return array List of prefixes
         * @since 1.19
         */
        public static function getAllPrefixes( $local = null ) {
@@ -335,15 +335,15 @@ class Interwiki {
        /**
         * Get the URL for a particular title (or with $1 if no title given)
         *
-        * @param $title String: what text to put for the article name
-        * @return String: the URL
+        * @param string $title What text to put for the article name
+        * @return string The URL
         * @note Prior to 1.19 The getURL with an argument was broken.
         *       If you if you use this arg in an extension that supports MW earlier
         *       than 1.19 please wfUrlencode and substitute $1 on your own.
         */
        public function getURL( $title = null ) {
                $url = $this->mURL;
-               if( $title !== null ) {
+               if ( $title !== null ) {
                        $url = str_replace( "$1", wfUrlencode( $title ), $url );
                }
                return $url;
@@ -352,7 +352,7 @@ class Interwiki {
        /**
         * Get the API URL for this wiki
         *
-        * @return String: the URL
+        * @return string The URL
         */
        public function getAPI() {
                return $this->mAPI;
@@ -361,7 +361,7 @@ class Interwiki {
        /**
         * Get the DB name for this wiki
         *
-        * @return String: the DB name
+        * @return string The DB name
         */
        public function getWikiID() {
                return $this->mWikiID;
@@ -371,7 +371,7 @@ class Interwiki {
         * Is this a local link from a sister project, or is
         * it something outside, like Google
         *
-        * @return Boolean
+        * @return bool
         */
        public function isLocal() {
                return $this->mLocal;
@@ -381,7 +381,7 @@ class Interwiki {
         * Can pages from this wiki be transcluded?
         * Still requires $wgEnableScaryTransclusion
         *
-        * @return Boolean
+        * @return bool
         */
        public function isTranscludable() {
                return $this->mTrans;
@@ -390,7 +390,7 @@ class Interwiki {
        /**
         * Get the name for the interwiki site
         *
-        * @return String
+        * @return string
         */
        public function getName() {
                $msg = wfMessage( 'interwiki-name-' . $this->mPrefix )->inContentLanguage();
@@ -400,7 +400,7 @@ class Interwiki {
        /**
         * Get a description for this interwiki
         *
-        * @return String
+        * @return string
         */
        public function getDescription() {
                $msg = wfMessage( 'interwiki-desc-' . $this->mPrefix )->inContentLanguage();
@@ -409,8 +409,8 @@ class Interwiki {
 
        /**
         * Return the list of interwiki fields that should be selected to create
-        * a new interwiki object.
-        * @return array
+        * a new Interwiki object.
+        * @return string[]
         */
        public static function selectFields() {
                return array(
index 927ca4e..5f3cdf5 100644 (file)
@@ -242,6 +242,13 @@ abstract class Job {
                                if ( $paramString != '' ) {
                                        $paramString .= ' ';
                                }
+
+                               if ( is_array( $value ) ) {
+                                       $value = "array(" . count( $value ) . ")";
+                               } else if ( is_object( $value ) && !method_exists( $value, '__toString' ) ) {
+                                       $value = "object(" . get_class( $value ) . ")";
+                               }
+
                                $paramString .= "$key=$value";
                        }
                }
index ae80370..17f6648 100644 (file)
@@ -49,19 +49,19 @@ abstract class JobQueue {
        /**
         * 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. This might be
-        *              useful for improving concurrency depending on the queue storage medium.
-        *   claimTTL : If supported, the queue will recycle jobs that have been popped
-        *              but not acknowledged as completed after this many seconds.
+        *   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. This might be
+        *                useful for improving concurrency depending on the queue storage medium.
+        *   claimTTL : If supported, the queue will recycle jobs that have been popped
+        *                but not acknowledged as completed after this many seconds.
         *
         * Queue classes should throw an exception if they do not support the options given.
         *
@@ -153,12 +153,28 @@ abstract class JobQueue {
        abstract protected function doGetAcquiredCount();
 
        /**
-        * Push a batch of jobs into the queue
+        * Push a single jobs into the queue.
+        * This does not require $wgJobClasses to be set for the given job type.
+        *
+        * @param $jobs Job|Array
+        * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
+        * @throws MWException
+        * @return bool Returns false on failure
+        */
+       final public function push( $jobs, $flags = 0 ) {
+               $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+
+               return $this->batchPush( $jobs, $flags );
+       }
+
+       /**
+        * Push a batch of jobs into the queue.
+        * This does not require $wgJobClasses to be set for the given job type.
         *
         * @param $jobs array List of Jobs
         * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
         * @throws MWException
-        * @return bool
+        * @return bool Returns false on failure
         */
        final public function batchPush( array $jobs, $flags = 0 ) {
                foreach ( $jobs as $job ) {
@@ -179,7 +195,8 @@ abstract class JobQueue {
        abstract protected function doBatchPush( array $jobs, $flags );
 
        /**
-        * Pop a job off of the queue
+        * Pop a job off of the queue.
+        * This requires $wgJobClasses to be set for the given job type.
         *
         * @return Job|bool Returns false on failure
         */
index 2917d48..1c9c8a7 100644 (file)
@@ -33,6 +33,22 @@ class JobQueueDB extends JobQueue {
        const MAX_AGE_PRUNE   = 604800; // integer; seconds a job can live once claimed
        const MAX_ATTEMPTS    = 3; // integer; number of times to try a job
        const MAX_JOB_RANDOM  = 2147483647; // integer; 2^31 - 1, used for job_random
+       const MAX_OFFSET      = 255; // integer; maximum number of rows to skip
+
+       protected $cluster = false; // string; name of an external DB cluster
+
+       /**
+        * Additional parameters include:
+        *   - cluster : The name of an external cluster registered via LBFactory.
+        *               If not specified, the primary DB cluster for the wiki will be used.
+        *               This can be overridden with a custom cluster so that DB handles will
+        *               be retrieved via LBFactory::getExternalLB() and getConnection().
+        * @param $params array
+        */
+       protected function __construct( array $params ) {
+               parent::__construct( $params );
+               $this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
+       }
 
        /**
         * @see JobQueue::doIsEmpty()
@@ -50,7 +66,8 @@ class JobQueueDB extends JobQueue {
                        return false;
                }
 
-               $found = $this->getSlaveDB()->selectField( // unclaimed job
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $found = $dbr->selectField( // unclaimed job
                        'job', '1', array( 'job_cmd' => $this->type, 'job_token' => '' ), __METHOD__
                );
                $wgMemc->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
@@ -72,7 +89,7 @@ class JobQueueDB extends JobQueue {
                        return $size;
                }
 
-               $dbr = $this->getSlaveDB();
+               list( $dbr, $scope ) = $this->getSlaveDB();
                $size = (int)$dbr->selectField( 'job', 'COUNT(*)',
                        array( 'job_cmd' => $this->type, 'job_token' => '' ),
                        __METHOD__
@@ -96,7 +113,7 @@ class JobQueueDB extends JobQueue {
                        return $count;
                }
 
-               $dbr = $this->getSlaveDB();
+               list( $dbr, $scope ) = $this->getSlaveDB();
                $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
                        array( 'job_cmd' => $this->type, "job_token !={$dbr->addQuotes('')}" ),
                        __METHOD__
@@ -115,7 +132,7 @@ class JobQueueDB extends JobQueue {
         */
        protected function doBatchPush( array $jobs, $flags ) {
                if ( count( $jobs ) ) {
-                       $dbw = $this->getMasterDB();
+                       list( $dbw, $scope ) = $this->getMasterDB();
 
                        $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
                        $rowList = array(); // list of jobs for jobs that are are not de-duplicated
@@ -134,7 +151,7 @@ class JobQueueDB extends JobQueue {
                        $ttl    = self::CACHE_TTL_LONG;
 
                        $dbw->onTransactionIdle(
-                               function() use ( $dbw, $rowSet, $rowList, $atomic, $key, $ttl
+                               function() use ( $dbw, $rowSet, $rowList, $atomic, $key, $ttl, $scope
                        ) {
                                global $wgMemc;
 
@@ -164,6 +181,8 @@ class JobQueueDB extends JobQueue {
                                                $dbw->insert( 'job', $rowBatch, __METHOD__ );
                                        }
                                        wfIncrStats( 'job-insert', count( $rows ) );
+                                       wfIncrStats( 'job-insert-duplicate',
+                                               count( $rowSet ) + count( $rowList ) - count( $rows ) );
                                } catch ( DBError $e ) {
                                        if ( $atomic ) {
                                                $dbw->rollback( __METHOD__ );
@@ -192,7 +211,7 @@ class JobQueueDB extends JobQueue {
                        return false; // queue is empty
                }
 
-               $dbw = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
 
                $uuid = wfRandomString( 32 ); // pop attempt
@@ -209,9 +228,6 @@ class JobQueueDB extends JobQueue {
                                $rand = mt_rand( 0, self::MAX_JOB_RANDOM ); // encourage concurrent UPDATEs
                                $gte  = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
                                $row  = $this->claimRandom( $uuid, $rand, $gte );
-                               if ( !$row ) { // need to try the other direction
-                                       $row = $this->claimRandom( $uuid, $rand, !$gte );
-                               }
                        }
                        // Check if we found a row to reserve...
                        if ( !$row ) {
@@ -231,6 +247,7 @@ class JobQueueDB extends JobQueue {
                        $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
@@ -248,23 +265,55 @@ class JobQueueDB extends JobQueue {
         * @return Row|false
         */
        protected function claimRandom( $uuid, $rand, $gte ) {
-               $dbw  = $this->getMasterDB();
-               $ineq = $gte ? '>=' : '<=';
+               global $wgMemc;
+
+               list( $dbw, $scope ) = $this->getMasterDB();
+               // Check cache to see if the queue has <= OFFSET items
+               $tinyQueue = $wgMemc->get( $this->getCacheKey( 'small' ) );
 
                $row = false; // the row acquired
+               $invertedDirection = false; // whether one job_random direction was already scanned
                // This uses a replication safe method for acquiring jobs. One could use UPDATE+LIMIT
                // instead, but that either uses ORDER BY (in which case it deadlocks in MySQL) or is
                // not replication safe. Due to http://bugs.mysql.com/bug.php?id=6980, subqueries cannot
                // be used here with MySQL.
                do {
-                       $row = $dbw->selectRow( 'job', '*', // find a random job
-                               array(
-                                       'job_cmd'   => $this->type,
-                                       'job_token' => '',
-                                       "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
-                               __METHOD__
-                               // Bug 42614: "ORDER BY job_random" causes slowness on mysql for some reason
-                       );
+                       if ( $tinyQueue ) { // queue has <= MAX_OFFSET rows
+                               // For small queues, using OFFSET will overshoot and return no rows more often.
+                               // Instead, this uses job_random to pick a row (possibly checking both directions).
+                               $ineq = $gte ? '>=' : '<=';
+                               $dir  = $gte ? 'ASC' : 'DESC';
+                               $row  = $dbw->selectRow( 'job', '*', // find a random job
+                                       array(
+                                               'job_cmd'   => $this->type,
+                                               'job_token' => '', // unclaimed
+                                               "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
+                                       __METHOD__,
+                                       array( 'ORDER BY' => "job_random {$dir}" )
+                               );
+                               if ( !$row && !$invertedDirection ) {
+                                       $gte = !$gte;
+                                       $invertedDirection = true;
+                                       continue; // try the other direction
+                               }
+                       } else { // table *may* have >= MAX_OFFSET rows
+                               // Bug 42614: "ORDER BY job_random" with a job_random inequality causes high CPU
+                               // in MySQL if there are many rows for some reason. This uses a small OFFSET
+                               // instead of job_random for reducing excess claim retries.
+                               $row = $dbw->selectRow( 'job', '*', // find a random job
+                                       array(
+                                               'job_cmd'   => $this->type,
+                                               'job_token' => '', // unclaimed
+                                       ),
+                                       __METHOD__,
+                                       array( 'OFFSET' => mt_rand( 0, self::MAX_OFFSET ) )
+                               );
+                               if ( !$row ) {
+                                       $tinyQueue = true; // we know the queue must have <= MAX_OFFSET rows
+                                       $wgMemc->set( $this->getCacheKey( 'small' ), 1, 30 );
+                                       continue; // use job_random
+                               }
+                       }
                        if ( $row ) { // claim the job
                                $dbw->update( 'job', // update by PK
                                        array(
@@ -294,7 +343,7 @@ class JobQueueDB extends JobQueue {
         * @return Row|false
         */
        protected function claimOldest( $uuid ) {
-               $dbw  = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
 
                $row = false; // the row acquired
                do {
@@ -355,7 +404,7 @@ class JobQueueDB extends JobQueue {
         */
        protected function recycleStaleJobs() {
                $now   = time();
-               $dbw   = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                $count = 0; // affected rows
 
                if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
@@ -390,6 +439,7 @@ class JobQueueDB extends JobQueue {
                                        __METHOD__
                                );
                                $count += $dbw->affectedRows();
+                               wfIncrStats( 'job-recycle', $dbw->affectedRows() );
                        }
                }
 
@@ -428,7 +478,7 @@ class JobQueueDB extends JobQueue {
                        throw new MWException( "Job of type '{$job->getType()}' has no ID." );
                }
 
-               $dbw = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
 
                // Delete a row with a single DELETE without holding row locks over RTTs...
@@ -457,7 +507,8 @@ class JobQueueDB extends JobQueue {
                // 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.
-               $this->getMasterDB()->onTransactionIdle( function() use ( $params, $key ) {
+               list( $dbw, $scope ) = $this->getMasterDB();
+               $dbw->onTransactionIdle( function() use ( $params, $key, $scope ) {
                        global $wgMemc;
 
                        $timestamp = $wgMemc->get( $key ); // current last timestamp of this job
@@ -505,17 +556,34 @@ class JobQueueDB extends JobQueue {
        }
 
        /**
-        * @return DatabaseBase
+        * @return Array (DatabaseBase, ScopedCallback)
         */
        protected function getSlaveDB() {
-               return wfGetDB( DB_SLAVE, array(), $this->wiki );
+               return $this->getDB( DB_SLAVE );
        }
 
        /**
-        * @return DatabaseBase
+        * @return Array (DatabaseBase, ScopedCallback)
         */
        protected function getMasterDB() {
-               return wfGetDB( DB_MASTER, array(), $this->wiki );
+               return $this->getDB( DB_MASTER );
+       }
+
+       /**
+        * @param $index integer (DB_SLAVE/DB_MASTER)
+        * @return Array (DatabaseBase, ScopedCallback)
+        */
+       protected function getDB( $index ) {
+               $lb = ( $this->cluster !== false )
+                       ? wfGetLBFactory()->getExternalLB( $this->cluster, $this->wiki )
+                       : wfGetLB( $this->wiki );
+               $conn = $lb->getConnection( $index, array(), $this->wiki );
+               return array(
+                       $conn,
+                       new ScopedCallback( function() use ( $lb, $conn ) {
+                               $lb->reuseConnection( $conn );
+                       } )
+               );
        }
 
        /**
@@ -523,7 +591,7 @@ class JobQueueDB extends JobQueue {
         * @return array
         */
        protected function insertFields( Job $job ) {
-               $dbw = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                return array(
                        // Fields that describe the nature of the job
                        'job_cmd'       => $job->getType(),
index 10fe51c..cf0215b 100644 (file)
@@ -31,16 +31,24 @@ class JobQueueGroup {
        /** @var Array */
        protected static $instances = array();
 
+       /** @var ProcessCacheLRU */
+       protected $cache;
+
        protected $wiki; // string; wiki ID
 
-       const TYPE_DEFAULT = 1; // integer; job not in $wgJobTypesExcludedFromDefaultQueue
+       const TYPE_DEFAULT = 1; // integer; jobs popped by default
        const TYPE_ANY     = 2; // integer; any job
 
+       const USE_CACHE = 1; // integer; use process cache
+
+       const PROC_CACHE_TTL = 15; // integer; seconds
+
        /**
         * @param $wiki string Wiki ID
         */
        protected function __construct( $wiki ) {
                $this->wiki = $wiki;
+               $this->cache = new ProcessCacheLRU( 1 );
        }
 
        /**
@@ -55,6 +63,15 @@ class JobQueueGroup {
                return self::$instances[$wiki];
        }
 
+       /**
+        * Destroy the singleton instances
+        *
+        * @return void
+        */
+       public static function destroySingletons() {
+               self::$instances = array();
+       }
+
        /**
         * @param $type string
         * @return JobQueue Job queue object for a given queue type
@@ -73,7 +90,8 @@ class JobQueueGroup {
        }
 
        /**
-        * Insert jobs into the respective queues of with the belong
+        * Insert jobs into the respective queues of with the belong.
+        * This inserts the jobs into the queue specified by $wgJobTypeConf.
         *
         * @param $jobs Job|array A single Job or a list of Jobs
         * @throws MWException
@@ -93,30 +111,49 @@ class JobQueueGroup {
 
                $ok = true;
                foreach ( $jobsByType as $type => $jobs ) {
-                       if ( !$this->get( $type )->batchPush( $jobs ) ) {
+                       if ( !$this->get( $type )->push( $jobs ) ) {
                                $ok = false;
                        }
                }
 
+               if ( $this->cache->has( 'queues-ready', 'list' ) ) {
+                       $list = $this->cache->get( 'queues-ready', 'list' );
+                       if ( count( array_diff( array_keys( $jobsByType ), $list ) ) ) {
+                               $this->cache->clear( 'queues-ready' );
+                       }
+               }
+
                return $ok;
        }
 
        /**
         * Pop a job off one of the job queues
         *
-        * @param $type integer JobQueueGroup::TYPE_* constant
+        * @param $queueType integer JobQueueGroup::TYPE_* constant
+        * @param $flags integer Bitfield of JobQueueGroup::USE_* constants
         * @return Job|bool Returns false on failure
         */
-       public function pop( $type = self::TYPE_DEFAULT ) {
-               $types = ( $type == self::TYPE_DEFAULT )
-                       ? $this->getDefaultQueueTypes()
-                       : $this->getQueueTypes();
+       public function pop( $queueType = self::TYPE_DEFAULT, $flags = 0 ) {
+               if ( $flags & self::USE_CACHE ) {
+                       if ( !$this->cache->has( 'queues-ready', 'list', self::PROC_CACHE_TTL ) ) {
+                               $this->cache->set( 'queues-ready', 'list', $this->getQueuesWithJobs() );
+                       }
+                       $types = $this->cache->get( 'queues-ready', 'list' );
+               } else {
+                       $types = $this->getQueuesWithJobs();
+               }
+
+               if ( $queueType == self::TYPE_DEFAULT ) {
+                       $types = array_intersect( $types, $this->getDefaultQueueTypes() );
+               }
                shuffle( $types ); // avoid starvation
 
                foreach ( $types as $type ) { // for each queue...
                        $job = $this->get( $type )->pop();
-                       if ( $job ) {
-                               return $job; // found
+                       if ( $job ) { // found
+                               return $job;
+                       } else { // not found
+                               $this->cache->clear( 'queues-ready' );
                        }
                }
 
@@ -178,4 +215,17 @@ class JobQueueGroup {
                }
                return $types;
        }
+
+       /**
+        * @return Array List of default job types that have non-empty queues
+        */
+       public function getDefaultQueuesWithJobs() {
+               $types = array();
+               foreach ( $this->getDefaultQueueTypes() as $type ) {
+                       if ( !$this->get( $type )->isEmpty() ) {
+                               $types[] = $type;
+                       }
+               }
+               return $types;
+       }
 }
index 4996984..b4ea27d 100644 (file)
@@ -42,6 +42,7 @@ class NullJob extends Job {
                if ( !isset( $this->params['usleep'] ) ) {
                        $this->params['usleep'] = 0;
                }
+               $this->removeDuplicates = !empty( $this->params['removeDuplicates'] );
        }
 
        public function run() {
index 4ebbc49..76c5b6a 100644 (file)
@@ -57,6 +57,7 @@ class CSSJanus {
                'lookahead_not_open_brace' => null,
                'lookahead_not_closing_paren' => null,
                'lookahead_for_closing_paren' => null,
+               'lookahead_not_letter' => '(?![a-zA-Z])',
                'lookbehind_not_letter' => '(?<![a-zA-Z])',
                'chars_within_selector' => '[^\}]*?',
                'noflip_annotation' => '\/\*\s*@noflip\s*\*\/',
@@ -104,8 +105,8 @@ class CSSJanus {
                $patterns['noflip_class'] = "/({$patterns['noflip_annotation']}{$patterns['chars_within_selector']}})/i";
                $patterns['direction_ltr'] = "/({$patterns['direction']})ltr/i";
                $patterns['direction_rtl'] = "/({$patterns['direction']})rtl/i";
-               $patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
-               $patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
+               $patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_letter']}{$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
+               $patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_letter']}{$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
                $patterns['left_in_url'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_for_closing_paren']}/i";
                $patterns['right_in_url'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_for_closing_paren']}/i";
                $patterns['ltr_in_url'] = "/{$patterns['lookbehind_not_letter']}(ltr){$patterns['lookahead_for_closing_paren']}/i";
index 1f94b43..ed9aa5a 100644 (file)
@@ -442,8 +442,11 @@ class ManualLogEntry extends LogEntryBase {
                        $this->timestamp = wfTimestampNow();
                }
 
+               # Trim spaces on user supplied text
+               $comment = trim( $this->getComment() );
+
                # Truncate for whole multibyte characters.
-               $comment = $wgContLang->truncate( $this->getComment(), 255 );
+               $comment = $wgContLang->truncate( $comment, 255 );
 
                $data = array(
                        'log_id' => $id,
index 3029925..4f699f1 100644 (file)
@@ -891,9 +891,11 @@ class DeleteLogFormatter extends LogFormatter {
                $params = parent::getMessageParameters();
                $subtype = $this->entry->getSubtype();
                if ( in_array( $subtype, array( 'event', 'revision' ) ) ) {
+                       // $params[3] here is 'revision' for page revisions, 'oldimage' for file versions, or a comma-separated list of log_ids for log entries.
+                       // $subtype here is 'revision' for page revisions and file versions, or 'event' for log entries.
                        if (
-                               ($subtype === 'event' && count( $params ) === 6 ) ||
-                               ($subtype === 'revision' && isset( $params[3] ) && $params[3] === 'revision' )
+                               ( $subtype === 'event' && count( $params ) === 6 ) ||
+                               ( $subtype === 'revision' && isset( $params[3] ) && ( $params[3] === 'revision' || $params[3] === 'oldimage' ) )
                        ) {
                                $paramStart = $subtype === 'revision' ? 4 : 3;
 
index 07238a0..5854e99 100644 (file)
@@ -421,6 +421,9 @@ class LogPage {
                        $comment = '';
                }
 
+               # Trim spaces on user supplied text
+               $comment = trim( $comment );
+
                # Truncate for whole multibyte characters.
                $comment = $wgContLang->truncate( $comment, 255 );
 
index 1a0de21..6c558ce 100644 (file)
 class APCBagOStuff extends BagOStuff {
        /**
         * @param $key string
+        * @param $casToken[optional] int
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = apc_fetch( $key );
 
+               $casToken = $val;
+
                if ( is_string( $val ) ) {
                        if ( $this->isInteger( $val ) ) {
                                $val = intval( $val );
@@ -61,6 +64,18 @@ class APCBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               // APC's CAS functions only work on integers
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -72,6 +87,17 @@ class APCBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
        public function incr( $key, $value = 1 ) {
                return apc_inc( $key, $value );
        }
@@ -79,19 +105,4 @@ class APCBagOStuff extends BagOStuff {
        public function decr( $key, $value = 1 ) {
                return apc_dec( $key, $value );
        }
-
-       /**
-        * @return Array
-        */
-       public function keys() {
-               $info = apc_cache_info( 'user' );
-               $list = $info['cache_list'];
-               $keys = array();
-
-               foreach ( $list as $entry ) {
-                       $keys[] = $entry['info'];
-               }
-
-               return $keys;
-       }
 }
index 7bbaff9..03b0d5b 100644 (file)
@@ -56,9 +56,10 @@ abstract class BagOStuff {
        /**
         * Get an item with the given key. Returns false if it does not exist.
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return mixed Returns false on failure
         */
-       abstract public function get( $key );
+       abstract public function get( $key, &$casToken = null );
 
        /**
         * Set an item.
@@ -69,6 +70,16 @@ abstract class BagOStuff {
         */
        abstract public function set( $key, $value, $exptime = 0 );
 
+       /**
+        * Check and set an item.
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @return bool success
+        */
+       abstract public function cas( $casToken, $key, $value, $exptime = 0 );
+
        /**
         * Delete an item.
         * @param $key string
@@ -78,31 +89,113 @@ abstract class BagOStuff {
        abstract public function delete( $key, $time = 0 );
 
        /**
+        * Merge changes into the existing cache value (possibly creating a new one)
+        *
         * @param $key string
-        * @param $timeout integer
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
         * @return bool success
         */
-       public function lock( $key, $timeout = 0 ) {
-               /* stub */
-               return true;
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
        }
 
        /**
+        * @see BagOStuff::merge()
+        *
         * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
         * @return bool success
         */
-       public function unlock( $key ) {
-               /* stub */
-               return true;
+       protected function mergeViaCas( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               do {
+                       $casToken = null; // passed by reference
+                       $currentValue = $this->get( $key, $casToken ); // get the old value
+                       $value = $callback( $this, $key, $currentValue ); // derive the new value
+
+                       if ( $value === false ) {
+                               $success = true; // do nothing
+                       } elseif ( $currentValue === false ) {
+                               // Try to create the key, failing if it gets created in the meantime
+                               $success = $this->add( $key, $value, $exptime );
+                       } else {
+                               // Try to update the key, failing if it gets changed in the meantime
+                               $success = $this->cas( $casToken, $key, $value, $exptime );
+                       }
+               } while ( !$success && --$attempts );
+
+               return $success;
        }
 
        /**
-        * @todo: what is this?
-        * @return Array
+        * @see BagOStuff::merge()
+        *
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
         */
-       public function keys() {
-               /* stub */
-               return array();
+       protected function mergeViaLock( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !$this->lock( $key, 60 ) ) {
+                       return false;
+               }
+
+               $currentValue = $this->get( $key ); // get the old value
+               $value = $callback( $this, $key, $currentValue ); // derive the new value
+
+               if ( $value === false ) {
+                       $success = true; // do nothing
+               } else {
+                       $success = $this->set( $key, $value, $exptime ); // set the new value
+               }
+
+               if ( !$this->unlock( $key ) ) {
+                       // this should never happen
+                       trigger_error( "Could not release lock for key '$key'." );
+               }
+
+               return $success;
+       }
+
+       /**
+        * @param $key string
+        * @param $timeout integer [optional]
+        * @return bool success
+        */
+       public function lock( $key, $timeout = 60 ) {
+               $timestamp = microtime( true ); // starting UNIX timestamp
+               if ( $this->add( "{$key}:lock", $timeout ) ) {
+                       return true;
+               }
+
+               $uRTT  = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
+               $sleep = 2*$uRTT; // rough time to do get()+set()
+
+               $locked   = false; // lock acquired
+               $attempts = 0; // failed attempts
+               do {
+                       if ( ++$attempts >= 3 && $sleep <= 1e6 ) {
+                               // Exponentially back off after failed attempts to avoid network spam.
+                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
+                               $sleep *= 2;
+                       }
+                       usleep( $sleep ); // back off
+                       $locked = $this->add( "{$key}:lock", $timeout );
+               } while( !$locked );
+
+               return $locked;
+       }
+
+       /**
+        * @param $key string
+        * @return bool success
+        */
+       public function unlock( $key ) {
+               return $this->delete( "{$key}:lock" );
        }
 
        /**
index 36ced49..51ce777 100644 (file)
@@ -111,9 +111,10 @@ class DBABagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -138,7 +139,10 @@ class DBABagOStuff extends BagOStuff {
                        $val = false;
                }
 
+               $casToken = $val;
+
                wfProfileOut( __METHOD__ );
+
                return $val;
        }
 
@@ -167,6 +171,42 @@ class DBABagOStuff extends BagOStuff {
                return $ret;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               wfProfileIn( __METHOD__ );
+               wfDebug( __METHOD__ . "($key)\n" );
+
+               $blob = $this->encode( $value, $exptime );
+
+               $handle = $this->getWriter();
+               if ( !$handle ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               // DBA is locked to any other write connection, so we can safely
+               // compare the current & previous value before saving new value
+               $val = dba_fetch( $key, $handle );
+               list( $val, $exptime ) = $this->decode( $val );
+               if ( $casToken !== $val ) {
+                       dba_close( $handle );
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               $ret = dba_replace( $key, $blob, $handle );
+               dba_close( $handle );
+
+               wfProfileOut( __METHOD__ );
+               return $ret;
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -264,23 +304,4 @@ class DBABagOStuff extends BagOStuff {
 
                return ( $value === false ) ? false : (int)$value;
        }
-
-       function keys() {
-               $reader = $this->getReader();
-               $k1 = dba_firstkey( $reader );
-
-               if ( !$k1 ) {
-                       return array();
-               }
-
-               $result[] = $k1;
-
-               $key = dba_nextkey( $reader );
-               while ( $key ) {
-                       $result[] = $key;
-                       $key = dba_nextkey( $reader );
-               }
-
-               return $result;
-       }
 }
index 60d0645..b8a1bc2 100644 (file)
@@ -65,9 +65,10 @@ class EhcacheBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool|mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                $response = $this->doItemRequest( $key );
                if ( !$response || $response['http_code'] == 404 ) {
@@ -97,6 +98,8 @@ class EhcacheBagOStuff extends BagOStuff {
                        return false;
                }
 
+               $casToken = $body;
+
                wfProfileOut( __METHOD__ );
                return $data;
        }
@@ -144,6 +147,20 @@ class EhcacheBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               // Not sure if we can implement CAS for ehcache. There appears to be CAS-support per
+               // http://ehcache.org/documentation/get-started/consistency-options#cas-cache-operations,
+               // but I can't find any docs for our current implementation.
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -164,6 +181,14 @@ class EhcacheBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @see BagOStuff::merge()
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * @param $key string
         * @return string
index bd28b24..cc57ff1 100644 (file)
@@ -30,9 +30,10 @@ class EmptyBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool
         */
-       function get( $key ) {
+       function get( $key, &$casToken = null ) {
                return false;
        }
 
@@ -46,6 +47,17 @@ class EmptyBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exp int
+        * @return bool
+        */
+       function cas( $casToken, $key, $value, $exp = 0 ) {
+               return true;
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -54,6 +66,17 @@ class EmptyBagOStuff extends BagOStuff {
        function delete( $key, $time = 0 ) {
                return true;
        }
+
+       /**
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return true;
+       }
 }
 
 /**
index 799f26a..d3f3583 100644 (file)
@@ -52,9 +52,10 @@ class HashBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool|mixed
         */
-       function get( $key ) {
+       function get( $key, &$casToken = null ) {
                if ( !isset( $this->bag[$key] ) ) {
                        return false;
                }
@@ -63,6 +64,8 @@ class HashBagOStuff extends BagOStuff {
                        return false;
                }
 
+               $casToken = $this->bag[$key][0];
+
                return $this->bag[$key][0];
        }
 
@@ -77,6 +80,21 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       function cas( $casToken, $key, $value, $exptime = 0 ) {
+               if ( $this->get( $key ) === $casToken ) {
+                       return $this->set( $key, $value, $exptime );
+               }
+
+               return false;
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -91,12 +109,5 @@ class HashBagOStuff extends BagOStuff {
 
                return true;
        }
-
-       /**
-        * @return array
-        */
-       function keys() {
-               return array_keys( $this->bag );
-       }
 }
 
index 643d2e9..aebcbe7 100644 (file)
@@ -57,10 +57,11 @@ class MemcachedBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return Mixed
         */
-       public function get( $key ) {
-               return $this->client->get( $this->encodeKey( $key ) );
+       public function get( $key, &$casToken = null ) {
+               return $this->client->get( $this->encodeKey( $key ), $casToken );
        }
 
        /**
@@ -74,6 +75,18 @@ class MemcachedBagOStuff extends BagOStuff {
                        $this->fixExpiry( $exptime ) );
        }
 
+       /**
+        * @param $key string
+        * @param $casToken mixed
+        * @param $value
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return $this->client->cas( $casToken, $this->encodeKey( $key ),
+                       $value, $this->fixExpiry( $exptime ) );
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -166,11 +179,6 @@ class MemcachedBagOStuff extends BagOStuff {
         * Send a debug message to the log
         */
        protected function debugLog( $text ) {
-               global $wgDebugLogGroups;
-               if( !isset( $wgDebugLogGroups['memcached'] ) ) {
-                       # Prefix message since it will end up in main debug log file
-                       $text = "memcached: $text";
-               }
                if ( substr( $text, -1 ) !== "\n" ) {
                        $text .= "\n";
                }
index 787a168..faa676d 100644 (file)
@@ -408,10 +408,11 @@ class MWMemcached {
         * Retrieves the value associated with the key from the memcache server
         *
         * @param $key array|string key to retrieve
+        * @param $casToken[optional] Float
         *
         * @return Mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
 
                if ( $this->_debug ) {
@@ -437,14 +438,14 @@ class MWMemcached {
                        $this->stats['get'] = 1;
                }
 
-               $cmd = "get $key\r\n";
+               $cmd = "gets $key\r\n";
                if ( !$this->_fwrite( $sock, $cmd ) ) {
                        wfProfileOut( __METHOD__ );
                        return false;
                }
 
                $val = array();
-               $this->_load_items( $sock, $val );
+               $this->_load_items( $sock, $val, $casToken );
 
                if ( $this->_debug ) {
                        foreach ( $val as $k => $v ) {
@@ -498,7 +499,7 @@ class MWMemcached {
                $gather = array();
                // Send out the requests
                foreach ( $socks as $sock ) {
-                       $cmd = 'get';
+                       $cmd = 'gets';
                        foreach ( $sock_keys[ intval( $sock ) ] as $key ) {
                                $cmd .= ' ' . $key;
                        }
@@ -512,7 +513,7 @@ class MWMemcached {
                // Parse responses
                $val = array();
                foreach ( $gather as $sock ) {
-                       $this->_load_items( $sock, $val );
+                       $this->_load_items( $sock, $val, $casToken );
                }
 
                if ( $this->_debug ) {
@@ -617,6 +618,28 @@ class MWMemcached {
                return $this->_set( 'set', $key, $value, $exp );
        }
 
+       // }}}
+       // {{{ cas()
+
+       /**
+        * Sets a key to a given value in the memcache if the current value still corresponds
+        * to a known, given value.  Returns true if set successfully.
+        *
+        * @param $casToken Float: current known value
+        * @param $key String: key to set value as
+        * @param $value Mixed: value to set
+        * @param $exp Integer: (optional) Expiration time. This can be a number of seconds
+        * to cache for (up to 30 days inclusive).  Any timespans of 30 days + 1 second or
+        * longer must be the timestamp of the time at which the mapping should expire. It
+        * is safe to use timestamps in all cases, regardless of exipration
+        * eg: strtotime("+3 hour")
+        *
+        * @return Boolean: TRUE on success
+        */
+       public function cas( $casToken, $key, $value, $exp = 0 ) {
+               return $this->_set( 'cas', $key, $value, $exp, $casToken );
+       }
+
        // }}}
        // {{{ set_compress_threshold()
 
@@ -879,19 +902,20 @@ class MWMemcached {
         *
         * @param $sock Resource: socket to read from
         * @param $ret Array: returned values
+        * @param $casToken[optional] Float
         * @return boolean True for success, false for failure
         *
         * @access private
         */
-       function _load_items( $sock, &$ret ) {
+       function _load_items( $sock, &$ret, &$casToken = null ) {
                while ( 1 ) {
                        $decl = $this->_fgets( $sock );
                        if( $decl === false ) {
                                return false;
                        } elseif ( $decl == "END" ) {
                                return true;
-                       } elseif ( preg_match( '/^VALUE (\S+) (\d+) (\d+)$/', $decl, $match ) ) {
-                               list( $rkey, $flags, $len ) = array( $match[1], $match[2], $match[3] );
+                       } elseif ( preg_match( '/^VALUE (\S+) (\d+) (\d+) (\d+)$/', $decl, $match ) ) {
+                               list( $rkey, $flags, $len, $casToken ) = array( $match[1], $match[2], $match[3], $match[4] );
                                $data = $this->_fread( $sock, $len + 2 );
                                if ( $data === false ) {
                                        return false;
@@ -933,11 +957,12 @@ class MWMemcached {
         * longer must be the timestamp of the time at which the mapping should expire. It
         * is safe to use timestamps in all cases, regardless of exipration
         * eg: strtotime("+3 hour")
+        * @param $casToken[optional] Float
         *
         * @return Boolean
         * @access private
         */
-       function _set( $cmd, $key, $val, $exp ) {
+       function _set( $cmd, $key, $val, $exp, $casToken = null ) {
                if ( !$this->_active ) {
                        return false;
                }
@@ -980,7 +1005,13 @@ class MWMemcached {
                                $flags |= self::COMPRESSED;
                        }
                }
-               if ( !$this->_fwrite( $sock, "$cmd $key $flags $exp $len\r\n$val\r\n" ) ) {
+
+               $command = "$cmd $key $flags $exp $len";
+               if ( $casToken ) {
+                       $command .= " $casToken";
+               }
+
+               if ( !$this->_fwrite( $sock, "$command\r\n$val\r\n" ) ) {
                        return false;
                }
 
@@ -1036,11 +1067,6 @@ class MWMemcached {
         * @param $text string
         */
        function _debugprint( $text ) {
-               global $wgDebugLogGroups;
-               if( !isset( $wgDebugLogGroups['memcached'] ) ) {
-                       # Prefix message since it will end up in main debug log file
-                       $text = "memcached: $text";
-               }
                wfDebugLog( 'memcached', $text );
        }
 
index 7793710..9f06fa0 100644 (file)
@@ -104,14 +104,16 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] float
         * @return Mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                $this->debugLog( "get($key)" );
-               $value = $this->checkResult( $key, parent::get( $key ) );
+               $result = $this->client->get( $this->encodeKey( $key ), null, $casToken );
+               $result = $this->checkResult( $key, $result );
                wfProfileOut( __METHOD__ );
-               return $value;
+               return $result;
        }
 
        /**
@@ -125,6 +127,18 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                return $this->checkResult( $key, parent::set( $key, $value, $exptime ) );
        }
 
+       /**
+        * @param $casToken float
+        * @param $key string
+        * @param $value
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               $this->debugLog( "cas($key)" );
+               return $this->checkResult( $key, parent::cas( $casToken, $key, $value, $exptime ) );
+       }
+
        /**
         * @param $key string
         * @param $time int
index 2f37c23..4120749 100644 (file)
@@ -61,9 +61,10 @@ class MultiWriteBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool|mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                foreach ( $this->caches as $cache ) {
                        $value = $cache->get( $key );
                        if ( $value !== false ) {
@@ -73,6 +74,17 @@ class MultiWriteBagOStuff extends BagOStuff {
                return false;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * @param $key string
         * @param $value mixed
@@ -156,6 +168,17 @@ class MultiWriteBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->doWrite( 'merge', $key, $callback, $exptime );
+       }
+
        /**
         * @param $method string
         * @return bool
index 40784f5..bd5b354 100644 (file)
@@ -90,7 +90,7 @@ class RedisBagOStuff extends BagOStuff {
                }
        }
 
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                list( $server, $conn ) = $this->getConnection( $key );
                if ( !$conn ) {
@@ -103,6 +103,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
+               $casToken = $result;
                $this->logRequest( 'get', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
@@ -133,6 +134,49 @@ class RedisBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $expiry = 0 ) {
+               wfProfileIn( __METHOD__ );
+               list( $server, $conn ) = $this->getConnection( $key );
+               if ( !$conn ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+               $expiry = $this->convertToRelative( $expiry );
+               try {
+                       $conn->watch( $key );
+
+                       if ( $this->get( $key ) !== $casToken ) {
+                               wfProfileOut( __METHOD__ );
+                               return false;
+                       }
+
+                       $conn->multi();
+
+                       if ( !$expiry ) {
+                               // No expiry, that is very different from zero expiry in Redis
+                               $conn->set( $key, $value );
+                       } else {
+                               $conn->setex( $key, $expiry, $value );
+                       }
+
+                       $result = $conn->exec();
+               } catch ( RedisException $e ) {
+                       $result = false;
+                       $this->handleException( $server, $e );
+               }
+
+               $this->logRequest( 'cas', $key, $server, $result );
+               wfProfileOut( __METHOD__ );
+               return $result;
+       }
+
        public function delete( $key, $time = 0 ) {
                wfProfileIn( __METHOD__ );
                list( $server, $conn ) = $this->getConnection( $key );
@@ -288,23 +332,10 @@ class RedisBagOStuff extends BagOStuff {
                if ( count( $this->servers ) === 1 ) {
                        $candidates = $this->servers;
                } else {
-                       // Use consistent hashing
-                       //
-                       // Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
-                       // strings, md5() is only 10% slower than hash('joaat',...) etc.,
-                       // since the function call overhead dominates. So there's not much
-                       // justification for breaking compatibility with installations
-                       // compiled with ./configure --disable-hash.
-                       $hashes = array();
-                       foreach ( $this->servers as $server ) {
-                               $hashes[$server] = md5( $server . '/' . $key );
-                       }
-                       asort( $hashes );
+                       $candidates = $this->servers;
+                       ArrayUtils::consistentHashSort( $candidates, $key, '/' );
                        if ( !$this->automaticFailover ) {
-                               reset( $hashes );
-                               $candidates = array( key( $hashes ) );
-                       } else {
-                               $candidates = array_keys( $hashes );
+                               $candidates = array_slice( $candidates, 0, 1 );
                        }
                }
 
index 222d475..80c670e 100644 (file)
@@ -32,23 +32,26 @@ class SqlBagOStuff extends BagOStuff {
         */
        var $lb;
 
-       /**
-        * @var DatabaseBase
-        */
-       var $db;
-       var $serverInfo;
+       var $serverInfos;
+       var $serverNames;
+       var $numServers;
+       var $conns;
        var $lastExpireAll = 0;
        var $purgePeriod = 100;
        var $shards = 1;
        var $tableName = 'objectcache';
 
-       protected $connFailureTime = 0; // UNIX timestamp
-       protected $connFailureError; // exception
+       protected $connFailureTimes = array(); // UNIX timestamps
+       protected $connFailureErrors = array(); // exceptions
 
        /**
         * Constructor. Parameters are:
-        *   - server:   A server info structure in the format required by each
-        *               element in $wgDBServers.
+        *   - server:      A server info structure in the format required by each
+        *                  element in $wgDBServers.
+        *
+        *   - servers:     An array of server info structures describing a set of
+        *                  database servers to distribute keys to. If this is
+        *                  specified, the "server" option will be ignored.
         *
         *   - purgePeriod: The average number of object cache requests in between
         *                  garbage collection operations, where expired entries
@@ -59,8 +62,8 @@ class SqlBagOStuff extends BagOStuff {
         *
         *   - tableName:   The table name to use, default is "objectcache".
         *
-        *   - shards:      The number of tables to use for data storage. If this is
-        *                  more than 1, table names will be formed in the style
+        *   - shards:      The number of tables to use for data storage on each server.
+        *                  If this is more than 1, table names will be formed in the style
         *                  objectcacheNNN where NNN is the shard index, between 0 and
         *                  shards-1. The number of digits will be the minimum number
         *                  required to hold the largest shard index. Data will be
@@ -70,9 +73,19 @@ class SqlBagOStuff extends BagOStuff {
         * @param $params array
         */
        public function __construct( $params ) {
-               if ( isset( $params['server'] ) ) {
-                       $this->serverInfo = $params['server'];
-                       $this->serverInfo['load'] = 1;
+               if ( isset( $params['servers'] ) ) {
+                       $this->serverInfos = $params['servers'];
+                       $this->numServers = count( $this->serverInfos );
+                       $this->serverNames = array();
+                       foreach ( $this->serverInfos as $i => $info ) {
+                               $this->serverNames[$i] = isset( $info['host'] ) ? $info['host'] : "#$i";
+                       }
+               } elseif ( isset( $params['server'] ) ) {
+                       $this->serverInfos = array( $params['server'] );
+                       $this->numServers = count( $this->serverInfos );
+               } else {
+                       $this->serverInfos = false;
+                       $this->numServers = 1;
                }
                if ( isset( $params['purgePeriod'] ) ) {
                        $this->purgePeriod = intval( $params['purgePeriod'] );
@@ -86,27 +99,37 @@ class SqlBagOStuff extends BagOStuff {
        }
 
        /**
-        * @throws
+        * Get a connection to the specified database
+        *
+        * @param $serverIndex integer
         * @return DatabaseBase
         */
-       protected function getDB() {
+       protected function getDB( $serverIndex ) {
                global $wgDebugDBTransactions;
 
-               # Don't keep timing out trying to connect for each call if the DB is down
-               if ( $this->connFailureError && ( time() - $this->connFailureTime ) < 60 ) {
-                       throw $this->connFailureError;
-               }
+               if ( !isset( $this->conns[$serverIndex] ) ) {
+                       if ( $serverIndex >= $this->numServers ) {
+                               throw new MWException( __METHOD__ . ": Invalid server index \"$serverIndex\"" );
+                       }
+
+                       # Don't keep timing out trying to connect for each call if the DB is down
+                       if ( isset( $this->connFailureErrors[$serverIndex] )
+                               && ( time() - $this->connFailureTimes[$serverIndex] ) < 60 )
+                       {
+                               throw $this->connFailureErrors[$serverIndex];
+                       }
 
-               if ( !isset( $this->db ) ) {
                        # If server connection info was given, use that
-                       if ( $this->serverInfo ) {
+                       if ( $this->serverInfos ) {
                                if ( $wgDebugDBTransactions ) {
-                                       wfDebug( sprintf( "Using provided serverInfo for SqlBagOStuff\n" ) );
+                                       wfDebug( "Using provided serverInfo for SqlBagOStuff\n" );
                                }
-                               $this->lb = new LoadBalancer( array(
-                                       'servers' => array( $this->serverInfo ) ) );
-                               $this->db = $this->lb->getConnection( DB_MASTER );
-                               $this->db->clearFlag( DBO_TRX );
+                               $info = $this->serverInfos[$serverIndex];
+                               $type = isset( $info['type'] ) ? $info['type'] : 'mysql';
+                               $host = isset( $info['host'] ) ? $info['host'] : '[unknown]';
+                               wfDebug( __CLASS__.": connecting to $host\n" );
+                               $db = DatabaseBase::factory( $type, $info );
+                               $db->clearFlag( DBO_TRX );
                        } else {
                                /*
                                 * We must keep a separate connection to MySQL in order to avoid deadlocks
@@ -115,32 +138,42 @@ class SqlBagOStuff extends BagOStuff {
                                 */
                                if ( wfGetDB( DB_MASTER )->getType() == 'mysql' ) {
                                        $this->lb = wfGetLBFactory()->newMainLB();
-                                       $this->db = $this->lb->getConnection( DB_MASTER );
-                                       $this->db->clearFlag( DBO_TRX ); // auto-commit mode
+                                       $db = $this->lb->getConnection( DB_MASTER );
+                                       $db->clearFlag( DBO_TRX ); // auto-commit mode
                                } else {
-                                       $this->db = wfGetDB( DB_MASTER );
+                                       $db = wfGetDB( DB_MASTER );
                                }
                        }
                        if ( $wgDebugDBTransactions ) {
-                               wfDebug( sprintf( "Connection %s will be used for SqlBagOStuff\n", $this->db ) );
+                               wfDebug( sprintf( "Connection %s will be used for SqlBagOStuff\n", $db ) );
                        }
+                       $this->conns[$serverIndex] = $db;
                }
 
-               return $this->db;
+               return $this->conns[$serverIndex];
        }
 
        /**
-        * Get the table name for a given key
+        * Get the server index and table name for a given key
         * @param $key string
-        * @return string
+        * @return Array: server index and table name
         */
        protected function getTableByKey( $key ) {
                if ( $this->shards > 1 ) {
                        $hash = hexdec( substr( md5( $key ), 0, 8 ) ) & 0x7fffffff;
-                       return $this->getTableByShard( $hash % $this->shards );
+                       $tableIndex = $hash % $this->shards;
                } else {
-                       return $this->tableName;
+                       $tableIndex = 0;
+               }
+               if ( $this->numServers > 1 ) {
+                       $sortedServers = $this->serverNames;
+                       ArrayUtils::consistentHashSort( $sortedServers, $key );
+                       reset( $sortedServers );
+                       $serverIndex = key( $sortedServers );
+               } else {
+                       $serverIndex = 0;
                }
+               return array( $serverIndex, $this->getTableNameByShard( $tableIndex ) );
        }
 
        /**
@@ -148,7 +181,7 @@ class SqlBagOStuff extends BagOStuff {
         * @param $index int
         * @return string
         */
-       protected function getTableByShard( $index ) {
+       protected function getTableNameByShard( $index ) {
                if ( $this->shards > 1 ) {
                        $decimals = strlen( $this->shards - 1 );
                        return $this->tableName .
@@ -160,11 +193,16 @@ class SqlBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $values = $this->getMulti( array( $key ) );
-               return array_key_exists( $key, $values ) ? $values[$key] : false;
+               if ( array_key_exists( $key, $values ) ) {
+                       $casToken = $values[$key];
+                       return $values[$key];
+               }
+               return false;
        }
 
        /**
@@ -174,59 +212,61 @@ class SqlBagOStuff extends BagOStuff {
        public function getMulti( array $keys ) {
                $values = array(); // array of (key => value)
 
-               try {
-                       $db = $this->getDB();
-                       $keysByTableName = array();
-                       foreach ( $keys as $key ) {
-                               $tableName = $this->getTableByKey( $key );
-                               if ( !isset( $keysByTableName[$tableName] ) ) {
-                                       $keysByTableName[$tableName] = array();
-                               }
-                               $keysByTableName[$tableName][] = $key;
-                       }
+               $keysByTable = array();
+               foreach ( $keys as $key ) {
+                       list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
+                       $keysByTable[$serverIndex][$tableName][] = $key;
+               }
 
-                       $this->garbageCollect(); // expire old entries if any
+               $this->garbageCollect(); // expire old entries if any
 
-                       $dataRows = array();
-                       foreach ( $keysByTableName as $tableName => $tableKeys ) {
-                               $res = $db->select( $tableName,
-                                       array( 'keyname', 'value', 'exptime' ),
-                                       array( 'keyname' => $tableKeys ),
-                                       __METHOD__ );
-                               foreach ( $res as $row ) {
-                                       $dataRows[$row->keyname] = $row;
+               $dataRows = array();
+               foreach ( $keysByTable as $serverIndex => $serverKeys ) {
+                       $db = $this->getDB( $serverIndex );
+                       try {
+                               foreach ( $serverKeys as $tableName => $tableKeys ) {
+                                       $res = $db->select( $tableName,
+                                               array( 'keyname', 'value', 'exptime' ),
+                                               array( 'keyname' => $tableKeys ),
+                                               __METHOD__ );
+                                       foreach ( $res as $row ) {
+                                               $row->serverIndex = $serverIndex;
+                                               $row->tableName = $tableName;
+                                               $dataRows[$row->keyname] = $row;
+                                       }
                                }
+                       } catch ( DBError $e ) {
+                               $this->handleReadError( $e, $serverIndex );
                        }
+               }
 
-                       foreach ( $keys as $key ) {
-                               if ( isset( $dataRows[$key] ) ) { // HIT?
-                                       $row = $dataRows[$key];
-                                       $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
-                                       if ( $this->isExpired( $row->exptime ) ) { // MISS
-                                               $this->debug( "get: key has expired, deleting" );
-                                               try {
-                                                       $db->begin( __METHOD__ );
-                                                       # Put the expiry time in the WHERE condition to avoid deleting a
-                                                       # newly-inserted value
-                                                       $db->delete( $this->getTableByKey( $key ),
-                                                               array( 'keyname' => $key, 'exptime' => $row->exptime ),
-                                                               __METHOD__ );
-                                                       $db->commit( __METHOD__ );
-                                               } catch ( DBQueryError $e ) {
-                                                       $this->handleWriteError( $e );
-                                               }
-                                               $values[$key] = false;
-                                       } else { // HIT
-                                               $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+               foreach ( $keys as $key ) {
+                       if ( isset( $dataRows[$key] ) ) { // HIT?
+                               $row = $dataRows[$key];
+                               $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
+                               $db = $this->getDB( $row->serverIndex );
+                               if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
+                                       $this->debug( "get: key has expired, deleting" );
+                                       try {
+                                               $db->begin( __METHOD__ );
+                                               # Put the expiry time in the WHERE condition to avoid deleting a
+                                               # newly-inserted value
+                                               $db->delete( $row->tableName,
+                                                       array( 'keyname' => $key, 'exptime' => $row->exptime ),
+                                                       __METHOD__ );
+                                               $db->commit( __METHOD__ );
+                                       } catch ( DBQueryError $e ) {
+                                               $this->handleWriteError( $e, $row->serverIndex );
                                        }
-                               } else { // MISS
                                        $values[$key] = false;
-                                       $this->debug( 'get: no matching rows' );
+                               } else { // HIT
+                                       $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                }
+                       } else { // MISS
+                               $values[$key] = false;
+                               $this->debug( 'get: no matching rows' );
                        }
-               } catch ( DBError $e ) {
-                       $this->handleReadError( $e );
-               };
+               }
 
                return $values;
        }
@@ -238,8 +278,9 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $exptime = 0 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
-                       $db = $this->getDB();
+                       $db = $this->getDB( $serverIndex );
                        $exptime = intval( $exptime );
 
                        if ( $exptime < 0 ) {
@@ -247,7 +288,7 @@ class SqlBagOStuff extends BagOStuff {
                        }
 
                        if ( $exptime == 0 ) {
-                               $encExpiry = $this->getMaxDateTime();
+                               $encExpiry = $this->getMaxDateTime( $db );
                        } else {
                                if ( $exptime < 3.16e8 ) { # ~10 years
                                        $exptime += time();
@@ -259,7 +300,7 @@ class SqlBagOStuff extends BagOStuff {
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->replace(
-                               $this->getTableByKey( $key ),
+                               $tableName,
                                array( 'keyname' ),
                                array(
                                        'keyname' => $key,
@@ -268,29 +309,79 @@ class SqlBagOStuff extends BagOStuff {
                                ), __METHOD__ );
                        $db->commit( __METHOD__ );
                } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
+                       $this->handleWriteError( $e, $serverIndex );
                        return false;
                }
 
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               $db = $this->getDB();
+               $exptime = intval( $exptime );
+
+               if ( $exptime < 0 ) {
+                       $exptime = 0;
+               }
+
+               if ( $exptime == 0 ) {
+                       $encExpiry = $this->getMaxDateTime();
+               } else {
+                       if ( $exptime < 3.16e8 ) { # ~10 years
+                               $exptime += time();
+                       }
+
+                       $encExpiry = $db->timestamp( $exptime );
+               }
+               try {
+                       $db->begin( __METHOD__ );
+                       // (bug 24425) use a replace if the db supports it instead of
+                       // delete/insert to avoid clashes with conflicting keynames
+                       $db->update(
+                               $this->getTableByKey( $key ),
+                               array(
+                                       'keyname' => $key,
+                                       'value' => $db->encodeBlob( $this->serialize( $value ) ),
+                                       'exptime' => $encExpiry
+                               ),
+                               array(
+                                       'keyname' => $key,
+                                       'value' => $db->encodeBlob( $this->serialize( $casToken ) )
+                               ), __METHOD__ );
+                       $db->commit( __METHOD__ );
+               } catch ( DBQueryError $e ) {
+                       $this->handleWriteError( $e );
+
+                       return false;
+               }
+
+               return (bool) $db->affectedRows();
+       }
+
        /**
         * @param $key string
         * @param $time int
         * @return bool
         */
        public function delete( $key, $time = 0 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
-                       $db = $this->getDB();
+                       $db = $this->getDB( $serverIndex );
                        $db->begin( __METHOD__ );
                        $db->delete(
-                               $this->getTableByKey( $key ),
+                               $tableName,
                                array( 'keyname' => $key ),
                                __METHOD__ );
                        $db->commit( __METHOD__ );
                } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
+                       $this->handleWriteError( $e, $serverIndex );
                        return false;
                }
 
@@ -303,9 +394,9 @@ class SqlBagOStuff extends BagOStuff {
         * @return int|null
         */
        public function incr( $key, $step = 1 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
-                       $db = $this->getDB();
-                       $tableName = $this->getTableByKey( $key );
+                       $db = $this->getDB( $serverIndex );
                        $step = intval( $step );
                        $db->begin( __METHOD__ );
                        $row = $db->selectRow(
@@ -321,7 +412,7 @@ class SqlBagOStuff extends BagOStuff {
                                return null;
                        }
                        $db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ );
-                       if ( $this->isExpired( $row->exptime ) ) {
+                       if ( $this->isExpired( $db, $row->exptime ) ) {
                                // Expired, do not reinsert
                                $db->commit( __METHOD__ );
 
@@ -343,51 +434,29 @@ class SqlBagOStuff extends BagOStuff {
                        }
                        $db->commit( __METHOD__ );
                } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
+                       $this->handleWriteError( $e, $serverIndex );
                        return null;
                }
 
                return $newValue;
        }
 
-       /**
-        * @return Array
-        */
-       public function keys() {
-               $result = array();
-
-               try {
-                       $db = $this->getDB();
-                       for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $res = $db->select( $this->getTableByShard( $i ),
-                                       array( 'keyname' ), false, __METHOD__ );
-                               foreach ( $res as $row ) {
-                                       $result[] = $row->keyname;
-                               }
-                       }
-               } catch ( DBError $e ) {
-                       $this->handleReadError( $e );
-               }
-
-               return $result;
-       }
-
        /**
         * @param $exptime string
         * @return bool
         */
-       protected function isExpired( $exptime ) {
-               return $exptime != $this->getMaxDateTime() && wfTimestamp( TS_UNIX, $exptime ) < time();
+       protected function isExpired( $db, $exptime ) {
+               return $exptime != $this->getMaxDateTime( $db ) && wfTimestamp( TS_UNIX, $exptime ) < time();
        }
 
        /**
         * @return string
         */
-       protected function getMaxDateTime() {
+       protected function getMaxDateTime( $db ) {
                if ( time() > 0x7fffffff ) {
-                       return $this->getDB()->timestamp( 1 << 62 );
+                       return $db->timestamp( 1 << 62 );
                } else {
-                       return $this->getDB()->timestamp( 0x7fffffff );
+                       return $db->timestamp( 0x7fffffff );
                }
        }
 
@@ -419,87 +488,91 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function deleteObjectsExpiringBefore( $timestamp, $progressCallback = false ) {
-               try {
-                       $db = $this->getDB();
-                       $dbTimestamp = $db->timestamp( $timestamp );
-                       $totalSeconds = false;
-                       $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
-                       for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $maxExpTime = false;
-                               while ( true ) {
-                                       $conds = $baseConds;
-                                       if ( $maxExpTime !== false ) {
-                                               $conds[] = 'exptime > ' . $db->addQuotes( $maxExpTime );
-                                       }
-                                       $rows = $db->select(
-                                               $this->getTableByShard( $i ),
-                                               array( 'keyname', 'exptime' ),
-                                               $conds,
-                                               __METHOD__,
-                                               array( 'LIMIT' => 100, 'ORDER BY' => 'exptime' ) );
-                                       if ( !$rows->numRows() ) {
-                                               break;
-                                       }
-                                       $keys = array();
-                                       $row = $rows->current();
-                                       $minExpTime = $row->exptime;
-                                       if ( $totalSeconds === false ) {
-                                               $totalSeconds = wfTimestamp( TS_UNIX, $timestamp )
-                                                       - wfTimestamp( TS_UNIX, $minExpTime );
-                                       }
-                                       foreach ( $rows as $row ) {
-                                               $keys[] = $row->keyname;
-                                               $maxExpTime = $row->exptime;
-                                       }
-
-                                       $db->begin( __METHOD__ );
-                                       $db->delete(
-                                               $this->getTableByShard( $i ),
-                                               array(
-                                                       'exptime >= ' . $db->addQuotes( $minExpTime ),
-                                                       'exptime < ' . $db->addQuotes( $dbTimestamp ),
-                                                       'keyname' => $keys
-                                               ),
-                                               __METHOD__ );
-                                       $db->commit( __METHOD__ );
+               for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
+                       try {
+                               $db = $this->getDB( $serverIndex );
+                               $dbTimestamp = $db->timestamp( $timestamp );
+                               $totalSeconds = false;
+                               $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
+                               for ( $i = 0; $i < $this->shards; $i++ ) {
+                                       $maxExpTime = false;
+                                       while ( true ) {
+                                               $conds = $baseConds;
+                                               if ( $maxExpTime !== false ) {
+                                                       $conds[] = 'exptime > ' . $db->addQuotes( $maxExpTime );
+                                               }
+                                               $rows = $db->select(
+                                                       $this->getTableNameByShard( $i ),
+                                                       array( 'keyname', 'exptime' ),
+                                                       $conds,
+                                                       __METHOD__,
+                                                       array( 'LIMIT' => 100, 'ORDER BY' => 'exptime' ) );
+                                               if ( !$rows->numRows() ) {
+                                                       break;
+                                               }
+                                               $keys = array();
+                                               $row = $rows->current();
+                                               $minExpTime = $row->exptime;
+                                               if ( $totalSeconds === false ) {
+                                                       $totalSeconds = wfTimestamp( TS_UNIX, $timestamp )
+                                                               - wfTimestamp( TS_UNIX, $minExpTime );
+                                               }
+                                               foreach ( $rows as $row ) {
+                                                       $keys[] = $row->keyname;
+                                                       $maxExpTime = $row->exptime;
+                                               }
 
-                                       if ( $progressCallback ) {
-                                               if ( intval( $totalSeconds ) === 0 ) {
-                                                       $percent = 0;
-                                               } else {
-                                                       $remainingSeconds = wfTimestamp( TS_UNIX, $timestamp )
-                                                               - wfTimestamp( TS_UNIX, $maxExpTime );
-                                                       if ( $remainingSeconds > $totalSeconds ) {
-                                                               $totalSeconds = $remainingSeconds;
+                                               $db->begin( __METHOD__ );
+                                               $db->delete(
+                                                       $this->getTableNameByShard( $i ),
+                                                       array(
+                                                               'exptime >= ' . $db->addQuotes( $minExpTime ),
+                                                               'exptime < ' . $db->addQuotes( $dbTimestamp ),
+                                                               'keyname' => $keys
+                                                       ),
+                                                       __METHOD__ );
+                                               $db->commit( __METHOD__ );
+
+                                               if ( $progressCallback ) {
+                                                       if ( intval( $totalSeconds ) === 0 ) {
+                                                               $percent = 0;
+                                                       } else {
+                                                               $remainingSeconds = wfTimestamp( TS_UNIX, $timestamp )
+                                                                       - wfTimestamp( TS_UNIX, $maxExpTime );
+                                                               if ( $remainingSeconds > $totalSeconds ) {
+                                                                       $totalSeconds = $remainingSeconds;
+                                                               }
+                                                               $percent = ( $i + $remainingSeconds / $totalSeconds )
+                                                                       / $this->shards * 100;
                                                        }
-                                                       $percent = ( $i + $remainingSeconds / $totalSeconds )
-                                                               / $this->shards * 100;
+                                                       $percent = ( $percent / $this->numServers )
+                                                               + ( $serverIndex / $this->numServers * 100 );
+                                                       call_user_func( $progressCallback, $percent );
                                                }
-                                               call_user_func( $progressCallback, $percent );
                                        }
                                }
+                       } catch ( DBError $e ) {
+                               $this->handleWriteError( $e, $serverIndex );
+                               return false;
                        }
-               } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
-                       return false;
                }
-
                return true;
        }
 
        public function deleteAll() {
-               try {
-                       $db = $this->getDB();
-                       for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $db->begin( __METHOD__ );
-                               $db->delete( $this->getTableByShard( $i ), '*', __METHOD__ );
-                               $db->commit( __METHOD__ );
+               for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
+                       try {
+                               $db = $this->getDB( $serverIndex );
+                               for ( $i = 0; $i < $this->shards; $i++ ) {
+                                       $db->begin( __METHOD__ );
+                                       $db->delete( $this->getTableNameByShard( $i ), '*', __METHOD__ );
+                                       $db->commit( __METHOD__ );
+                               }
+                       } catch ( DBError $e ) {
+                               $this->handleWriteError( $e, $serverIndex );
+                               return false;
                        }
-               } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
-                       return false;
                }
-
                return true;
        }
 
@@ -545,58 +618,77 @@ class SqlBagOStuff extends BagOStuff {
        /**
         * Handle a DBError which occurred during a read operation.
         */
-       protected function handleReadError( DBError $exception ) {
+       protected function handleReadError( DBError $exception, $serverIndex ) {
                if ( $exception instanceof DBConnectionError ) {
-                       $this->connFailureTime  = time();
-                       $this->connFailureError = $exception;
+                       $this->markServerDown( $exception, $serverIndex );
                }
                wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
-               if ( $this->db ) {
-                       wfDebug( __METHOD__ . ": ignoring query error\n" );
-               } else {
+               if ( $exception instanceof DBConnectionError ) {
                        wfDebug( __METHOD__ . ": ignoring connection error\n" );
+               } else {
+                       wfDebug( __METHOD__ . ": ignoring query error\n" );
                }
        }
 
        /**
         * Handle a DBQueryError which occurred during a write operation.
         */
-       protected function handleWriteError( DBError $exception ) {
+       protected function handleWriteError( DBError $exception, $serverIndex ) {
                if ( $exception instanceof DBConnectionError ) {
-                       $this->connFailureTime  = time();
-                       $this->connFailureError = $exception;
+                       $this->markServerDown( $exception, $serverIndex );
                }
-               if ( $this->db && $this->db->wasReadOnlyError() ) {
+               if ( $exception->db && $exception->db->wasReadOnlyError() ) {
                        try {
-                               $this->db->rollback( __METHOD__ );
+                               $exception->db->rollback( __METHOD__ );
                        } catch ( DBError $e ) {}
                }
                wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
-               if ( $this->db ) {
-                       wfDebug( __METHOD__ . ": ignoring query error\n" );
-               } else {
+               if ( $exception instanceof DBConnectionError ) {
                        wfDebug( __METHOD__ . ": ignoring connection error\n" );
+               } else {
+                       wfDebug( __METHOD__ . ": ignoring query error\n" );
                }
        }
 
+       /**
+        * Mark a server down due to a DBConnectionError exception
+        */
+       protected function markServerDown( $exception, $serverIndex ) {
+               if ( isset( $this->connFailureTimes[$serverIndex] ) ) {
+                       if ( time() - $this->connFailureTimes[$serverIndex] >= 60 ) {
+                               unset( $this->connFailureTimes[$serverIndex] );
+                               unset( $this->connFailureErrors[$serverIndex] );
+                       } else {
+                               wfDebug( __METHOD__.": Server #$serverIndex already down\n" );
+                               return;
+                       }
+               }
+               $now = time();
+               wfDebug( __METHOD__.": Server #$serverIndex down until " . ( $now + 60 ) . "\n" );
+               $this->connFailureTimes[$serverIndex] = $now;
+               $this->connFailureErrors[$serverIndex] = $exception;
+       }
+
        /**
         * Create shard tables. For use from eval.php.
         */
        public function createTables() {
-               $db = $this->getDB();
-               if ( $db->getType() !== 'mysql'
-                       || version_compare( $db->getServerVersion(), '4.1.0', '<' ) )
-               {
-                       throw new MWException( __METHOD__ . ' is not supported on this DB server' );
-               }
+               for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
+                       $db = $this->getDB( $serverIndex );
+                       if ( $db->getType() !== 'mysql'
+                               || version_compare( $db->getServerVersion(), '4.1.0', '<' ) )
+                       {
+                               throw new MWException( __METHOD__ . ' is not supported on this DB server' );
+                       }
 
-               for ( $i = 0; $i < $this->shards; $i++ ) {
-                       $db->begin( __METHOD__ );
-                       $db->query(
-                               'CREATE TABLE ' . $db->tableName( $this->getTableByShard( $i ) ) .
-                               ' LIKE ' . $db->tableName( 'objectcache' ),
-                               __METHOD__ );
-                       $db->commit( __METHOD__ );
+                       for ( $i = 0; $i < $this->shards; $i++ ) {
+                               $db->begin( __METHOD__ );
+                               $db->query(
+                                       'CREATE TABLE ' . $db->tableName( $this->getTableNameByShard( $i ) ) .
+                                       ' LIKE ' . $db->tableName( 'objectcache' ),
+                                       __METHOD__ );
+                               $db->commit( __METHOD__ );
+                       }
                }
        }
 }
index 21aa39e..83f51f9 100644 (file)
@@ -33,11 +33,14 @@ class WinCacheBagOStuff extends BagOStuff {
         * Get a value from the WinCache object cache
         *
         * @param $key String: cache key
+        * @param $casToken[optional] int: cas token
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = wincache_ucache_get( $key );
 
+               $casToken = $val;
+
                if ( is_string( $val ) ) {
                        $val = unserialize( $val );
                }
@@ -61,6 +64,19 @@ class WinCacheBagOStuff extends BagOStuff {
                return ( is_array( $result ) && $result === array() ) || $result;
        }
 
+       /**
+        * Store a value in the WinCache object cache, race condition-safe
+        *
+        * @param $casToken int: cas token
+        * @param $key String: cache key
+        * @param $value int: object to store
+        * @param $exptime Int: expiration time
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
+       }
+
        /**
         * Remove a value from the WinCache object cache
         *
@@ -73,23 +89,4 @@ class WinCacheBagOStuff extends BagOStuff {
 
                return true;
        }
-
-       /**
-        * @return Array
-        */
-       public function keys() {
-               $info = wincache_ucache_info();
-               $list = $info['ucache_entries'];
-               $keys = array();
-
-               if ( is_null( $list ) ) {
-                       return array();
-               }
-
-               foreach ( $list as $entry ) {
-                       $keys[] = $entry['key_name'];
-               }
-
-               return $keys;
-       }
 }
index 6c88289..2722e9c 100644 (file)
@@ -32,9 +32,10 @@ class XCacheBagOStuff extends BagOStuff {
         * Get a value from the XCache object cache
         *
         * @param $key String: cache key
+        * @param $casToken mixed: cas token
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = xcache_get( $key );
 
                if ( is_string( $val ) ) {
@@ -43,6 +44,8 @@ class XCacheBagOStuff extends BagOStuff {
                        } else {
                                $val = unserialize( $val );
                        }
+               } elseif ( is_null( $val ) ) {
+                       return false;
                }
 
                return $val;
@@ -65,6 +68,18 @@ class XCacheBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               // Can't find any documentation on xcache cas
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * Remove a value from the XCache object cache
         *
@@ -77,6 +92,21 @@ class XCacheBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * Merge an item.
+        * XCache does not seem to support any way of performing CAS - this however will
+        * provide a way to perform CAS-like functionality.
+        *
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
        public function incr( $key, $value = 1 ) {
                return xcache_inc( $key, $value );
        }
index 8917b6d..b77309b 100644 (file)
@@ -662,21 +662,31 @@ class CoreParserFunctions {
                        $length = $cache[$page];
                } elseif( $parser->incrementExpensiveFunctionCount() ) {
                        $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-                       $id = $rev ? $rev->getPage() : 0;
+                       $pageID = $rev ? $rev->getPage() : 0;
+                       $revID = $rev ? $rev->getId() : 0;
                        $length = $cache[$page] = $rev ? $rev->getSize() : 0;
 
                        // Register dependency in templatelinks
-                       $parser->mOutput->addTemplate( $title, $id, $rev ? $rev->getId() : 0 );
+                       $parser->mOutput->addTemplate( $title, $pageID, $revID );
                }
                return self::formatRaw( $length, $raw );
        }
 
        /**
-       * Returns the requested protection level for the current page
+        * Returns the requested protection level for the current page
+        *
+        * @param Parser $parser
+        * @param string $type
+        * @param string $title
+        *
         * @return string
         */
-       static function protectionlevel( $parser, $type = '' ) {
-               $restrictions = $parser->mTitle->getRestrictions( strtolower( $type ) );
+       static function protectionlevel( $parser, $type = '', $title = '' ) {
+               $titleObject = Title::newFromText( $title );
+               if ( !( $titleObject instanceof Title ) ) {
+                       $titleObject = $parser->mTitle;
+               }
+               $restrictions = $titleObject->getRestrictions( strtolower( $type ) );
                # Title::getRestrictions returns an array, its possible it may have
                # multiple values in the future
                return implode( $restrictions, ',' );
index 0f22755..8f892a3 100644 (file)
@@ -412,9 +412,7 @@ class Parser {
                if ( !( $options->getDisableContentConversion()
                                || isset( $this->mDoubleUnderscores['nocontentconvert'] ) ) )
                {
-                       # Run convert unconditionally in 1.18-compatible mode
-                       global $wgBug34832TransitionalRollback;
-                       if ( $wgBug34832TransitionalRollback || !$this->mOptions->getInterfaceMessage() ) {
+                       if ( !$this->mOptions->getInterfaceMessage() ) {
                                # The position of the convert() call should not be changed. it
                                # assumes that the links are all replaced and the only thing left
                                # is the <nowiki> mark.
@@ -781,12 +779,7 @@ class Parser {
         * Get the language object for language conversion
         */
        function getConverterLanguage() {
-               global $wgBug34832TransitionalRollback, $wgContLang;
-               if ( $wgBug34832TransitionalRollback ) {
-                       return $wgContLang;
-               } else {
-                       return $this->getTargetLanguage();
-               }
+               return $this->getTargetLanguage();
        }
 
        /**
@@ -4499,14 +4492,14 @@ class Parser {
                        '~~~' => $sigText
                ) );
 
-               # Context links ("pipe trick"): [[|name]] and [[name (context)|]]
+               # Context links ("pipe tricks"): [[|name]] and [[name (context)|]]
                $tc = '[' . Title::legalChars() . ']';
                $nc = '[ _0-9A-Za-z\x80-\xff-]'; # Namespaces can use non-ascii!
 
-               $p1 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\))\\|]]/";                  # [[ns:page (context)|]]
-               $p4 = "/\[\[(:?$nc+:|:|)($tc+?)( ?($tc+))\\|]]/";                    # [[ns:page(context)|]] (double-width brackets, added in r40257)
-               $p3 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\)|)((?:, |,)$tc+|)\\|]]/"; # [[ns:page (context), context|]]
-               $p2 = "/\[\[\\|($tc+)]]/";                                             # [[|page]]
+               $p1 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\))\\|]]/";                   # [[ns:page (context)|]]
+               $p4 = "/\[\[(:?$nc+:|:|)($tc+?)( ?($tc+))\\|]]/";                           # [[ns:page(context)|]] (double-width brackets, added in r40257)
+               $p3 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\)|)((?:, |,)$tc+|)\\|]]/";         # [[ns:page (context), context|]] (using either single or double-width comma)
+               $p2 = "/\[\[\\|($tc+)]]/";                                              # [[|page]] (reverse pipe trick: add context from page title)
 
                # try $p1 first, to turn "[[A, B (C)|]]" into "[[A, B (C)|A, B]]"
                $text = preg_replace( $p1, '[[\\1\\2\\3|\\2]]', $text );
@@ -4995,13 +4988,17 @@ class Parser {
                                                $alt = $this->stripAltText( $match, false );
                                        }
                                        elseif( $match = $magicWordLink->matchVariableStartToEnd( $parameterMatch ) ){
-                                               $link = strip_tags($this->replaceLinkHoldersText($match));
+                                               $linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
                                                $chars = self::EXT_LINK_URL_CLASS;
                                                $prots = $this->mUrlProtocols;
                                                //check to see if link matches an absolute url, if not then it must be a wiki link.
-                                               if(!preg_match( "/^($prots)$chars+$/u", $link)){
-                                                       $localLinkTitle = Title::newFromText($link);
-                                                       $link = $localLinkTitle->getLocalURL();
+                                               if ( preg_match( "/^($prots)$chars+$/u", $linkValue ) ) {
+                                                       $link = $linkValue;
+                                               } else {
+                                                       $localLinkTitle = Title::newFromText( $linkValue );
+                                                       if ( $localLinkTitle !== null ) {
+                                                               $link = $localLinkTitle->getLocalURL();
+                                                       }
                                                }
                                        }
                                        else {
index e4f5d12..d1ca8aa 100644 (file)
@@ -149,8 +149,8 @@ class Parser_LinkHooks extends Parser {
                $holders = new LinkHolderArray( $this );
 
                if( is_null( $this->mTitle ) ) {
-                       wfProfileOut( __METHOD__ );
                        wfProfileOut( __METHOD__.'-setup' );
+                       wfProfileOut( __METHOD__ );
                        throw new MWException( __METHOD__.": \$this->mTitle is null\n" );
                }
 
@@ -224,10 +224,12 @@ class Parser_LinkHooks extends Parser {
                wfProfileIn( __METHOD__ );
                $wt = isset($paramText) ? "[[$titleText|$paramText]]" : "[[$titleText]]";
                wfProfileIn( __METHOD__."-misc" );
+
                # Don't allow internal links to pages containing
                # PROTO: where PROTO is a valid URL protocol; these
                # should be external links.
                if( preg_match('/^\b(?i:' . wfUrlProtocols() . ')/', $titleText) ) {
+                       wfProfileOut( __METHOD__."-misc" );
                        wfProfileOut( __METHOD__ );
                        return $wt;
                }
index 5cc1b0f..dd7e965 100644 (file)
@@ -260,24 +260,24 @@ class MWTidy {
 
                        wfProfileOut( __METHOD__ );
                        return $tidy->errorBuffer;
+               }
+
+               $tidy->cleanRepair();
+               $retval = $tidy->getStatus();
+               if ( $retval == 2 ) {
+                       // 2 is magic number for fatal error
+                       // http://www.php.net/manual/en/function.tidy-get-status.php
+                       $cleansource = null;
                } else {
-                       $tidy->cleanRepair();
-                       $retval = $tidy->getStatus();
-                       if ( $retval == 2 ) {
-                               // 2 is magic number for fatal error
-                               // http://www.php.net/manual/en/function.tidy-get-status.php
-                               $cleansource = null;
-                       } else {
-                               $cleansource = tidy_get_output( $tidy );
-                               if ( $wgDebugTidy && $retval > 0 ) {
-                                       $cleansource .= "<!--\nTidy reports:\n" .
-                                               str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
-                                               "\n-->";
-                               }
+                       $cleansource = tidy_get_output( $tidy );
+                       if ( $wgDebugTidy && $retval > 0 ) {
+                               $cleansource .= "<!--\nTidy reports:\n" .
+                                       str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
+                                       "\n-->";
                        }
-
-                       wfProfileOut( __METHOD__ );
-                       return $cleansource;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $cleansource;
        }
 }
index e3d22f8..baffcd8 100644 (file)
@@ -589,4 +589,18 @@ class Profiler {
                        wfDebug( $s );
                }
        }
+
+       /**
+        * Get the content type sent out to the client.
+        * Used for profilers that output instead of store data.
+        * @return string
+        */
+       protected function getContentType() {
+               foreach ( headers_list() as $header ) {
+                       if ( preg_match( '#^content-type: (\w+/\w+);?#i', $header, $m ) ) {
+                               return $m[1];
+                       }
+               }
+               return null;
+       }
 }
index 3e7d6fa..e62622f 100644 (file)
@@ -50,10 +50,18 @@ class ProfilerSimpleText extends ProfilerSimple {
                                : 0; // profiling mismatch error?
                        uasort( $this->mCollated, array('self','sort') );
                        array_walk( $this->mCollated, array('self','format'), $totalReal );
-                       if ( $this->visible ) {
-                               print '<pre>'.self::$out.'</pre>';
-                       } else {
+                       if ( php_sapi_name() === 'cli' ) {
                                print "<!--\n".self::$out."\n-->\n";
+                       } elseif ( $this->getContentType() === 'text/html' ) {
+                               if ( $this->visible ) {
+                                       print '<pre>'.self::$out.'</pre>';
+                               } else {
+                                       print "<!--\n".self::$out."\n-->\n";
+                               }
+                       } elseif ( $this->getContentType() === 'text/javascript' ) {
+                               print "\n/*\n".self::$out."*/\n";
+                       } elseif ( $this->getContentType() === 'text/css' ) {
+                               print "\n/*\n".self::$out."*/\n";
                        }
                }
        }
index 822e9fe..017e135 100644 (file)
@@ -69,6 +69,14 @@ class ProfilerSimpleTrace extends ProfilerSimple {
        }
 
        function logData() {
-               print "<!-- \n {$this->trace} \n -->";
+               if ( php_sapi_name() === 'cli' ) {
+                       print "<!-- \n {$this->trace} \n -->";
+               } elseif ( $this->getContentType() === 'text/html' ) {
+                       print "<!-- \n {$this->trace} \n -->";
+               } elseif ( $this->getContentType() === 'text/javascript' ) {
+                       print "\n/*\n {$this->trace}\n*/";
+               } elseif ( $this->getContentType() === 'text/css' ) {
+                       print "\n/*\n {$this->trace}\n*/";
+               }
        }
 }
index b4bd98c..5abe226 100644 (file)
@@ -176,6 +176,7 @@ class ResourceLoader {
                } catch ( Exception $exception ) {
                        // Return exception as a comment
                        $result = $this->makeComment( $exception->__toString() );
+                       $this->hasErrors = true;
                }
 
                wfProfileOut( __METHOD__ );
@@ -435,6 +436,7 @@ class ResourceLoader {
 
                wfProfileIn( __METHOD__ );
                $errors = '';
+               $this->hasErrors = false;
 
                // Split requested modules into two groups, modules and missing
                $modules = array();
@@ -446,6 +448,7 @@ class ResourceLoader {
                                // This is a security issue, see bug 34907.
                                if ( $module->getGroup() === 'private' ) {
                                        $errors .= $this->makeComment( "Cannot show private module \"$name\"" );
+                                       $this->hasErrors = true;
                                        continue;
                                }
                                $modules[$name] = $this->getModule( $name );
@@ -460,6 +463,7 @@ class ResourceLoader {
                } catch( Exception $e ) {
                        // Add exception to the output as a comment
                        $errors .= $this->makeComment( $e->__toString() );
+                       $this->hasErrors = true;
                }
 
                wfProfileIn( __METHOD__.'-getModifiedTime' );
@@ -477,14 +481,12 @@ class ResourceLoader {
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
                                $errors .= $this->makeComment( $e->__toString() );
+                               $this->hasErrors = true;
                        }
                }
 
                wfProfileOut( __METHOD__.'-getModifiedTime' );
 
-               // Send content type and cache related headers
-               $this->sendResponseHeaders( $context, $mtime );
-
                // If there's an If-Modified-Since header, respond with a 304 appropriately
                if ( $this->tryRespondLastModified( $context, $mtime ) ) {
                        wfProfileOut( __METHOD__ );
@@ -501,6 +503,7 @@ class ResourceLoader {
                // response in a comment if we're in debug mode.
                if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) {
                        $response = $this->makeComment( $warnings ) . $response;
+                       $this->hasErrors = true;
                }
 
                // Save response to file cache unless there are errors
@@ -515,6 +518,9 @@ class ResourceLoader {
                        }
                }
 
+               // Send content type and cache related headers
+               $this->sendResponseHeaders( $context, $mtime, $this->hasErrors );
+
                // Remove the output buffer and output the response
                ob_end_clean();
                echo $response;
@@ -526,13 +532,15 @@ class ResourceLoader {
         * Send content type and last modified headers to the client.
         * @param $context ResourceLoaderContext
         * @param $mtime string TS_MW timestamp to use for last-modified
+        * @param $error bool Whether there are commented-out errors in the response
         * @return void
         */
-       protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime ) {
+       protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime, $errors ) {
                global $wgResourceLoaderMaxage;
                // If a version wasn't specified we need a shorter expiry time for updates
                // to propagate to clients quickly
-               if ( is_null( $context->getVersion() ) ) {
+               // If there were errors, we also need a shorter expiry time so we can recover quickly
+               if ( is_null( $context->getVersion() ) || $errors ) {
                        $maxage  = $wgResourceLoaderMaxage['unversioned']['client'];
                        $smaxage = $wgResourceLoaderMaxage['unversioned']['server'];
                // If a version was specified we can use a longer expiry time since changing
@@ -680,6 +688,7 @@ class ResourceLoader {
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
                                $exceptions .= $this->makeComment( $e->__toString() );
+                               $this->hasErrors = true;
                        }
                } else {
                        $blobs = array();
@@ -785,6 +794,7 @@ class ResourceLoader {
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
                                $exceptions .= $this->makeComment( $e->__toString() );
+                               $this->hasErrors = true;
 
                                // Register module as missing
                                $missing[] = $name;
index fa84843..fad0027 100644 (file)
@@ -312,15 +312,19 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                // Collect referenced files
                $this->localFileRefs = array_unique( $this->localFileRefs );
                // If the list has been modified since last time we cached it, update the cache
-               if ( $this->localFileRefs !== $this->getFileDependencies( $context->getSkin() ) && !wfReadOnly() ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->replace( 'module_deps',
-                               array( array( 'md_module', 'md_skin' ) ), array(
-                                       'md_module' => $this->getName(),
-                                       'md_skin' => $context->getSkin(),
-                                       'md_deps' => FormatJson::encode( $this->localFileRefs ),
-                               )
-                       );
+               try {
+                       if ( $this->localFileRefs !== $this->getFileDependencies( $context->getSkin() ) ) {
+                               $dbw = wfGetDB( DB_MASTER );
+                               $dbw->replace( 'module_deps',
+                                       array( array( 'md_module', 'md_skin' ) ), array(
+                                               'md_module' => $this->getName(),
+                                               'md_skin' => $context->getSkin(),
+                                               'md_deps' => FormatJson::encode( $this->localFileRefs ),
+                                       )
+                               );
+                       }
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
                return $styles;
        }
index b2e2e71..d4613aa 100644 (file)
  *
  * @ingroup Site
  */
-class MediaWikiSite extends SiteObject {
+class MediaWikiSite extends Site {
 
        const PATH_FILE = 'file_path';
        const PATH_PAGE = 'page_path';
 
        /**
         * @since 1.21
+        * @deprecated Just use the constructor or the factory Site::newForType
         *
         * @param integer $globalId
         *
         * @return MediaWikiSite
         */
        public static function newFromGlobalId( $globalId ) {
-               return SitesTable::singleton()->newRow( array(
-                       'type' => Site::TYPE_MEDIAWIKI,
-                       'global_key' => $globalId,
-               ), true );
+               $site = new static();
+               $site->setGlobalId( $globalId );
+               return $site;
+       }
+
+       /**
+        * Constructor.
+        *
+        * @since 1.21
+        *
+        * @param string $type
+        */
+       public function __construct( $type = self::TYPE_MEDIAWIKI ) {
+               parent::__construct( $type );
        }
 
        /**
@@ -167,7 +178,7 @@ class MediaWikiSite extends SiteObject {
         * @param array $externalData A reply from the API on a external server.
         * @param string $pageTitle Identifies the page at the external site, needing normalization.
         *
-        * @return array|false a 'page' structure representing the page identified by $pageTitle.
+        * @return array|boolean a 'page' structure representing the page identified by $pageTitle.
         */
        private static function extractPageRecord( $externalData, $pageTitle ) {
                // If there is a special case with only one returned page
@@ -290,16 +301,16 @@ class MediaWikiSite extends SiteObject {
        }
 
        /**
-        * @see Site::getPagePath
+        * @see Site::getPageUrl
         *
         * This implementation returns a URL constructed using the path returned by getLinkPath().
-        * In addition to the default behaviour implemented by SiteObject::getPageUrl(), this
+        * In addition to the default behaviour implemented by Site::getPageUrl(), this
         * method converts the $pageName to DBKey-format by replacing spaces with underscores
         * before using it in the URL.
         *
         * @since 1.21
         *
-        * @param $pagename string: Page name (default: false)
+        * @param string|boolean $pageName Page name or false (default: false)
         *
         * @return string
         */
@@ -325,7 +336,7 @@ class MediaWikiSite extends SiteObject {
         *
         * @since 1.21
         *
-        * @param string|false $path
+        * @param string|boolean $path
         *
         * @return string
         */
index 200a006..5394860 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Interface for site objects.
+ * Represents a single site.
  *
  * 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
@@ -26,7 +26,7 @@
  * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-interface Site {
+class Site implements Serializable {
 
        const TYPE_UNKNOWN = 'unknown';
        const TYPE_MEDIAWIKI = 'mediawiki';
@@ -38,42 +38,140 @@ interface Site {
 
        const SOURCE_LOCAL = 'local';
 
+       const PATH_LINK = 'link';
+
+
        /**
-        * Returns the global site identifier (ie enwiktionary).
+        * A version ID that identifies the serialization structure used by getSerializationData()
+        * and unserialize(). This is useful for constructing cache keys in cases where the cache relies
+        * on serialization for storing the SiteList.
         *
+        * @var string A string uniquely identifying the version of the serialization structure.
+        */
+       const SERIAL_VERSION_ID = '2013-01-23';
+
+       /**
         * @since 1.21
         *
-        * @return string
+        * @var string|null
         */
-       public function getGlobalId();
+       protected $globalId = null;
 
        /**
-        * Sets the global site identifier (ie enwiktionary).
+        * @since 1.21
         *
+        * @var string
+        */
+       protected $type = self::TYPE_UNKNOWN;
+
+       /**
         * @since 1.21
         *
-        * @param string $globalId
+        * @var string
         */
-       public function setGlobalId( $globalId );
+       protected $group = self::GROUP_NONE;
 
        /**
-        * Returns the type of the site (ie mediawiki).
+        * @since 1.21
         *
+        * @var string
+        */
+       protected $source = self::SOURCE_LOCAL;
+
+       /**
         * @since 1.21
         *
-        * @return string
+        * @var string|null
+        */
+       protected $languageCode = null;
+
+       /**
+        * Holds the local ids for this site.
+        * local id type => [ ids for this type (strings) ]
+        *
+        * @since 1.21
+        *
+        * @var array[]
+        */
+       protected $localIds = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var array
+        */
+       protected $extraData = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var array
+        */
+       protected $extraConfig = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var bool
         */
-       public function getType();
+       protected $forward = false;
 
        /**
-        * Sets the type of the site (ie mediawiki).
-        * TODO: remove, we cannot change this after instantiation
+        * @since 1.21
+        *
+        * @var int|null
+        */
+       protected $internalId = null;
+
+       /**
+        * Constructor.
         *
         * @since 1.21
         *
         * @param string $type
         */
-       public function setType( $type );
+       public function __construct( $type = self::TYPE_UNKNOWN ) {
+               $this->type = $type;
+       }
+
+       /**
+        * Returns the global site identifier (ie enwiktionary).
+        *
+        * @since 1.21
+        *
+        * @return string|null
+        */
+       public function getGlobalId() {
+               return $this->globalId;
+       }
+
+       /**
+        * Sets the global site identifier (ie enwiktionary).
+        *
+        * @since 1.21
+        *
+        * @param string|null $globalId
+        *
+        * @throws MWException
+        */
+       public function setGlobalId( $globalId ) {
+               if ( $globalId !== null && !is_string( $globalId ) ) {
+                       throw new MWException( '$globalId needs to be string or null' );
+               }
+
+               $this->globalId = $globalId;
+       }
+
+       /**
+        * Returns the type of the site (ie mediawiki).
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       public function getType() {
+               return $this->type;
+       }
 
        /**
         * Gets the type of the site (ie wikipedia).
@@ -82,7 +180,9 @@ interface Site {
         *
         * @return string
         */
-       public function getGroup();
+       public function getGroup() {
+               return $this->group;
+       }
 
        /**
         * Sets the type of the site (ie wikipedia).
@@ -90,8 +190,16 @@ interface Site {
         * @since 1.21
         *
         * @param string $group
+        *
+        * @throws MWException
         */
-       public function setGroup( $group );
+       public function setGroup( $group ) {
+               if ( !is_string( $group ) ) {
+                       throw new MWException( '$group needs to be a string' );
+               }
+
+               $this->group = $group;
+       }
 
        /**
         * Returns the source of the site data (ie 'local', 'wikidata', 'my-magical-repo').
@@ -100,7 +208,9 @@ interface Site {
         *
         * @return string
         */
-       public function getSource();
+       public function getSource() {
+               return $this->source;
+       }
 
        /**
         * Sets the source of the site data (ie 'local', 'wikidata', 'my-magical-repo').
@@ -108,18 +218,46 @@ interface Site {
         * @since 1.21
         *
         * @param string $source
+        *
+        * @throws MWException
         */
-       public function setSource( $source );
+       public function setSource( $source ) {
+               if ( !is_string( $source ) ) {
+                       throw new MWException( '$source needs to be a string' );
+               }
+
+               $this->source = $source;
+       }
 
        /**
-        * Returns the protocol of the site, ie 'http://', 'irc://', '//'
-        * Or false if it's not known.
+        * Gets if site.tld/path/key:pageTitle should forward users to  the page on
+        * the actual site, where "key" is the local identifier.
         *
         * @since 1.21
         *
-        * @return string|false
+        * @return boolean
         */
-       public function getProtocol();
+       public function shouldForward() {
+               return $this->forward;
+       }
+
+       /**
+        * Sets if site.tld/path/key:pageTitle should forward users to  the page on
+        * the actual site, where "key" is the local identifier.
+        *
+        * @since 1.21
+        *
+        * @param boolean $shouldForward
+        *
+        * @throws MWException
+        */
+       public function setForward( $shouldForward ) {
+               if ( !is_bool( $shouldForward ) ) {
+                       throw new MWException( '$shouldForward needs to be a boolean' );
+               }
+
+               $this->forward = $shouldForward;
+       }
 
        /**
         * Returns the domain of the site, ie en.wikipedia.org
@@ -127,9 +265,95 @@ interface Site {
         *
         * @since 1.21
         *
-        * @return string|false
+        * @return string|null
+        */
+       public function getDomain() {
+               $path = $this->getLinkPath();
+
+               if ( $path === null ) {
+                       return null;
+               }
+
+               return parse_url( $path, PHP_URL_HOST );
+       }
+
+       /**
+        * Returns the protocol of the site.
+        *
+        * @since 1.21
+        *
+        * @throws MWException
+        * @return string
+        */
+       public function getProtocol() {
+               $path = $this->getLinkPath();
+
+               if ( $path === null ) {
+                       return '';
+               }
+
+               $protocol = parse_url( $path, PHP_URL_SCHEME );
+
+               // Malformed URL
+               if ( $protocol === false ) {
+                       throw new MWException( "failed to parse URL '$path'" );
+               }
+
+               // No schema
+               if ( $protocol === null ) {
+                       // Used for protocol relative URLs
+                       $protocol = '';
+               }
+
+               return $protocol;
+       }
+
+       /**
+        * Sets the path used to construct links with.
+        * Shall be equivalent to setPath( getLinkPathType(), $fullUrl ).
+        *
+        * @param string $fullUrl
+        *
+        * @since 1.21
+        *
+        * @throws MWException
+        */
+       public function setLinkPath( $fullUrl ) {
+               $type = $this->getLinkPathType();
+
+               if ( $type === null ) {
+                       throw new MWException( "This Site does not support link paths." );
+               }
+
+               $this->setPath( $type, $fullUrl );
+       }
+
+       /**
+        * Returns the path used to construct links with or false if there is no such path.
+        *
+        * Shall be equivalent to getPath( getLinkPathType() ).
+        *
+        * @return string|null
+        */
+       public function getLinkPath() {
+               $type = $this->getLinkPathType();
+               return $type === null ? null: $this->getPath( $type );
+       }
+
+       /**
+        * Returns the main path type, that is the type of the path that should generally be used to construct links
+        * to the target site.
+        *
+        * This default implementation returns Site::PATH_LINK as the default path type. Subclasses can override this
+        * to define a different default path type, or return false to disable site links.
+        *
+        * @since 1.21
+        *
+        * @return string|null
         */
-       public function getDomain();
+       public function getLinkPathType() {
+               return self::PATH_LINK;
+       }
 
        /**
         * Returns the full URL for the given page on the site.
@@ -138,79 +362,155 @@ interface Site {
         * This generated URL is usually based upon the path returned by getLinkPath(),
         * but this is not a requirement.
         *
+        * This implementation returns a URL constructed using the path returned by getLinkPath().
+        *
         * @since 1.21
-        * @see Site::getLinkPath()
         *
-        * @param bool|String $page
+        * @param bool|String $pageName
         *
-        * @return string|false
+        * @return string|boolean false
         */
-       public function getPageUrl( $page = false );
+       public function getPageUrl( $pageName = false ) {
+               $url = $this->getLinkPath();
+
+               if ( $url === false ) {
+                       return false;
+               }
+
+               if ( $pageName !== false ) {
+                       $url = str_replace( '$1', rawurlencode( $pageName ), $url ) ;
+               }
+
+               return $url;
+       }
 
        /**
-        * Returns language code of the sites primary language.
-        * Or false if it's not known.
+        * Returns $pageName without changes.
+        * Subclasses may override this to apply some kind of normalization.
+        *
+        * @see Site::normalizePageName
         *
         * @since 1.21
         *
-        * @return string|false
+        * @param string $pageName
+        *
+        * @return string
         */
-       public function getLanguageCode();
+       public function normalizePageName( $pageName ) {
+               return $pageName;
+       }
 
        /**
-        * Sets language code of the sites primary language.
+        * Returns the type specific fields.
         *
         * @since 1.21
         *
-        * @param string $languageCode
+        * @return array
         */
-       public function setLanguageCode( $languageCode );
+       public function getExtraData() {
+               return $this->extraData;
+       }
 
        /**
-        * Returns the normalized, canonical form of the given page name.
-        * How normalization is performed or what the properties of a normalized name are depends on the site.
-        * The general contract of this method is that the normalized form shall refer to the same content
-        * as the original form, and any other page name referring to the same content will have the same normalized form.
+        * Sets the type specific fields.
         *
-        * Note that this method may call out to the target site to perform the normalization, so it may be slow
-        * and fail due to IO errors.
+        * @since 1.21
+        *
+        * @param array $extraData
+        */
+       public function setExtraData( array $extraData ) {
+               $this->extraData = $extraData;
+       }
+
+       /**
+        * Returns the type specific config.
         *
         * @since 1.21
         *
-        * @param string $pageName
+        * @return array
+        */
+       public function getExtraConfig() {
+               return $this->extraConfig;
+       }
+
+       /**
+        * Sets the type specific config.
         *
-        * @return string the normalized page name
+        * @since 1.21
+        *
+        * @param array $extraConfig
         */
-       public function normalizePageName( $pageName );
+       public function setExtraConfig( array $extraConfig ) {
+               $this->extraConfig = $extraConfig;
+       }
 
        /**
-        * Returns the interwiki link identifiers that can be used for this site.
+        * Returns language code of the sites primary language.
+        * Or null if it's not known.
         *
         * @since 1.21
         *
-        * @return array of string
+        * @return string|null
         */
-       public function getInterwikiIds();
+       public function getLanguageCode() {
+               return $this->languageCode;
+       }
 
        /**
-        * Returns the equivalent link identifiers that can be used to make
-        * the site show up in interfaces such as the "language links" section.
+        * Sets language code of the sites primary language.
         *
         * @since 1.21
         *
-        * @return array of string
+        * @param string $languageCode
         */
-       public function getNavigationIds();
+       public function setLanguageCode( $languageCode ) {
+               $this->languageCode = $languageCode;
+       }
 
        /**
-        * Adds an local identifier to the site.
+        * Returns the set internal identifier for the site.
         *
         * @since 1.21
         *
-        * @param string $type The type of the identifier, element of the Site::ID_ enum
+        * @return string|null
+        */
+       public function getInternalId() {
+               return $this->internalId;
+       }
+
+       /**
+        * Sets the internal identifier for the site.
+        * This typically is a primary key in a db table.
+        *
+        * @since 1.21
+        *
+        * @param int|null $internalId
+        */
+       public function setInternalId( $internalId = null ) {
+               $this->internalId = $internalId;
+       }
+
+       /**
+        * Adds a local identifier.
+        *
+        * @since 1.21
+        *
+        * @param string $type
         * @param string $identifier
         */
-       public function addLocalId( $type, $identifier );
+       public function addLocalId( $type, $identifier ) {
+               if ( $this->localIds === false ) {
+                       $this->localIds = array();
+               }
+
+               if ( !array_key_exists( $type, $this->localIds ) ) {
+                       $this->localIds[$type] = array();
+               }
+
+               if ( !in_array( $identifier, $this->localIds[$type] ) ) {
+                       $this->localIds[$type][] = $identifier;
+               }
+       }
 
        /**
         * Adds an interwiki id to the site.
@@ -219,7 +519,9 @@ interface Site {
         *
         * @param string $identifier
         */
-       public function addInterwikiId( $identifier );
+       public function addInterwikiId( $identifier ) {
+               $this->addLocalId( self::ID_INTERWIKI, $identifier );
+       }
 
        /**
         * Adds a navigation id to the site.
@@ -228,35 +530,66 @@ interface Site {
         *
         * @param string $identifier
         */
-       public function addNavigationId( $identifier );
+       public function addNavigationId( $identifier ) {
+               $this->addLocalId( self::ID_EQUIVALENT, $identifier );
+       }
+
+       /**
+        * Returns the interwiki link identifiers that can be used for this site.
+        *
+        * @since 1.21
+        *
+        * @return string[]
+        */
+       public function getInterwikiIds() {
+               return array_key_exists( self::ID_INTERWIKI, $this->localIds ) ? $this->localIds[self::ID_INTERWIKI] : array();
+       }
 
        /**
-        * Saves the site.
+        * Returns the equivalent link identifiers that can be used to make
+        * the site show up in interfaces such as the "language links" section.
         *
         * @since 1.21
         *
-        * @param string|null $functionName
+        * @return string[]
         */
-       public function save( $functionName = null );
+       public function getNavigationIds() {
+               return array_key_exists( self::ID_EQUIVALENT, $this->localIds ) ? $this->localIds[self::ID_EQUIVALENT] : array();
+       }
 
        /**
-        * Returns the internal ID of the site.
+        * Returns all local ids
         *
         * @since 1.21
         *
-        * @return integer
+        * @return array[]
         */
-       public function getInternalId();
+       public function getLocalIds() {
+               return $this->localIds;
+       }
 
        /**
-        * Sets the provided url as path of the specified type.
+        * Sets the path used to construct links with.
+        * Shall be equivalent to setPath( getLinkPathType(), $fullUrl ).
         *
         * @since 1.21
         *
         * @param string $pathType
         * @param string $fullUrl
+        *
+        * @throws MWException
         */
-       public function setPath( $pathType, $fullUrl );
+       public function setPath( $pathType, $fullUrl ) {
+               if ( !is_string( $fullUrl ) ) {
+                       throw new MWException( '$fullUrl needs to be a string' );
+               }
+
+               if ( !array_key_exists( 'paths', $this->extraData ) ) {
+                       $this->extraData['paths'] = array();
+               }
+
+               $this->extraData['paths'][$pathType] = $fullUrl;
+       }
 
        /**
         * Returns the path of the provided type or false if there is no such path.
@@ -265,52 +598,106 @@ interface Site {
         *
         * @param string $pathType
         *
-        * @return string|false
+        * @return string|null
         */
-       public function getPath( $pathType );
+       public function getPath( $pathType ) {
+               $paths = $this->getAllPaths();
+               return array_key_exists( $pathType, $paths ) ? $paths[$pathType] : null;
+       }
 
        /**
-        * Sets the path used to construct links with.
-        * Shall be equivalent to setPath( getLinkPathType(), $fullUrl ).
-        *
-        * @param string $fullUrl
+        * Returns the paths as associative array.
+        * The keys are path types, the values are the path urls.
         *
         * @since 1.21
+        *
+        * @return string[]
         */
-       public function setLinkPath( $fullUrl );
+       public function getAllPaths() {
+               return array_key_exists( 'paths', $this->extraData ) ? $this->extraData['paths'] : array();
+       }
 
        /**
-        * Returns the path used to construct links with or false if there is no such path.
-        * Shall be equivalent to getPath( getLinkPathType() ).
+        * Removes the path of the provided type if it's set.
+        *
+        * @since 1.21
         *
-        * @return string|false
+        * @param string $pathType
         */
-       public function getLinkPath();
+       public function removePath( $pathType ) {
+               if ( array_key_exists( 'paths', $this->extraData ) ) {
+                       unset( $this->extraData['paths'][$pathType] );
+               }
+       }
 
        /**
-        * Returns the path type used to construct links with.
+        * @since 1.21
+        *
+        * @param string $siteType
         *
-        * @return string|false
+        * @return Site
         */
-       public function getLinkPathType();
+       public static function newForType( $siteType ) {
+               global $wgSiteTypes;
+
+               if ( array_key_exists( $siteType, $wgSiteTypes ) ) {
+                       return new $wgSiteTypes[$siteType]();
+               }
+
+               return new Site();
+       }
 
        /**
-        * Returns the paths as associative array.
-        * The keys are path types, the values are the path urls.
+        * @see Serializable::serialize
         *
         * @since 1.21
         *
-        * @return array of string
+        * @return string
         */
-       public function getAllPaths();
+       public function serialize() {
+               $fields = array(
+                       'globalid' => $this->globalId,
+                       'type' => $this->type,
+                       'group' => $this->group,
+                       'source' => $this->source,
+                       'language' => $this->languageCode,
+                       'localids' => $this->localIds,
+                       'config' => $this->extraConfig,
+                       'data' => $this->extraData,
+                       'forward' => $this->forward,
+                       'internalid' => $this->internalId,
+
+               );
+
+               return serialize( $fields );
+       }
 
        /**
-        * Removes the path of the provided type if it's set.
+        * @see Serializable::unserialize
         *
         * @since 1.21
         *
-        * @param string $pathType
+        * @param string $serialized
         */
-       public function removePath( $pathType );
+       public function unserialize( $serialized ) {
+               $fields = unserialize( $serialized );
+
+               $this->__construct( $fields['type'] );
+
+               $this->setGlobalId( $fields['globalid'] );
+               $this->setGroup( $fields['group'] );
+               $this->setSource( $fields['source'] );
+               $this->setLanguageCode( $fields['language'] );
+               $this->localIds = $fields['localids'];
+               $this->setExtraConfig( $fields['config'] );
+               $this->setExtraData( $fields['data'] );
+               $this->setForward( $fields['forward'] );
+               $this->setInternalId( $fields['internalid'] );
+       }
 
-}
\ No newline at end of file
+}
+
+/**
+ * @deprecated
+ */
+class SiteObject extends Site {}
diff --git a/includes/site/SiteArray.php b/includes/site/SiteArray.php
deleted file mode 100644 (file)
index 5d2c86b..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-
-/**
- * Implementation of SiteList using GenericArrayObject.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SiteArray extends GenericArrayObject implements SiteList {
-       /**
-        * Update this version number when the SiteArray format
-        * changes in an incompatible way
-        *
-        * @since 1.21
-        *
-        * @var integer
-        */
-       const CACHE_VERSION = 1;
-
-       /**
-        * Version number of the SiteArray format of the currently used object
-        *
-        * @since 1.21
-        *
-        * @var integer
-        */
-       public $cacheVersion = self::CACHE_VERSION;
-
-       /**
-        * Internal site identifiers pointing to their sites offset value.
-        *
-        * @since 1.21
-        *
-        * @var array of integer
-        */
-       protected $byInternalId = array();
-
-       /**
-        * Global site identifiers pointing to their sites offset value.
-        *
-        * @since 1.21
-        *
-        * @var array of string
-        */
-       protected $byGlobalId = array();
-
-       /**
-        * @see GenericArrayObject::getObjectType
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getObjectType() {
-               return 'Site';
-       }
-
-       /**
-        * @see GenericArrayObject::preSetElement
-        *
-        * @since 1.21
-        *
-        * @param int|string $index
-        * @param Site $site
-        *
-        * @return boolean
-        */
-       protected function preSetElement( $index, $site ) {
-               if ( $this->hasSite( $site->getGlobalId() ) ) {
-                       $this->removeSite( $site->getGlobalId() );
-               }
-
-               $this->byGlobalId[$site->getGlobalId()] = $index;
-               $this->byInternalId[$site->getInternalId()] = $index;
-
-               return true;
-       }
-
-       /**
-        * @see ArrayObject::offsetUnset()
-        *
-        * @since 1.21
-        *
-        * @param mixed $index
-        */
-       public function offsetUnset( $index ) {
-               if ( $this->offsetExists( $index ) ) {
-                       /**
-                        * @var Site $site
-                        */
-                       $site = $this->offsetGet( $index );
-
-                       unset( $this->byGlobalId[$site->getGlobalId()] );
-                       unset( $this->byInternalId[$site->getInternalId()] );
-               }
-
-               parent::offsetUnset( $index );
-       }
-
-       /**
-        * @see SiteList::getGlobalIdentifiers
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       public function getGlobalIdentifiers() {
-               return array_keys( $this->byGlobalId );
-       }
-
-       /**
-        * @see SiteList::hasSite
-        *
-        * @param string $globalSiteId
-        *
-        * @return boolean
-        */
-       public function hasSite( $globalSiteId ) {
-               return array_key_exists( $globalSiteId, $this->byGlobalId );
-       }
-
-       /**
-        * @see SiteList::getSite
-        *
-        * @since 1.21
-        *
-        * @param string $globalSiteId
-        *
-        * @return Site
-        */
-       public function getSite( $globalSiteId ) {
-               return $this->offsetGet( $this->byGlobalId[$globalSiteId] );
-       }
-
-       /**
-        * @see SiteList::removeSite
-        *
-        * @since 1.21
-        *
-        * @param string $globalSiteId
-        */
-       public function removeSite( $globalSiteId ) {
-               $this->offsetUnset( $this->byGlobalId[$globalSiteId] );
-       }
-
-       /**
-        * @see SiteList::isEmpty
-        *
-        * @since 1.21
-        *
-        * @return boolean
-        */
-       public function isEmpty() {
-               return $this->byGlobalId === array();
-       }
-
-       /**
-        * @see SiteList::hasInternalId
-        *
-        * @param integer $id
-        *
-        * @return boolean
-        */
-       public function hasInternalId( $id ) {
-               return array_key_exists( $id, $this->byInternalId );
-       }
-
-       /**
-        * @see SiteList::getSiteByInternalId
-        *
-        * @since 1.21
-        *
-        * @param integer $id
-        *
-        * @return Site
-        */
-       public function getSiteByInternalId( $id ) {
-               return $this->offsetGet( $this->byInternalId[$id] );
-       }
-
-       /**
-        * @see SiteList::removeSiteByInternalId
-        *
-        * @since 1.21
-        *
-        * @param integer $id
-        */
-       public function removeSiteByInternalId( $id ) {
-               $this->offsetUnset( $this->byInternalId[$id] );
-       }
-
-       /**
-        * @see SiteList::setSite
-        *
-        * @since 1.21
-        *
-        * @param Site $site
-        */
-       public function setSite( Site $site ) {
-               $this[] = $site;
-       }
-
-       /**
-        * @see GenericArrayObject::getSerializationData
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       protected function getSerializationData() {
-               return array_merge(
-                       parent::getSerializationData(),
-                       array(
-                               'cacheVersion' => self::CACHE_VERSION,
-                               'internalIds' => $this->byInternalId,
-                               'globalIds' => $this->byGlobalId,
-                       )
-               );
-       }
-
-       /**
-        * @see GenericArrayObject::unserialize
-        *
-        * @since 1.21
-        *
-        * @param string $serialization
-        *
-        * @return array
-        */
-       public function unserialize( $serialization ) {
-               $serializationData = parent::unserialize( $serialization );
-
-               $this->cacheVersion = $serializationData['cacheVersion'];
-               $this->byInternalId = $serializationData['internalIds'];
-               $this->byGlobalId = $serializationData['globalIds'];
-
-               return $serializationData;
-       }
-
-}
index 6273364..97848b5 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Interface for lists of Site objects.
+ * Collection of Site objects.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
+class SiteList extends GenericArrayObject {
+
+       /**
+        * Internal site identifiers pointing to their sites offset value.
+        *
+        * @since 1.21
+        *
+        * @var array of integer
+        */
+       protected $byInternalId = array();
+
+       /**
+        * Global site identifiers pointing to their sites offset value.
+        *
+        * @since 1.21
+        *
+        * @var array of string
+        */
+       protected $byGlobalId = array();
+
+       /**
+        * @see GenericArrayObject::getObjectType
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       public function getObjectType() {
+               return 'Site';
+       }
+
+       /**
+        * @see GenericArrayObject::preSetElement
+        *
+        * @since 1.21
+        *
+        * @param int|string $index
+        * @param Site $site
+        *
+        * @return boolean
+        */
+       protected function preSetElement( $index, $site ) {
+               if ( $this->hasSite( $site->getGlobalId() ) ) {
+                       $this->removeSite( $site->getGlobalId() );
+               }
+
+               $this->byGlobalId[$site->getGlobalId()] = $index;
+               $this->byInternalId[$site->getInternalId()] = $index;
+
+               return true;
+       }
+
+       /**
+        * @see ArrayObject::offsetUnset()
+        *
+        * @since 1.21
+        *
+        * @param mixed $index
+        */
+       public function offsetUnset( $index ) {
+               if ( $this->offsetExists( $index ) ) {
+                       /**
+                        * @var Site $site
+                        */
+                       $site = $this->offsetGet( $index );
+
+                       unset( $this->byGlobalId[$site->getGlobalId()] );
+                       unset( $this->byInternalId[$site->getInternalId()] );
+               }
+
+               parent::offsetUnset( $index );
+       }
 
        /**
         * Returns all the global site identifiers.
@@ -36,7 +107,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return array
         */
-       public function getGlobalIdentifiers();
+       public function getGlobalIdentifiers() {
+               return array_keys( $this->byGlobalId );
+       }
 
        /**
         * Returns if the list contains the site with the provided global site identifier.
@@ -45,7 +118,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return boolean
         */
-       public function hasSite( $globalSiteId );
+       public function hasSite( $globalSiteId ) {
+               return array_key_exists( $globalSiteId, $this->byGlobalId );
+       }
 
        /**
         * Returns the Site with the provided global site identifier.
@@ -57,7 +132,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return Site
         */
-       public function getSite( $globalSiteId );
+       public function getSite( $globalSiteId ) {
+               return $this->offsetGet( $this->byGlobalId[$globalSiteId] );
+       }
 
        /**
         * Removes the site with the specified global site identifier.
@@ -67,7 +144,20 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @param string $globalSiteId
         */
-       public function removeSite( $globalSiteId );
+       public function removeSite( $globalSiteId ) {
+               $this->offsetUnset( $this->byGlobalId[$globalSiteId] );
+       }
+
+       /**
+        * Returns if the list contains no sites.
+        *
+        * @since 1.21
+        *
+        * @return boolean
+        */
+       public function isEmpty() {
+               return $this->byGlobalId === array();
+       }
 
        /**
         * Returns if the list contains the site with the provided site id.
@@ -76,7 +166,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return boolean
         */
-       public function hasInternalId( $id );
+       public function hasInternalId( $id ) {
+               return array_key_exists( $id, $this->byInternalId );
+       }
 
        /**
         * Returns the Site with the provided site id.
@@ -88,7 +180,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return Site
         */
-       public function getSiteByInternalId( $id );
+       public function getSiteByInternalId( $id ) {
+               return $this->offsetGet( $this->byInternalId[$id] );
+       }
 
        /**
         * Removes the site with the specified site id.
@@ -98,7 +192,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @param integer $id
         */
-       public function removeSiteByInternalId( $id );
+       public function removeSiteByInternalId( $id ) {
+               $this->offsetUnset( $this->byInternalId[$id] );
+       }
 
        /**
         * Sets a site in the list. If the site was not there,
@@ -108,15 +204,97 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @param Site $site
         */
-       public function setSite( Site $site );
+       public function setSite( Site $site ) {
+               $this[] = $site;
+       }
 
        /**
-        * Returns if the site list contains no sites.
+        * Returns the sites that are in the provided group.
         *
         * @since 1.21
         *
-        * @return boolean
+        * @param string $groupName
+        *
+        * @return SiteList
+        */
+       public function getGroup( $groupName ) {
+               $group = new self();
+
+               /**
+                * @var \Site $site
+                */
+               foreach ( $this as $site ) {
+                       if ( $site->getGroup() === $groupName ) {
+                               $group[] = $site;
+                       }
+               }
+
+               return $group;
+       }
+
+       /**
+        * A version ID that identifies the serialization structure used by getSerializationData()
+        * and unserialize(). This is useful for constructing cache keys in cases where the cache relies
+        * on serialization for storing the SiteList.
+        *
+        * @var string A string uniquely identifying the version of the serialization structure,
+        *             not including any sub-structures.
+        */
+       const SERIAL_VERSION_ID = '2013-01-23';
+
+       /**
+        * Returns the version ID that identifies the serialization structure used by
+        * getSerializationData() and unserialize(), including the structure of any nested structures.
+        * This is useful for constructing cache keys in cases where the cache relies
+        * on serialization for storing the SiteList.
+        *
+        * @return string A string uniquely identifying the version of the serialization structure,
+        *                including any sub-structures.
+        */
+       public static function getSerialVersionId() {
+               return self::SERIAL_VERSION_ID . '+Site:' . Site::SERIAL_VERSION_ID;
+       }
+
+       /**
+        * @see GenericArrayObject::getSerializationData
+        *
+        * @since 1.21
+        *
+        * @return array
         */
-       public function isEmpty();
+       protected function getSerializationData() {
+               //NOTE: When changing the structure, either implement unserialize() to handle the
+               //      old structure too, or update SERIAL_VERSION_ID to kill any caches.
+               return array_merge(
+                       parent::getSerializationData(),
+                       array(
+                               'internalIds' => $this->byInternalId,
+                               'globalIds' => $this->byGlobalId,
+                       )
+               );
+       }
 
-}
\ No newline at end of file
+       /**
+        * @see GenericArrayObject::unserialize
+        *
+        * @since 1.21
+        *
+        * @param string $serialization
+        *
+        * @return array
+        */
+       public function unserialize( $serialization ) {
+               $serializationData = parent::unserialize( $serialization );
+
+               $this->byInternalId = $serializationData['internalIds'];
+               $this->byGlobalId = $serializationData['globalIds'];
+
+               return $serializationData;
+       }
+
+}
+
+/**
+ * @deprecated
+ */
+class SiteArray extends SiteList {}
\ No newline at end of file
diff --git a/includes/site/SiteObject.php b/includes/site/SiteObject.php
deleted file mode 100644 (file)
index 217f860..0000000
+++ /dev/null
@@ -1,570 +0,0 @@
-<?php
-
-/**
- * Class representing a single site.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- * @author Daniel Werner
- */
-class SiteObject extends ORMRow implements Site {
-
-       const PATH_LINK = 'link';
-
-       /**
-        * Holds the local ids for this site.
-        * You can obtain them via @see getLocalIds
-        *
-        * @since 1.21
-        *
-        * @var array|false
-        */
-       protected $localIds = false;
-
-       /**
-        * @see Site::getGlobalId
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getGlobalId() {
-               return $this->getField( 'global_key' );
-       }
-
-       /**
-        * @see Site::setGlobalId
-        *
-        * @since 1.21
-        *
-        * @param string $globalId
-        */
-       public function setGlobalId( $globalId ) {
-               $this->setField( 'global_key', $globalId );
-       }
-
-       /**
-        * @see Site::getType
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getType() {
-               return $this->getField( 'type' );
-       }
-
-       /**
-        * @see Site::setType
-        *
-        * @since 1.21
-        *
-        * @param string $type
-        */
-       public function setType( $type ) {
-               $this->setField( 'type', $type );
-       }
-
-       /**
-        * @see Site::getGroup
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getGroup() {
-               return $this->getField( 'group' );
-       }
-
-       /**
-        * @see Site::setGroup
-        *
-        * @since 1.21
-        *
-        * @param string $group
-        */
-       public function setGroup( $group ) {
-               $this->setField( 'group', $group );
-       }
-
-       /**
-        * @see Site::getSource
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getSource() {
-               return $this->getField( 'source' );
-       }
-
-       /**
-        * @see Site::setSource
-        *
-        * @since 1.21
-        *
-        * @param string $source
-        */
-       public function setSource( $source ) {
-               $this->setField( 'source', $source );
-       }
-
-       /**
-        * @see Site::getDomain
-        *
-        * @since 1.21
-        *
-        * @return string|false
-        */
-       public function getDomain() {
-               $path = $this->getLinkPath();
-
-               if ( $path === false ) {
-                       return false;
-               }
-
-               return parse_url( $path, PHP_URL_HOST );
-       }
-
-       /**
-        * @see Site::getProtocol
-        *
-        * @since 1.21
-        *
-        * @throws MWException
-        * @return string|false
-        */
-       public function getProtocol() {
-               $path = $this->getLinkPath();
-
-               if ( $path === false ) {
-                       return '';
-               }
-
-               $protocol = parse_url( $path, PHP_URL_SCHEME );
-
-               // Malformed URL
-               if ( $protocol === false ) {
-                       throw new MWException( "failed to parse URL $path" );
-               }
-
-               // No schema
-               if ( $protocol === null ) {
-                       // Used for protocol relative URLs
-                       $protocol = '';
-               }
-
-               return $protocol;
-       }
-
-       /**
-        * Sets the path used to construct links with.
-        * @see Site::setLinkPath
-        *
-        * @param string $fullUrl
-        *
-        * @since 1.21
-        *
-        * @throws MWException
-        */
-       public function setLinkPath( $fullUrl ) {
-               $type = $this->getLinkPathType();
-
-               if ( $type === false ) {
-                       throw new MWException( "This SiteObject does not support link paths." );
-               }
-
-               $this->setPath( $type, $fullUrl );
-       }
-
-       /**
-        * Returns the path path used to construct links with or false if there is no such path.
-        *
-        * @see Site::getLinkPath
-        *
-        * @return string|false
-        */
-       public function getLinkPath() {
-               $type = $this->getLinkPathType();
-               return $type === false ? false : $this->getPath( $type );
-       }
-
-       /**
-        * @see Site::getLinkPathType
-        *
-        * Returns the main path type, that is the type of the path that should generally be used to construct links
-        * to the target site.
-        *
-        * This default implementation returns SiteObject::PATH_LINK as the default path type. Subclasses can override this
-        * to define a different default path type, or return false to disable site links.
-        *
-        * @since 1.21
-        *
-        * @return string|false
-        */
-       public function getLinkPathType() {
-               return self::PATH_LINK;
-       }
-
-       /**
-        * @see Site::getPageUrl
-        *
-        * This implementation returns a URL constructed using the path returned by getLinkPath().
-        *
-        * @since 1.21
-        *
-        * @param bool|String $pageName
-        *
-        * @return string|false
-        */
-       public function getPageUrl( $pageName = false ) {
-               $url = $this->getLinkPath();
-
-               if ( $url === false ) {
-                       return false;
-               }
-
-               if ( $pageName !== false ) {
-                       $url = str_replace( '$1', rawurlencode( $pageName ), $url ) ;
-               }
-
-               return $url;
-       }
-
-       /**
-        * Returns $pageName without changes.
-        * Subclasses may override this to apply some kind of normalization.
-        *
-        * @see Site::normalizePageName
-        *
-        * @since 1.21
-        *
-        * @param string $pageName
-        *
-        * @return string
-        */
-       public function normalizePageName( $pageName ) {
-               return $pageName;
-       }
-
-       /**
-        * Returns the value of a type specific field, or the value
-        * of the $default parameter in case it's not set.
-        *
-        * @since 1.21
-        *
-        * @param string $fieldName
-        * @param mixed $default
-        *
-        * @return array
-        */
-       protected function getExtraData( $fieldName, $default = null ) {
-               $data = $this->getField( 'data', array() );
-               return array_key_exists( $fieldName,$data ) ? $data[$fieldName] : $default;
-       }
-
-       /**
-        * Sets the value of a type specific field.
-        * @since 1.21
-        *
-        * @param string $fieldName
-        * @param mixed $value
-        */
-       protected function setExtraData( $fieldName, $value = null ) {
-               $data = $this->getField( 'data', array() );
-               $data[$fieldName] = $value;
-               $this->setField( 'data', $data );
-       }
-
-       /**
-        * @see Site::getLanguageCode
-        *
-        * @since 1.21
-        *
-        * @return string|false
-        */
-       public function getLanguageCode() {
-               return $this->getField( 'language', false );
-       }
-
-       /**
-        * @see Site::setLanguageCode
-        *
-        * @since 1.21
-        *
-        * @param string $languageCode
-        */
-       public function setLanguageCode( $languageCode ) {
-               $this->setField( 'language', $languageCode );
-       }
-
-       /**
-        * Returns the local identifiers of this site.
-        *
-        * @since 1.21
-        *
-        * @param string $type
-        *
-        * @return array
-        */
-       protected function getLocalIds( $type ) {
-               if ( $this->localIds === false ) {
-                       $this->loadLocalIds();
-               }
-
-               return array_key_exists( $type, $this->localIds ) ? $this->localIds[$type] : array();
-       }
-
-       /**
-        * Loads the local ids for the site.
-        *
-        * @since 1.21
-        */
-       protected function loadLocalIds() {
-               $dbr = wfGetDB( $this->getTable()->getReadDb() );
-
-               $ids = $dbr->select(
-                       'site_identifiers',
-                       array(
-                               'si_type',
-                               'si_key',
-                       ),
-                       array(
-                               'si_site' => $this->getId(),
-                       ),
-                       __METHOD__
-               );
-
-               $this->localIds = array();
-
-               foreach ( $ids as $id ) {
-                       $this->addLocalId( $id->si_type, $id->si_key );
-               }
-       }
-
-       /**
-        * Adds a local identifier.
-        *
-        * @since 1.21
-        *
-        * @param string $type
-        * @param string $identifier
-        */
-       public function addLocalId( $type, $identifier ) {
-               if ( $this->localIds === false ) {
-                       $this->localIds = array();
-               }
-
-               if ( !array_key_exists( $type, $this->localIds ) ) {
-                       $this->localIds[$type] = array();
-               }
-
-               if ( !in_array( $identifier, $this->localIds[$type] ) ) {
-                       $this->localIds[$type][] = $identifier;
-               }
-       }
-
-       /**
-        * @see Site::addInterwikiId
-        *
-        * @since 1.21
-        *
-        * @param string $identifier
-        */
-       public function addInterwikiId( $identifier ) {
-               $this->addLocalId( 'interwiki', $identifier );
-       }
-
-       /**
-        * @see Site::addNavigationId
-        *
-        * @since 1.21
-        *
-        * @param string $identifier
-        */
-       public function addNavigationId( $identifier ) {
-               $this->addLocalId( 'equivalent', $identifier );
-       }
-
-       /**
-        * @see Site::getInterwikiIds
-        *
-        * @since 1.21
-        *
-        * @return array of string
-        */
-       public function getInterwikiIds() {
-               return $this->getLocalIds( 'interwiki' );
-       }
-
-       /**
-        * @see Site::getNavigationIds
-        *
-        * @since 1.21
-        *
-        * @return array of string
-        */
-       public function getNavigationIds() {
-               return $this->getLocalIds( 'equivalent' );
-       }
-
-       /**
-        * @see Site::getInternalId
-        *
-        * @since 1.21
-        *
-        * @return integer
-        */
-       public function getInternalId() {
-               return $this->getId();
-       }
-
-       /**
-        * @see IORMRow::save
-        * @see Site::save
-        *
-        * @since 1.21
-        *
-        * @param string|null $functionName
-        *
-        * @return boolean Success indicator
-        */
-       public function save( $functionName = null ) {
-               $dbw = $this->table->getWriteDbConnection();
-
-               $trx = $dbw->trxLevel();
-
-               if ( $trx == 0 ) {
-                       $dbw->begin( __METHOD__ );
-               }
-
-               $this->setField( 'protocol', $this->getProtocol() );
-               $this->setField( 'domain', strrev( $this->getDomain() ) . '.' );
-
-               $existedAlready = $this->hasIdField();
-
-               $success = parent::save( $functionName );
-
-               if ( $success && $existedAlready ) {
-                       $dbw->delete(
-                               'site_identifiers',
-                               array( 'si_site' => $this->getId() ),
-                               __METHOD__
-                       );
-               }
-
-               if ( $success && $this->localIds !== false ) {
-                       foreach ( $this->localIds as $type => $ids ) {
-                               foreach ( $ids as $id ) {
-                                       $dbw->insert(
-                                               'site_identifiers',
-                                               array(
-                                                       'si_site' => $this->getId(),
-                                                       'si_type' => $type,
-                                                       'si_key' => $id,
-                                               ),
-                                               __METHOD__
-                                       );
-                               }
-                       }
-               }
-
-               if ( $trx == 0 ) {
-                       $dbw->commit( __METHOD__ );
-               }
-
-               return $success;
-       }
-
-       /**
-        * @since 1.21
-        *
-        * @see ORMRow::onRemoved
-        */
-       protected function onRemoved() {
-               $dbw = $this->table->getWriteDbConnection();
-
-               $dbw->delete(
-                       'site_identifiers',
-                       array(
-                               'si_site' => $this->getId()
-                       ),
-                       __METHOD__
-               );
-
-               parent::onRemoved();
-       }
-
-       /**
-        * @see Site::setPath
-        *
-        * @since 1.21
-        *
-        * @param string $pathType
-        * @param string $fullUrl
-        */
-       public function setPath( $pathType, $fullUrl ) {
-               $paths = $this->getExtraData( 'paths', array() );
-               $paths[$pathType] = $fullUrl;
-               $this->setExtraData( 'paths', $paths );
-       }
-
-       /**
-        * @see Sitres::getPath
-        *
-        * @since 1.21
-        *
-        * @param string $pathType
-        *
-        * @return string|false
-        */
-       public function getPath( $pathType ) {
-               $paths = $this->getExtraData( 'paths', array() );
-               return array_key_exists( $pathType, $paths ) ? $paths[$pathType] : false;
-       }
-
-       /**
-        * @see Sitres::getAll
-        *
-        * @since 1.21
-        *
-        * @return array of string
-        */
-       public function getAllPaths() {
-               return $this->getExtraData( 'paths', array() );
-       }
-
-       /**
-        * @see Sitres::removePath
-        *
-        * @since 1.21
-        *
-        * @param string $pathType
-        */
-       public function removePath( $pathType ) {
-               $paths = $this->getExtraData( 'paths', array() );
-               unset( $paths[$pathType] );
-               $this->setExtraData( 'paths', $paths );
-       }
-
-}
diff --git a/includes/site/SiteSQLStore.php b/includes/site/SiteSQLStore.php
new file mode 100644 (file)
index 0000000..470fe26
--- /dev/null
@@ -0,0 +1,453 @@
+<?php
+
+/**
+ * Represents the site configuration of a wiki.
+ * Holds a list of sites (ie SiteList) and takes care
+ * of retrieving and caching site information when appropriate.
+ *
+ * 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
+ *
+ * @since 1.21
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class SiteSQLStore implements SiteStore {
+
+       /**
+        * @since 1.21
+        *
+        * @var SiteList|null
+        */
+       protected $sites = null;
+
+       /**
+        * @var ORMTable
+        */
+       protected $sitesTable;
+
+       /**
+        * @var string|null
+        */
+       private $cacheKey = null;
+
+       /**
+        * @since 1.21
+        *
+        * @param ORMTable|null $sitesTable
+        *
+        * @return SiteStore
+        */
+       public static function newInstance( ORMTable $sitesTable = null ) {
+               return new static( $sitesTable );
+       }
+
+       /**
+        * Constructor.
+        *
+        * @since 1.21
+        *
+        * @param ORMTable|null $sitesTable
+        */
+       protected function __construct( ORMTable $sitesTable = null ) {
+               if ( $sitesTable === null ) {
+                       $sitesTable = $this->newSitesTable();
+               }
+
+               $this->sitesTable = $sitesTable;
+       }
+
+       /**
+        * Constructs a cache key to use for caching the list of sites.
+        *
+        * This includes the concrete class name of the site list as well as a version identifier
+        * for the list's serialization, to avoid problems when unserializing site lists serialized
+        * by an older version, e.g. when reading from a cache.
+        *
+        * The cache key also includes information about where the sites were loaded from, e.g.
+        * the name of a database table.
+        *
+        * @see SiteList::getSerialVersionId
+        *
+        * @return String The cache key.
+        */
+       protected function getCacheKey() {
+               if ( $this->cacheKey === null ) {
+                       $type = 'SiteList#' . SiteList::getSerialVersionId();
+                       $source = $this->sitesTable->getName();
+
+                       if ( $this->sitesTable->getTargetWiki() !== false ) {
+                               $source = $this->sitesTable->getTargetWiki() . '.' . $source;
+                       }
+
+                       $this->cacheKey = wfMemcKey( "$source/$type" );
+               }
+
+               return $this->cacheKey;
+       }
+
+       /**
+        * @see SiteStore::getSites
+        *
+        * @since 1.21
+        *
+        * @param string $source either 'cache' or 'recache'
+        *
+        * @return SiteList
+        */
+       public function getSites( $source = 'cache' ) {
+               if ( $source === 'cache' ) {
+                       if ( $this->sites === null ) {
+                               $cache = wfGetMainCache();
+                               $sites = $cache->get( $this->getCacheKey() );
+
+                               if ( is_object( $sites ) ) {
+                                       $this->sites = $sites;
+                               } else {
+                                       $this->loadSites();
+                               }
+                       }
+               }
+               else {
+                       $this->loadSites();
+               }
+
+               return $this->sites;
+       }
+
+       /**
+        * Returns a new Site object constructed from the provided ORMRow.
+        *
+        * @since 1.21
+        *
+        * @param ORMRow $siteRow
+        *
+        * @return Site
+        */
+       protected function siteFromRow( ORMRow $siteRow ) {
+               $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
+
+               $site->setGlobalId( $siteRow->getField( 'global_key' ) );
+
+               if ( $siteRow->hasField( 'forward' ) ) {
+                       $site->setForward( $siteRow->getField( 'forward' ) );
+               }
+
+               if ( $siteRow->hasField( 'group' ) ) {
+                       $site->setGroup( $siteRow->getField( 'group' ) );
+               }
+
+               if ( $siteRow->hasField( 'language' ) ) {
+                       $site->setLanguageCode( $siteRow->getField( 'language' ) === '' ? null : $siteRow->getField( 'language' ) );
+               }
+
+               if ( $siteRow->hasField( 'source' ) ) {
+                       $site->setSource( $siteRow->getField( 'source' ) );
+               }
+
+               if ( $siteRow->hasField( 'data' ) ) {
+                       $site->setExtraData( $siteRow->getField( 'data' ) );
+               }
+
+               if ( $siteRow->hasField( 'config' ) ) {
+                       $site->setExtraConfig( $siteRow->getField( 'config' ) );
+               }
+
+               return $site;
+       }
+
+       /**
+        * Fetches the site from the database and loads them into the sites field.
+        *
+        * @since 1.21
+        */
+       protected function loadSites() {
+               $this->sites = new SiteList();
+
+               foreach ( $this->sitesTable->select() as $siteRow ) {
+                       $this->sites[] = $this->siteFromRow( $siteRow );
+               }
+
+               // Batch load the local site identifiers.
+               $ids = wfGetDB( $this->sitesTable->getReadDb() )->select(
+                       'site_identifiers',
+                       array(
+                               'si_site',
+                               'si_type',
+                               'si_key',
+                       ),
+                       array(),
+                       __METHOD__
+               );
+
+               foreach ( $ids as $id ) {
+                       if ( $this->sites->hasInternalId( $id->si_site ) ) {
+                               $site = $this->sites->getSiteByInternalId( $id->si_site );
+                               $site->addLocalId( $id->si_type, $id->si_key );
+                               $this->sites->setSite( $site );
+                       }
+               }
+
+               $cache = wfGetMainCache();
+               $cache->set( $this->getCacheKey(), $this->sites );
+       }
+
+       /**
+        * @see SiteStore::getSite
+        *
+        * @since 1.21
+        *
+        * @param string $globalId
+        * @param string $source
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId, $source = 'cache' ) {
+               $sites = $this->getSites( $source );
+
+               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+       }
+
+       /**
+        * @see SiteStore::saveSite
+        *
+        * @since 1.21
+        *
+        * @param Site $site
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSite( Site $site ) {
+               return $this->saveSites( array( $site ) );
+       }
+
+       /**
+        * @see SiteStore::saveSites
+        *
+        * @since 1.21
+        *
+        * @param Site[] $sites
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSites( array $sites ) {
+               if ( empty( $sites ) ) {
+                       return true;
+               }
+
+               $dbw = $this->sitesTable->getWriteDbConnection();
+
+               $trx = $dbw->trxLevel();
+
+               if ( $trx == 0 ) {
+                       $dbw->begin( __METHOD__ );
+               }
+
+               $success = true;
+
+               $internalIds = array();
+               $localIds = array();
+
+               foreach ( $sites as $site ) {
+                       $fields = array(
+                               // Site data
+                               'global_key' => $site->getGlobalId(), // TODO: check not null
+                               'type' => $site->getType(),
+                               'group' => $site->getGroup(),
+                               'source' => $site->getSource(),
+                               'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
+                               'protocol' => $site->getProtocol(),
+                               'domain' => strrev( $site->getDomain() ) . '.',
+                               'data' => $site->getExtraData(),
+
+                               // Site config
+                               'forward' => $site->shouldForward(),
+                               'config' => $site->getExtraConfig(),
+                       );
+
+                       if ( $site->getInternalId() !== null ) {
+                               $fields['id'] = $site->getInternalId();
+                               $internalIds[] = $site->getInternalId();
+                       }
+
+                       $siteRow = new ORMRow( $this->sitesTable, $fields );
+                       $success = $siteRow->save( __METHOD__ ) && $success;
+
+                       foreach ( $site->getLocalIds() as $idType => $ids ) {
+                               foreach ( $ids as $id ) {
+                                       $localIds[] = array( $siteRow->getId(), $idType, $id );
+                               }
+                       }
+               }
+
+               if ( $internalIds !== array() ) {
+                       $dbw->delete(
+                               'site_identifiers',
+                               array( 'si_site' => $internalIds ),
+                               __METHOD__
+                       );
+               }
+
+               foreach ( $localIds as $localId ) {
+                       $dbw->insert(
+                               'site_identifiers',
+                               array(
+                                       'si_site' => $localId[0],
+                                       'si_type' => $localId[1],
+                                       'si_key' => $localId[2],
+                               ),
+                               __METHOD__
+                       );
+               }
+
+               if ( $trx == 0 ) {
+                       $dbw->commit( __METHOD__ );
+               }
+
+               // purge cache
+               $this->reset();
+
+               return $success;
+       }
+
+       /**
+        * Purges the internal and external cache of the site list, forcing the list
+        * of sites to be re-read from the database.
+        *
+        * @since 1.21
+        */
+       public function reset() {
+               // purge cache
+               $cache = wfGetMainCache();
+               $cache->delete( $this->getCacheKey() );
+               $this->sites = null;
+       }
+
+       /**
+        * Clears the list of sites stored in the database.
+        *
+        * @see SiteStore::clear()
+        *
+        * @return bool success
+        */
+       public function clear() {
+               $dbw = $this->sitesTable->getWriteDbConnection();
+
+               $trx = $dbw->trxLevel();
+
+               if ( $trx == 0 ) {
+                       $dbw->begin( __METHOD__ );
+               }
+
+               $ok = $dbw->delete( 'sites', '*', __METHOD__ );
+               $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
+
+               if ( $trx == 0 ) {
+                       $dbw->commit( __METHOD__ );
+               }
+
+               $this->reset();
+
+               return $ok;
+       }
+
+       /**
+        * @since 1.21
+        *
+        * @return ORMTable
+        */
+       protected function newSitesTable() {
+               return new ORMTable(
+                       'sites',
+                       array(
+                               'id' => 'id',
+
+                               // Site data
+                               'global_key' => 'str',
+                               'type' => 'str',
+                               'group' => 'str',
+                               'source' => 'str',
+                               'language' => 'str',
+                               'protocol' => 'str',
+                               'domain' => 'str',
+                               'data' => 'array',
+
+                               // Site config
+                               'forward' => 'bool',
+                               'config' => 'array',
+                       ),
+                       array(
+                               'type' => Site::TYPE_UNKNOWN,
+                               'group' => Site::GROUP_NONE,
+                               'source' => Site::SOURCE_LOCAL,
+                               'data' => array(),
+
+                               'forward' => false,
+                               'config' => array(),
+                               'language' => '',
+                       ),
+                       'ORMRow',
+                       'site_'
+               );
+       }
+
+}
+
+/**
+ * @deprecated
+ */
+class Sites extends SiteSQLStore {
+
+       /**
+        * Factory for creating new site objects.
+        *
+        * @since 1.21
+        * @deprecated
+        *
+        * @param string|boolean false $globalId
+        *
+        * @return Site
+        */
+       public static function newSite( $globalId = false ) {
+               $site = new Site();
+
+               if ( $globalId !== false ) {
+                       $site->setGlobalId( $globalId );
+               }
+
+               return $site;
+       }
+
+       /**
+        * @deprecated
+        * @return SiteStore
+        */
+       public static function singleton() {
+               return new static();
+       }
+
+       /**
+        * @deprecated
+        * @return SiteList
+        */
+       public function getSiteGroup( $group ) {
+               return $this->getSites()->getGroup( $group );
+       }
+
+}
diff --git a/includes/site/SiteStore.php b/includes/site/SiteStore.php
new file mode 100644 (file)
index 0000000..52ba8fb
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * Interface for service objects providing a storage interface for Site objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.21
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+interface SiteStore {
+
+       /**
+        * Saves the provided site.
+        *
+        * @since 1.21
+        *
+        * @param Site $site
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSite( Site $site );
+
+       /**
+        * Saves the provided sites.
+        *
+        * @since 1.21
+        *
+        * @param Site[] $sites
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSites( array $sites );
+
+       /**
+        * Returns the site with provided global id, or null if there is no such site.
+        *
+        * @since 1.21
+        *
+        * @param string $globalId
+        * @param string $source either 'cache' or 'recache'.
+        * If 'cache', the values are allowed (but not obliged) to come from a cache.
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId, $source = 'cache' );
+
+       /**
+        * Returns a list of all sites. By default this site is
+        * fetched from the cache, which can be changed to loading
+        * the list from the database using the $useCache parameter.
+        *
+        * @since 1.21
+        *
+        * @param string $source either 'cache' or 'recache'.
+        * If 'cache', the values are allowed (but not obliged) to come from a cache.
+        *
+        * @return SiteList
+        */
+       public function getSites( $source = 'cache' );
+
+       /**
+        * Deletes all sites from the database. After calling clear(), getSites() will return an empty
+        * list and getSite() will return null until saveSite() or saveSites() is called.
+        */
+       public function clear();
+}
diff --git a/includes/site/Sites.php b/includes/site/Sites.php
deleted file mode 100644 (file)
index a67d474..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-
-/**
- * Represents the site configuration of a wiki.
- * Holds a list of sites (ie SiteList) and takes care
- * of retrieving and caching site information when appropriate.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class Sites {
-
-       /**
-        * @since 1.21
-        * @var SiteList|null
-        */
-       protected $sites = null;
-
-       /**
-        * Constructor.
-        *
-        * @since 1.21
-        */
-       protected function __construct() {}
-
-       /**
-        * Returns an instance of Sites.
-        *
-        * @since 1.21
-        *
-        * @return Sites
-        */
-       public static function singleton() {
-               static $instance = false;
-
-               if ( $instance === false ) {
-                       $instance = new static();
-               }
-
-               return $instance;
-       }
-
-       /**
-        * Factory for creating new site objects.
-        *
-        * @since 1.21
-        *
-        * @param string|boolean false $globalId
-        *
-        * @return Site
-        */
-       public static function newSite( $globalId = false ) {
-               /**
-                * @var Site $site
-                */
-               $site = SitesTable::singleton()->newRow( array(), true );
-
-               if ( $globalId !== false ) {
-                       $site->setGlobalId( $globalId );
-               }
-
-               return $site;
-       }
-
-       /**
-        * Returns a list of all sites. By default this site is
-        * fetched from the cache, which can be changed to loading
-        * the list from the database using the $useCache parameter.
-        *
-        * @since 1.21
-        *
-        * @param string $source either 'cache' or 'recache'
-        *
-        * @return SiteList
-        */
-       public function getSites( $source = 'cache' ) {
-               if ( $source === 'cache' ) {
-                       if ( $this->sites === null ) {
-                               $cache = wfGetMainCache();
-                               $sites = $cache->get( wfMemcKey( 'SiteList' ) );
-
-                               if ( is_object( $sites ) && isset( $sites->cacheVersion ) && $sites->cacheVersion === SiteArray::CACHE_VERSION ) {
-                                       $this->sites = $sites;
-                               } else {
-                                       $this->loadSites();
-                               }
-                       }
-               }
-               else {
-                       $this->loadSites();
-               }
-
-               return $this->sites;
-       }
-
-       /**
-        * Returns a list of sites in the given group. Calling getGroup() on any of
-        * the sites in the resulting SiteList shall return $group.
-        *
-        * @since 1.21
-        *
-        * @param string $group th group to get.
-        *
-        * @return SiteList
-        */
-       public function getSiteGroup( $group ) {
-               $sites = self::getSites();
-
-               $siteGroup = new SiteArray();
-
-               /* @var Site $site */
-               foreach ( $sites as $site ) {
-                       if ( $site->getGroup() == $group ) {
-                               $siteGroup->append( $site );
-                       }
-               }
-
-               return $siteGroup;
-       }
-
-       /**
-        * Fetches the site from the database and loads them into the sites field.
-        *
-        * @since 1.21
-        */
-       protected function loadSites() {
-               $this->sites = new SiteArray( SitesTable::singleton()->select() );
-
-               // Batch load the local site identifiers.
-               $dbr = wfGetDB( SitesTable::singleton()->getReadDb() );
-
-               $ids = $dbr->select(
-                       'site_identifiers',
-                       array(
-                               'si_site',
-                               'si_type',
-                               'si_key',
-                       ),
-                       array(),
-                       __METHOD__
-               );
-
-               foreach ( $ids as $id ) {
-                       if ( $this->sites->hasInternalId( $id->si_site ) ) {
-                               $site = $this->sites->getSiteByInternalId( $id->si_site );
-                               $site->addLocalId( $id->si_type, $id->si_key );
-                               $this->sites->setSite( $site );
-                       }
-               }
-
-               $cache = wfGetMainCache();
-               $cache->set( wfMemcKey( 'SiteList' ), $this->sites );
-       }
-
-       /**
-        * Returns the site with provided global id, or false if there is no such site.
-        *
-        * @since 1.21
-        *
-        * @param string $globalId
-        * @param string $source
-        *
-        * @return Site|false
-        */
-       public function getSite( $globalId, $source = 'cache' ) {
-               $sites = $this->getSites( $source );
-
-               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : false;
-       }
-
-}
diff --git a/includes/site/SitesTable.php b/includes/site/SitesTable.php
deleted file mode 100644 (file)
index bb12740..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * Represents the sites database table.
- * All access to this table should be done through this 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
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SitesTable extends ORMTable {
-
-       /**
-        * @see IORMTable::getName()
-        * @since 1.21
-        * @return string
-        */
-       public function getName() {
-               return 'sites';
-       }
-
-       /**
-        * @see IORMTable::getFieldPrefix()
-        * @since 1.21
-        * @return string
-        */
-       public function getFieldPrefix() {
-               return 'site_';
-       }
-
-       /**
-        * @see IORMTable::getRowClass()
-        * @since 1.21
-        * @return string
-        */
-       public function getRowClass() {
-               return 'SiteObject';
-       }
-
-       /**
-        * @see IORMTable::getFields()
-        * @since 1.21
-        * @return array
-        */
-       public function getFields() {
-               return array(
-                       'id' => 'id',
-
-                       // Site data
-                       'global_key' => 'str',
-                       'type' => 'str',
-                       'group' => 'str',
-                       'source' => 'str',
-                       'language' => 'str',
-                       'protocol' => 'str',
-                       'domain' => 'str',
-                       'data' => 'array',
-
-                       // Site config
-                       'forward' => 'bool',
-                       'config' => 'array',
-               );
-       }
-
-       /**
-        * @see IORMTable::getDefaults()
-        * @since 1.21
-        * @return array
-        */
-       public function getDefaults() {
-               return array(
-                       'type' => Site::TYPE_UNKNOWN,
-                       'group' => Site::GROUP_NONE,
-                       'source' => Site::SOURCE_LOCAL,
-                       'data' => array(),
-
-                       'forward' => false,
-                       'config' => array(),
-                       'language' => 'en', // XXX: can we default to '' instead?
-               );
-       }
-
-       /**
-        * Returns the class name for the provided site type.
-        *
-        * @since 1.21
-        *
-        * @param integer $siteType
-        *
-        * @return string
-        */
-       protected static function getClassForType( $siteType ) {
-               global $wgSiteTypes;
-               return array_key_exists( $siteType, $wgSiteTypes ) ? $wgSiteTypes[$siteType] : 'SiteObject';
-       }
-
-       /**
-        * Factory method to construct a new Site instance.
-        *
-        * @since 1.21
-        *
-        * @param array $data
-        * @param boolean $loadDefaults
-        *
-        * @return Site
-        */
-       public function newRow( array $data, $loadDefaults = false ) {
-               if ( !array_key_exists( 'type', $data ) ) {
-                       $data['type'] = Site::TYPE_UNKNOWN;
-               }
-
-               $class = static::getClassForType( $data['type'] );
-
-               return new $class( $this, $data, $loadDefaults );
-       }
-
-}
\ No newline at end of file
index 8bef55c..f7e316b 100644 (file)
@@ -727,10 +727,10 @@ class ContribsPager extends ReverseChronologicalPager {
                        }
                }
                if ( $this->deletedOnly ) {
-                       $condition[] = "rev_deleted != '0'";
+                       $condition[] = 'rev_deleted != 0';
                }
                if ( $this->topOnly ) {
-                       $condition[] = "rev_id = page_latest";
+                       $condition[] = 'rev_id = page_latest';
                }
                return array( $tables, $index, $condition, $join_conds );
        }
index eca62f2..ae7657c 100644 (file)
@@ -489,7 +489,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                $title = Title::makeTitleSafe( $namespace, $dbkey );
                                if ( $this->checkTitle( $title, $namespace, $dbkey ) ) {
                                        $text = $this->buildRemoveLine( $title );
-                                       $fields['TitlesNs'.$namespace]['options'][$text] = htmlspecialchars( $title->getPrefixedText() );
+                                       $fields['TitlesNs'.$namespace]['options'][$text] = $title->getPrefixedText();
                                        $count++;
                                }
                        }
index f4acd64..cdad688 100644 (file)
@@ -85,7 +85,7 @@ class ListredirectsPage extends QueryPage {
                $batch->execute();
 
                // Back to start for display
-               if ( $db->numRows( $res ) > 0 ) {
+               if ( $res->numRows() > 0 ) {
                        // If there are no rows we get an error seeking.
                        $db->dataSeek( $res, 0 );
                }
index c6b2bb6..340172c 100644 (file)
@@ -78,7 +78,7 @@ class SpecialPreferences extends SpecialPage {
 
        public function submitReset( $formData ) {
                $user = $this->getUser();
-               $user->resetOptions();
+               $user->resetOptions( 'all' );
                $user->saveSettings();
 
                $url = $this->getTitle()->getFullURL( 'success' );
index 74ed537..db3f012 100644 (file)
@@ -343,11 +343,10 @@ class ProtectedPagesPager extends AlphabeticPager {
                }
 
                if( $this->indefonly ) {
-                       $db = wfGetDB( DB_SLAVE );
-                       $conds[] = "pr_expiry = {$db->addQuotes( $db->getInfinity() )} OR pr_expiry IS NULL";
+                       $conds[] = "pr_expiry = {$this->mDb->addQuotes( $this->mDb->getInfinity() )} OR pr_expiry IS NULL";
                }
                if( $this->cascadeonly ) {
-                       $conds[] = "pr_cascade = '1'";
+                       $conds[] = 'pr_cascade = 1';
                }
 
                if( $this->level )
@@ -356,7 +355,8 @@ class ProtectedPagesPager extends AlphabeticPager {
                        $conds[] = 'page_namespace=' . $this->mDb->addQuotes( $this->namespace );
                return array(
                        'tables' => array( 'page_restrictions', 'page' ),
-                       'fields' => 'pr_id,page_namespace,page_title,page_len,pr_type,pr_level,pr_expiry,pr_cascade',
+                       'fields' => array( 'pr_id', 'page_namespace', 'page_title', 'page_len',
+                               'pr_type', 'pr_level', 'pr_expiry', 'pr_cascade' ),
                        'conds' => $conds
                );
        }
index a80f0d0..cf1e2b4 100644 (file)
@@ -238,7 +238,8 @@ class ProtectedTitlesPager extends AlphabeticPager {
                        $conds[] = 'pt_namespace=' . $this->mDb->addQuotes( $this->namespace );
                return array(
                        'tables' => 'protected_titles',
-                       'fields' => 'pt_namespace,pt_title,pt_create_perm,pt_expiry,pt_timestamp',
+                       'fields' => array( 'pt_namespace', 'pt_title', 'pt_create_perm',
+                               'pt_expiry', 'pt_timestamp' ),
                        'conds' => $conds
                );
        }
index 3977673..a8166db 100644 (file)
@@ -387,8 +387,11 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        $tables[] = 'watchlist';
                        $fields[] = 'wl_user';
                        $fields[] = 'wl_notificationtimestamp';
-                       $join_conds['watchlist'] = array('LEFT JOIN',
-                               "wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace");
+                       $join_conds['watchlist'] = array('LEFT JOIN', array(
+                               'wl_user' => $uid,
+                               'wl_title=rc_title',
+                               'wl_namespace=rc_namespace'
+                       ));
                }
                if ( $this->getUser()->isAllowed( 'rollback' ) ) {
                        $tables[] = 'page';
index 67a8609..4d57bc7 100644 (file)
@@ -102,7 +102,11 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                if( $uid ) {
                        $tables[] = 'watchlist';
                        $select[] = 'wl_user';
-                       $join_conds['watchlist'] = array( 'LEFT JOIN', "wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace" );
+                       $join_conds['watchlist'] = array( 'LEFT JOIN', array(
+                               'wl_user' => $uid,
+                               'wl_title=rc_title',
+                               'wl_namespace=rc_namespace'
+                       ));
                }
                if ( $this->getUser()->isAllowed( 'rollback' ) ) {
                        $tables[] = 'page';
@@ -175,7 +179,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                                        $subconds["rc_namespace"] = $link_ns;
                                        $subjoin = "rc_title = {$pfx}_to";
                                } else {
-                                       $subjoin = "rc_namespace = {$pfx}_namespace AND rc_title = {$pfx}_title";
+                                       $subjoin = array( "rc_namespace = {$pfx}_namespace", "rc_title = {$pfx}_title" );
                                }
                        }
 
index 7c8ff84..bc90d2b 100644 (file)
@@ -288,6 +288,13 @@ class SpecialSearch extends SpecialPage {
 
                        $this->didYouMeanHtml = '<div class="searchdidyoumean">' . $this->msg( 'search-suggest' )->rawParams( $suggestLink )->text() . '</div>';
                }
+
+               if ( !wfRunHooks( 'SpecialSearchResultsPrepend', array( $this, $out, $term ) ) ) {
+                       # Hook requested termination
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
                // start rendering the page
                $out->addHtml(
                        Xml::openElement(
@@ -404,6 +411,7 @@ class SpecialSearch extends SpecialPage {
                if( $num || $this->offset ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
+               wfRunHooks( 'SpecialSearchResultsAppend', array( $this, $out, $term ) );
                wfProfileOut( __METHOD__ );
        }
 
index 7700279..d9c4244 100644 (file)
@@ -212,7 +212,7 @@ class LoginForm extends SpecialPage {
                $result = $this->mailPasswordInternal( $u, false, 'createaccount-title', 'createaccount-text' );
 
                wfRunHooks( 'AddNewAccount', array( $u, true ) );
-               $u->addNewUserLogEntry( true, $this->mReason );
+               $u->addNewUserLogEntry( 'byemail', $this->mReason );
 
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'accmailtitle' ) );
@@ -274,7 +274,7 @@ class LoginForm extends SpecialPage {
                        // wrong.
                        $this->getContext()->setUser( $u );
                        wfRunHooks( 'AddNewAccount', array( $u, false ) );
-                       $u->addNewUserLogEntry();
+                       $u->addNewUserLogEntry( 'create' );
                        if( $this->hasSessionCookie() ) {
                                $this->successfulCreation();
                        } else {
@@ -286,7 +286,7 @@ class LoginForm extends SpecialPage {
                        $out->addWikiMsg( 'accountcreatedtext', $u->getName() );
                        $out->addReturnTo( $this->getTitle() );
                        wfRunHooks( 'AddNewAccount', array( $u, false ) );
-                       $u->addNewUserLogEntry( false, $this->mReason );
+                       $u->addNewUserLogEntry( 'create2', $this->mReason );
                }
                return true;
        }
@@ -328,7 +328,7 @@ class LoginForm extends SpecialPage {
                # Request forgery checks.
                if ( !self::getCreateaccountToken() ) {
                        self::setCreateaccountToken();
-                       return Status::newFatal( 'sessionfailure' );
+                       return Status::newFatal( 'nocookiesfornew' );
                }
 
                # The user didn't pass a createaccount token
index 3cfa31f..afa9c78 100644 (file)
@@ -91,7 +91,9 @@ class SpecialWatchlist extends SpecialPage {
                        return;
                }
 
-               $nitems = $this->countItems();
+               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
+
+               $nitems = $this->countItems( $dbr );
                if ( $nitems == 0 ) {
                        $output->addWikiMsg( 'nowatchlist' );
                        return;
@@ -190,13 +192,11 @@ class SpecialWatchlist extends SpecialPage {
                        return;
                }
 
-               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
-
                # Possible where conditions
                $conds = array();
 
                if( $values['days'] > 0 ) {
-                       $conds[] = "rc_timestamp > '".$dbr->timestamp( time() - intval( $values['days'] * 86400 ) )."'";
+                       $conds[] = 'rc_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( time() - intval( $values['days'] * 86400 ) ) );
                }
 
                # If the watchlist is relatively short, it's simplest to zip
@@ -497,11 +497,10 @@ class SpecialWatchlist extends SpecialPage {
        /**
         * Count the number of items on a user's watchlist
         *
+        * @param $dbr A database connection
         * @return Integer
         */
-       protected function countItems() {
-               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
-
+       protected function countItems( $dbr ) {
                # Fetch the raw count
                $res = $dbr->select( 'watchlist', array( 'count' => 'COUNT(*)' ),
                        array( 'wl_user' => $this->getUser()->getId() ), __METHOD__ );
index f135649..85876e9 100644 (file)
@@ -187,7 +187,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                                $joinConds);
                }
 
-               if( ( !$fetchlinks || !$dbr->numRows($plRes) ) && ( $hidetrans || !$dbr->numRows($tlRes) ) && ( $hideimages || !$dbr->numRows($ilRes) ) ) {
+               if( ( !$fetchlinks || !$plRes->numRows() ) && ( $hidetrans || !$tlRes->numRows() ) && ( $hideimages || !$ilRes->numRows() ) ) {
                        if ( 0 == $level ) {
                                $out->addHTML( $this->whatlinkshereForm() );
 
index d933d34..54ef840 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Maintenance
  */
 require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
+set_time_limit( 3600 ); // 1 hour
 
 /**
  * Assemble the segments of a chunked upload.
diff --git a/includes/upload/PublishStashedFile.php b/includes/upload/PublishStashedFile.php
new file mode 100644 (file)
index 0000000..8198dea
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+/**
+ * Upload a file from the upload stash into the local file repo.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
+set_time_limit( 3600 ); // 1 hour
+
+/**
+ * Upload a file from the upload stash into the local file repo.
+ *
+ * @ingroup Maintenance
+ */
+class PublishStashedFile extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Upload stashed file into the local file repo";
+               $this->addOption( 'filename', "Desired file name", true, true );
+               $this->addOption( 'filekey', "Upload stash file key", true, true );
+               $this->addOption( 'userid', "Upload owner user ID", true, true );
+               $this->addOption( 'comment', "Upload comment", true, true );
+               $this->addOption( 'text', "Upload description", true, true );
+               $this->addOption( 'watch', "Whether the uploader should watch the page", true, true );
+               $this->addOption( 'sessionid', "Upload owner session ID", true, true );
+       }
+
+       public function execute() {
+               wfSetupSession( $this->getOption( 'sessionid' ) );
+               try {
+                       $user = User::newFromId( $this->getOption( 'userid' ) );
+                       if ( !$user ) {
+                               throw new MWException( "No user with ID " . $this->getOption( 'userid' ) . "." );
+                       }
+
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
+                       );
+
+                       $upload = new UploadFromStash( $user );
+                       // @TODO: initialize() causes a GET, ideally we could frontload the antivirus
+                       // checks and anything else to the stash stage (which includes concatenation and
+                       // the local file is thus already there). That way, instead of GET+PUT, there could
+                       // just be a COPY operation from the stash to the public zone.
+                       $upload->initialize( $this->getOption( 'filekey' ), $this->getOption( 'filename' ) );
+
+                       // Check if the local file checks out (this is generally a no-op)
+                       $verification = $upload->verifyUpload();
+                       if ( $verification['status'] !== UploadBase::OK ) {
+                               $status = Status::newFatal( 'verification-error' );
+                               $status->value = array( 'verification' => $verification );
+                               UploadBase::setSessionStatus(
+                                       $this->getOption( 'filekey' ),
+                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
+                               );
+                               $this->error( "Could not verify upload.\n", 1 ); // die
+                       }
+
+                       // Upload the stashed file to a permanent location
+                       $status = $upload->performUpload(
+                               $this->getOption( 'comment' ),
+                               $this->getOption( 'text' ),
+                               $this->getOption( 'watch' ),
+                               $user
+                       );
+                       if ( !$status->isGood() ) {
+                               UploadBase::setSessionStatus(
+                                       $this->getOption( 'filekey' ),
+                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
+                               );
+                               $this->error( $status->getWikiText() . "\n", 1 ); // die
+                       }
+
+                       // Build the image info array while we have the local reference handy
+                       $apiMain = new ApiMain(); // dummy object (XXX)
+                       $imageInfo = $upload->getImageInfo( $apiMain->getResult() );
+
+                       // Cleanup any temporary local file
+                       $upload->cleanupTempFile();
+
+                       // Cache the info so the user doesn't have to wait forever to get the final info
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array(
+                                       'result'    => 'Success',
+                                       'stage'     => 'publish',
+                                       'filename'  => $upload->getLocalFile()->getName(),
+                                       'imageinfo' => $imageInfo,
+                                       'status'    => Status::newGood()
+                               )
+                       );
+               } catch ( MWException $e ) {
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array(
+                                       'result' => 'Failure',
+                                       'stage'  => 'publish',
+                                       'status' => Status::newFatal( 'api-error-publishfailed' )
+                               )
+                       );
+                       throw $e;
+               }
+               session_write_close();
+       }
+}
+
+$maintClass = "PublishStashedFile";
+require_once( RUN_MAINTENANCE_IF_MAIN );
index dc32a29..b5c65e5 100644 (file)
@@ -235,6 +235,14 @@ abstract class UploadBase {
                return $this->mFileSize;
        }
 
+       /**
+        * Get the base 36 SHA1 of the file
+        * @return string
+        */
+       protected function getTempFileSha1Base36() {
+               return FSFile::getSha1Base36FromPath( $this->mTempPath );
+       }
+
        /**
         * @param $srcPath String: the source path
         * @return string the real path if it was a virtual URL
@@ -546,7 +554,9 @@ abstract class UploadBase {
        }
 
        /**
-        * Check for non fatal problems with the file
+        * Check for non fatal problems with the file.
+        *
+        * This should not assume that mTempPath is set.
         *
         * @return Array of warnings
         */
@@ -594,7 +604,7 @@ abstract class UploadBase {
                }
 
                // Check dupes against existing files
-               $hash = FSFile::getSha1Base36FromPath( $this->mTempPath );
+               $hash = $this->getTempFileSha1Base36();
                $dupes = RepoGroup::singleton()->findBySha1( $hash );
                $title = $this->getTitle();
                // Remove all matches against self
@@ -1224,27 +1234,22 @@ abstract class UploadBase {
                        }
                }
 
+               /* NB: AV_NO_VIRUS is 0 but AV_SCAN_FAILED is false,
+                * so we need the strict equalities === and thus can't use a switch here
+                */
                if ( $mappedCode === AV_SCAN_FAILED ) {
                        # scan failed (code was mapped to false by $exitCodeMap)
                        wfDebug( __METHOD__ . ": failed to scan $file (code $exitCode).\n" );
 
-                       if ( $wgAntivirusRequired ) {
-                               wfProfileOut( __METHOD__ );
-                               return wfMessage( 'virus-scanfailed', array( $exitCode ) )->text();
-                       } else {
-                               wfProfileOut( __METHOD__ );
-                               return null;
-                       }
+                       $output = $wgAntivirusRequired ? wfMessage( 'virus-scanfailed', array( $exitCode ) )->text() : null;
                } elseif ( $mappedCode === AV_SCAN_ABORTED ) {
                        # scan failed because filetype is unknown (probably imune)
                        wfDebug( __METHOD__ . ": unsupported file type $file (code $exitCode).\n" );
-                       wfProfileOut( __METHOD__ );
-                       return null;
+                       $output = null;
                } elseif ( $mappedCode === AV_NO_VIRUS ) {
                        # no virus found
                        wfDebug( __METHOD__ . ": file passed virus scan.\n" );
-                       wfProfileOut( __METHOD__ );
-                       return false;
+                       $output = false;
                } else {
                        $output = trim( $output );
 
@@ -1260,9 +1265,10 @@ abstract class UploadBase {
                        }
 
                        wfDebug( __METHOD__ . ": FOUND VIRUS! scanner feedback: $output \n" );
-                       wfProfileOut( __METHOD__ );
-                       return $output;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $output;
        }
 
        /**
index c857f25..71ee96b 100644 (file)
@@ -89,7 +89,7 @@ class UploadFromStash extends UploadBase {
         * @param $key string
         * @param $name string
         */
-       public function initialize( $key, $name = 'upload_file' ) {
+       public function initialize( $key, $name = 'upload_file', $initTempFile = true ) {
                /**
                 * Confirming a temporarily stashed upload.
                 * We don't want path names to be forged, so we keep
@@ -98,7 +98,7 @@ class UploadFromStash extends UploadBase {
                 */
                $metadata = $this->stash->getMetadata( $key );
                $this->initializePathInfo( $name,
-                       $this->getRealPath( $metadata['us_path'] ),
+                       $initTempFile ? $this->getRealPath( $metadata['us_path'] ) : false,
                        $metadata['us_size'],
                        false
                );
@@ -129,6 +129,14 @@ class UploadFromStash extends UploadBase {
                return $this->mSourceType;
        }
 
+       /**
+        * Get the base 36 SHA1 of the file
+        * @return string
+        */
+       protected function getTempFileSha1Base36() {
+               return $this->mFileProps['sha1'];
+       }
+
        /**
         * File has been previously verified so no need to do so again.
         *
index 24dc948..7a62112 100644 (file)
@@ -177,7 +177,11 @@ class Language {
         * @return Language
         */
        static function factory( $code ) {
-               global $wgLangObjCacheSize;
+               global $wgDummyLanguageCodes, $wgLangObjCacheSize;
+
+               if ( isset( $wgDummyLanguageCodes[$code] ) ) {
+                       $code = $wgDummyLanguageCodes[$code];
+               }
 
                // get the language object to process
                $langObj = isset( self::$mLangObjCache[$code] )
@@ -241,6 +245,18 @@ class Language {
                throw new MWException( "Invalid fallback sequence for language '$code'" );
        }
 
+       /**
+        * Checks whether any localisation is available for that language tag
+        * in MediaWiki (MessagesXx.php exists).
+        *
+        * @param string $code Language tag (in lower case)
+        * @return bool Whether language is supported
+        * @since 1.21
+        */
+       public static function isSupportedLanguage( $code ) {
+               return is_readable( self::getMessagesFileName( $code ) );
+       }
+
        /**
         * Returns true if a language code string is of a valid form, whether or
         * not it exists. This includes codes which are used solely for
@@ -3012,25 +3028,26 @@ class Language {
         * @return string
         */
        function listToText( array $l ) {
-               $s = '';
                $m = count( $l ) - 1;
-
-               if ( $m === 0 ) {
-                       return $l[0];
-               } elseif ( $m === 1 ) {
-                       return $l[0] . $this->getMessageFromDB( 'and' ) . $this->getMessageFromDB( 'word-separator' ) . $l[1];
-               } else {
-                       for ( $i = $m; $i >= 0; $i-- ) {
-                               if ( $i == $m ) {
-                                       $s = $l[$i];
-                               } elseif ( $i == $m - 1 ) {
-                                       $s = $l[$i] . $this->getMessageFromDB( 'and' ) . $this->getMessageFromDB( 'word-separator' ) . $s;
-                               } else {
-                                       $s = $l[$i] . $this->getMessageFromDB( 'comma-separator' ) . $s;
-                               }
+               if ( $m < 0 ) {
+                       return '';
+               }
+               if ( $m > 0 ) {
+                       $and = $this->getMessageFromDB( 'and' );
+                       $space = $this->getMessageFromDB( 'word-separator' );
+                       if ( $m > 1 ) {
+                               $comma = $this->getMessageFromDB( 'comma-separator' );
                        }
-                       return $s;
                }
+               $s = $l[$m];
+               for ( $i = $m - 1; $i >= 0; $i-- ) {
+                       if ( $i == $m - 1 ) {
+                               $s = $l[$i] . $and . $space . $s;
+                       } else {
+                               $s = $l[$i] . $comma . $s;
+                       }
+               }
+               return $s;
        }
 
        /**
index 0a5f059..0a380a6 100644 (file)
@@ -42,5 +42,9 @@
                <pluralRules locales="fa hu ja vi">
                        <pluralRule count="one">n is 1</pluralRule>
                </pluralRules>
+               <!-- Copied from "bh" -->
+               <pluralRules locales="bho">
+                       <pluralRule count="one">n in 0..1</pluralRule>
+               </pluralRules>
        </plurals>
 </supplementalData>
index 799710a..abd4d1c 100644 (file)
@@ -584,9 +584,9 @@ Alamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta
 'newarticletext' => "Droëneuh   ka neuseutot u ôn nyang goh na. Keu peugöt ôn nyan, neukeutik asoë ôn di  kutak di yup nyoë (ngiëng [[{{MediaWiki:Helppage}}|ôn bantu]] keu beurita leubèh lanjut). Meunyo Droëneuh  hana neusaja ka trôk keunoë, teugon '''back''' nyang na bak layeuë.",
 'noarticletext' => 'Hana naseukah jinoë lam ôn nyoë.
 Ji Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak ôn-ôn la’én, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log nyang na hubôngan], atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} neu\'andam ôn nyoë]</span>.',
-'noarticletext-nopermission' => 'Hana asoe bak on nyoe jinoe.
-Droeneuh jeuet [[Special:Search/{{PAGENAME}}|neumita keu nan on nyoe]] bak on la\'en,
-atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na hubongan]</span>.',
+'noarticletext-nopermission' => 'Hana asoë bak ôn nyoë jinoë.
+Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak ôn-ôn la\'én,
+atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na meuhubông]</span>, tapi Droëneuh hana idin keu neupeugöt ôn nyoë',
 'updated' => '(Seubarô)',
 'note' => "'''Ceunatat:'''",
 'previewnote' => "'''Beu neuingat meunyo ôn nyoë goh lom neukeubah!'''",
@@ -719,6 +719,9 @@ Surat-e droeneuh h'an geupeugah keu ureueng nyan.",
 
 'grouppage-sysop' => '{{ns:project}}:Ureuëng urôh',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ureuëng nguy barô',
+
 # User rights log
 'rightslog' => 'Log neuubah hak peuhah',
 
@@ -894,9 +897,6 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'linksearch-ok' => 'Mita',
 'linksearch-line' => '$1 meusambat nibak $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ureuëng nguy barô',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(dapeuta anggèëta)',
 
@@ -969,10 +969,11 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 # Namespace form on various pages
 'namespace' => 'Ruweuëng nan:',
 'invert' => 'Peubalék peuniléh',
+'namespace_association' => 'Ruweuëng nan meuhubông',
 'blanknamespace' => '(Keuë)',
 
 # Contributions
-'contributions' => 'Peuneugöt',
+'contributions' => 'Peuneugöt {{GENDER:$1|ureuëng nguy}}',
 'contributions-title' => 'Peuneugöt ureuëng nguy keu $1',
 'mycontris' => 'Peuneugöt',
 'contribsub2' => 'Keu $1 ($2)',
@@ -1006,7 +1007,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 'whatlinkshere-hideredirs' => '$1 peuninah',
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => '$1 hubông',
-'whatlinkshere-hideimages' => '$1 hubong gamba',
+'whatlinkshere-hideimages' => '$1 hubông beureukaih',
 'whatlinkshere-filters' => 'Saréng',
 
 # Block/unblock
index 8f83464..a4a0b31 100644 (file)
@@ -764,7 +764,6 @@ $2
 'template-protected' => '(حماية كاملة)',
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
-'nocreatetitle' => 'تم تحديد إنشاء الصفحات',
 'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
 يمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].',
 'nocreate-loggedin' => 'أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.',
@@ -1040,6 +1039,9 @@ $1",
 'prefs-help-email' => 'عنوان البريد الإلكتروني هو أمر اختياري، ولكن ستحتاج لإعادة تعيين كلمة المرور، إن نسيت كلمة المرور الخاصة بك.',
 'prefs-help-email-others' => 'يمكنك أيضا اختيار للسماح للآخرين الاتصال بك عن طريق صفحة المستخدم أو نقاش المستخدم الخاص بك دون الحاجة إلى الكشف عن الهوية الخاصة بك.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سجل إنشاء المستخدمين',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'modifi hal page',
 
@@ -1148,9 +1150,6 @@ $1",
 # Special:LinkSearch
 'linksearch-line' => '$1 موصولة من $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل إنشاء المستخدمين',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(قائمة الأعضاء)',
 
index de1bc5a..b239f33 100644 (file)
@@ -255,7 +255,7 @@ $messages = array(
 
 'underline-always' => 'Altyd',
 'underline-never' => 'Nooit',
-'underline-default' => 'Blaaierverstek',
+'underline-default' => 'Standaard in u omslag of webblaaier',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Lettertipe vir wysigingsvenster:',
@@ -340,6 +340,7 @@ $messages = array(
 'newwindow' => '(verskyn in nuwe venster)',
 'cancel' => 'Kanselleer',
 'moredotdotdot' => 'Meer…',
+'morenotlisted' => 'Meer nie gelys nie...',
 'mypage' => 'Gebruikersblad',
 'mytalk' => 'Bespreking',
 'anontalk' => 'Besprekingsblad vir hierdie IP',
@@ -363,7 +364,7 @@ $messages = array(
 'vector-action-protect' => 'Beskerm',
 'vector-action-undelete' => 'Ontskrap',
 'vector-action-unprotect' => 'Wysig beskerming',
-'vector-simplesearch-preference' => 'Aktiveer verbeterde soek-voorstelle (slegs vir die Vektor omslag)',
+'vector-simplesearch-preference' => 'Aktiveer vereenvoudigde soekbalk (slegs vir die Vektor-omslag)',
 'vector-view-create' => 'Skep',
 'vector-view-edit' => 'Wysig',
 'vector-view-history' => 'Wys geskiedenis',
@@ -539,13 +540,11 @@ Databasis gee foutboodskap: "$3: $4".',
 'laggedslavemode' => 'Waarskuwing: Onlangse wysigings dalk nie in bladsy vervat nie.',
 'readonly' => 'Databasis gesluit',
 'enterlockreason' => 'Rede vir die sluiting,
-en beraming van wanneer ontsluiting sal plaas vind',
-'readonlytext' => 'Die {{SITENAME}} databasis is tans gesluit vir nuwe
-artikelwysigings, waarskynlik vir roetine databasisonderhoud,
+en beraming van wanneer ontsluiting sal plaasvind',
+'readonlytext' => 'Die databasis is tans gesluit vir nuwe artikelwysigings, waarskynlik vir roetine onderhoud,
 waarna dit terug sal wees na normaal.
-Die administreerder wat dit gesluit het se verduideliking:
 
-$1',
+Die administrateur wat dit gesluit het se verduideliking: $1',
 'missing-article' => "Die databasis kon nie soos verwag die teks vir die bladsy genaamd \"\$1\" \$2 kry nie.
 
 Dit gebeur gewoonlik as mens 'n verouderde verskil- of geskiedenis-skakel volg na 'n bladsy wat reeds verwyder is.
@@ -553,7 +552,7 @@ Dit gebeur gewoonlik as mens 'n verouderde verskil- of geskiedenis-skakel volg n
 Indien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek. Rapporteer asseblief die probleem aan 'n [[Special:ListUsers/sysop|administrateur]], en maak 'n nota van die URL.",
 'missingarticle-rev' => '(weergawe#: $1)',
 'missingarticle-diff' => '(Wysiging: $1, $2)',
-'readonly_lag' => 'Die databasis is outomaties gesluit terwyl die slaafdatabasisse sinchroniseer met die meester',
+'readonly_lag' => 'Die databasis is outomaties gesluit terwyl die slaafdatabasisse met die meester gesinchroniseer word',
 'internalerror' => 'Interne fout',
 'internalerror_info' => 'Interne fout: $1',
 'fileappenderrorread' => 'Kon nie "$1" tydens die "append" lees nie.',
@@ -567,7 +566,7 @@ Indien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek.
 'unexpected' => 'Onverwagte waarde: "$1"="$2".',
 'formerror' => 'Fout: kon vorm nie stuur nie',
 'badarticleerror' => 'Die aksie kon nie op hierdie bladsy uitgevoer word nie.',
-'cannotdelete' => 'Die bladsy of lêer "$1" kon nie skrap word nie.
+'cannotdelete' => 'Die bladsy of lêer "$1" kon nie verwyder word nie.
 Iemand anders het dit moontlik reeds geskrap.',
 'cannotdelete-title' => 'Bladsy "$1" kan nie verwyder word nie',
 'delete-hook-aborted' => "Die wysiging is deur 'n hoek gekanselleer.
@@ -586,10 +585,11 @@ Navraag: $2',
 'actionthrottled' => 'Outo-rem op aksie uitgevoer',
 'actionthrottledtext' => "As 'n teen-strooi aksie, word u beperk om hierdie aksie te veel keer in 'n kort tyd uit te voer, en u het hierdie limiet oorskry.
 Probeer asseblief weer oor 'n paar minute.",
-'protectedpagetext' => 'Hierdie bladsy is beskerm om redigering te verhoed.',
+'protectedpagetext' => 'Hierdie bladsy is beskerm om wysigings en ander aksies te verhoed.',
 'viewsourcetext' => 'U mag die bronteks van hierdie bladsy lees en kopieer:',
 'viewyourtext' => "U kan '''u wysigings''' aan die bronteks van hierdie bladsy bekyk en kopieer:",
-'protectedinterface' => 'Hierdie bladsy verskaf teks vir die koppelvlak van die sagteware, en is beskerm om misbruik te voorkom.',
+'protectedinterface' => 'Hierdie bladsy verskaf teks vir die koppelvlak van die sagteware, en is beskerm om misbruik te voorkom.
+Gebruik asseblief [//translatewiki.net/ translatewiki.net] om vertalings by te voeg of te wysig.',
 'editinginterface' => "'''Waarskuwing:''' U is besig om 'n bladsy te redigeer wat koppelvlakinligting aan die programmatuur voorsien. Wysigings aan hierdie bladsy sal die voorkoms van die gebruikerskoppelvlak vir ander gebruikers beïnvloed. Vir vertalings, oorweeg om eerder [//translatewiki.net/wiki/Main_Page?setlang=af translatewiki.net] (die vertalingsprojek vir MediaWiki) te gebruik.",
 'sqlhidden' => '(SQL navraag versteek)',
 'cascadeprotected' => 'Hierdie bladsy is beskerm teen redigering omdat dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat beskerm is met die "kaskade" opsie aangeskakel: $2',
@@ -627,7 +627,7 @@ Moenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel n
 'securelogin-stick-https' => 'Bly verbind met HTTPS na aanmelding',
 'yourdomainname' => 'U domein:',
 'password-change-forbidden' => 'U kan nie wagwoorde op hierdie wiki verander nie.',
-'externaldberror' => "'n Databasis fout het voorgekom tydens aanmelding of u het nie toestemming om u eksterne rekening op te dateer nie.",
+'externaldberror' => "'n Databasisfout het voorgekom tydens aanmelding of u het nie toestemming om u eksterne rekening op te dateer nie.",
 'login' => 'Teken in',
 'nav-login-createaccount' => 'Teken in',
 'loginprompt' => 'U blaaier moet koekies toelaat om by {{SITENAME}} te kan aanteken.',
@@ -713,6 +713,7 @@ Wag asseblief alvorens u weer probeer.",
 # E-mail sending
 'php-mail-error-unknown' => 'Onbekende fout in PHP se mail()-funksie',
 'user-mail-no-addy' => "Geprobeer om e-pos te stuur sonder 'n e-posadres.",
+'user-mail-no-body' => "Daar is probeer om 'n leë of 'n onredelike kort boodskap te stuur.",
 
 # Change password dialog
 'resetpass' => 'Verander wagwoord',
@@ -936,9 +937,9 @@ Deur enigiets hier te plaas, beloof u dat u dit self geskryf het, of dat dit gek
 '''MOENIE WERK WAT DEUR KOPIEREG BESKERM WORD HIER PLAAS SONDER TOESTEMMING NIE!'''",
 'longpageerror' => "'''Fout: die teks wat u bygevoeg het is {{PLURAL:$1|een kilogreep|$1 kilogrepe}} groot, wat groter is as die maksimum van {{PLURAL:$2|een kilogreep|$2 kilogrepe}}.'''
 Die bladsy kan nie gestoor word nie.",
-'readonlywarning' => "'''WAARSKUWING: Die databasis is gesluit vir onderhoud. Dus sal u nie nou u wysigings kan stoor nie. Dalk wil u die teks plak in 'n lêer en stoor vir later.'''
+'readonlywarning' => "'''WAARSKUWING: Die databasis is gesluit vir onderhoud. Dus sal u nie nou u wysigings kan stoor nie. Dalk wil u die teks in 'n lêer plak en stoor vir later.'''
 
-Een administrateur het die databasis geblokkeer vir hierdie rede: $1",
+Die administrateur wat dit gesluit het se verduideliking: $1",
 'protectedpagewarning' => "'''WAARSKUWING: Hierdie bladsy is beveilig sodat slegs administrateurs die inhoud sal kan verander.''' Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
 'semiprotectedpagewarning' => "'''Let wel:''' Hierdie artikel is beveilig sodat slegs ingetekende gebruikers dit sal kan wysig. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
 '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:",
@@ -975,6 +976,7 @@ Dit lyk of dit verwyder is.',
 'edit-already-exists' => 'Die bladsy is nie geskep nie.
 Dit bestaan alreeds.',
 'defaultmessagetext' => 'Verstekteks',
+'content-failed-to-parse' => 'Dit was nie moontlik om die inhoud van die MIME-tipe $2 vir die model $1 te verwerk nie: $3.',
 'invalid-content-data' => 'Ongeldige inhoud',
 'content-not-allowed-here' => '"$1" word nie op bladsy [[$2]] toegelaat nie.',
 
@@ -1138,7 +1140,9 @@ Kontroleer asseblief die logboeke.",
 'revdelete-only-restricted' => "'n Fout het voorgekom met die verberging van die item van $1, $2: u kan nie items onderdruk uit die sig van administrateurs sonder om ook een van die ander sigbaarheidsopsies te kies nie.",
 'revdelete-reason-dropdown' => '* Algemene redes vir skrapping
 ** Skending van outeursreg
-** Onbetaamlike persoonlike inligting',
+** Onbetaamlike persoonlike inligting
+** Onbetaamlike gebruikersnaam
+** Potensieel lasterlike gegewens',
 'revdelete-otherreason' => 'Ander rede:',
 'revdelete-reasonotherlist' => 'Ander rede',
 'revdelete-edit-reasonlist' => 'Wysig skrap redes',
@@ -1347,9 +1351,9 @@ Die aksie kan nie ongedaan gemaak word nie.',
 'prefs-emailconfirm-label' => 'E-posbevestiging:',
 'prefs-textboxsize' => 'Afmetings van die wysigingsvenster',
 'youremail' => 'E-pos',
-'username' => 'Gebruikersnaam:',
-'uid' => 'Gebruiker-ID:',
-'prefs-memberingroups' => 'Lid van {{PLURAL:$1|groep|groepe}}:',
+'username' => '{{GENDER:$1|Gebruikersnaam}}:',
+'uid' => '{{GENDER:$1|Gebruikersnommer}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepe}}:',
 'prefs-registration' => 'Registrasiedatum:',
 'yourrealname' => 'Regte naam:',
 'yourlanguage' => 'Taal:',
@@ -1499,12 +1503,13 @@ Die inligting is vir ander gebruikers sigbaar.',
 'right-sendemail' => 'Stuur e-pos aan ander gebruikers',
 'right-passwordreset' => 'Wys e-posse vir herstel van wagwoord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek van nuwe gebruikers',
+'newuserlogpagetext' => "Dit is 'n logboek van gebruikers wat onlangs ingeteken het.",
+
 # User rights log
 'rightslog' => 'Gebruikersregtelogboek',
 'rightslogtext' => 'Hier onder is die logboek van gebruikersregte wat verander is.',
-'rightslogentry' => 'wysig gebruikersregte vir $1 van $2 na $3',
-'rightslogentry-autopromote' => 'was outomaties bevorder van $2 na $3',
-'rightsnone' => '(geen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lees die bladsy',
@@ -1748,6 +1753,7 @@ As daar steeds probleme is, kontak 'n [[Special:ListUsers/sysop|administrateur]]
 'backend-fail-notsame' => "'n Nie-identiese lêer bestaan al reeds by $1.",
 'backend-fail-invalidpath' => "$1 is nie 'n geldige stoorplek nie.",
 'backend-fail-delete' => 'Die lêer $1 kon nie geskrap word nie.',
+'backend-fail-describe' => 'Kon nie metadata vir lêer "$1" verander nie.',
 'backend-fail-alreadyexists' => 'Die lêer $1 bestaan al reeds.',
 'backend-fail-store' => 'Kon nie lêer $1 in $2 stoor nie.',
 'backend-fail-copy' => 'Kon nie lêer $1 na $2 kopieer nie.',
@@ -1764,7 +1770,7 @@ As daar steeds probleme is, kontak 'n [[Special:ListUsers/sysop|administrateur]]
 'backend-fail-internal' => "'n Onbekende fout het in die agterliggende stoorspasie $1 voorgekom.",
 'backend-fail-contenttype' => 'Kon nie die inhoudstipe van die lêer bepaal om na "$1" te stoor nie.',
 'backend-fail-batchsize' => "Die agterliggende stoorspasie het 'n groep van $1 {{PLURAL:$1|operasie|operasies}} ontvang; die limiet is $2 {{PLURAL:$2|operasie|operasies}}.",
-'backend-fail-usable' => 'Kon nie na die lêer "$1" skryf nie vanweë onvoldoende regte of gidse wat nie bestaan nie.',
+'backend-fail-usable' => 'Kon nie die lêer "$1" lees of skryf nie vanweë onvoldoende regte of gidse wat nie bestaan nie.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kon nie na die joernaal-databasis op die agterliggende stoorspasie "$1" konnekteer nie.',
@@ -2138,7 +2144,7 @@ Sie ook [[Special:WantedCategories|nie-bestaande kategorieë met verwysings]].',
 'linksearch-ok' => 'Soek',
 'linksearch-text' => 'Patrone soos "*.wikipedia.org" kan gebruik word.<br />
 Benodig ten minste een topvlakdomein, soos byvoorbeeld "*.org".<br />
-Ondersteunde protokolle: <code>$1</code> (moenie hierdie in u soektog gebruik nie)',
+{{PLURAL:$2|Ondersteunde protokol|Ondersteunde protokolle}}: <code>$1</code> (http:// word gebruik as niks gespesifiseer is nie)',
 'linksearch-line' => '$1 geskakel vanaf $2',
 'linksearch-error' => 'Patrone kan slegs aan die begin van die rekenaarnaam geplaas word.',
 
@@ -2157,10 +2163,6 @@ Ondersteunde protokolle: <code>$1</code> (moenie hierdie in u soektog gebruik ni
 'activeusers-hidesysops' => 'Versteek administrateurs',
 'activeusers-noresult' => 'Geen gebruikers gevind nie.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek van nuwe gebruikers',
-'newuserlogpagetext' => "Dit is 'n logboek van gebruikers wat onlangs ingeteken het.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gebruikersgroepregte',
 'listgrouprights-summary' => "Hier volg 'n lys van gebruikersgroepe met hulle ooreenstemmende regte wat op die wiki gedefinieer is.
@@ -2187,7 +2189,7 @@ Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individu
 'emailuser-title-target' => 'E-pos die {{GENDER:$1|gebruiker}}',
 'emailuser-title-notarget' => 'E-pos gebruiker',
 'emailpage' => 'Stuur e-pos na gebruiker',
-'emailpagetext' => 'As dié gebruiker \'n geldige e-posadres in sy/haar gebruikersvoorkeure het, sal hierdie vorm \'n enkele boodskap stuur. Die e-posadres in u [[Special:Preferences|gebruikersvoorkeure]] sal verkyn as die "Van"-adres van die pos. Dus sal die ontvanger kan terug antwoord.',
+'emailpagetext' => 'As {{GENDER:$1|dié gebruiker}} \'n geldige e-posadres in sy/haar gebruikersvoorkeure het, sal hierdie vorm \'n enkele boodskap stuur. Die e-posadres in u [[Special:Preferences|gebruikersvoorkeure]] sal verskyn as die "Van"-adres van die pos. Dus sal die ontvanger kan terug antwoord.',
 'usermailererror' => 'Fout met versending van e-pos:',
 'defemailsubject' => 'E-pos van {{SITENAME}}-gebruiker "$1"',
 'usermaildisabled' => 'E-pos deur gebruikers is gedeaktiveer.',
@@ -2226,9 +2228,8 @@ Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individu
 'watchnologintext' => 'U moet [[Special:UserLogin|ingeteken]]
 wees om u dophoulys te verander.',
 'addwatch' => 'Voeg by dophoulys',
-'addedwatchtext' => "Die bladsy \"[[:\$1]]\" is by u [[Special:Watchlist|dophoulys]] bygevoeg. Toekomstige wysigings aan hierdie bladsy en sy verwante besprekingsblad sal op [[Special:Watchlist|u dophoulys]] gelys word en sal in '''vetdruk''' in die [[Special:RecentChanges|lys van onlangse wysigings]] vertoon word, sodat u dit makliker kan raaksien.
-
-As u die bladsy later van u dophoulys wil verwyder, kliek \"verwyder van dophoulys\" in die kieslys bo-aan die bladsy.",
+'addedwatchtext' => 'Die bladsy "[[:$1]]" is by u [[Special:Watchlist|dophoulys]] bygevoeg.
+Toekomstige wysigings aan hierdie bladsy en sy bybehorende besprekingsblad sal hier gelys word.',
 'removewatch' => 'Verwyder van dophoulys',
 'removedwatchtext' => 'Die bladsy "[[:$1]]" is van [[Special:Watchlist|u dophoulys]] afgehaal.',
 'watch' => 'Hou dop',
@@ -2257,14 +2258,22 @@ As u die bladsy later van u dophoulys wil verwyder, kliek \"verwyder van dophoul
 'enotif_mailer' => '{{SITENAME}} E-pos kennisgewings',
 'enotif_reset' => 'Merk alle bladsye as besoek',
 'enotif_impersonal_salutation' => '{{SITENAME}} gebruiker',
+'enotif_subject_deleted' => '{{SITENAME}}: bladsy $1 is verwyder deur {{GENDER:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}}: bladsy $1 is geskep deur {{GENDER:$2|$2}}',
+'enotif_subject_moved' => '{{SITENAME}}: bladsy $1 is geskuif deur {{GENDER:$2|$2}}',
+'enotif_subject_restored' => '{{SITENAME}}: bladsy $1 is teruggeplaas deur {{GENDER:$2|$2}}',
+'enotif_subject_changed' => '{{SITENAME}}: bladsy $1 is gewysig deur {{GENDER:$2|$2}}',
+'enotif_body_intro_deleted' => 'Die bladsy $1 op {{SITENAME}} is deur {{gender:$2|$2}} op $PAGEEDITDATE verwyder. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_created' => 'Die bladsy $1 op {{SITENAME}} is deur {{GENDER:$2|$2}} op $PAGEEDITDATE geskep. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_moved' => 'Die bladsy $1 op {{SITENAME}} is deur {{GENDER:$2|$2}} op $PAGEEDITDATE hernoem. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_restored' => 'Die bladsy $1 op {{SITENAME}} is deur {{GENDER:$2|$2}} op $PAGEEDITDATE teruggeplaas. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_changed' => 'Die bladsy $1 op {{SITENAME}} is op $PAGEEDITDATE deur {{GENDER:$2|$2}} gewysig. Sien $3 vir die huidige weergawe.',
 'enotif_lastvisited' => 'Sien $1 vir alle wysigings sedert u laaste besoek.',
-'enotif_lastdiff' => 'Sien $1 om hierdie wysiging te bekyk.',
+'enotif_lastdiff' => 'Gaan na $1 om hierdie wysiging te sien.',
 'enotif_anon_editor' => 'anonieme gebruiker $1',
 'enotif_body' => 'Beste $WATCHINGUSERNAME,
 
-Die bladsy $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE deur $PAGEEDITOR, sien $PAGETITLE_URL vir die nuutste weergawe.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Samevatting van die wysiging: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2273,9 +2282,9 @@ E-pos: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
 Tensy u hierdie bladsy besoek, sal u geen verdere kennisgewings ontvang nie.
-U kan ook die waarskuwingsvlag op u dophoulys verstel.
+U kan ook die waarskuwingsvlag op u dophoulys stel.
 
-Groete van {{SITENAME}} se waarskuwingssisteem.
+Groete van {{SITENAME}} se waarskuwingsstelsel.
 
 --
 U kan u e-posvoorkeure stel by:
@@ -2289,6 +2298,8 @@ $UNWATCHURL
 
 Terugvoer en verdere bystand:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'geskep',
+'changed' => 'verander',
 
 # Delete
 'deletepage' => 'Skrap bladsy',
@@ -2360,6 +2371,8 @@ Sien die [[Special:ProtectedPages|lys van beveiligde bladsye]] vir alle bladsye
 'prot_1movedto2' => 'het [[$1]] geskuif na [[$2]]',
 'protect-badnamespace-title' => 'Nie-beskermde naamruimte',
 'protect-badnamespace-text' => 'Bladsye in hierdie naamruimte kan nie beskerm word nie.',
+'protect-norestrictiontypes-text' => 'Die bladsy kan nie beveilig word nie omdat daar geen beperkingstipes beskikbaar is nie.',
+'protect-norestrictiontypes-title' => 'Nie beveiligbare bladsy',
 'protect-legend' => 'Bevestig beskerming',
 'protectcomment' => 'Rede:',
 'protectexpiry' => 'Verval:',
@@ -2375,9 +2388,9 @@ Hier volg die huidige instellings vir bladsy '''$1''':",
 Hier is die huidige verstellings vir bladsy '''$1''':",
 'protect-cascadeon' => 'Die bladsy word beskerm want dit is ingesluit by die volgende {{PLURAL:$1|blad|blaaie}} wat kaskade-beskerming geniet. U kan die veiligheidsvlak van die bladsy verander, maar dit sal nie die ander kaskade blaaie beïnvloed nie.',
 'protect-default' => 'Laat alle gebruikers toe',
-'protect-fallback' => 'Hiervoor is "$1" regte nodig',
-'protect-level-autoconfirmed' => 'Blokkeer nuwe en ongeregistreerde gebruikers',
-'protect-level-sysop' => 'Slegs administrateurs',
+'protect-fallback' => 'Laat slegs gebruikers met "$1" regte toe',
+'protect-level-autoconfirmed' => 'Laat slegs "autoconfirmed" gebruikers toe',
+'protect-level-sysop' => 'Laat slegs administrateurs toe',
 'protect-summary-cascade' => 'kaskade',
 'protect-expiring' => 'verval op $2 om $3 (UTC)',
 'protect-expiring-local' => 'verval op $1',
@@ -2443,7 +2456,8 @@ U mag moontlik 'n foutiewe skakel hê, of die weergawe is reeds herstel of uit d
 'undeletedrevisions' => '{{PLURAL:$1|1 weergawe|$1 weergawes}} herstel',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 weergawe|$1 weergawes}} en {{PLURAL:$2|1 lêer|$2 lêers}} herstel',
 'undeletedfiles' => '{{PLURAL:$1|1 lêer|$1 lêers}} herstel',
-'cannotundelete' => 'Skrapping onsuksesvol; miskien het iemand anders dié bladsy al geskrap.',
+'cannotundelete' => 'Terugplasing was onsuksesvol:
+$1',
 'undeletedpage' => "'''$1 is teruggeplaas'''
 
 Konsulteer die [[Special:Log/delete|verwyderingslogboek]] vir 'n rekord van onlangse verwyderings en terugplasings.",
@@ -2727,14 +2741,14 @@ Kies asseblief 'n ander naam.",
 'move-subpages' => 'Skuif al die subbladsye (maksimaal $1)',
 'move-talk-subpages' => 'Skuif al die subbladsye van die besprekingsblad (maksimaal $1)',
 'movepage-page-exists' => 'Die bladsy $1 bestaan reeds en kan nie outomaties oorskryf word nie.',
-'movepage-page-moved' => 'Die bladsy $1 was na $2 geskuif.',
+'movepage-page-moved' => 'Die bladsy $1 is na $2 geskuif.',
 'movepage-page-unmoved' => 'Die bladsy $1 kon nie na $2 geskuif word nie.',
 'movepage-max-pages' => 'Die maksimum van $1 {{PLURAL:$1|bladsy|bladsye}} is geskuif. Die oorblywende bladsye na nie outomaties geskuif word nie.',
 'movelogpage' => 'Skuiflogboek',
 'movelogpagetext' => "Hier onder is 'n lys van geskuifde bladsye.",
 'movesubpage' => '{{PLURAL:$1|Subbladsy|Subbladsye}}',
 'movesubpagetext' => 'Die {{PLURAL:$1|subbladsy|$1 subbladsye}} van hierdie blad word hieronder gewys.',
-'movenosubpage' => 'Die bladsy het geen subbladsye.',
+'movenosubpage' => 'Die bladsy het geen subbladsye nie.',
 'movereason' => 'Rede:',
 'revertmove' => 'rol terug',
 'delete_and_move' => 'Skrap en skuif',
@@ -2749,6 +2763,7 @@ Die teikenartikel "[[:$1]]" bestaan reeds. Wil u dit skrap om plek te maak vir d
 'immobile-target-namespace-iw' => "'n Interwiki-skakel is nie 'n geldige bestemming vir die skuif van die bladsy nie.",
 'immobile-source-page' => 'Die bladsy kan nie geskuif word nie.',
 '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',
 'imagetypemismatch' => 'Die nuwe lêer se uitbreiding pas nie by die lêertipe nie',
@@ -2827,6 +2842,7 @@ Alle transwiki-laaie word opgeteken in die [[Special:Log/import|invoer-logboek]]
 'import-interwiki-templates' => 'Sluit alle sjablone in',
 'import-interwiki-submit' => 'Importeer',
 'import-interwiki-namespace' => 'Doelnaamruimte:',
+'import-interwiki-rootpage' => 'Basisblad van bestemming (opsioneel):',
 'import-upload-filename' => 'Lêernaam:',
 'import-comment' => 'Opmerking:',
 'importtext' => 'Gebruik die [[Special:Export|eksport-funksie]] van die wiki waar die inligting vandaan kom.
@@ -2862,6 +2878,10 @@ Die lêer is slegs gedeeltelik opgelaai.',
 'import-error-interwiki' => 'Die bladsy "$1" is nie geïmporteer nie omdat sy naam vir eksterne skakeling (interwiki) gereserveer is.',
 'import-error-special' => 'Die bladsy "$1" is nie geïmporteer nie omdat dit aan \'n spesiale naamruimte behoort waarin geen bladsye geplaas kan word nie.',
 'import-error-invalid' => 'Die bladsy "$1" is nie geïmporteer nie omdat die naam ongeldig is.',
+'import-error-unserialize' => 'Weergawe $2 van die bladsy "$1" kon nie verwerk word nie. Die weergawe hoort inhoudsmodel $3 te gebruik met \'n serialisasie van $4.',
+'import-options-wrong' => 'Verkeerde {{PLURAL:$2|opsie|opsies}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Die gespesifiseerde basisblad is ongeldig.',
+'import-rootpage-nosubpage' => 'Die naamruimte "$1" van die basisblad laat nie subblaaie toe nie.',
 
 # Import log
 'importlogpage' => 'Invoer logboek',
@@ -2981,10 +3001,12 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 
 # Info page
 'pageinfo-title' => 'Inligting oor "$1"',
+'pageinfo-not-current' => 'Hierdie gegewens is slegs vir die huidige weergawe beskikbaar.',
 'pageinfo-header-basic' => 'Basiese inligting',
 'pageinfo-header-edits' => 'Wysigingsgeskiedenis',
 'pageinfo-header-restrictions' => 'Bladsybeskerming',
 'pageinfo-header-properties' => 'Bladsy-eienskappe',
+'pageinfo-display-title' => 'Wys titel',
 'pageinfo-default-sort' => 'Standaard sorteerwyse',
 'pageinfo-length' => 'Bldasylengte (in grepe)',
 'pageinfo-article-id' => 'Bladsy-ID',
@@ -2996,7 +3018,8 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'pageinfo-watchers' => 'Aantal dophouers',
 'pageinfo-redirects-name' => 'Aansture na die bladsy',
 'pageinfo-subpages-name' => 'Subblaaie van die bladsy',
-'pageinfo-firstuser' => 'Gebruiker die die bladsy geskep het',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|aanstuur|aansture}}; $3 {{PLURAL:$3|nie-aanstuur|nie-aansture}})',
+'pageinfo-firstuser' => 'Gebruiker wat die bladsy geskep het',
 'pageinfo-firsttime' => 'Datum waarop die bladsy geskep is',
 'pageinfo-lastuser' => 'Laatste wysiger',
 'pageinfo-lasttime' => 'Datum van laatste wysiging',
@@ -3007,11 +3030,19 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiese woord|Magiese woorde}} ($1)',
 'pageinfo-hidden-categories' => 'Versteekte {{PLURAL:$1|kategorie|kategorieë}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Gebruikte sjabloon|Gebruikte sjablone}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Bladsy|Bladsye}} getranskludeerd op ($1)',
 'pageinfo-toolboxlink' => 'Bladinligting',
 'pageinfo-redirectsto' => 'Stuur aan na',
 'pageinfo-redirectsto-info' => 'Inligting',
+'pageinfo-contentpage' => "Getel as 'n bladsy met inhoud",
 'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Beveiliging werk vanaf hier deur',
 'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => "Bladsy is vanuit 'n ander blad beveilig",
+'pageinfo-category-info' => 'Kategoriegegewens',
+'pageinfo-category-pages' => 'Aantal bladsye',
+'pageinfo-category-subcats' => 'Aantal subkategorieë',
+'pageinfo-category-files' => 'Aantal lêers',
 
 # Skin names
 'skinname-standard' => 'Standaard',
@@ -3028,6 +3059,8 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'markedaspatrollederror' => 'Kan nie as gekontroleerd merk nie',
 'markedaspatrollederrortext' => "U moet 'n weergawe spesifiseer om as gekontroleerd te merk.",
 'markedaspatrollederror-noautopatrol' => 'U kan nie u eie veranderinge as gekontroleerd merk nie.',
+'markedaspatrollednotify' => 'Hierdie wysiging aan $1 is as gekontroleerd gemerk.',
+'markedaspatrollederrornotify' => 'Merk as gekontroleerd het misluk.',
 
 # Patrol log
 'patrol-log-page' => 'Kontroleringslogboek',
@@ -3090,6 +3123,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuut|$1 minute}}',
 'hours' => '{{PLURAL:$1|$1 uur|$1 ure}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dae}}',
+'months' => '{{PLURAL:$1|een maand|$1 maande}}',
+'years' => '{{PLURAL:$1|een jaar|$1 jaar}}',
 'ago' => '$1 gelede',
 'just-now' => 'Nou net',
 
@@ -3701,6 +3736,7 @@ U kan ook die [[Special:EditWatchlist|standaard opdaterigskerm gebruik]].',
 'version-license' => 'Lisensie',
 'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[//www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
 'version-poweredby-others' => 'andere',
+'version-credits-summary' => 'Ons erken graag die volgende persone vir hul bydrae aan [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki is vrye sagteware, u kan MediaWiki versprei en/of wysig onder die voorwaardes van die "GNU Algemene Publieke Lisensie", soos deur die "Free Software Foundation" gepubliseer; óf weergawe 2 van die lisensie, of (as u wil) enige latere weergawe daarvan.
 
 MediaWiki word versprei met die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORGE, selfs sonder geïmpliseerde waarborg van VERHANDELBAARHEID of GESKIKTHEID VIR \'N SPESIFIEKE DOEL. Verwys na die "GNU Algemene Publieke Lisensie" vir meer besonderhede.
@@ -3845,6 +3881,10 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'logentry-newusers-create2' => 'Gebruiker $3 is deur $1 geskep',
 'logentry-newusers-autocreate' => 'Die gebruiker $1 is outomaties geskep',
 'newuserlog-byemail' => 'wagwoord is per e-pos versend',
+'logentry-rights-rights' => '$1 het groepslidmaatskap vir $3 van $4 na $5 gewysig',
+'logentry-rights-rights-legacy' => '$1 het groepslidmaatskap vir $3 gewysig',
+'logentry-rights-autopromote' => '$1 is outomaties gepromoveerd van $4 na $5',
+'rightsnone' => '(geen)',
 
 # Feedback
 'feedback-bugornote' => 'As u reg is om \'n tegniese probleem in detail te beskryf, [$1 rapporteer \'n fout].
index 859e6d7..88632af 100644 (file)
@@ -1130,11 +1130,12 @@ Mundeni me zgjedhe që të tjerët me ju kontaktue përmjet faqe së diskutimit
 'right-userrights' => 'Redakto të gjitha të drejtat e përdoruesit',
 'right-passwordreset' => 'Fjalëkalimi Reset e një përdoruesi ([[Special:PasswordReset|faqe veçantë]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Regjistri i krijimit të përdoruesve',
+
 # User rights log
 'rightslog' => 'Regjsitri i tagrit të përdoruesve',
 'rightslogtext' => 'Ky është një regjistër për ndryshimet e titujve të përdoruesve.',
-'rightslogentry' => 'të drejtat e $1 u ndryshuan prej $2 në $3',
-'rightsnone' => '(asgjë)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lexo këtë faqe',
@@ -1272,9 +1273,6 @@ Faqet në [[Special:Watchlist|listën tuej të mbikëqyrjes]] janë '''të theks
 # Special:LinkSearch
 'linksearch' => 'Vegzat e jashtme',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Regjistri i krijimit të përdoruesve',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lista e antarëve)',
 
@@ -1612,6 +1610,7 @@ Tjerat kanë me mbetë të mshefuna.
 # New logging system
 'revdelete-restricted' => 'u vendosën kufizime për administruesit',
 'revdelete-unrestricted' => 'u hoqën kufizimet për administruesit',
+'rightsnone' => '(asgjë)',
 
 # Search suggestions
 'searchsuggest-search' => 'Kërkim',
diff --git a/languages/messages/MessagesAls.php b/languages/messages/MessagesAls.php
deleted file mode 100644 (file)
index 867d2a8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Alemannisch
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- * @comment Deprecated code. Falls back to 'gsw'.
- */
-
-$fallback = 'gsw, de';
index aa2c49b..d3f815b 100644 (file)
@@ -1022,11 +1022,13 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'right-userrights' => 'ያባላት ሁሉ መብቶች ለማስተካከል',
 'right-sendemail' => 'ወደ ሌላ አባል ኢ-ሜል ለመላክ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'የአባልነት መዝገብ (user log)',
+'newuserlogpagetext' => 'ይህ መዝገብ ወደ አባልነት የገቡትን ብዕር ስሞች ይዘርዝራል።',
+
 # User rights log
 'rightslog' => 'የአባል መብቶች መዝገብ',
 'rightslogtext' => 'ይህ መዝገብ የአባል መብቶች ሲለወጡ ይዘረዝራል።',
-'rightslogentry' => 'የ$1 ማዕረግ ከ$2 ወደ $3 ለወጠ',
-'rightsnone' => '(የለም)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ይህን ገጽ ለማንበብ',
@@ -1480,10 +1482,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'activeusers-hidesysops' => 'መጋቢዎች ይደበቁ',
 'activeusers-noresult' => 'ማንም ተጠቃሚ አልተገኘም።',
 
-# Special:Log/newusers
-'newuserlogpage' => 'የአባልነት መዝገብ (user log)',
-'newuserlogpagetext' => 'ይህ መዝገብ ወደ አባልነት የገቡትን ብዕር ስሞች ይዘርዝራል።',
-
 # Special:ListGroupRights
 'listgrouprights' => 'የተጠቃሚ ስብስባ መብቶች',
 'listgrouprights-group' => 'ስብስባ',
@@ -1582,6 +1580,8 @@ $NEWPAGE
 
 በተጨማሪ ለመረዳት፦
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ተፈጠረ',
+'changed' => 'ተለወጠ',
 
 # Delete
 'deletepage' => 'ገጹ ይጥፋ',
@@ -2573,6 +2573,7 @@ $3
 # New logging system
 'logentry-delete-delete' => '$1 ገጹን $3 አጠፋ',
 'newuserlog-byemail' => 'ማለፊያ-ቃል በኤ-መልዕክት ተልኳል',
+'rightsnone' => '(የለም)',
 
 # Feedback
 'feedback-cancel' => 'ይቅር',
index b5a3674..3e81728 100644 (file)
@@ -1338,12 +1338,13 @@ Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
 'right-sendemail' => 'Ninviar un correu electronico a atros usuarios',
 'right-passwordreset' => 'Veyer os correus electronicos de restabimiento de claus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rechistro de nuevos usuarios',
+'newuserlogpagetext' => "Isto ye un rechistro de creyación d'usuarios.",
+
 # User rights log
 'rightslog' => "Rechistro de cambios en os dreitos d'os usuarios",
 'rightslogtext' => "Iste ye un rechistro d'os cambios en os dreitos d'os usuarios",
-'rightslogentry' => "ha cambiato os dreitos d'usuario de $1: de $2 a $3",
-'rightslogentry-autopromote' => "S'ha promovito automaticament dende $2 ta $3",
-'rightsnone' => '(garra)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leyer ista pachina',
@@ -1956,10 +1957,6 @@ Protocolos suportados: <code>$1</code> (no los adhiba en a suya busca).',
 'activeusers-hidesysops' => 'Amagar administradors',
 'activeusers-noresult' => "No s'han trobato usuarios.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rechistro de nuevos usuarios',
-'newuserlogpagetext' => "Isto ye un rechistro de creyación d'usuarios.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dreitos d'a colla d'usuarios",
 'listgrouprights-summary' => "Contino trobará a lista de collas d'usuario definitas en iste wiki, con os suyos dreitos d'acceso asociatos. Tamién puet trobar aquí [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre os dreitos individuals.",
@@ -2082,6 +2079,8 @@ Ta eliminar a pachina d\'a suya lista de seguimiento, vaiga ta $UNWATCHURL
 
 Sucherencias y aduya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creyata',
+'changed' => 'editata',
 
 # Delete
 'deletepage' => 'Borrar ista pachina',
@@ -3603,6 +3602,7 @@ As imachens s'amuestran en resolución completa, a resta de fichers fan encetar
 'logentry-newusers-create2' => "$1 creyó una cuenta d'usuario $3",
 'logentry-newusers-autocreate' => "S'ha creyau automaticament a cuenta $1",
 'newuserlog-byemail' => 'Clau ninviata por correu electronico',
+'rightsnone' => '(garra)',
 
 # Feedback
 'feedback-bugornote' => "Si creye que puede describir en detalle un problema tecnico, [$1 informe d'un bug] por favor.
index 69a8b5d..87e3aaa 100644 (file)
@@ -631,6 +631,9 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 
 'grouppage-sysop' => '{{ns:project}}:Beƿitendas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brūcenda ȝesceaft ȝetalu',
+
 # User rights log
 'rightslog' => 'Brūcenda riht cranic',
 
@@ -833,9 +836,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers' => 'Hƿata brūcenda ȝetalu',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brūcenda ȝesceaft ȝetalu',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Clīeƿen',
 'listgrouprights-rights' => 'Riht',
@@ -877,6 +877,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'enotif_lastvisited' => 'Sēo $1 for eall hƿearfas siþþan þīn læst cyme.',
 'enotif_lastdiff' => 'Sēo $1 to sēonne þisne hƿearf.',
 'enotif_anon_editor' => 'uncūþ brūcend $1',
+'created' => 'ȝescapen',
+'changed' => 'hƿorfen',
 
 # Delete
 'deletepage' => 'Sīdan āfeorsian',
index 5591f1e..a162f09 100644 (file)
@@ -602,7 +602,7 @@ $messages = array(
 'newwindow' => '(تفتح في نافذة جديدة)',
 'cancel' => 'إلغاء',
 'moredotdotdot' => 'المزيد...',
-'mypage' => 'صÙ\81حتÙ\8a',
+'mypage' => 'صÙ\81حة',
 'mytalk' => 'نقاش',
 'anontalk' => 'النقاش لعنوان الأيبي هذا',
 'navigation' => 'إبحار',
@@ -635,6 +635,7 @@ $messages = array(
 'namespaces' => 'النطاقات',
 'variants' => 'المتغيرات',
 
+'navigation-heading' => 'قائمة التصفح',
 'errorpagetitle' => 'خطأ',
 'returnto' => 'ارجع إلى $1.',
 'tagline' => 'من {{SITENAME}}',
@@ -847,7 +848,7 @@ $1',
 'actionthrottled' => 'لا يمكن عمل المزيد من هذا الفعل',
 'actionthrottledtext' => 'كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.
 من فضلك حاول مرة ثانية خلال عدة دقائق.',
-'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل.',
+'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل أو أية عمليات أخرى.',
 'viewsourcetext' => 'يمكنك رؤية ونسخ مصدر هذه الصفحة:',
 'viewyourtext' => "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
 'protectedinterface' => 'توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.
@@ -899,7 +900,7 @@ $2',
 'userlogin' => 'دخول / إنشاء حساب',
 'userloginnocreate' => 'تسجيل الدخول',
 'logout' => 'تسجيل الخروج',
-'userlogout' => 'تسجÙ\8aÙ\84 Ø§Ù\84خرÙ\88ج',
+'userlogout' => 'اخرج',
 'notloggedin' => 'غير مسجل الدخول',
 'nologin' => "ليس لديك حساب؟ '''$1'''.",
 'nologinlink' => 'أنشئ حسابا',
@@ -986,6 +987,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
 'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
+'user-mail-no-body' => 'محاول ارسال بريد إلكتروني فارغ أو ذو نص قصير.',
 
 # Change password dialog
 'resetpass' => 'تغيير كلمة السر',
@@ -1046,6 +1048,7 @@ $2
 'changeemail-oldemail' => 'عنوان البريد الإلكتروني الحالي:',
 'changeemail-newemail' => 'عنوان البريد الإلكتروني الجديد:',
 'changeemail-none' => '(لا شيء)',
+'changeemail-password' => 'كلمة سر {{SITENAME}} الخاصة بك:',
 'changeemail-submit' => 'غيّر البريد الإلكتروني',
 'changeemail-cancel' => 'إلغاء',
 
@@ -1175,7 +1178,7 @@ $2
 'note' => "'''ملاحظة:'''",
 'previewnote' => "'''تذكر أن هذه مجرد معاينة أولية.'''
 لم تحفظ تغييراتك إلى الآن!",
-'continue-editing' => 'Ø£Ù\83Ù\85Ù\84 التحرير',
+'continue-editing' => 'اذÙ\87ب Ù\84صÙ\86دÙ\88Ù\82 التحرير',
 'previewconflict' => 'هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.',
 'session_fail_preview' => "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.
 من فضلك حاول مرة أخرى.
@@ -1638,9 +1641,9 @@ $1",
 'prefs-emailconfirm-label' => 'تأكيد البريد الإلكتروني:',
 'prefs-textboxsize' => 'حجم نافذة التحرير',
 'youremail' => 'البريد:',
-'username' => 'اسم المستخدم:',
-'uid' => 'رقم المستخدم:',
-'prefs-memberingroups' => 'عضو في {{PLURAL:$1|مجموعة|مجموعة|مجموعتي|مجموعات}}:',
+'username' => '{{GENDER:$1|اسم المستخدم|اسم المستخدمة}}:',
+'uid' => 'رقم {{GENDER:$1|المستخدم|المستخدمة}}:',
+'prefs-memberingroups' => '{{GENDER:$2|عضو|عضوة}} في {{PLURAL:$1|مجموعة|مجموعة|مجموعتي|مجموعات}}:',
 'prefs-registration' => 'وقت التسجيل:',
 'yourrealname' => 'الاسم الحقيقي:',
 'yourlanguage' => 'اللغة:',
@@ -1660,7 +1663,7 @@ $1",
 'prefs-help-realname' => 'الاسم الحقيقي اختياري.
 لو اخترت أن توفره، فسيستخدم في الإشارة إلى عملك.',
 'prefs-help-email' => 'تحديد عنوان البريد الإلكتروني اختياري، ولكنه يلزم لإعادة تعيين كلمة المرور في حال نسيت كلمة المرور الخاصة بك.',
-'prefs-help-email-others' => 'يمكنك أيضا أن {{GENDER:$1|تسمح|تسمحي}} للآخرين الاتصال بك عن طريق وصلة في صفحة المستخدم أو نقاش المستخدم الخاصة بك. لا يكشف بريدك الإلكتروني عندما يراسلك أحد بهذه الطريقة، ولكن إذا راسلت أحداً سيرى بريدك الإلكتروني.',
+'prefs-help-email-others' => 'يمكنك أيضا أن تسمح للآخرين الاتصال بك عن طريق وصلة في صفحة المستخدم أو نقاش المستخدم الخاصة بك. لا يكشف بريدك الإلكتروني عندما يراسلك أحد بهذه الطريقة، ولكن إذا قمت بالرد سيرى بريدك الإلكتروني.',
 'prefs-help-email-required' => 'عنوان البريد الإلكتروني مطلوب.',
 'prefs-info' => 'المعلومات الأساسية',
 'prefs-i18n' => 'الترجمة',
@@ -1789,15 +1792,13 @@ $1",
 'right-sendemail' => 'إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين',
 'right-passwordreset' => 'عرض رسائل إعادة ضبط كلمات السر',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سجل إنشاء المستخدمين',
+'newuserlogpagetext' => 'هذا سجل بعمليات إنشاء المستخدمين.',
+
 # User rights log
 'rightslog' => 'سجل صلاحيات المستخدمين',
 'rightslogtext' => 'هذا سجل بالتغييرات في صلاحيات المستخدمين.',
-'rightslogentry' => 'غير صلاحيات $1 من $2 إلى $3',
-'rightslogentry-autopromote' => 'تمت ترقيته تلقائيا من $2 إلى $3',
-'logentry-rights-rights' => 'غير $1 صلاحيات $3 من $4 إلى $5',
-'logentry-rights-rights-legacy' => 'غير $1 صلاحيات $3',
-'logentry-rights-autopromote' => 'تمت ترقية $1 تلقائياً من  $4 إلى $5',
-'rightsnone' => '(لا شيء)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'قراءة هذه الصفحة',
@@ -1937,7 +1938,7 @@ $1",
 'filename-tooshort' => 'اسم الملف قصير جدا.',
 'filetype-banned' => 'نوع الملف هذا ممنوع.',
 'verification-error' => 'لم يجتز الملف تحقق صحة الملفات.',
-'hookaborted' => 'اÙ\84تعدÙ\8aÙ\84 Ø§Ù\84Ø°Ù\8a ØªØ­Ø§Ù\88Ù\84 Ø£Ù\86 ØªÙ\82Ù\88Ù\85 Ø¨Ù\87 Ø£Ø¬Ù\87ض Ù\85Ù\86 Ù\82بÙ\84 ØªÙ\85دÙ\8aد Ù\87Ù\88Ù\83',
+'hookaborted' => 'اÙ\84تعدÙ\8aÙ\84 Ø§Ù\84Ø°Ù\8a ØªØ­Ø§Ù\88Ù\84 Ø£Ù\86 ØªÙ\82Ù\88Ù\85 Ø¨Ù\87 Ø£Ø¬Ù\87ض Ù\85Ù\86 Ù\82بÙ\84 Ø§Ù\85تداد.',
 'illegal-filename' => 'لا يسمح باسم الملف هذا.',
 'overwrite' => 'لا يسمح بالكتابة فوق ملف موجود.',
 'unknown-error' => 'خطأ غير معروف حدث.',
@@ -2438,7 +2439,7 @@ $1',
 'linksearch-ok' => 'بحث',
 'linksearch-text' => 'Wildcards مثل "*.wikipedia.org" يمكن استخدامها.
 تحتاج على الأقل إلى نطاق ذو مستوى أعلى، كمثال "*.org".<br />
-البروتوكولات المدعومة: <code>$1</code> (لا تقم بإضافة أي من هذه إلى بحثك).',
+{{PLURAL:$2|البروتوكول المدعوم|البروتوكولان المدعومان|البروتوكولات المدعومة}}: <code>$1</code> (تتم إضافة http:// تلقائيا عند عدم تحديد أي بروتوكول).',
 'linksearch-line' => '$1 موصولة من $2',
 'linksearch-error' => 'الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.',
 
@@ -2457,10 +2458,6 @@ $1',
 'activeusers-hidesysops' => 'أخف الإداريين',
 'activeusers-noresult' => 'لم يعثر على أي مستخدمين',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل إنشاء المستخدمين',
-'newuserlogpagetext' => 'هذا سجل بعمليات إنشاء المستخدمين.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'صلاحيات مجموعات المستخدمين',
 'listgrouprights-summary' => 'التالي قائمة بمجموعات المستخدمين المعرفة في هذا الويكي، بصلاحياتهم المصاحبة.
@@ -2487,7 +2484,7 @@ $1',
 'emailuser-title-target' => 'راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}',
 'emailuser-title-notarget' => 'مراسلة المستخدم',
 'emailpage' => 'إرسال رسالة للمستخدم',
-'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم.
+'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.
 سيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.',
 'usermailererror' => 'جسم البريد أرجع خطأ:',
 'defemailsubject' => 'رسالة {{SITENAME}} من المستخدم "$1"',
@@ -2526,8 +2523,8 @@ $1',
 'watchnologin' => 'غير مسجل الدخول',
 'watchnologintext' => 'يجب أن تكون [[Special:UserLogin|مسجل الدخول]] لتعدل قائمة مراقبتك.',
 'addwatch' => 'إضافة إلى قائمة المراقبة',
-'addedwatchtext' => "أضيفت الصفحة  \"[[:\$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].
-التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك، وسيتم إظهار اسم الصفحة بخط '''غليظ''' في صفحة [[Special:RecentChanges|أحدث التغييرات]] لتسهيل تحديدها واكتشافها.",
+'addedwatchtext' => 'أضيفت الصفحة  "[[:$1]]" إلى [[Special:Watchlist|قائمة مراقبتك]].
+التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك.',
 'removewatch' => 'إزالة من قائمة المراقبة',
 'removedwatchtext' => 'أزيلت الصفحة "[[:$1]]" من [[Special:Watchlist|قائمة مراقبتك]].',
 'watch' => 'راقب',
@@ -2558,14 +2555,22 @@ $1',
 'enotif_impersonal_salutation' => 'مستخدم {{SITENAME}}',
 'enotif_subject_deleted' => 'الصفحة {{SITENAME}} $1 حذفها {{الجنس: $2 | $2 }}',
 'enotif_subject_created' => 'الصفحة {{SITENAME}}  $1  أنشأها {{الجنس: $2 | $2 }}',
-'enotif_body_intro_deleted' => 'إن صفحة {{SITENAME}} بعنوان $1 {{GENDER:$2|حذفها|حذفتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'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 {{GENDER:$2|حذفها|حذفتها}} $2 في $PAGEEDITDATE.راجع $3.',
+'enotif_body_intro_created' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|أنشأها|أنشأتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_body_intro_moved' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|نقلها|نقلتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_body_intro_restored' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|استرجعها|استرجعتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_body_intro_changed' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|عدلها|عدلتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
 'enotif_lastvisited' => 'انظر $1 لكل التغييرات منذ زيارتك الأخيرة.',
 'enotif_lastdiff' => 'انظر $1 لرؤية هذا التغيير.',
 'enotif_anon_editor' => 'مستخدم مجهول $1',
 'enotif_body' => 'عزيزي $WATCHINGUSERNAME
-صفحة  $PAGETITLE قد  $CHANGEDORCREATED في $PAGEEDITDATE بواسطة $PAGEEDITOR, انظر $PAGETITLE_URL للنسخة الحالية
-ملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT
 
+$PAGEINTRO $NEWPAGE
+
+ملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT
 
 الاتصال بالمحرر:
 البريد: $PAGEEDITOR_EMAIL
@@ -2574,7 +2579,7 @@ $1',
 لن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة.
 يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.
 
-                       نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
+                   نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
 
 --
 لتغيير إعدادات الإعلام بالبريد الإلكتروني الخاص بك، قم بزيارة
@@ -2586,8 +2591,10 @@ $1',
 لحذف الصفحة من قائمة مراقبتك، قم بزيارة
 $UNWATCHURL
 
-التغذية المرتدة، والحصول على مساعدة إضافية:
+للمقترحات والحصول على مساعدة إضافية:
 {{canonicalurl: {{MediaWiki:Helppage}}}}',
+'created' => 'أنشئت',
+'changed' => 'غيرت',
 
 # Delete
 'deletepage' => 'حذف الصفحة',
@@ -2661,6 +2668,8 @@ $UNWATCHURL
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
 'protect-badnamespace-title' => 'نطاق لا يحمى',
 'protect-badnamespace-text' => 'صفحات هذا النطاق لا يمكن حمايتها',
+'protect-norestrictiontypes-text' => 'لا يمكن حماية هذه الصفحة لعدم توافر أنواع المحددات المطلوبة.',
+'protect-norestrictiontypes-title' => 'صفحة غير قابلة للحماية',
 'protect-legend' => 'تأكيد الحماية',
 'protectcomment' => 'السبب:',
 'protectexpiry' => 'تنتهي في:',
@@ -2677,9 +2686,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'هذه الصفحة محمية لكونها مضمنة في {{PLURAL:$1|الصفحة|الصفحات}} التالية، والتي بها خيار حماية الصفحات المدمجة فعال.
 يمكنك تغيير مستوى حماية هذه الصفحة بدون التأثير على حماية الصفحات المدمجة الأخرى.',
 'protect-default' => 'اسمح لكل المستخدمين',
-'protect-fallback' => 'يتطلب السماح "$1"',
-'protect-level-autoconfirmed' => 'اÙ\85Ù\86ع Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84جدد Ù\88غÙ\8aر Ø§Ù\84Ù\85سجÙ\84Ù\8aÙ\86',
-'protect-level-sysop' => 'اÙ\84إدارÙ\8aÙ\88ن فقط',
+'protect-fallback' => 'السماح فقط للمستخدمين ذوي الصلاحية "$1"',
+'protect-level-autoconfirmed' => 'اÙ\84سÙ\85اح Ù\81Ù\82Ø· Ù\84Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\85ؤÙ\83دÙ\8aÙ\86 ØªÙ\84Ù\82ائÙ\8aا',
+'protect-level-sysop' => 'اÙ\84سÙ\85اح Ù\84Ù\84إدارÙ\8aÙ\8aن فقط',
 'protect-summary-cascade' => 'مضمنة',
 'protect-expiring' => 'تنتهي في $1 (UTC)',
 'protect-expiring-local' => 'ينتهي $1',
@@ -2775,11 +2784,11 @@ $1',
 'invert' => 'اعكس الاختيار',
 'tooltip-invert' => 'علم على هذا الصندوق لإخفاء التغييرات للصفحات في النطاق المختار (والنطاق المصاحب لو معلم عليها)',
 'namespace_association' => 'النطاق المقترن',
-'tooltip-namespace_association' => 'علم على هذا الصندوق لتضمين نطاق النقاش أو الموضوع لالمصاحب للنطاق المختار',
+'tooltip-namespace_association' => 'علم على هذا الصندوق لتضمين نطاق النقاش أو الموضوع المصاحب للنطاق المختار',
 'blanknamespace' => '(رئيسي)',
 
 # Contributions
-'contributions' => 'مساهمات المستخدم',
+'contributions' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}}',
 'contributions-title' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}} $1',
 'mycontris' => 'مساهماتي',
 'contribsub2' => 'ل$1 ($2)',
@@ -2822,7 +2831,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 التحويلات',
 'whatlinkshere-hidetrans' => '$1 التضمينات',
 'whatlinkshere-hidelinks' => '$1 الوصلات',
-'whatlinkshere-hideimages' => '$1 Ù\88صÙ\84Ø© ØµÙ\88رة',
+'whatlinkshere-hideimages' => '$1 Ù\88صÙ\84ات Ø§Ù\84Ù\85Ù\84Ù\81ات',
 'whatlinkshere-filters' => 'مرشحات',
 
 # Block/unblock
@@ -2986,7 +2995,7 @@ $1',
 إذا اخترت أن تقوم بالتحديث يدوياً، فتأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]] وقم بتصحيحها.
 أنت المسؤول عن التأكد من أن الوصلات تصل إلى الصفحات التي يفترض أن تصل إليها.
 
-لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت فارغة أو صفحة تحويل، ولا تاريخ لها.
+لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت صفحة تحويل، ولا تاريخ لها.
 هذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، وأنك لا يمكنك نسخ هذه الصفحة فوق صفحة موجودة.
 
 '''تحذير!'''
@@ -3327,7 +3336,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'المعلومات عن «$1»',
-'pageinfo-not-current' => 'لا يمكن إظهار المعلومات إلا عن المراجعة الأخيرة للصفحة',
+'pageinfo-not-current' => 'عذرا، لا يمكن عرض تلك المعلومات للنسخ القديمة.',
 'pageinfo-header-basic' => 'المعلومات الأساسية',
 'pageinfo-header-edits' => 'التعديلات',
 'pageinfo-header-restrictions' => 'حماية الصفحة',
@@ -3356,6 +3365,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|لا كلمات سحرية|الكلمة|الكلمات}} السحرية ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|لا تصنيفات مخفية|التصنيف المخفي|التصنيفان المخفيان|التصنيفات المخفية ($1)}}',
 'pageinfo-templates' => '{{PLURAL:$1|لا قوالب مضمنة|القالب المضمن|القالبان المضمنان|القوالب المضمنة ($1)}}',
+'pageinfo-transclusions' => '{{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}} مضمنة في ($1)',
 'pageinfo-toolboxlink' => 'معلومات عن هذه الصفحة',
 'pageinfo-redirectsto' => 'تحويلة إلى',
 'pageinfo-redirectsto-info' => 'معلومات',
@@ -3364,6 +3374,10 @@ $1',
 'pageinfo-protect-cascading' => 'مصدر توريث  الحماية للصفحات المدمجة',
 'pageinfo-protect-cascading-yes' => 'نعم',
 'pageinfo-protect-cascading-from' => 'حماية الصفحات المدمجة موروثة من',
+'pageinfo-category-info' => 'معلومات التصنيف',
+'pageinfo-category-pages' => 'عدد الصفحات',
+'pageinfo-category-subcats' => 'عدد التصنيفات الفرعية',
+'pageinfo-category-files' => 'عدد الملفات',
 
 # Skin names
 'skinname-standard' => 'كلاسيك',
@@ -3454,6 +3468,8 @@ $1',
 'minutes' => '{{PLURAL:$1||دقيقة واحدة|دقيقتين|$1 دقائق|$1 دقيقة}}',
 'hours' => '{{PLURAL:$1||ساعة واحدة|ساعتين|$1 ساعات|$1 ساعة}}',
 'days' => '{{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}}',
+'months' => '{{PLURAL:$1||شهر واحد|شهرين|$1 شهور|$1 شهرا|$1 شهر}}',
+'years' => '{{PLURAL:$1||سنة واحدة|سنتين|$1 سنين|$1 سنة}}',
 'ago' => 'قبل $1',
 'just-now' => 'الآن فقط',
 
@@ -4188,7 +4204,7 @@ $5
 'version-license' => 'الرخصة',
 'version-poweredby-credits' => "تدار هذه الويكي ب'''[//www.mediawiki.org/ ميدياويكي]''', حقوق النشر © 2001-$1 $2.",
 'version-poweredby-others' => 'آخرون',
-'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[خاص:نسخة|ميدياويكي]].',
+'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[Special:Version|ميدياويكي]].',
 'version-license-info' => "ميدياويكي برنامج حر، يحق لك توزيعه و/أو تعديله وفقاً لبنود رخصة غنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، الإصدار الثاني أو (وفقا لاختيارك أنت) أي إصدار لاحق.
 
 هذا البرنامج يوزع على أمل أن يكون مفيداً، ولكن '''دون أية ضمانات'''، بما في ذلك ضمانات '''التسويق''' أو '''الملاءمة لغرض معين'''. انظر رخصة غنو العمومية لمزيد من التفاصيل.
@@ -4330,11 +4346,15 @@ $5
 'logentry-move-move_redir-noredirect' => 'نقل $1 صفحة $3 إلى التحويلة $4 دون ترك تحويلة',
 'logentry-patrol-patrol' => '$1 مراجعة معلمة $4 للصفحة $3 تم معاينتها',
 'logentry-patrol-patrol-auto' => '$1 مراجعة معلمة تلقائيا $4 للصفحة $3 تم مراجعتها',
-'logentry-newusers-newusers' => 'Ø£Ù\86شأ $1 Ø­Ø³Ø§Ø¨ Ù\85ستخدÙ\85',
-'logentry-newusers-create' => 'Ø£Ù\86شأ $1 Ø­Ø³Ø§Ø¨ Ù\85ستخدÙ\85',
-'logentry-newusers-create2' => 'Ø£Ù\86شأ $1 Ø­Ø³Ø§Ø¨ Ø§Ù\84Ù\85ستخدÙ\85 $3',
+'logentry-newusers-newusers' => 'تÙ\85 Ø¥Ù\86شاء Ø§Ù\84حساب $1',
+'logentry-newusers-create' => 'تÙ\85 Ø¥Ù\86شاء Ø§Ù\84حساب $1',
+'logentry-newusers-create2' => 'Ø£Ù\86شأ $1 Ø§Ù\84حساب $3',
 'logentry-newusers-autocreate' => 'أنشئ حساب $1 تلقائياً',
 'newuserlog-byemail' => 'كلمة السر تم إرسالها بواسطة البريد الإلكتروني',
+'logentry-rights-rights' => 'غير $1 صلاحيات $3 من $4 إلى $5',
+'logentry-rights-rights-legacy' => 'غير $1 صلاحيات $3',
+'logentry-rights-autopromote' => 'تمت ترقية $1 تلقائياً من  $4 إلى $5',
+'rightsnone' => '(لا شيء)',
 
 # Feedback
 'feedback-bugornote' => 'إن كنت مستعدا لشرح  مشكلة تقنية بالتفصيل، رجاءا [$1 قدم تقريرا بالخلل].
index 0081813..f2b1d8b 100644 (file)
@@ -253,7 +253,7 @@ $messages = array(
 'vector-action-addsection' => 'ܐܘܣܦ ܡܠܘܐܐ',
 'vector-action-delete' => 'ܫܘܦ',
 'vector-action-move' => 'ܫܢܝ',
-'vector-action-protect' => 'Ü¢Ü\9bÜ\98ܪ',
+'vector-action-protect' => 'Ü\9bܪ',
 'vector-action-undelete' => 'ܠܐ ܫܘܦ',
 'vector-action-unprotect' => 'ܫܚܠܦ ܢܛܝܪܘܬܐ',
 'vector-view-create' => 'ܒܪܝ',
@@ -289,9 +289,9 @@ $messages = array(
 'deletethispage' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'undelete_short' => 'ܠܐ ܫܘܦ {{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ|$1 ܫܘܚܠܦ̈ܐ}}',
 'viewdeleted_short' => 'ܚܙܝ {{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ ܫܝܦܐ|$1 ܫܘܚܠܦ̈ܐ ܫܝܦ̈ܐ}}',
-'protect' => 'Ü¢Ü\9bÜ\98ܪ',
+'protect' => 'Ü\9bܪ',
 'protect_change' => 'ܫܚܠܦ',
-'protectthispage' => 'Ü¢Ü\9bÜ\98ܪ ܗܕܐ ܦܐܬܐ',
+'protectthispage' => 'Ü\9bܪ Ü ܗܕܐ ܦܐܬܐ',
 'unprotect' => 'ܫܚܠܦ ܢܛܝܪܘܬܐ',
 'unprotectthispage' => 'ܫܚܠܦ ܢܛܝܪܘܬܐ ܕܗܕܐ ܦܐܬܐ',
 'newpage' => 'ܦܐܬܐ ܚܕܬܐ',
@@ -827,9 +827,12 @@ $1',
 'right-mergehistory' => 'ܚܒܘܛ ܬܫܥܝܬܐ ܕܦܐܬܬ̈ܐ',
 'right-userrights' => 'ܫܚܠܦ ܟܠ ܙܕ̈ܩܐ ܕܡܦܠܚܢܐ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
+'newuserlogpagetext' => 'ܗܢܘ ܣܓܠܐ ܕܒܪܝܐ ܕܡܦܠܚܢ̈ܐ',
+
 # User rights log
 'rightslog' => 'ܣܓܠܐ ܕܙܕ̈ܩܐ ܕܡܦܠܚܢܐ',
-'rightsnone' => '(ܠܐ ܡܕܡ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ܩܪܝ ܦܐܬܐ ܗܕܐ',
@@ -1134,9 +1137,9 @@ $1',
 'special-categories-sort-abc' => 'ܛܟܣ ܗܓܝܢܐܝܬ',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
-'deletedcontributions-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
-'sp-deletedcontributions-contribs' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'deletedcontributions' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
+'deletedcontributions-title' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
+'sp-deletedcontributions-contribs' => 'ܫܘܬܦܘ̈ܬܐ',
 
 # Special:LinkSearch
 'linksearch' => 'ܐܣܘܪ̈ܐ ܒܪ̈ܝܐ ܒܨܝܐ',
@@ -1159,10 +1162,6 @@ $1',
 'activeusers-hidesysops' => 'ܛܫܝ ܡܕܒܪ̈ܢܐ',
 'activeusers-noresult' => 'ܠܐ ܐܫܬܟܚ ܡܦܠܚܢ̈ܐ ܐܢܫ̈ܝܢ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
-'newuserlogpagetext' => 'ܗܢܘ ܣܓܠܐ ܕܒܪܝܐ ܕܡܦܠܚܢ̈ܐ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ܙܕ̈ܩܐ ܕܟܢܘܫܬܐ ܕܡܦܠܚܢ̈ܐ',
 'listgrouprights-group' => 'ܟܢܘܫܬܐ',
@@ -1231,6 +1230,8 @@ $1',
 'enotif_lastvisited' => 'ܚܙܝ $1 ܠܟܠ ܫܘܚܠܦ̈ܐ ܡܢ ܐܡܬܝ ܕܣܘܥܪܢܐ ܐܚܪܝܐ ܕܝܠܟ.',
 'enotif_lastdiff' => 'ܚܙܝ $1 ܠܚܙܝܐ ܕܫܘܚܠܦܐ ܗܢܐ.',
 'enotif_anon_editor' => 'ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ $1',
+'created' => 'ܒܪܐ',
+'changed' => 'ܐܫܬܚܠܦܬ',
 
 # Delete
 'deletepage' => 'ܫܘܦ ܦܐܬܐ',
@@ -1252,7 +1253,7 @@ $1',
 # Rollback
 'rollbacklink' => 'ܐܦܢܝ',
 'editcomment' => "ܦܣܝܩܬ̈ܐ ܕܫܘܚܠܦܐ ܗܘܐ: \"''\$1''\".",
-'revertpage' => 'Ü\90Ü\97ܦÜ\9f Ü«Ü\98Ü\9aܠܦÌ\88Ü\90 Ü\92Ü\9dÜ\95 [[Special:Contributions/$2|$2]] ([[User talk:$2|Ü¡Ü¡Ü Ü\90]]) Ü Ü¬Ü¢Ü\9dܬÜ\90 Ü\90Ü\9aܪÜ\9dܬܐ ܒܝܕ [[User:$1|$1]]',
+'revertpage' => 'Ü\90Ü\97ܦÜ\9f Ü«Ü\98Ü\9aܠܦÌ\88Ü\90 Ü\92Ü\9dÜ\95 [[Special:Contributions/$2|$2]] ([[User talk:$2|Ü¡Ü¡Ü Ü Ü\90]]) Ü Ü¬Ü¢Ü\9dܬÜ\90 Ü\90Ü\9aܪܬܐ ܒܝܕ [[User:$1|$1]]',
 
 # Edit tokens
 'sessionfailure-title' => 'ܡܘܬܒܐ ܠܐ ܢܨܚܬ',
@@ -1260,8 +1261,11 @@ $1',
 # Protect
 'protectlogpage' => 'ܣܓܠܐ ܕܢܛܪܐ',
 'protectedarticle' => 'ܢܛܪ "[[$1]]"',
+'modifiedarticleprotection' => 'ܫܚܠܦ ܫܘܝܐ ܕܢܛܪܐ ܕ"[[$1]]"',
 'unprotectedarticle' => 'ܫܩܘܠ ܢܛܝܪܘܬܐ ܡܢ "[[$1]]"',
 'movedarticleprotection' => 'ܫܢܐ ܛܘܝܒ̈ܐ ܕܢܛܪܐ ܡܢ "[[$2]]" ܠ "[[$1]]"',
+'protect-title' => 'ܫܚܠܦ ܫܘܝܐ ܕܢܛܪܐ ܕ"$1"',
+'protect-title-notallowed' => 'ܚܘܝ ܫܘܝܐ ܕܢܛܪܐ ܕ"$1"',
 'prot_1movedto2' => '[[$1]] ܐܬܫܢܝܬ ܠ [[$2]]',
 'protect-legend' => 'ܫܪܪ ܢܘܛܪܐ',
 'protectcomment' => 'ܥܠܬܐ:',
@@ -1271,12 +1275,12 @@ $1',
 'protect-level-sysop' => 'ܡܕܒܪ̈ܢܐ ܒܠܚܘܕ',
 'protect-expiring' => 'ܬܦܪܘܩ ܒ $1 (UTC)',
 'protect-expiry-indefinite' => 'ܠܥܠܡ',
-'protect-othertime' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܬܐ:',
-'protect-othertime-op' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܬܐ',
+'protect-othertime' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܢܐ:',
+'protect-othertime-op' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܢܐ',
 'protect-otherreason' => 'ܥܠܬܐ ܐܚܪܬܐ/ܢܩܝܦܬܐ:',
 'protect-otherreason-op' => 'ܥܠܬܐ ܐܚܪܬܐ',
 'protect-edit-reasonlist' => 'ܫܚܠܦ ܥܠܬܐ ܕܢܛܪܐ',
-'protect-expiry-options' => '1 Ü«Ü¥Ü¬Ü\90:1 hour,1 Ü\9dÜ\98Ü¡Ü\90:1 day,1 Ü«Ü\92Ü\98Ü¥Ü\90:1 week,2 Ü«Ü\92Ü\98Ü¥Ì\88Ü\90:2 weeks,1 Ü\9dܪÜ\9aÜ\90:1 month,3 Ü\9dܪÌ\88Ü\9aÜ\90:3 months,6 Ü\9dܪÌ\88Ü\9aÜ\90:6 months,1 Ü«Ü¢Ü¬ܐ:1 year,ܠܥܠܡ:infinite',
+'protect-expiry-options' => '1 Ü«Ü¥Ü\90:1 hour,1 Ü\9dÜ\98Ü¡:1 day,1 Ü«Ü\92Ü\98Ü¥:1 week,2 Ü«Ü\92Ü\98Ü¥Ì\88Ü\9dÜ¢:2 weeks,1 Ü\9dܪÜ\9a:1 month,3 Ü\9dܪÌ\88Ü\9aÜ\9dÜ¢:3 months,6 Ü\9dܪÌ\88Ü\9aÜ\9dÜ¢:6 months,1 Ü«Ü¢ܐ:1 year,ܠܥܠܡ:infinite',
 'restriction-type' => 'ܦܣܣܐ:',
 'restriction-level' => 'ܫܘܝܐ ܕܣܘܝܟܐ:',
 'minimum-size' => 'ܡܬܚܐ ܬܚܬܝܐ  ܕܥܓܪܐ',
@@ -1324,24 +1328,24 @@ $1',
 'blanknamespace' => '(ܪܫܝܬܐ)',
 
 # Contributions
-'contributions' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ',
-'contributions-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܠ$1',
-'mycontris' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'contributions' => 'ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ',
+'contributions-title' => 'ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ ܠ$1',
+'mycontris' => 'ܫܘܬܦܘ̈ܬܐ',
 'contribsub2' => 'ܕ $1 ($2)',
 'uctop' => '(ܥܠܝܐ)',
 'month' => 'ܡܢ ܝܪܚܐ ܕ (ܘܡܢ ܩܕܡ ܗܝܕܝܢ):',
 'year' => 'ܡܢ ܫܢܬ (ܘܡܢ ܩܕܡ ܗܝܕܝܢ):',
 
-'sp-contributions-newbies' => 'ܚܘܝ ܫܘܬܦܘܝܬ̈ܐ ܕ ܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
+'sp-contributions-newbies' => 'ܚܘܝ ܫܘܬܦܘ̈ܬܐ ܕܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
 'sp-contributions-newbies-sub' => 'ܠܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ',
-'sp-contributions-newbies-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܠܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ',
+'sp-contributions-newbies-title' => 'ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ ܠܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ',
 'sp-contributions-blocklog' => 'ܣܓܠܐ ܕܚܪܡܐ',
-'sp-contributions-deleted' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
+'sp-contributions-deleted' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
 'sp-contributions-uploads' => 'ܡܣܩܬ̈ܐ',
 'sp-contributions-logs' => 'ܣܓܠ̈ܐ',
 'sp-contributions-talk' => 'ܡܡܠܠܐ',
 'sp-contributions-userrights' => 'ܕܘܒܪܐ ܕܙܕ̈ܩܐ ܕܡܦܠܚܢܐ',
-'sp-contributions-search' => 'ܒܨܝ ܫܘܬܦܘܝܬ̈ܐ',
+'sp-contributions-search' => 'ܒܨܝ ܫܘܬܦܘ̈ܬܐ',
 'sp-contributions-username' => 'ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ:',
 'sp-contributions-toponly' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܕܗܢܘܢ ܬܢܝܬ̈ܐ ܐܚܪ̈ܝܬܐ ܒܠܚܘܕ',
 'sp-contributions-submit' => 'ܒܨܝ',
@@ -1377,8 +1381,8 @@ $1',
 'ipbreason' => 'ܥܠܬܐ:',
 'ipbreasonotherlist' => 'ܥܠܬܐ ܐܚܪܬܐ',
 'ipbsubmit' => 'ܚܪܘܡ ܡܦܠܚܢܐ ܗܢܐ',
-'ipbother' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܬܐ',
-'ipboptions' => '2 ܫܥܬ̈ܐ:2 hours,1 ܝܘܡܐ:1 day,3 ܝܘܡܬ̈ܐ:3 days,1 ܫܒܘܥܐ:1 week,2 ܫܒܘܥ̈ܐ:2 weeks,1 ܝܪܚܐ:1 month,3 ܝܪ̈ܚܐ:3 months,6 ܝܪ̈ܚܐ:6 months,1 ܫܢܬܐ:1 year,ܠܥܠܡ:infinite',
+'ipbother' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܢܐ',
+'ipboptions' => '2 ܫܥ̈ܝܢ:2 hours,1 ܝܘܡ:1 day,3 ܝܘܡ̈ܝܢ:3 days,1 ܫܒܘܥ:1 week,2 ܫܒܘܥ̈ܝܢ:2 weeks,1 ܝܪܚ:1 month,3 ܝܪ̈ܚܝܢ:3 months,6 ܝܪ̈ܚܝܢ:6 months,1 ܫܢܐ:1 year,ܠܥܠܡ:infinite',
 'ipbotheroption' => 'ܐܚܪܢܐ',
 'ipbotherreason' => 'ܥܠܬܐ ܐܚܪܬܐ/ܢܩܝܦܬܐ:',
 'ipbhidename' => 'ܛܫܝ ܫܡܐ ܕܡܦܠܚܢܐ ܡܢ ܫܘܚܠܦ̈ܐ ܘܡܟܬܒܘܬ̈ܐ',
@@ -1387,7 +1391,7 @@ $1',
 'ipb-edit-dropdown' => 'ܫܚܠܦ ܥܠܠܬ̈ܐ ܕܚܪܡܐ',
 'ipb-unblock-addr' => 'ܫܩܘܠ ܚܪܡܐ ܡܢ $1',
 'ipb-unblock' => 'ܫܩܘܠ ܚܪܡܐ ܡܢ ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ',
-'ipb-blocklist-contribs' => 'ܫܘܬܦܘܝܬ̈ܐ ܕ $1',
+'ipb-blocklist-contribs' => 'ܫܘܬܦܘ̈ܬܐ ܕ$1',
 'unblockip' => 'ܫܩܘܠ ܚܪܡܐ ܡܢ ܡܦܠܚܢܐ',
 'ipusubmit' => 'ܫܩܘܠ ܚܪܡܐ ܗܢܐ',
 'unblocked' => 'ܐܫܬܩܠ ܚܪܡܐ ܡܢ [[User:$1|$1]]',
@@ -1403,7 +1407,7 @@ $1',
 'blocklink' => 'ܚܪܘܡ',
 'unblocklink' => 'ܫܩܘܠ ܚܪܡܐ',
 'change-blocklink' => 'ܫܚܠܦ ܚܪܡܐ',
-'contribslink' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'contribslink' => 'ܫܘܬܦܘ̈ܬܐ',
 'blocklogpage' => 'ܣܓܠܐ ܕܚܪܡܐ',
 'blocklogentry' => 'ܚܪܡ [[$1]] ܠܡܬܚܐ ܕ $2 $3',
 'unblocklogentry' => 'ܫܩܠ ܚܪܡܐ ܡܢ $1',
@@ -1450,6 +1454,7 @@ Do you want to change the settings?',
 # Namespace 8 related
 'allmessages' => 'ܐܓܪ̈ܬܐ ܕܛܟܣܐ',
 'allmessagesname' => 'ܫܡܐ',
+'allmessagescurrent' => 'ܟܬܒܬܐ ܗܫܝܬܐ ܕܐܓܪܬܐ',
 'allmessages-filter-legend' => 'ܡܨܦܝܢܝܬܐ',
 'allmessages-filter-all' => 'ܟܠ',
 'allmessages-prefix' => 'ܡܨܦܝܢܝܬܐ ܐܝܟ ܫܘܪܝܐ',
@@ -1488,7 +1493,7 @@ Do you want to change the settings?',
 'tooltip-ca-addsection' => 'ܫܪܝ ܡܢܬܐ ܚܕܬܐ',
 'tooltip-ca-viewsource' => 'ܗܢܐ ܦܐܬܐ ܢܛܪܬܐ ܐܝܬܝܗܝ.
 ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܡܒܘܥܐ ܕܝܠܗ',
-'tooltip-ca-protect' => 'Ü¢Ü\9bÜ\98ܪ ܗܕܐ ܦܐܬܐ',
+'tooltip-ca-protect' => 'Ü\9bܪ Ü ܗܕܐ ܦܐܬܐ',
 'tooltip-ca-delete' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'tooltip-ca-move' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
 'tooltip-search' => 'ܒܨܝ ܒܓܘ {{SITENAME}}',
@@ -1783,6 +1788,7 @@ $1',
 'logentry-newusers-create2' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 ܐܬܒܪܐ ܒܝܕ $1',
 'logentry-newusers-autocreate' => 'ܚܘܫܒܢܐ $1 ܐܬܒܪܝ ܝܬܐܝܬ',
 'newuserlog-byemail' => 'ܡܠܬܐ ܕܥܠܠܐ ܐܫܬܕܪܬ ܒܝܕ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
+'rightsnone' => '(ܠܐ ܡܕܡ)',
 
 # Feedback
 'feedback-subject' => 'ܡܠܘܐܐ:',
index a1ea447..7ece867 100644 (file)
@@ -474,8 +474,8 @@ Rulpakünuy feychi kangelkülelu dungu.",
 'right-browsearchive' => 'kintun pakina ñamümüngelu',
 'right-undelete' => 'Wüñoñamümün kiñe pakina',
 
-# User rights log
-'rightsnone' => 'chemnorume',
+# Special:Log/newusers
+'newuserlogpage' => 'We kellufe ñi wirintukun',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'chillkatun tüfachi pakina',
@@ -633,9 +633,6 @@ Fey ñi chumngen mülelu ($2 fey ñi chumngen wülngiñ) pengeli tüfa mew.',
 # Special:ListUsers
 'listusers-submit' => 'Pengelün',
 
-# Special:Log/newusers
-'newuserlogpage' => 'We kellufe ñi wirintukun',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(koneltulu kellufe ñi wif)',
 
@@ -664,6 +661,7 @@ Fey ñi chumngen mülelu ($2 fey ñi chumngen wülngiñ) pengeli tüfa mew.',
 'unwatching' => 'Llaytumekewelay...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} kellufe',
+'created' => 'Llituy',
 
 # Delete
 'deletepage' => 'Ñamümün tüfachi pakina',
@@ -974,4 +972,7 @@ Ka dungu ellkangeay wünedullin reke.
 # HTML forms
 'htmlform-selectorother-other' => 'Kakelu',
 
+# New logging system
+'rightsnone' => 'chemnorume',
+
 );
index 4dc6321..c4014a1 100644 (file)
@@ -1186,11 +1186,13 @@ Laḫed ana imken ikono l-indexaṫ dial {{SITENAME}} qdam o ma bqaoċ ṣalḫi
 'right-override-export-depth' => 'tsdir sfahi obinha sfahi lmawsola hta lomq 5',
 'right-sendemail' => 'sift email lmostkhdimin lkhrin',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ṫariĥ dyal l-ḫsabaṫ j-jdad',
+'newuserlogpagetext' => "hada sijill d-inċa'aṫ l-moṣṫĥdimin.",
+
 # User rights log
 'rightslog' => 'Ĝamaliyaṫ ḫoqoq l-mosṫeĥdim',
 'rightslogtext' => 'hada sijil btaghyirat f salahiyat lmostkhdimin',
-'rightslogentry' => 'ghyr salahiyat $1 mn $2 l $3',
-'rightsnone' => '(walo)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "Ĥṫareĝ had 'ṣ-ṣefḫa",
@@ -1608,10 +1610,6 @@ daba ka ṫḫwwal l-[[$2]].',
 'activeusers-hidesysops' => 'Khbbi lidariyin',
 'activeusers-noresult' => 'ta mostakhdim matlgach.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ṫariĥ dyal l-ḫsabaṫ j-jdad',
-'newuserlogpagetext' => "hada sijill d-inċa'aṫ l-moṣṫĥdimin.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'salahiyat mjmoat lmostkhdimin',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">ḫoqoq mĝtiyya</span>
@@ -1694,6 +1692,8 @@ L-Kṫaba dyal had ṣ-ṣefḫa ġaṫban '''ġliḍa''' fe [[Special:RecentCha
 'enotif_lastvisited' => 'Sir ċof $1 baċ ṫċof ṫ-ṫeġyiraṫ kamlin men ziyarṫek l-leĥĥraniya.',
 'enotif_lastdiff' => 'Ċof $1 baċ ṫċof had ṫ-ṫeġyiraṫ.',
 'enotif_anon_editor' => 'mosṫeĥdim ma mċejjelċ $1',
+'created' => "tnch'at",
+'changed' => 'Beddel',
 
 # Delete
 'deletepage' => "Mḫi had 'ṣ-ṣefḫa",
@@ -2712,5 +2712,6 @@ jrreb l-ĝṛḍ l-ĝadi.',
 'revdelete-restricted' => 'tḅḅq ḍ-ḍawaḅit ll-idariyyin',
 'revdelete-unrestricted' => 'ḫyyd ḍ-ḍawaḅit ll-idariyyin',
 'newuserlog-byemail' => "lmot de passe raha tsiftat f l'email",
+'rightsnone' => '(walo)',
 
 );
index 61bad03..1155020 100644 (file)
@@ -1477,11 +1477,13 @@ $1",
 'right-sendemail' => 'يبعت إيميل لليوزرز التانيين',
 'right-passwordreset' => 'إعادة ضبط كلمة سر مستخدم([[Special:PasswordReset|صفحة خاصة]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سجل اليوزرز الجداد',
+'newuserlogpagetext' => 'دا سجل لليوزرز الجداد',
+
 # User rights log
 'rightslog' => 'سجل صلاحيات اليوزرز',
 'rightslogtext' => 'ده سجل بالتغييرات ف صلاحيات اليوزرز .',
-'rightslogentry' => 'غير صلاحيات $1 من $2 ل $3',
-'rightsnone' => '(فاضى)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'قراية الصفحه دى',
@@ -2023,10 +2025,6 @@ PICT # misc.
 'activeusers-hidesysops' => 'خبى السيسوبات',
 'activeusers-noresult' => 'مالقيناش اى يوزر',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل اليوزرز الجداد',
-'newuserlogpagetext' => 'دا سجل لليوزرز الجداد',
-
 # Special:ListGroupRights
 'listgrouprights' => 'حقوق مجموعات اليوزرز',
 'listgrouprights-summary' => 'دى لستة بمجموعات اليوزرز المتعرفة فى الويكى دا، بالحقوق اللى معاهم.
@@ -2138,6 +2136,8 @@ $UNWATCHURL
 
 الfeedback و مساعده اكتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'إتنشأت',
+'changed' => 'اتغيرت',
 
 # Delete
 'deletepage' => 'امسح الصفحه',
@@ -3476,6 +3476,7 @@ $5
 'revdelete-restricted' => 'طبق التعليمات على السيسوبات',
 'revdelete-unrestricted' => 'شيل الضوابط من على السيسوبات',
 'newuserlog-byemail' => 'الباسورد اتبعتت بالايميل',
+'rightsnone' => '(فاضى)',
 
 # Search suggestions
 'searchsuggest-search' => 'تدوير',
index fc626d9..76bd39e 100644 (file)
@@ -1492,15 +1492,13 @@ $1",
 'right-sendemail' => 'আন সদস্যলৈ ই-পত্ৰ ঠিকনা পঠিয়াওক',
 'right-passwordreset' => 'পাছৱৰ্ড ৰি-চেটৰ ই-মেইলসমূহ দেখুৱাওক',
 
+# Special:Log/newusers
+'newuserlogpage' => 'সদস্যৰ সৃষ্টি অভিলেখ',
+'newuserlogpagetext' => 'এইখন এখন সদস্য সৃষ্টিৰ ল’গ।',
+
 # User rights log
 'rightslog' => 'সভ্যৰ অধিকাৰৰ লেখ',
 'rightslogtext' => 'সদস্য অধিকাৰৰ পৰিৱৰ্তনসমূহৰ ল’গ',
-'rightslogentry' => "$1-ৰ গোট সদস্যপদ $2-ৰ পৰা $3-লৈ সলনি কৰা হ'ল",
-'rightslogentry-autopromote' => '$2ৰ পৰা $3লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত হ’ল',
-'logentry-rights-rights' => "$1ৰ গোট সদস্যপদ $3ৰ পৰা $4লৈ $5 লৈ সলনি কৰা হ'ল",
-'logentry-rights-rights-legacy' => "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
-'logentry-rights-autopromote' => '$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল',
-'rightsnone' => '(নাই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'এই পৃষ্ঠা পঢ়ক',
@@ -2148,10 +2146,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'activeusers-hidesysops' => 'প্ৰশাসক নেদেখুৱাব',
 'activeusers-noresult' => "কোনো সদস্য পোৱা নগ'ল।",
 
-# Special:Log/newusers
-'newuserlogpage' => 'সদস্যৰ সৃষ্টি অভিলেখ',
-'newuserlogpagetext' => 'এইখন এখন সদস্য সৃষ্টিৰ ল’গ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ব্যৱহাৰকাৰী গোটৰ অধিকাৰ',
 'listgrouprights-summary' => 'এই ৱিকিত থকা গোটসমূহৰ তালিকা সেইবোৰৰ প্ৰৱেশাধিকাৰসহ তলত দিয়া হ’ল ।
@@ -2290,6 +2284,8 @@ $UNWATCHURL
 
 প্ৰতিক্ৰিয়া আৰু অধিক সহযোগিতাৰ বাবে:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'সৃষ্টি কৰা হ’ল',
+'changed' => 'সলোৱা হৈছে',
 
 # Delete
 'deletepage' => 'পৃষ্ঠা বিলোপ কৰক',
@@ -3869,6 +3865,10 @@ $5
 'logentry-newusers-create2' => "$1ৰ দ্বাৰা এটা ব্যৱহাৰকাৰী একাউণ্ট $3 সৃষ্টি কৰা হ'ল",
 'logentry-newusers-autocreate' => '$1’ৰ একাউণ্ট স্বয়ংক্ৰিয়ভাৱে সৃষ্টি কৰা হৈছিল',
 'newuserlog-byemail' => 'গুপ্তশব্দ ই-মেইল কৰি পঠোৱা হৈছে',
+'logentry-rights-rights' => "$1ৰ গোট সদস্যপদ $3ৰ পৰা $4লৈ $5 লৈ সলনি কৰা হ'ল",
+'logentry-rights-rights-legacy' => "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
+'logentry-rights-autopromote' => '$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল',
+'rightsnone' => '(নাই)',
 
 # Feedback
 'feedback-bugornote' => 'যদি আপুনি এটা কাৰিকৰী সমস্যাৰ বিৱৰণ দিবলৈ প্ৰস্তুত, অনুগ্ৰহ কৰি [$1 এটা বাগ ৰিপ\'ৰ্ট কৰক]।
index e9d2320..c6b25e0 100644 (file)
@@ -192,6 +192,7 @@ $messages = array(
 'newwindow' => "(s'abre nuna ventana nueva)",
 'cancel' => 'Encaboxar',
 'moredotdotdot' => 'Más...',
+'morenotlisted' => 'Más na llista...',
 'mypage' => 'Páxina',
 'mytalk' => 'Alderique',
 'anontalk' => 'Alderique pa esta IP',
@@ -1382,15 +1383,13 @@ Esta información sedrá pública.",
 'right-sendemail' => 'Unviar corréu a otros usuarios',
 'right-passwordreset' => 'Ver los correos de reestablecimientu de conseña',
 
+# Special:Log/newusers
+'newuserlogpage' => "Rexistru de creación d'usuarios",
+'newuserlogpagetext' => "Esti ye un rexistru de creación d'usuarios.",
+
 # User rights log
 'rightslog' => "Rexistru de perfil d'usuariu",
 'rightslogtext' => "Esti ye un rexistru de los cambeos de los perfiles d'usuariu.",
-'rightslogentry' => 'camudó la pertenencia de grupu del usuariu $1 dende $2 a $3',
-'rightslogentry-autopromote' => 'promocionó automáticamente de $2 a $3',
-'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',
-'rightsnone' => '(nengún)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lleer esta páxina',
@@ -2026,7 +2025,7 @@ Ver tamién les [[Special:WantedCategories|categoríes más buscaes]].",
 'linksearch-ok' => 'Guetar',
 'linksearch-text' => 'Se puen usar comodinos como "*.wikipedia.org".
 Necesita polo menos un dominiu de primer nivel, como "*.org".<br />
-Protocolos almitíos: <code>$1</code> (el predetermináu ye http:// si nun se conseña dengún protocolu).',
+{{PLURAL:$2|Protocolu almitíu|Protocolos almitíos}}: <code>$1</code> (el predetermináu ye http:// si nun se conseña dengún protocolu).',
 'linksearch-line' => '$1 enllaciáu dende $2',
 'linksearch-error' => 'Los comodinos namái puen apaecer al entamu del nome del güéspede.',
 
@@ -2045,10 +2044,6 @@ Protocolos almitíos: <code>$1</code> (el predetermináu ye http:// si nun se co
 'activeusers-hidesysops' => 'Anubrir alministradores',
 'activeusers-noresult' => "Nun s'alcontraron usuarios.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Rexistru de creación d'usuarios",
-'newuserlogpagetext' => "Esti ye un rexistru de creación d'usuarios.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Drechos de los grupos d'usuariu",
 'listgrouprights-summary' => "La siguiente ye una llista de grupos d'usuariu definíos nesta wiki, colos sos drechos d'accesu asociaos.
@@ -2185,6 +2180,8 @@ $UNWATCHURL
 
 Más ayuda y sofitu:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'camudada',
 
 # Delete
 'deletepage' => 'Esborrar páxina',
@@ -2256,6 +2253,8 @@ Consulta la [[Special:ProtectedPages|llista de páxines protexíes]] pa ver les
 'prot_1movedto2' => '[[$1]] treslladáu a [[$2]]',
 'protect-badnamespace-title' => 'Espaciu de nomes non protexible',
 'protect-badnamespace-text' => "Les páxines d'esti espaciu de nomes nun se puen protexer.",
+'protect-norestrictiontypes-text' => 'Esta páxina nun se pue protexer porque nun ta disponible dengún tipu de torga.',
+'protect-norestrictiontypes-title' => 'Páxina non protexible',
 'protect-legend' => 'Confirmar proteición',
 'protectcomment' => 'Motivu:',
 'protectexpiry' => 'Caduca:',
@@ -2938,6 +2937,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Pallabra máxica|Pallabres máxiques}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Plantía incluída|Plantíes incluíes}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Páxina|Páxines}} trescluyíes en ($1)',
 'pageinfo-toolboxlink' => 'Información de la páxina',
 'pageinfo-redirectsto' => 'Redirixe a',
 'pageinfo-redirectsto-info' => 'información',
@@ -2946,6 +2946,10 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-protect-cascading' => "Les proteiciones s'activen en serie dende equí",
 'pageinfo-protect-cascading-yes' => 'Sí',
 'pageinfo-protect-cascading-from' => "Les proteiciones s'activen en serie dende",
+'pageinfo-category-info' => 'Información de la categoría',
+'pageinfo-category-pages' => 'Númberu de páxines',
+'pageinfo-category-subcats' => 'Númberu de subcategoríes',
+'pageinfo-category-files' => 'Númberu de ficheros',
 
 # Skin names
 'skinname-standard' => 'Clásicu',
@@ -3029,6 +3033,8 @@ Al executalu pues comprometer el to sistema.",
 'minutes' => '{{PLURAL:$1|$1 minutu|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 hores}}',
 'days' => '{{PLURAL:$1|$1 día|$1 díes}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 añu|$1 años}}',
 'ago' => 'hai $1',
 'just-now' => 'agora mesmo',
 
@@ -3793,6 +3799,10 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'logentry-newusers-create2' => "$1 creó la cuenta d'usuariu $3",
 'logentry-newusers-autocreate' => 'La cuenta $1 se creó automáticamente',
 'newuserlog-byemail' => 'conseña unviada per corréu electrónicu',
+'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',
+'rightsnone' => '(nengún)',
 
 # Feedback
 'feedback-bugornote' => 'Si tas preparáu pa describir un problema técnicu en detalle, [$1 informa del fallu].
index 3c7b6a9..0dfc520 100644 (file)
@@ -1035,10 +1035,12 @@ Rinafe e-mail mane me zo razdar viele ar webesik uzerar.',
 'right-userrights-interwiki' => "Betara va favesikrokeem koe aro 'wiki' xo",
 'right-siteadmin' => 'Origakelekara is dimelekara',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Buredura "log"',
+
 # User rights log
 'rightslog' => '"Log" bu va favesikrokeem',
 'rightslogtext' => 'Tir "log" va betara va favesikroka.',
-'rightsnone' => '(mek)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Redura va batu bu',
@@ -1414,9 +1416,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Nedira',
 'listusers-noresult' => 'Mek trasiyin favesik.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Buredura "log"',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rokeem ke favesiklospa',
 'listgrouprights-group' => 'Lospa',
@@ -1517,6 +1516,8 @@ To change your watchlist settings, visit
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'reduyun',
+'changed' => 'betayan',
 
 # Delete
 'deletepage' => 'Busulara',
@@ -2385,5 +2386,6 @@ This confirmation code will expire at $4.',
 'revdelete-restricted' => 'irutara rewana pu ristusik',
 'revdelete-unrestricted' => 'irutara tiolteyena pu ristusik',
 'newuserlog-byemail' => 'remravlem staksayan kan e-mail',
+'rightsnone' => '(mek)',
 
 );
index 9c57628..619364b 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author AZISS
  * @author Cekli829
  * @author Don Alessandro
  * @author E THP
@@ -240,7 +241,7 @@ $messages = array(
 'vector-simplesearch-preference' => 'İnkişaf etmiş axtarma təkliflərini gətir (yalnız Vector görünüşü üçün)',
 'vector-view-create' => 'Yarat',
 'vector-view-edit' => 'Redaktə',
-'vector-view-history' => 'Tarixçə',
+'vector-view-history' => 'Tarixçəyə bax',
 'vector-view-view' => 'Oxu',
 'vector-view-viewsource' => 'Mənbəyə bax',
 'actions' => 'Hərəkətlər',
@@ -328,7 +329,7 @@ $1',
 'policy-url' => 'Project:Qaydalar',
 'portal' => 'Kənd meydanı',
 'portal-url' => 'Project:Kənd meydanı',
-'privacy' => 'Gizlilik prinsipi',
+'privacy' => 'Məxfilik siyasəti',
 'privacypage' => 'Project:Gizlilik prinsipi',
 
 'badaccess' => 'İcazə xətası',
@@ -593,7 +594,7 @@ Müvəqqəti parol: $2',
 'changeemail' => 'E-məktub ünvanını dəyiş',
 'changeemail-oldemail' => 'Hazırki e-poçt ünvanı:',
 'changeemail-newemail' => 'Yeni e-poçt ünvanı:',
-'changeemail-none' => '(heç biri)',
+'changeemail-none' => '(yoxdur)',
 'changeemail-submit' => 'E-poçtu dəyiş',
 'changeemail-cancel' => 'İmtina',
 
@@ -623,7 +624,7 @@ Müvəqqəti parol: $2',
 'minoredit' => 'Kiçik redaktə',
 'watchthis' => 'Bu səhifəni izlə',
 'savearticle' => 'Səhifəni qeyd et',
-'preview' => 'Sınaq göstərişi',
+'preview' => 'Sınaq görüntüsü',
 'showpreview' => 'Sınaq göstərişi',
 'showlivepreview' => 'Canlı sınaq göstərişi',
 'showdiff' => 'Dəyişiklikləri göstər',
@@ -960,7 +961,7 @@ $1",
 'prefsnologintext' => 'Nizamlamaları dəyişmək üçün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daxil olmaq]</span> zəruridir.',
 'changepassword' => 'Parolu dəyiş',
 'prefs-skin' => 'Cild',
-'skin-preview' => 'Sınaq göstərişi',
+'skin-preview' => 'Sınaq görüntüsü',
 'datedefault' => 'Seçim yoxdur',
 'prefs-beta' => 'Beta xüsusiyyətlər',
 'prefs-datetime' => 'Tarix və vaxt',
@@ -1168,11 +1169,13 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə
 'right-siteadmin' => 'Məlumatlar bazasının bloklanması və blokun götürülməsi',
 'right-sendemail' => 'Digər istifadəçilərə elektron poçt göndər',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yeni istifadəçilərin qeydiyyatı',
+'newuserlogpagetext' => 'Yeni qeydiyyatdan keçmiş istifadəçilərin siyahısı.',
+
 # User rights log
 'rightslog' => 'İstifadəçi hüquqları qeydləri',
 'rightslogtext' => 'İstifadəçi hüquqları dəyişikliyi qeydləri.',
-'rightslogentry' => '$1 adlı istifadəçinin istifadəçi qruplarındakı üzvlüyü dəyişdirildi: $2 ► $3',
-'rightsnone' => '(heç biri)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bu səhifənin oxunması',
@@ -1648,10 +1651,6 @@ Həmçinin, [[Special:WantedCategories|tələb olunan kateqoriyalara]] baxın.',
 'activeusers-hidesysops' => 'İdarəçiləri gizlə',
 'activeusers-noresult' => 'İstifadəçi tapılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yeni istifadəçilərin qeydiyyatı',
-'newuserlogpagetext' => 'Yeni qeydiyyatdan keçmiş istifadəçilərin siyahısı.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'İstifadəçi qruplarının hüquqları',
 'listgrouprights-summary' => 'Bu vikidə olan istifadəçi siyahıları və onların hüquqları aşağıda göstərilmişdir.
@@ -1764,6 +1763,8 @@ Siz haqqında söhbət gedən səhifəyə baxanadək səhifədəki digər dəyi
 
 Yardım və təklifləriniz üçün:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yaradıldı',
+'changed' => 'dəyişdi',
 
 # Delete
 'deletepage' => 'Səhifəni sil',
@@ -2985,6 +2986,7 @@ Bu saytda texniki problemlər var.',
 'logentry-newusers-create2' => '$1 $3 üçün istifadəçi hesabı yaratdı',
 'logentry-newusers-autocreate' => '$1 hesabı avtomatik yaradıldı',
 'newuserlog-byemail' => 'parol e-maillə göndərildi',
+'rightsnone' => '(yoxdur)',
 
 # Feedback
 'feedback-subject' => 'Mövzu:',
index 5f92473..f92fc2a 100644 (file)
@@ -153,6 +153,7 @@ $messages = array(
 'newwindow' => '(یئنی پنجره‌ده آچیلیر)',
 'cancel' => 'لغو ائت',
 'moredotdotdot' => 'داها...',
+'morenotlisted' => 'داها آرتیق لیست اولونماییب‌دیر...',
 'mypage' => 'مقاله',
 'mytalk' => 'دانیشیق',
 'anontalk' => 'بو آی‌پی آدرسینه دانیشیق',
@@ -531,6 +532,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'پی‌اچ‌پی‌نین mail() فونکسیاسیندا تانینمامیش خطا.',
 'user-mail-no-addy' => 'ایمیل آدرسی اولماماق‌لا، ایمیل گؤندرمگه چالیشدی',
+'user-mail-no-body' => 'بیر بوش یا چوخ قیسا یازیسی اولان ایمیل گؤندرمگه چالیشیلدی.',
 
 # Change password dialog
 'resetpass' => 'رمزی دَییشدیر',
@@ -617,7 +619,7 @@ $2
 'watchthis' => 'بو صفحه‌نی ایزله',
 'savearticle' => 'صحیفه‌نی قئید ائت',
 'preview' => 'اؤن‌گؤستریش',
-'showpreview' => 'سینیق گؤستریش',
+'showpreview' => 'سیناق گؤستریش',
 'showlivepreview' => 'دیری اؤن‌گؤستریش',
 'showdiff' => 'دَییشیکلیکلری گؤستر',
 'anoneditwarning' => "'''دیقت:''' سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلاجاق‌دیر.",
@@ -1312,15 +1314,13 @@ $1",
 'right-sendemail' => 'باشقا ایستیفاده‌چیلره ایمیل گؤندر',
 'right-passwordreset' => 'رمز یئنی‌له‌مه ایمیل‌لرینه باخ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ایستیفاده‌چی یارادیلما قئیدی',
+'newuserlogpagetext' => 'بو ایستیفاده‌چی یارادماق سیاهیسیدیر.',
+
 # User rights log
 'rightslog' => 'ایستیفاده‌چی حاقلاری سیاهی‌سی',
 'rightslogtext' => 'بو، ایستیفاده‌چی حاقلارینا اولان دَییشیکلیکلر سیاهی‌سی‌دیر.',
-'rightslogentry' => '$1-ین قروپ عوضولوغو، $2-دن $3-ه دَییشدیریلدی',
-'rightslogentry-autopromote' => 'اوتوماتیک اولاراق $2-دن $3-ه مقامی آرتیریلدی',
-'logentry-rights-rights' => '$1 $3-ین قروپ عوضولوگونو $4-دن $5-ه دَییشدیردی',
-'logentry-rights-rights-legacy' => '$1، $3-ین قروپ عوضولوگونو دَییشدیردی',
-'logentry-rights-autopromote' => '$1-ین مقامی اوتوماتیک $4-دن $5-ه آرتیریلدی',
-'rightsnone' => '(هئچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'بو صحیفه‌نی اوخو',
@@ -1949,7 +1949,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'linksearch-ok' => 'آختار',
 'linksearch-text' => '«*.wikipedia.org» کیمی نیشانلاری ایشلده بیلرسینیز.
 آزی بیر دنه «*.org» کیمی یوخاری دامنه لازیم‌دیر.<br />
-دستلکلنمیش پروتوکول‌لار: <code>$1</code> (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).',
+دستلکلنمیش {{PLURAL:$2|پروتوکول|پروتوکول‌لار}}: <code>$1</code> (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).',
 'linksearch-line' => '$1، $2-دن باغلانیب‌دیر',
 'linksearch-error' => 'نیشانلار یالنیز آدی اولینده گله بیلرلر.',
 
@@ -1968,10 +1968,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'activeusers-hidesysops' => 'ایداره‌چیلری گیزلت',
 'activeusers-noresult' => 'هئچ ایستیفاده‌چی تاپیلمادی.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ایستیفاده‌چی یارادیلما قئیدی',
-'newuserlogpagetext' => 'بو ایستیفاده‌چی یارادماق سیاهیسیدیر.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ایستیفاده‌چی قروپ حاقلاری',
 'listgrouprights-summary' => 'آشاغیدا، بو ویکی‌ده تانیلان ایستیفاده‌چی گروپلاری و اونلارین حاقلاری گؤستریلیر.
@@ -2101,6 +2097,8 @@ $نئwپاگئ
 
 ياردیم و تکلیفلرینیز اوچون: 
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'یارادیلیب',
+'changed' => 'ديَیشدی',
 
 # Delete
 'deletepage' => 'صحیفه‌‌نی سیل',
@@ -2171,6 +2169,8 @@ $نئwپاگئ
 'prot_1movedto2' => '[[$1]] آدی دییشیلدی. یئنی آدی: [[$2]]',
 'protect-badnamespace-title' => 'آد سیز حفظ اولموش فضا',
 'protect-badnamespace-text' => 'بو آد ساحه‌سین‌دکی صحیفه‌لر قورونا.',
+'protect-norestrictiontypes-text' => 'بو صحیفه‌نی قوروماق اولماز، چون هئچ بیر محدودلاشدیرما نؤوعو ال‌ده یوخدور.',
+'protect-norestrictiontypes-title' => 'قورونا-بیلمه‌ین صحیفه',
 'protect-legend' => 'قورومایی تصدیق ائت',
 'protectcomment' => 'ندن:',
 'protectexpiry' => 'زامان بیتدی',
@@ -2186,9 +2186,9 @@ $نئwپاگئ
 '$1 صحیفه‌سینده حال-حاضردا ائده بیلجیینیز عملیات‌لار بون‌لاردیر:",
 'protect-cascadeon' => 'بو صحیفه محافظه‌لی‌دیر، چونکی بو صحیفه {{PLURAL:$1|باشقا بیر}} صحیفه‌دن کاسکاد محافظه ائدیلمیش‌دیر. سیز بو صحیفه‌نین محافظه سویه‌سینی دییش‌دیره بیلرسینیز، بو کاسکاد محافظه‌یه تأثیر ائتمه‌یه‌جک.',
 'protect-default' => 'بوتون ایستیفاده‌چی‌لره ایجازه وئر',
-'protect-fallback' => '"$1" ایجازه‌سی طلب اولونور',
-'protect-level-autoconfirmed' => 'Û\8cئÙ\86Û\8c Ù\88 Ø¢Ù\86Ù\88Ù\86Û\8cÙ\85 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8câ\80\8cÙ\84رÛ\8c Ø¨Ø§ØºÙ\84ا',
-'protect-level-sysop' => 'یالنیز ایداره‌چی‌لر',
+'protect-fallback' => 'یالنیز «$1» ایجازه‌سی اولان ایستیفاده‌چیلره ایجازه وئر',
+'protect-level-autoconfirmed' => 'Û\8cاÙ\84Ù\86Û\8cز Ø§Ù\88تÙ\88Ù\85اتÛ\8cÚ© Ø¯Ù\88غرÙ\88Ù\84اÙ\86اÙ\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÙ\87 Ø§Û\8cجازÙ\87 Ù\88ئر',
+'protect-level-sysop' => 'یالنیز ایداره‌چیلره ایجازه وئر',
 'protect-summary-cascade' => 'پیلله‌لی',
 'protect-expiring' => '$1 (UTC)- تاریخینده واختی بیتیر',
 'protect-expiring-local' => '$1-ده بیتیر',
@@ -2482,18 +2482,18 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'lockedbyandtime' => '({{Gender: $1 | $1}} طرفین‌دن  $2 $3 اعتبار ایله)',
 
 # Move page
-'move-page' => '$1داشینیر',
+'move-page' => '$1 داشینیر',
 'move-page-legend' => 'صحیفه‌نین آدینی دییش',
-'movepagetext' => "آشاغÛ\8câ\80\8cداکÛ\8c Ù\81Ù\88رÙ\85اâ\80\8cداÙ\86 Ø§Û\8cستÛ\8cÙ\81Ù\87â\80\8cدÙ\87 Ø§Ø¦ØªÙ\85Ù\87 ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\86Û\8cÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cØ\8c Ø¨Ù\88تÙ\88Ù\86 ØªØ§Ø±Û\8cØ®Ú\86Ù\87â\80\8cسÛ\8cÙ\86Û\8c Ø¯Ù\87 Ú©Ø¤Ú\86Ù\88رÙ\85Ú©Ù\84Ù\87 یئنی باشلیغا دییشه‌جک.
وولکی باش‌لیق یئنی باشلیغا ایستیقامتلندیرمه صحیفه‌سینه چئوریله‌جک.
-کؤهنه صحیفه‌یه کئچیدلری آوتوماتیک اولا‌راق دییشه بیلرسینیز.
-بو سئچیمی ائتمدیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق ایستیقامتلندیرمه‌لری]] یوخلاماغی یاددان چیخارمایین.
-کئچیدلرین لازیمی یئره ایستیقامتلندیریلمه‌سینی تعمین ائتمک سیزین مسولیتینیزده‌دیر.
+'movepagetext' => "آشاغÛ\8câ\80\8cداکÛ\8c Ù\81Ù\88رÙ\85داÙ\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87 Ø§Ø¦ØªÙ\85Ú©Ø\8c ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\86Û\8cÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cØ\8c Ø¨Ù\88تÙ\88Ù\86 ØªØ§Ø±Û\8cØ®Ú\86Ù\87â\80\8cسÛ\8cÙ\86Û\8c Ø¯Ù\87 Ú©Ø¤Ú\86Ù\88رÙ\85Ú©â\80\8cÙ\84Ù\87Ø\8c یئنی باشلیغا دییشه‌جک.
سکی باشلیق یئنی باشلیغا یول‌لاندیریلاجاق‌دیر.
+اسکی صحیفه‌یه اولان یول‌لاندیرماقلاری، اوتوماتیک گونجل‌له‌یه بیلرسینیز.
+بو سئچیمی ائتمه‌دیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق یول‌لاندیرمالاری]] یوخلاماغی یاددان چیخارمایین.
+باغلانتیلاری اویغون یئره یول‌لاندیرماسیندان آرخایین اولماق، سیزین مسئولیتینیزده‌دیر.
 
-نظره آلین کی، هدف باش‌لیغی آلتیندا بیر صحیفه مؤوجوددورسا یئردییشمه 'باش توتمایاجاق. بونا همین صحیفه‌نین بوش اولماسی و یا ایستیقامتلندیرمه صحیفه‌سی اولماسی و کئچمیشده رئداکته ائدیلممه‌سی حال‌لاری استثنا‌دیر. بو او دئمک‌دیر کی، سهون آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلر، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
+نظره آلین کی، هدف باشلیق آلتیندا بیر صحیفه مؤوجود اولسا، یئردییشمه '''باش توتمایاجاق'''، مگر بوکی او صحیفه یول‌لاندیرما اولا و اؤنجه دَییشمه گئچمیشی ده اولمایا. بو او دئمک‌دیر کی، سهواً آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلمک اولار، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
 
-'خبردارلیق!'
-بÙ\88 Û\8cئردÛ\8cÛ\8cØ´Ù\85Ù\87 Ù¾Ù\88Ù¾Ù\88Ù\84Û\8cار ØµØ­Û\8cÙ\81Ù\87 Ø§Ù\88Ú\86Ù\88Ù\86 Ø§Ø³Ø§Ø³â\80\8cÙ\84Û\8c Ù\88 Ú¯Ø¤Ø²Ù\84Ù\86Û\8cÙ\84Ù\85ز Ø§Ù\88Ù\84ا Ø¨Û\8cÙ\84رØ\8c Ø§Ù\88Ù\86ا Ú¯Ø¤Ø±Ù\87 Ø¯Ù\87 Ø¨Ù\88 Ø¯Û\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ¯Û\8c Û\8cئرÛ\8cÙ\86Ù\87 Û\8cئتÛ\8cرÙ\85زدÙ\86 Ø§Ù\88Ù\84Ø\8c Ø¨Ù\88Ù\86Ù\88Ù\86 Ù\85Ù\88Ù\85Ú©Ù\88Ù\86 Ù\86تÛ\8cجÙ\87â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø¨Ø§Ø´Ø§ Ø¯Ù\88شدÙ\88Ú¯Ù\88Ù\86Ù\88زدÙ\86 Ø¹Ù\85ین اولون.",
+'''خبردارلیق!'''
+بÙ\88 Û\8cئردÛ\8cÛ\8cØ´Ù\85Ù\87 Ù\85Ø´Ù\87Ù\88ر ØµØ­Û\8cÙ\81Ù\87 Ø§Ù\88Ú\86Ù\88Ù\86 Ø§Ø³Ø§Ø³â\80\8cÙ\84Û\8c Ù\88 Ú¯Ø¤Ø²Ù\84Ù\86Û\8cÙ\84Ù\85ز Ø§Ù\88Ù\84ا Ø¨Û\8cÙ\84رØ\9b Ø§Ù\88Ù\86ا Ú¯Ø¤Ø±Ù\87 Ø¯Ù\87 Ø¨Ù\88 Ø¯Û\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ¯Û\8c Û\8cئرÛ\8cÙ\86Ù\87 Û\8cئتÛ\8cرÙ\85زدÙ\86 Ø§Ù\88Ù\84Ø\8c Ø¨Ù\88Ù\86Ù\88Ù\86 Ù\85Ù\88Ù\85Ú©Ù\88Ù\86 Ù\86تÛ\8cجÙ\87â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø¨Ø§Ø´Ø§ Ø¯Ù\88شدÙ\88Ú¯Ù\88Ù\86Ù\88زدÙ\86 Ø¢Ø±Ø®Ø§Û\8cین اولون.",
 'movepagetext-noredirectfixer' => "آشاغی‌داکی فورمو دول‌دورماق بیر صحیفنی یئنی‌دن آدلاندیریر، بوتون کئچمیشینی یئنی آدا داشیییر.
 کؤهنه مؤوزو یئنی باشلیغا بیر ایستیقامتلندیرمه صحیفه‌سی اولار.
 [[Special:DoubleRedirects|جوت]] یا دا [[Special:BrokenRedirects|نوزوک ایستیقامتلندیرمه‌لر]] صحیفه‌لرینی ایداره ائدین.
@@ -2585,9 +2585,9 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'exportlistauthors' => 'هر صحیفه‌‌ اوچون دَییشدیرمه ائدن سیياهیسینی اؤزونده ساخلايین',
 'export-submit' => 'ایخراج',
 'export-addcattext' => 'صحیفه‌لری بو بولمه دن علاوه ائت:',
-'export-addcat' => 'عÙ\84اÙ\88Ù\87 Ø§Ø¦Øª',
+'export-addcat' => 'آرتÛ\8cر',
 'export-addnstext' => 'صحیفه‌لری آدلار فزاسین‌دان علاوه ائت:',
-'export-addns' => 'عÙ\84اÙ\88Ù\87 Ø§Ø¦Øª',
+'export-addns' => 'آرتÛ\8cر',
 'export-download' => 'فایلی قئید ائت',
 'export-templates' => 'شابلون‌لاری داخیل ائت',
 'export-pagelinks' => 'باغ‌لی صحیفه‌لری داخیل درین‌لیک:',
@@ -2818,6 +2818,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-magic-words' => 'سیحیرلی {{PLURAL:$1|بیر|$1}} سؤزجوک ($1)',
 'pageinfo-hidden-categories' => 'گیزلی {{PLURAL:$1|بؤلمه|بؤلمه‌لر}} ($1)',
 'pageinfo-templates' => 'ایشله‌دیلمیش {{PLURAL:$1|بیر|$1}} شابلون ($1)',
+'pageinfo-transclusions' => 'ایچینده گلن {{PLURAL:$1|صحیفه|صحیفه‌لر}} ($1)',
 'pageinfo-toolboxlink' => 'صحیفه بیلگی‌سی',
 'pageinfo-redirectsto' => 'ایستیقامتلن‌دیریلن',
 'pageinfo-redirectsto-info' => 'بیلگی',
@@ -2826,6 +2827,13 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-protect-cascading' => 'مدافعه‌‌لر بورادان شراره کیمی تؤکولور',
 'pageinfo-protect-cascading-yes' => 'بلی',
 'pageinfo-protect-cascading-from' => 'شراره مدافعه‌‌لر بورادان',
+'pageinfo-category-info' => 'بؤلمه بیلگیلری',
+'pageinfo-category-pages' => 'صحیفه‌لرین سایی',
+'pageinfo-category-subcats' => 'آلت‌بؤلمه‌لرین سایی',
+'pageinfo-category-files' => 'فایل‌لارین سایی',
+
+# Skin names
+'skinname-myskin' => 'منیم قابیغیم',
 
 # Patrolling
 'markaspatrolleddiff' => 'ایداره ائدیلمیش اولا‌راق ایشاره‌له',
@@ -2902,6 +2910,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 دقیقه}}',
 'hours' => '{{PLURAL:$1|$1 ساعت |$1 ساعت}}',
 'days' => '{{PLURAL:$1|$1 گون |$1 گون}}',
+'months' => '{{PLURAL:$1|$1}} آی',
+'years' => '{{PLURAL:$1|$1}} ایل',
 'ago' => '$1 اؤنجه',
 'just-now' => 'ایندی',
 
@@ -3654,6 +3664,10 @@ $5
 'logentry-newusers-create2' => 'بیر ایستیفاده‌چی $1 حسابی $3 یاراتدی',
 'logentry-newusers-autocreate' => '$1 حسابی اوتوماتیک یارادیلدی',
 'newuserlog-byemail' => 'رمز ایمیل ایله گؤندریلدی',
+'logentry-rights-rights' => '$1 $3-ین قروپ عوضولوگونو $4-دن $5-ه دَییشدیردی',
+'logentry-rights-rights-legacy' => '$1، $3-ین قروپ عوضولوگونو دَییشدیردی',
+'logentry-rights-autopromote' => '$1-ین مقامی اوتوماتیک $4-دن $5-ه آرتیریلدی',
+'rightsnone' => '(هئچ)',
 
 # Feedback
 'feedback-bugornote' => 'بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].
index a144841..c978f66 100644 (file)
@@ -1433,15 +1433,13 @@ $1",
 'right-sendemail' => 'Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү',
 'right-passwordreset' => 'Паролде яңыртыу хәбәрҙәрен ҡарау',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Яңы ҡулланыусы яҙмалары',
+'newuserlogpagetext' => 'Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.',
+
 # User rights log
 'rightslog' => 'Ҡулланыусының хоҡуҡтары көндәлеге',
 'rightslogtext' => 'Был — ҡулланыусы хоҡуҡтары үҙгәрештәре яҙмалары журналы',
-'rightslogentry' => '$1 хоҡуҡтары $2 икән, $3 итеп үҙгертелде',
-'rightslogentry-autopromote' => '$2 автоматик рәүештә $3 ителде.',
-'logentry-rights-rights' => '$1 $3 ҡулланыусыһының төркөмдәрҙәге ағзалығын $4 икән, $5 тип үҙгәртте',
-'logentry-rights-rights-legacy' => '$1 $3 ҡулланыусыһының төркөм ағзалығын үҙгәртте',
-'logentry-rights-autopromote' => '$1 автоматик рәүештә $2 икән, $3 ителде.',
-'rightsnone' => '(юҡ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Был битте уҡыу',
@@ -2084,10 +2082,6 @@ $1',
 'activeusers-hidesysops' => 'Хәкимдәрҙе йәшерергә',
 'activeusers-noresult' => 'Ҡатнашыусылар табылманы',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Яңы ҡулланыусы яҙмалары',
-'newuserlogpagetext' => 'Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ҡатнашыусылар төркөмө хоҡуҡтары',
 'listgrouprights-summary' => 'Түбәндә был вики-проектта билдәләнгән ҡатнашыусы төркөмдәре килтерелгән һәм уларҙың хоҡуҡтары күрһәтелгән.
@@ -2223,6 +2217,8 @@ $UNWATCHURL
 
 Кире бәйләнеш һәм ярҙам:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'булдырылды',
+'changed' => 'үҙгәртелгән',
 
 # Delete
 'deletepage' => 'Битте юйырға',
@@ -3801,6 +3797,10 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'logentry-newusers-create2' => '$3 ҡатнашыусыһының иҫәп яҙмаһы $1 тарафынан булдырылды',
 'logentry-newusers-autocreate' => 'Автоматик рәүештә $1 иҫәп яҙыуы яһалды',
 'newuserlog-byemail' => 'пароль электрон почта адресы аша ебәрелде',
+'logentry-rights-rights' => '$1 $3 ҡулланыусыһының төркөмдәрҙәге ағзалығын $4 икән, $5 тип үҙгәртте',
+'logentry-rights-rights-legacy' => '$1 $3 ҡулланыусыһының төркөм ағзалығын үҙгәртте',
+'logentry-rights-autopromote' => '$1 автоматик рәүештә $2 икән, $3 ителде.',
+'rightsnone' => '(юҡ)',
 
 # Feedback
 'feedback-bugornote' => 'Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].
index 8af71c7..db8921a 100644 (file)
@@ -756,6 +756,9 @@ Dei Mail-Adress wead dabei ned ozoagt.',
 'right-edit' => 'Seiten beorweiten',
 'right-block' => 'Benutzer sperrn (Schreiwrecht)',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neiomejdungs-Logbuach',
+
 # User rights log
 'rightslog' => 'Rechte-Logbiache',
 
@@ -1045,9 +1048,6 @@ Links as Naumensraim wern do néd afglistt.",
 'listusers-submit' => 'Zoag',
 'listusers-noresult' => 'Koane Benutzer gfunden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neiomejdungs-Logbuach',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppmrechtt',
 'listgrouprights-summary' => 'Dés do is a Listen voh dé in dém Wiki definierden Benutzergruppm und da dodamid vabundernen Rechtt.
@@ -1155,6 +1155,8 @@ Um d\' Eihstöungen voh deine Beówochtungslisten åzpassen, bsuachst {{canonica
 Um d\' Seiten voh deiner Beówochtungslisten ower z\' doah, bsuachst $UNWATCHURL
 
 Ryckmödungen und a weidre Hüf: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'erstöd',
+'changed' => 'gänderd',
 
 # Delete
 'deletepage' => 'Seiten léschen',
diff --git a/languages/messages/MessagesBat_smg.php b/languages/messages/MessagesBat_smg.php
deleted file mode 100644 (file)
index 44041f0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/** Samogitian
- *
- * ISO 639-3 code 'sgs' should be used. This is code is maintained for backward
- * compatilibity.
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-$fallback = 'sgs, lt';
index 885b76f..e99e889 100644 (file)
@@ -1211,11 +1211,13 @@ $1",
 'right-siteadmin' => 'کبل و پچ دیتابیس',
 'right-override-export-depth' => 'درگیزگ صفحات گون صفحاتی لینک بوتگین ته سطح ۵',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ورود شرکتن کاربر',
+'newuserlogpagetext' => '.شی یک ورودی چه شرکتن کاربر',
+
 # User rights log
 'rightslog' => 'ورودان حقوق کاربر',
 'rightslogtext' => 'شی یک آماری چه تغییرات په حقوق کاربری انت.',
-'rightslogentry' => 'عوض بوت عضویت گروهی په $1  چه $2 په $3',
-'rightsnone' => '(هچ یک)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'وانگ این صفحه',
@@ -1703,10 +1705,6 @@ PICT # misc.
 'activeusers-from' => 'پیشدار کاربرانی که شروع بنت گون :‌',
 'activeusers-noresult' => 'هچ کاربری درگیزگ نه بیت',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ورود شرکتن کاربر',
-'newuserlogpagetext' => '.شی یک ورودی چه شرکتن کاربر',
-
 # Special:ListGroupRights
 'listgrouprights' => 'حقوق گروه کاربر',
 'listgrouprights-summary' => 'جهلیگین یک لیستی چه گروهان کاربری تعریف بوتگین ته ای ویکی انت گون آیانی حق دسترسی آن همراهنت.
@@ -1812,6 +1810,8 @@ $NEWPAGE
 
 نظرات و گیشترین کمک:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'شربوتت',
+'changed' => 'عوض بوت.',
 
 # Delete
 'deletepage' => 'حذف صفحه',
@@ -3123,5 +3123,6 @@ $5
 'revdelete-restricted' => 'محدودیت آن په مدیران سیستم بوت',
 'revdelete-unrestricted' => 'به زور چه مدیران سیستم محدودیتان',
 'newuserlog-byemail' => 'کلمه رمز گون ایمیل دیم دهگ بوت',
+'rightsnone' => '(هچ یک)',
 
 );
index 210f8aa..9f52508 100644 (file)
@@ -231,6 +231,7 @@ $messages = array(
 'newwindow' => '(minabukas sa bàgong bintanà)',
 'cancel' => 'Kanselaron',
 'moredotdotdot' => 'Kadagdagan...',
+'morenotlisted' => 'Dakol pa an bakong listado...',
 'mypage' => 'An Pahina',
 'mytalk' => 'Orolayan',
 'anontalk' => 'Olay para kaining IP address',
@@ -607,6 +608,7 @@ Pakilaog sana tabi nin sarong tugmadong koreo o pabayae na mayong laman an surat
 # E-mail 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.',
 
 # Change password dialog
 'resetpass' => 'Ribayan an sekretong panlaog',
@@ -667,6 +669,7 @@ Temporaryong sekretong panlaog: $2',
 'changeemail-oldemail' => 'Presenteng e-koreong address:',
 'changeemail-newemail' => 'Bagong e-koreong address:',
 'changeemail-none' => 'mayo tabi.',
+'changeemail-password' => 'An saimong {{SITENAME}} sikretong panlaog:',
 'changeemail-submit' => 'Ribayan an e-koreo',
 'changeemail-cancel' => 'Kanselaha',
 
@@ -1249,9 +1252,9 @@ Ini dae tabi matitingkog.',
 'prefs-emailconfirm-label' => 'Kumpirmasyon sa E-koreo',
 'prefs-textboxsize' => 'Sukol kan bintana sa pagliliwat',
 'youremail' => 'E-koreo:',
-'username' => 'Pangaran kan paragamit:',
-'uid' => 'ID kan paragamit:',
-'prefs-memberingroups' => 'Miembro kan {{PLURAL:$1|grupo|grupos}}:',
+'username' => '{{GENDER:$1|Pangaran nin paragamit}}:',
+'uid' => '{{GENDER:$1|Paragamit}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Miyembro}} kan {{PLURAL:$1|grupo|mga grupo}}:',
 'prefs-registration' => 'Rehistrasyong oras:',
 'yourrealname' => 'Totoong pangaran:',
 'yourlanguage' => 'Tataramon:',
@@ -1401,15 +1404,13 @@ An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit mak
 'right-sendemail' => 'Magpadara nin e-koreo sa ibang mga paragamit',
 'right-passwordreset' => 'Tanawon an e-koreo kan pagbabago nin sekretong panlaog',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Paragamit na talaan nin pagmukna',
+'newuserlogpagetext' => 'Ini an talaan kan mga pagmukna nin paragamit.',
+
 # User rights log
 'rightslog' => 'Usip nin derechos nin paragamit',
 'rightslogtext' => 'Ini an historial kan mga pagbabâgo sa mga derecho nin parágamit.',
-'rightslogentry' => 'Rinibayab an pagkamyembro ni $1 sa $2 sagkod sa $3',
-'rightslogentry-autopromote' => 'dati na awtomatikong pinagpalangkaw gikan sa $2 sagkod $3',
-'logentry-rights-rights' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5',
-'logentry-rights-rights-legacy' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3',
-'logentry-rights-autopromote' => '$1 awtomatikong pinagpalangkaw gikan sa $4 pasiring sa $5',
-'rightsnone' => '(mayô)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha ining pahina',
@@ -2024,9 +2025,9 @@ Asin man hilnga an [[Special:WantedCategories|kinakaipong mga kategorya]].',
 'linksearch-pat' => 'Pangarugan sa paghahanap:',
 'linksearch-ns' => 'Espasyong-ngaran:',
 'linksearch-ok' => 'Hanápon',
-'linksearch-text' => 'Mga tsambang baraha arog baka kan "*.wikipedia.org" puwedeng paggamiton.
+'linksearch-text' => 'Mga tsambang baraha arog baka kan "*.wikipedia.org" na puwedeng paggamiton.
 Minakaipo kisera halangkaw na kamugtakan nin kinasakupan, halimbawa "*.org".<br />
-Suportadong mga panundan: <code>$1</code> (defaults to http:// kun mayo nin panundan na pinagkaag).',
+Suportadong {{PLURAL:$2|protokol|mga protokol}}: <code>$1</code> (defaults to http:// kun mayong protokol na pinagkaag).',
 'linksearch-line' => '$1 an nakatakod sa $2',
 'linksearch-error' => 'Mga pantsambang baraha mapuwedeng magluwas sana sa poon kan hostname.',
 
@@ -2045,10 +2046,6 @@ Suportadong mga panundan: <code>$1</code> (defaults to http:// kun mayo nin panu
 'activeusers-hidesysops' => 'Itago an mga administrador',
 'activeusers-noresult' => 'Mayong mga paragamit na nanagboan.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Paragamit na talaan nin pagmukna',
-'newuserlogpagetext' => 'Ini an talaan kan mga pagmukna nin paragamit.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mga karapatan kan grupo nin paragamit',
 'listgrouprights-summary' => 'An minasunod iyo an listahan kan mga grupo nin paragamit na pinaghunsay kaining wiki, kaiba an saindang asosyadong mga karapatan nin paggamit.
@@ -2116,11 +2113,8 @@ An e-surat na estada sa saimong pinaglaog sa [[Special:Preferences|saimong parag
 'watchnologin' => 'Mayô sa laog',
 'watchnologintext' => 'Dapat ika si [[Special:UserLogin|nakalaog]] para puede kang magribay kan saimong lista nin mga pigbabantayán.',
 'addwatch' => 'Idagdag sa bantay-listahan',
-'addedwatchtext' => "Ining pahina \"[[:\$1]]\" dinugang sa saimong mga [[Special:Watchlist|Pigbabantayan]].
-An mga pagbabâgo sa páhinang ini asin sa mga páhinang olay na kapadis kaini ililista digdi,
-asin an páhina isusurat nin '''mahîbog''' sa [[Special:RecentChanges|lista nin mga kaaagi pa sanang pagbabâgo]] para madalî ining mahiling.
-
-Kun boot mong halîon an páhina sa pigbabantayan mo sa maabot na panahon, pindoton an \"Pabayaan\" ''side bar''.",
+'addedwatchtext' => 'Ining pahina "[[:$1]]" dinadagdag sa saimong mga [[Special:Watchlist|Bantay-listahan]].
+An maabot na mga pagbabâgo sa páhinang ini asin sa asosyadong páhina nin olay paglilistahon duman.',
 'removewatch' => 'Halion gikan sa bantay-listahan',
 'removedwatchtext' => 'An pahina "[[:$1]]" pinaghale gikan sa [[Special:Watchlist|saimong bantay-listahan]].',
 'watch' => 'Bantayán',
@@ -2154,7 +2148,7 @@ Kun boot mong halîon an páhina sa pigbabantayan mo sa maabot na panahon, pindo
 'enotif_subject_moved' => '{{SITENAME}} pahina $1 pinagbalyo ni {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}} pahina $1 pinagbalik-liwat ni {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}} pahina $1 pinagliwat ni {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'An {{SITENAME}} pahina $1 pinagpura sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
+'enotif_body_intro_deleted' => 'An {{SITENAME}} pahina $1 pinagpura sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon sa $3.',
 'enotif_body_intro_created' => 'An {{SITENAME}} pahina $1 pinagmukna sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
 'enotif_body_intro_moved' => 'An {{SITENAME}} pahina $1 pinagbalyo sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
 'enotif_body_intro_restored' => 'An {{SITENAME}} pahina $1 pinagbalik-liwat sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
@@ -2189,6 +2183,8 @@ $UNWATCHURL
 
 Balik-simbag asin kadagdagang asistensiya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'piggibo',
+'changed' => 'pigbâgo',
 
 # Delete
 'deletepage' => 'Paraon an pahina',
@@ -2260,6 +2256,8 @@ Hilnga tabi an [[Special:ProtectedPages|listahan kan protektadong mga pahina]] p
 'prot_1movedto2' => '[[$1]] piglipat sa [[$2]]',
 'protect-badnamespace-title' => 'Dae maprotektaran na espasyong-ngaran',
 'protect-badnamespace-text' => 'Mga pahina kaining espasyong-ngaran dae tabi protektado.',
+'protect-norestrictiontypes-text' => 'Ining pahina dae maprotektaran ta mayo pang ikinaag na mga tipo nin restriksyon.',
+'protect-norestrictiontypes-title' => 'Dae maprotektaran na pahina',
 'protect-legend' => 'Kompermaron an proteksyon',
 'protectcomment' => 'Rason:',
 'protectexpiry' => 'Mápasó:',
@@ -2274,9 +2272,9 @@ Ini an mga puesta sa ngunyan kaining páhina '''$1''':",
 Uya an ngonyan na mga pwesto kan pahinang '''$1''':",
 'protect-cascadeon' => 'Pigproprotektaran ining pahina sa ngonyan ta sabay ini sa mga nasunod na {{PLURAL:$1|pahina, na may|mga pahina, na may}} proteksyong katarata na nakaandar. Pwede mong bàgohon an tangga nin proteksyon kaining pahina, pero mayò ning epekto sa proteksyong katarata.',
 'protect-default' => 'Tuguti an gabos na mga paragamit',
-'protect-fallback' => 'Mangipo kan "$1" na permiso',
-'protect-level-autoconfirmed' => 'Kubkubon an baguhan asin bakong rehistradong mga paragamit',
-'protect-level-sysop' => 'Para sa mga sysop sana',
+'protect-fallback' => 'Minatugot sana sa mga paragamit na igwang "$1" na permiso',
+'protect-level-autoconfirmed' => 'Minatugot sana sa awtokumpirmadong mga paragamit',
+'protect-level-sysop' => 'Minatugot sana sa mga administrador',
 'protect-summary-cascade' => 'katarata',
 'protect-expiring' => 'mápasó sa $1 (UTC)',
 'protect-expiring-local' => 'mapalso sa $1',
@@ -2569,10 +2567,9 @@ Ika dae makakamukna nin sarong panindog.',
 # Move page
 'move-page' => 'Ibalyo an $1',
 'move-page-legend' => 'Ibalyó an páhina',
-'movepagetext' => "Sa paggagamit kan porma na yaon sa ibaba mariribayan nin pangaran an sarong pahina, maibabalyo an gabos kaining historiya pasiring baguhon na pangaran.
-An lumang titulo magigin sarong panlikwat na pahina pasiring sa baguhong titulo.
+'movepagetext' => "Sa paggagamit kan porma na yaon sa ibaba mariribayan nin pangaran an sarong pahina, maibabalyo an gabos kaining historiya pasiring sa baguhon na titulo.
 Ika makakapagsumpay kan mga panlikwat na magtutukdo awtomatiko pasiring sa orihinal na titulo.
-Kun saimong pinili na dae, seguraduhon na ma-tsek kun [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|parasa an mga panlikwat]].
+Kun saimong pinili na dae, seguraduhon na ma-tsek para sa [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|nabaak namga panlikwat]].
 Ika an responsable para himoong segurado na an mga kilyaw padagos na minatukdo kun saen sinda dapat na magduman.
 
 Giromdoma na an pahina '''dae''' maibabalyo kun igwa na nin sarong pahina sa baguhon na titulo, laen lang kun ini daeng laman o sarong panlikwat asin mayo nin nakaaging historiya nin pagliwat.
@@ -2642,7 +2639,7 @@ Igwa nang páhina na "[[:$1]]". Gusto mong parâon ini tangarig maibalyó?',
 'immobile-target-namespace-iw' => 'An Interwiki na kilyaw bakong balido puntirya para sa pagbalyo nin pahina.',
 'immobile-source-page' => 'Ining pahina bakong mabalyuhon.',
 'immobile-target-page' => 'Dae makakabalyo paduman sa titulong destinasyon.',
-'bad-target-model' => 'An pinagmamawot na destinasyon naggagamit kan nalalaeng modelo nin laog. Dae maipagkonberte gikan sa $1 pasiring sa $.',
+'bad-target-model' => 'An pinagmamawot na destinasyon minagamit kan ibahong modelo nin laog. Dae makapagpalis gikan sa $1 pasiring sa $2.',
 'imagenocrossnamespace' => 'Dae makakapagbalyo nin sagunson paduman sa bakong sagunson na espasyong pangaran.',
 'nonfile-cannot-move-to-file' => 'Dae makakapagbalyo nin bakong-sagunson pasiring sa sagunson kan espasyong-pangaran',
 'imagetypemismatch' => 'An baguhon na ekstensyon nin sagunson dae mai-aampad sa tipong ini',
@@ -2758,6 +2755,7 @@ Paki-otro giraray.',
 'import-error-interwiki' => 'An pahina "$1" bakong importado nin huli ta an pangaran kaini reserbado na para sa panluwas na kasugpunan (interwiki).',
 'import-error-special' => 'An pahina "$1" bakong importado nin huli ta ini kabali sa espesyal an espasyong-ngaran na dae nagtutugot nin mga pahina.',
 'import-error-invalid' => 'An pahina "$1" bakong importado nin huli ta an ngaran kaini imbalido.',
+'import-error-unserialize' => 'An rebisyon sa $2 kan pahina "$1" dae maseryalisado. An rebisyon pinagtala na gumamit nin modelong laman na $3 na seryalisado bilang $4.',
 'import-options-wrong' => 'Salang {{PLURAL:$2|pagpipilian|mga pagpipilian}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'An pinagtaong ugat na pahina sarong imbalidong titulo.',
 'import-rootpage-nosubpage' => 'Espasyong-ngaran "$1" kan ugat na pahina dae minatugot nin pan-irarom na mga pahina.',
@@ -2913,6 +2911,7 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'pageinfo-magic-words' => 'Mahiko {{PLURAL:$1|taramon|mga taramon}} ($1)',
 'pageinfo-hidden-categories' => 'Itinago na {{PLURAL:$1|kategorya|mga kategorya}} ($1)',
 'pageinfo-templates' => 'Kabaling pinagbalyo na {{PLURAL:$1|panguyog|mga panguyog}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pahina|Mga Pahina}} kabaling pinagbalyo sa ($1)',
 'pageinfo-toolboxlink' => 'Pahina kan impormasyon',
 'pageinfo-redirectsto' => 'Mga panlikwat paduman sa',
 'pageinfo-redirectsto-info' => 'impo',
@@ -2921,6 +2920,10 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'pageinfo-protect-cascading' => 'An mga proteksyon pasurunod gikan digde',
 'pageinfo-protect-cascading-yes' => 'Iyo',
 'pageinfo-protect-cascading-from' => 'An mga proteksyon pasurunod gikan sa',
+'pageinfo-category-info' => 'Impormasyon sa Kategorya',
+'pageinfo-category-pages' => 'Bilang nin mga pahina',
+'pageinfo-category-subcats' => 'Bilang nin mga sub-kategorya',
+'pageinfo-category-files' => 'Bilang nin mga sagunson',
 
 # Skin names
 'skinname-standard' => 'Klasiko',
@@ -3002,6 +3005,8 @@ Sa pagpapa-andar kaini, an saimong sistema mapupuwedeng makompromiso.",
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 oras|$1 oras}}',
 'days' => '{{PLURAL:$1|$1 aldaw|$1 mga aldaw}}',
+'months' => '{{PLURAL:$1|$1 bulan|$1 mga bulan}}',
+'years' => '{{PLURAL:$1|$1 taon|$1 mga taon}}',
 'ago' => '$1 nakaagi',
 'just-now' => 'ngunyan sana',
 
@@ -3587,7 +3592,7 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'watchlisttools-raw' => 'Hirahón an bàgong pigbabantayan',
 
 # Signatures
-'signature' => '[[{{ns:paragamit}}:$1|$2]] ([[{{ns:olay_nin_paragamit}}:$1|olay]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|olay]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Bakong bistadong ekstensyon nin pagmarka "$1"',
@@ -3613,7 +3618,7 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'version-license' => 'Lisensiya',
 'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mga iba pa',
-'version-credits-summary' => 'Kami gustong rekonosiron an minasunod na mga persona para sa saindang ambag sa [[Espesyal:Bersyon|Mediawiki]].',
+'version-credits-summary' => 'Gusto niyamong rekonosiron an minasunod na mga persona nin huli kan saindang ambag sa [[Special:Version|Mediawiki]].',
 'version-license-info' => 'An MediaWiki sarong libreng kasungatan; puwede mong ipanao ini asin/o baguhon ini sa irarom kan termino nin HNU (Heneral na Pampublikong Lisensiya) bilang publisado kan Free Software Foundation; maski sa arin na bersyon 2 kan lisensiya, o (saimong pansadireng pagpipilian) arinman na huring bersyon.
 
 An MediaWiki ipinagpanao sa paglaom na ini magigin kapakinabangan, pero MAYO NIN ANUMAN NA WARANTIYA; mayo dawa ngani nin pinaghuhurot na warantiya kan MERKANTIBILIDAD o KAUYUGAN PARA SA SARONG PARTIKULAR NA KATUYUHAN. Hilngon an HNU (Heneral na Pampublikong Lisensiya) para sa kadagdagang mga detalye.
@@ -3758,6 +3763,10 @@ Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
 'logentry-newusers-create2' => 'An paragamit na panindog $3 pinagmukna na ni $1',
 'logentry-newusers-autocreate' => 'An paragamit na panindog $1 awtomatikong pinagmukna na',
 'newuserlog-byemail' => 'an pasa-taramon ipinadara na sa paagi kan e-surat',
+'logentry-rights-rights' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5',
+'logentry-rights-rights-legacy' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3',
+'logentry-rights-autopromote' => '$1 awtomatikong pinagpalangkaw gikan sa $4 pasiring sa $5',
+'rightsnone' => '(mayô)',
 
 # Feedback
 'feedback-bugornote' => 'Kun ika andam na iladawan an sarong teknikal na problema na igwang detalye tabi [$1 ipaaram an kuto].
index 040b886..cf6dbb4 100644 (file)
@@ -1307,12 +1307,13 @@ $1",
 'right-sendemail' => 'Адправіць па электроннай пошце іншым карыстальнікам',
 'right-passwordreset' => 'прагляд электронных лістоў са змяненнем пароля',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал рэгістрацыі ўдзельнікаў',
+'newuserlogpagetext' => 'Гэта журнал рэгістрацыі новых удзельнікаў.',
+
 # User rights log
 'rightslog' => 'Журнал правоў удзельнікаў',
 'rightslogtext' => 'Журнал змяненняў у дазволах, прыпісаных удзельнікам.',
-'rightslogentry' => 'зменена групавая прыналежнасць $1 з $2 на $3',
-'rightslogentry-autopromote' => 'быў аўтаматычна перакладзены з $2 да $3',
-'rightsnone' => '(няма)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чытаць гэтую старонку',
@@ -1907,10 +1908,6 @@ $1',
 'activeusers-hidesysops' => 'Без адміністратараў',
 'activeusers-noresult' => 'Няма такіх удзельнікаў.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал рэгістрацыі ўдзельнікаў',
-'newuserlogpagetext' => 'Гэта журнал рэгістрацыі новых удзельнікаў.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Дазволы для груп удзельнікаў',
 'listgrouprights-summary' => 'Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.
@@ -2038,6 +2035,8 @@ $UNWATCHURL
 
 Зваротная сувязь і дапамога
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створана',
+'changed' => 'зменена',
 
 # Delete
 'deletepage' => 'Сцерці старонку',
@@ -3527,6 +3526,7 @@ MediaWiki распаўсюджваецца, спадзеючыся на прыд
 'logentry-newusers-create2' => '$1 стварыў уліковы запіс удзельніка $3',
 'logentry-newusers-autocreate' => 'Аўтаматычна створаны ўліковы запіс $1',
 'newuserlog-byemail' => 'пароль адасланы эл.поштай',
+'rightsnone' => '(няма)',
 
 # Feedback
 'feedback-bugornote' => 'Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].
index 875f614..7e6c649 100644 (file)
@@ -393,6 +393,7 @@ $messages = array(
 'newwindow' => '(адкрываецца ў новым акне)',
 'cancel' => 'Скасаваць',
 'moredotdotdot' => 'Далей…',
+'morenotlisted' => 'Болей не паказанага...',
 'mypage' => 'Старонка',
 'mytalk' => 'Гутаркі',
 'anontalk' => 'Гутаркі для гэтага IP-адрасу',
@@ -766,6 +767,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'Узьнікла невядомая памылка ў функцыі PHP mail()',
 'user-mail-no-addy' => 'Спроба даслаць электронны ліст без адрасу дастаўкі',
+'user-mail-no-body' => 'Спроба даслаць ліст з пустым або надзвычай кароткім зьместам.',
 
 # Change password dialog
 'resetpass' => 'Зьмяніць пароль',
@@ -988,8 +990,8 @@ $2
 '''КАЛІ ЛАСКА, НЕ ЗЬМЯШЧАЙЦЕ ТУТ БЕЗ ДАЗВОЛУ МАТЭРЫЯЛЫ, ЯКІЯ АХОЎВАЮЦЦА АЎТАРСКІМ ПРАВАМ!'''",
 'longpageerror' => "'''Памылка: Аб’ём тэксту, які Вы спрабуеце запісаць складае $1 {{PLURAL:$1|кілябайт|кілябайты|кілябайтаў}}, што болей устаноўленага абмежаваньня на $2 {{PLURAL:$2|кілябайт|кілябайты|кілябайтаў}}.'''
 Старонка ня можа быць захаваная.",
-'readonlywarning' => "'''ПАПЯРЭДЖАНЬНЕ: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма зараз захаваць Вашыя зьмены.
-Вы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.'''
+'readonlywarning' => "'''ПАПЯРЭДЖАНЬНЕ: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма зараз захаваць Вашыя зьмены.'''
+Вы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.
 
 Адміністратар, які заблякаваў базу зьвестак, прапанаваў наступнае тлумачэньне: $1",
 'protectedpagewarning' => "'''Папярэджаньне: Гэтая старонка была абароненая, таму толькі адміністратары могуць рэдагаваць яе.'''
@@ -1553,15 +1555,13 @@ $1",
 'right-sendemail' => 'адпраўка электронных лістоў іншым удзельнікам',
 'right-passwordreset' => 'прагляд электронных лістоў з ачысткай паролю',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал стварэньня рахункаў',
+'newuserlogpagetext' => 'Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.',
+
 # User rights log
 'rightslog' => 'Журнал правоў удзельнікаў',
 'rightslogtext' => 'Гэта журнал зьменаў правоў удзельнікаў.',
-'rightslogentry' => 'зьменена прыналежнасьць $1 з групы $2 да $3',
-'rightslogentry-autopromote' => 'быў аўтаматычна падвышаны з $2 да $3',
-'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',
-'rightsnone' => '(няма)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чытаньне гэтай старонкі',
@@ -2200,10 +2200,6 @@ $1',
 'activeusers-hidesysops' => 'Схаваць адміністратараў',
 'activeusers-noresult' => 'Удзельнікі ня знойдзеныя.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал стварэньня рахункаў',
-'newuserlogpagetext' => 'Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Правы групаў удзельнікаў',
 'listgrouprights-summary' => 'Ніжэй пададзены сьпіс групаў удзельнікаў {{GRAMMAR:родны|{{SITENAME}}}}, разам зь іх правамі.
@@ -2338,6 +2334,8 @@ $UNWATCHURL
 
 Зваротная сувязь і дапамога:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створаная',
+'changed' => 'зьмененая',
 
 # Delete
 'deletepage' => 'Выдаліць старонку',
@@ -2408,6 +2406,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] перанесеная ў [[$2]]',
 'protect-badnamespace-title' => 'Прастора назваў, у якой немагчыма абараняць старонкі',
 'protect-badnamespace-text' => 'Старонкі ў гэтай прасторы назваў ня могуць быць абароненыя.',
+'protect-norestrictiontypes-text' => 'Немагчыма абараніць гэтую старонку, паколькі не існуе тыпаў абароны.',
+'protect-norestrictiontypes-title' => 'Неабараняльная старонка',
 'protect-legend' => 'Пацьверджаньне абароны',
 'protectcomment' => 'Прычына:',
 'protectexpiry' => 'Тэрмін:',
@@ -2424,9 +2424,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'Гэтая старонка часова абароненая, таму што яна ўключаная ў {{PLURAL:$1|наступную старонку, якая абароненая|наступныя старонкі, якія абароненыя|наступныя старонкі, якія абароненыя}} каскаднай абаронай.
 Вы можаце зьмяніць узровень абароны, але гэта не паўплывае на каскадную абарону.',
 'protect-default' => 'Дазволіць усім удзельнікам',
-'protect-fallback' => 'Ð\9fаÑ\82Ñ\80Ñ\8dбнÑ\8b Ð´Ð°Ð·Ð²Ð¾Ð» «$1»',
-'protect-level-autoconfirmed' => 'Ð\91лÑ\8fкаваÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8bÑ\85 Ñ\96 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8bÑ\85 Ñ\83дзелÑ\8cнÑ\96каÑ\9e',
-'protect-level-sysop' => 'ТолÑ\8cкÑ\96 Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80Ñ\8b',
+'protect-fallback' => 'Ð\94азволÑ\96Ñ\86Ñ\8c Ñ\82олÑ\8cкÑ\96 Ñ\9eдзелÑ\8cнÑ\96кам Ð· Ð´Ð°Ð·Ð²Ð¾Ð»Ð°Ð¼ «$1»',
+'protect-level-autoconfirmed' => 'Ð\94азволÑ\96Ñ\86Ñ\8c Ñ\82олÑ\8cкÑ\96 Ð°Ñ\9eÑ\82амаÑ\82Ñ\8bÑ\87на Ð¿Ð°Ñ\86Ñ\8cвеÑ\80джанÑ\8bм',
+'protect-level-sysop' => 'Ð\94азволÑ\96Ñ\86Ñ\8c Ñ\82олÑ\8cкÑ\96 Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80ам',
 'protect-summary-cascade' => 'каскадная',
 'protect-expiring' => 'сканчаецца $1 (UTC)',
 'protect-expiring-local' => 'канчаецца $1',
@@ -2721,16 +2721,16 @@ $1',
 # Move page
 'move-page' => 'Перанесьці $1',
 'move-page-legend' => 'Перанесьці старонку',
-'movepagetext' => "Ð\97 Ð´Ð°Ð¿Ð°Ð¼Ð¾Ð³Ð°Ð¹ Ð³Ñ\8dÑ\82ай Ñ\84оÑ\80мÑ\8b Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð·Ñ\8cмÑ\8fнÑ\96Ñ\86Ñ\8c Ð½Ð°Ð·Ð²Ñ\83 Ñ\96 Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\8e Ñ\81Ñ\82аÑ\80онкÑ\96.
+'movepagetext' => "Ð\97 Ð´Ð°Ð¿Ð°Ð¼Ð¾Ð³Ð°Ð¹ Ð³Ñ\8dÑ\82ай Ñ\84оÑ\80мÑ\8b Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿ÐµÑ\80анеÑ\81Ñ\8cÑ\86Ñ\96 Ñ\81Ñ\82аÑ\80онкÑ\83, Ñ\96 Ñ\80азам Ð·Ñ\8c Ñ\91й Ñ\83Ñ\81Ñ\8e Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\8e.
 Старая назва будзе перанакіроўваць на новую.
 Вы можаце аўтаматычна абнавіць перанакіраваньні на першапачатковую назву.
 Калі вы адмовіцеся, упэўніцеся ў адсутнасьці [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|няслушных перанакіраваньняў]].
 Адказнасьць за дакладнасьць спасылак ляжыць на тым, хто перанёс старонку.
 
-Заўважце, што старонка '''ня будзе''' перанесеная, калі пад новай назвай ужо існуе іншая старонка, за выключэньнем выпадкаў, калі яна пустая альбо зьяўляецца перанакіраваньнем і ня мае гісторыі рэдагаваньняў. Гэта азначае, што існуе магчымасьць адмяніць зьмену назвы, калі Вы памыліліся, але не магчыма выдаліць існую старонку.
+Заўважце, што старонка '''ня будзе''' перанесеная, калі пад новай назвай ужо існуе іншая старонка, за выключэньнем выпадкаў, калі яна пустая альбо зьяўляецца перанакіраваньнем і ня мае гісторыі рэдагаваньняў. Гэта азначае, што існуе магчымасьць скасаваць зьмену назвы, калі Вы памыліліся, але немагчыма выдаліць існую старонку.
 
-'''Ð\9fÐ\90Ð\9fЯРЭÐ\94Ð\96Ð\90Ð\9dЬÐ\9dÐ\95!'''
\97Ñ\8cмена Ð½Ð°Ð·Ð²Ñ\8b Ð¼Ð¾Ð¶Ð° Ð¿Ñ\80Ñ\8bвеÑ\81Ñ\8cÑ\86Ñ\96 Ð´Ð° Ð½ÐµÑ\87аканÑ\8bÑ\85 Ð·Ñ\8cменаÑ\9e Ð¿Ð°Ð¿Ñ\83лÑ\8fÑ\80нÑ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак;
+'''Увага!'''
\97Ñ\8cмена Ð½Ð°Ð·Ð²Ñ\8b Ð¿Ð°Ð¿Ñ\83лÑ\8fÑ\80нÑ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак Ð¼Ð¾Ð¶Ð½Ð° Ñ\81Ñ\82аÑ\86Ñ\86а Ð²ÐµÐ»Ñ\8cмÑ\96 Ð½ÐµÑ\87аканай Ñ\96 Ñ\80Ñ\8dзкай;
 калі ласка, упэўніцеся, што Вы разумееце наступствы такіх зьменаў.",
 'movepagetext-noredirectfixer' => "Скарыстаўшыся гэтай формай, Вы перанесяце старонку з усёй гісторыяй зьменаў да новай назвы.
 Старонка са старой назвай будзе перанакіроўваць на старонку з новай.
@@ -3061,6 +3061,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' => 'інфармацыя',
@@ -3069,6 +3070,10 @@ $1',
 'pageinfo-protect-cascading' => 'Адсюль пачынаецца каскадная абарона',
 'pageinfo-protect-cascading-yes' => 'Так',
 'pageinfo-protect-cascading-from' => 'Каскадная абароная пачынаецца з',
+'pageinfo-category-info' => 'Інфармацыя пра катэгорыю',
+'pageinfo-category-pages' => 'Колькасьць старонак',
+'pageinfo-category-subcats' => 'Колькасьць падкатэгорыяў',
+'pageinfo-category-files' => 'Колькасьць файлаў',
 
 # Skin names
 'skinname-standard' => 'Клясычнае',
@@ -3159,6 +3164,8 @@ $1',
 'minutes' => '$1 {{PLURAL:$1|хвіліна|хвіліны|хвілінаў}}',
 'hours' => '$1 {{PLURAL:$1|гадзіна|гадзіны|гадзінаў}}',
 'days' => '$1 {{PLURAL:$1|дзень|дні|дзён}}',
+'months' => '{{PLURAL:$1|$1 месяц|$1 месяцы|$1 месяцаў}}',
+'years' => '{{PLURAL:$1|$1 год|$1 гады|$1 гадоў}}',
 'ago' => '$1 таму',
 'just-now' => 'толькі што',
 
@@ -3350,7 +3357,7 @@ $1',
 'exif-copyrighted' => 'Статус аўтарскіх правоў',
 'exif-copyrightowner' => 'Уласьнік аўтарскіх правоў',
 'exif-usageterms' => 'Умовы выкарыстаньня',
-'exif-webstatement' => 'Ð\97Ñ\8cвеÑ\81Ñ\82кÑ\96 Ð¿Ñ\80а Ð°Ñ\9eÑ\82аÑ\80Ñ\81кÑ\96Ñ\8f Ð¿Ñ\80авÑ\8b Ð°Ð½Ð»Ñ\8fйн',
+'exif-webstatement' => 'Ð\97Ñ\8cвеÑ\81Ñ\82кÑ\96 Ð¿Ñ\80а Ð°Ñ\9eÑ\82аÑ\80Ñ\81кÑ\96Ñ\8f Ð¿Ñ\80авÑ\8b Ð¾Ð½-лайн',
 'exif-originaldocumentid' => 'Унікальны ідэнтыфікатар ці арыгінальны дакумэнт',
 'exif-licenseurl' => 'URL-адрас аўтарскай ліцэнзіі',
 'exif-morepermissionsurl' => 'Інфармацыя пра ўмовы карыстаньня на ўмовах іншых ліцэнзіяў',
@@ -3926,6 +3933,10 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'logentry-newusers-create2' => '$1 стварыў рахунак $3',
 'logentry-newusers-autocreate' => 'Рахунак $1 быў створаны аўтаматычна',
 'newuserlog-byemail' => 'Пароль адасланы па электроннай пошце',
+'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',
+'rightsnone' => '(няма)',
 
 # Feedback
 'feedback-bugornote' => 'Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$1 паведаміце пра памылку]. 
@@ -3979,6 +3990,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 '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».',
diff --git a/languages/messages/MessagesBe_x_old.php b/languages/messages/MessagesBe_x_old.php
deleted file mode 100644 (file)
index 26895de..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Belarusian in Taraškievica orthography (Беларуская тарашкевіца)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- * @comment dummy language file. Falls back to 'be-tarask'. Backward compat.
- */
-
-$fallback = 'be-tarask';
index 0218578..e1ae315 100644 (file)
@@ -1502,14 +1502,13 @@ $1",
 'right-sendemail' => 'Изпращане на е-писма до другите потребители',
 'right-passwordreset' => 'Преглеждане на е-писма за възстановяване на парола',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дневник на регистрациите',
+'newuserlogpagetext' => 'В този дневник се записват регистрациите на потребители.',
+
 # User rights log
 'rightslog' => 'Дневник на потребителските права',
 'rightslogtext' => 'Това е дневник на промените на потребителски права.',
-'rightslogentry' => 'промени потребителската група на $1 от $2 в $3',
-'rightslogentry-autopromote' => 'автоматично е повишен от $2 до$3',
-'logentry-rights-autopromote' => '
-$1 е автоматично повишен от $4 до $5',
-'rightsnone' => '(никакви)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'четене на страницата',
@@ -2083,10 +2082,6 @@ $1',
 'activeusers-hidesysops' => 'Скриване на администраторите',
 'activeusers-noresult' => 'Няма намерени потребители.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник на регистрациите',
-'newuserlogpagetext' => 'В този дневник се записват регистрациите на потребители.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права по потребителски групи',
 'listgrouprights-summary' => 'По-долу на тази страница е показан списък на групите потребители в това уики с асоциираните им права за достъп. Допълнителна информация за отделните права може да бъде намерена [[{{MediaWiki:Listgrouprights-helppage}}|тук]].',
@@ -2211,6 +2206,8 @@ $UNWATCHURL
 
 За обратна връзка и помощ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'създадена',
+'changed' => 'променена',
 
 # Delete
 'deletepage' => 'Изтриване',
@@ -2287,7 +2284,7 @@ $UNWATCHURL
 'protect-locked-access' => "Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата „'''$1'''“:",
 'protect-cascadeon' => 'Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита. Можете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.',
 'protect-default' => 'Позволяване за всички потребители',
-'protect-fallback' => 'Ð\9dеобÑ\85одими Ñ\81а права на „$1“',
+'protect-fallback' => 'Ð\9fозволÑ\8fване Ñ\81амо Ð·Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели Ñ\81 права на „$1“',
 'protect-level-autoconfirmed' => 'Блокиране на нови и нерегистрирани потребители',
 'protect-level-sysop' => 'Само за администратори',
 'protect-summary-cascade' => 'каскадно',
@@ -2756,6 +2753,7 @@ $1',
 'import-error-interwiki' => 'Страницата „$1“ не беше внесена, тъй като името ѝ е запазено за външно свързване (междууики).',
 'import-error-special' => 'Страницата „$1“ не беше внесена, тъй като принадлежи към специално именно пространство, което не позволява страници.',
 'import-error-invalid' => 'Страницата „$1“ не беше внесена, тъй като името ѝ е невалидно.',
+'import-rootpage-invalid' => 'Посочената основна страница е с невалидно заглавие.',
 'import-rootpage-nosubpage' => 'Именното пространство „$1“ на основната страница не позволява създаването на подстраници.',
 
 # Import log
@@ -2874,7 +2872,8 @@ $1',
 # Info page
 'pageinfo-title' => 'Информация за "$1"',
 'pageinfo-header-basic' => 'Основна информация',
-'pageinfo-header-edits' => 'Редакции',
+'pageinfo-header-edits' => 'История на редакциите',
+'pageinfo-header-restrictions' => 'Защита на страницата',
 'pageinfo-article-id' => 'Номер на страницата',
 'pageinfo-views' => 'Брой прегледи',
 'pageinfo-watchers' => 'Брой наблюдаващи страницата',
@@ -2885,6 +2884,7 @@ $1',
 'pageinfo-edits' => 'Общ брой редакции',
 'pageinfo-authors' => 'Общ брой на отделните автори',
 'pageinfo-magic-words' => '{{PLURAL:$1|Вълшебна думичка|Вълшебни думички}} ($1)',
+'pageinfo-toolboxlink' => 'Информация за страницата',
 'pageinfo-contentpage-yes' => 'Да',
 'pageinfo-protect-cascading-yes' => 'Да',
 
@@ -2940,6 +2940,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 пиксела, размер на файла: $3, MIME тип: $4, $5 {{PLURAL:$5|страница|страници}}',
 'file-nohires' => 'Не е налична версия с по-висока разделителна способност.',
 'svg-long-desc' => 'Файл във формат SVG, основен размер: $1 × $2 пиксела, големина на файла: $3',
+'svg-long-error' => 'Невалиден SVG файл: $1',
 'show-big-image' => 'Пълна разделителна способност',
 'show-big-image-preview' => 'Размер на този преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга разделителна способност|Други разделителни способности}}: $1.',
@@ -3649,6 +3650,9 @@ MediaWiki се разпространява с надеждата, че ще б
 'logentry-newusers-create2' => '$1 създаде потребителска сметка $3',
 'logentry-newusers-autocreate' => 'Сметката $1 беше създадена автоматично',
 'newuserlog-byemail' => 'паролата е изпратена по е-поща',
+'logentry-rights-autopromote' => '
+$1 е автоматично повишен от $4 до $5',
+'rightsnone' => '(никакви)',
 
 # Feedback
 'feedback-subject' => 'Тема:',
index 8c13b4e..eb7ceb1 100644 (file)
@@ -1401,12 +1401,13 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'right-sendemail' => 'Mangirim suril ka papamuruk lain',
 'right-passwordreset' => 'Tiringi setelan-pulang katasunduk suril',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pamakai hanyar',
+'newuserlogpagetext' => 'Ngini adalah sabuah log paulahan pamuruk.',
+
 # User rights log
 'rightslog' => 'Log parubahan hak masuk',
 'rightslogtext' => 'Nangini adalah sabuah log paparubahan ka hahak pamuruk.',
-'rightslogentry' => 'Ubah galambang angguta gasan $1 matan $2 ka $3',
-'rightslogentry-autopromote' => 'sudah utumatis diangkat matan $2 ka $3',
-'rightsnone' => '(kadada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'baca tungkaran ini',
@@ -2031,10 +2032,6 @@ Protokol nang didukung: <code>$1</code> (jangan tambahakan dalam panggagaian Pia
 'activeusers-hidesysops' => 'Sungkupakan pambakal',
 'activeusers-noresult' => 'Kadada papamuruk tatamu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pamakai hanyar',
-'newuserlogpagetext' => 'Ngini adalah sabuah log paulahan pamuruk.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Galambang hak pamuruk',
 'listgrouprights-summary' => 'Barikut adalah sabuah daptar matan galambang pamuruk nang ada di wiki ngini, lawan hak ungkai masing-masing.
@@ -2158,6 +2155,8 @@ $UNWATCHURL
 
 kitihan-bulik wan pangganian labih jauh:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => "ta'ulah",
+'changed' => "ta'ubah",
 
 # Delete
 'deletepage' => 'Hapus tungkaran',
@@ -3661,6 +3660,7 @@ Situs ngini mangalami kangalihan teknik.',
 'logentry-newusers-create2' => '$1 ma-ulah sabuting akun pamakai $3',
 'logentry-newusers-autocreate' => 'Akun $1 utumatis diulah',
 'newuserlog-byemail' => 'Katasunduk dikirimakan lung suril.',
+'rightsnone' => '(kadada)',
 
 # Feedback
 'feedback-bugornote' => 'Pabila Pian siap manjalasakan sabuah masalah taknik rinci muhun [lapurakan sabuah bug $1].
index 85083ad..6d36624 100644 (file)
@@ -201,6 +201,7 @@ $messages = array(
 'newwindow' => '(নতুন উইন্ডোতে খুলবে)',
 'cancel' => 'বাতিল',
 'moredotdotdot' => 'আরও...',
+'morenotlisted' => 'আরও তালিকাভুক্ত হয়নি...',
 'mypage' => 'আমার পাতা',
 'mytalk' => 'আলোচনা',
 'anontalk' => 'এই বেনামী ব্যবহারকারীর আলাপের পাতা',
@@ -234,6 +235,7 @@ $messages = array(
 'namespaces' => 'নামস্থান',
 'variants' => 'বিকল্পসমূহ',
 
+'navigation-heading' => 'পরিভ্রমণ মেনু',
 'errorpagetitle' => 'ত্রুটি',
 'returnto' => '$1 শিরোনামের পাতায় ফেরত যান।',
 'tagline' => '{{SITENAME}} থেকে',
@@ -477,6 +479,8 @@ $2',
 এ পরিস্থিতিতে আপনি বেনামে {{SITENAME}} ব্যবহার করতে পারেন, কিংবা একই বা পৃথক নামে <span class='plainlinks'>[$1 আবার প্রবেশ করতে]</span> পারেন।
 লক্ষ্য করুন যে, এর কোন কোন পাতা এখনও এমনভাবে দেখাতে পারে যাতে মনে হবে আপনি আগের অবস্থাতেই আছেন। এক্ষেত্রে আপনাকে আপনার ব্রাওজারের ক্যাশ পরিষ্কার (clear browser cache) করে নিতে হবে।",
 'welcomeuser' => 'স্বাগতম, $1!',
+'welcomecreation-msg' => 'আপনার অ্যাকাউন্ট তৈরী হয়েছে।
+আপনার [[Special:Preferences|{{SITENAME}} পছন্দসমূহ]]  পরিবর্তন করে নিতে ভুলবেন না।',
 'yourname' => 'ব্যবহারকারী নাম:',
 'yourpassword' => 'শব্দচাবি:',
 'yourpasswordagain' => 'শব্দচাবিটি (password) আবার লিখুন',
@@ -1344,12 +1348,13 @@ $1",
 'right-sendemail' => 'অন্য ব্যবহারকারীকে ইমেইল পাঠান',
 'right-passwordreset' => 'পাসওয়ার্ড রিসেট ইমেইল দেখুন',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ব্যবহারকারী সৃষ্টির লগ',
+'newuserlogpagetext' => 'এটি নতুন ব্যবহারকারী সৃষ্টির লগ',
+
 # User rights log
 'rightslog' => 'ব্যবহারকারীর অধিকার লগ',
 'rightslogtext' => 'এটি ব্যবহারকারী অধিকারে আনা পরিবর্তনগুলির একটি লগ।',
-'rightslogentry' => '$1-কে $2 দল থেকে পরিবর্তন করে $3 দলের সদস্য করা হয়েছে',
-'rightslogentry-autopromote' => 'সয়ংক্রিয়ভাবে $2 থেকে $3 উন্নীত হয়েছে',
-'rightsnone' => '(কিছু নাই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'এই পাতাটি পড়ুন',
@@ -1577,6 +1582,7 @@ $1',
 'backend-fail-notsame' => '"$1"-এ আগে থেকেই অপর একটি ফাইল রয়েছে।',
 'backend-fail-invalidpath' => '"$1" একটি ভুল স্টোরেজ পাথ।',
 'backend-fail-delete' => '$1 ফাইলটি অপসারণ সম্ভব নয়।',
+'backend-fail-describe' => '"$1" ফাইলের মেটাডাটা পরিবর্তন সম্ভব নয়।',
 'backend-fail-alreadyexists' => '"$1" নামের একটি ফাইল আগে থেকেই রয়েছে।',
 'backend-fail-store' => '"$2"-এ "$1" ফাইলটি সংরক্ষন করা সম্ভব নয়।',
 'backend-fail-copy' => '"$1" ফাইলটি "$2"-তে কপি করা সম্ভব নয়।',
@@ -1962,7 +1968,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'linksearch-ok' => 'অনুসন্ধান',
 'linksearch-text' => '"*.wikipedia.org" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।
 নূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন "*.org".<br />
-যে সকল প্রোটোকল সমর্থন করে: <code>$1</code> (প্রোটকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।',
+যে সকল {{PLURAL:$2|প্রোটোকল|প্রোটোকলসমূহ}} সমর্থন করে: <code>$1</code> (প্রোটকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।',
 'linksearch-line' => '$2 থেকে $1 এ লিংক করা হয়েছে',
 'linksearch-error' => 'হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।',
 
@@ -1981,10 +1987,6 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'activeusers-hidesysops' => 'প্রশাসক লুকাও',
 'activeusers-noresult' => 'কোনো ব্যবহারকারী পাওয়া যায়নি।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ব্যবহারকারী সৃষ্টির লগ',
-'newuserlogpagetext' => 'এটি নতুন ব্যবহারকারী সৃষ্টির লগ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'দলগত ব্যবহারকারী অধিকার',
 'listgrouprights-summary' => 'এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।
@@ -2050,12 +2052,9 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'watchnologin' => 'আপনি এখনও লগ-ইন করেননি।',
 'watchnologintext' => 'আপনার নজর তালিকা পরিবর্তনের জন্য আপনাকে অবশ্যই অ্যাকাউন্টে [[Special:UserLogin|প্রবেশ করতে হবে]]।',
 'addwatch' => 'নজরতালিকায় যোগ করো',
-'addedwatchtext' => "\"<nowiki>\$1</nowiki>\" পাতাটি আপনার [[Special:Watchlist|নজরতালিকা]]-তে যোগ করা হয়েছে৷
-
-ভবিষ্যতে এই পাতা ও এই পাতার সাথে সম্পর্কিত আলোচনা পাতায় সংঘটিত যাবতীয় পরিবর্তন এখানে তালিকাভুক্ত হবে৷
-এছাড়া [[Special:RecentChanges|সাম্প্রতিক পরিবর্তনসমূহ]]তালিকায় এই পাতাটিকে '''গাঢ়''' অক্ষরে দেখানো হবে যাতে আপনি সহজেই পাতাটি শনাক্ত করতে পারেন৷
+'addedwatchtext' => '"[[:$1]]" পাতাটি আপনার [[Special:Watchlist|নজরতালিকা]]-তে যোগ করা হয়েছে৷
 
-পরবরà§\8dতà§\80তà§\87 à¦\86পনি à¦¯à¦¦à¦¿ à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 à¦\86পনার à¦¨à¦\9cরতালিà¦\95া à¦¥à§\87à¦\95à§\87 à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লতà§\87 à¦\9aান, à¦¤à¦¬à§\87 \"নà¦\9cর à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦¨\" à¦\9fà§\8dযাবà¦\9fিতà§\87 à¦\95à§\8dলিà¦\95 à¦\95রবà§\87ন৷",
+ভবিষà§\8dযতà§\87 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾ à¦\93 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦¸à¦¾à¦¥à§\87 à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦\86লà§\8bà¦\9aনা à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦¸à¦\82à¦\98à¦\9fিত à¦¯à¦¾à¦¬à¦¤à§\80য় à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\8fà¦\96ানà§\87 à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦¹à¦¬à§\87৷',
 'removewatch' => 'নজরতালিকা থেকে অপসারণ',
 'removedwatchtext' => '"[[:$1]]" পাতাটি [[Special:Watchlist|নজর তালিকা]] থেকে অপসারিত হয়েছে।',
 'watch' => 'নজর রাখুন',
@@ -2084,40 +2083,47 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 '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 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে অপসারণ করেছেন, বিস্তারিত $3।',
+'enotif_body_intro_created' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে তৈরী করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
+'enotif_body_intro_moved' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে স্থানান্তর করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
+'enotif_body_intro_restored' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE আগের অবস্থায় ফিরিয়ে এনেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
+'enotif_body_intro_changed' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে পরিবর্তন করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
 'enotif_lastvisited' => 'আপনার শেষ আগমনের পরে সংঘটিত সমস্ত পরিবর্তনের জন্য $1 দেখুন।',
 'enotif_lastdiff' => 'এই পরিবর্তনটি দেখার জন্য $1 দেখুন।',
 'enotif_anon_editor' => 'বেনামী ব্যবহারকারী $1',
-'enotif_body' => '!প্রিয় $WATCHINGUSERNAME,
+'enotif_body' => 'প্রিয় $WATCHINGUSERNAME,
 
-{{SITENAME}}-এর $PAGETITLE শিরোনামের পাতাটি $PAGEEDITDATE তারিখে $PAGEEDITOR $CHANGEDORCREATED করেছেন। পাতাটির বর্তমান সংস্করণের জন্য $PAGETITLE_URL দেখুন।
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 সম্পাদকের সারাংশ: $PAGESUMMARY $PAGEMINOREDIT
 
 সম্পাদকের সাথে যোগাযোগের উপায়:
-
-ই-মেইল: $PAGEEDITOR_EMAIL
+ইমেইল: $PAGEEDITOR_EMAIL
 উইকি: $PAGEEDITOR_WIKI
 
-পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন।
-এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
+পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
 
-
-                        {{SITENAME}} বিজ্ঞপ্তি ব্যবস্থা
+{{SITENAME}} নোটিফিকেশন
 
 --
+ইমেইল নোটিফিকেশন সেটিং পরিবর্তনের জন্য দেখুন
+{{canonicalurl:{{#special:Preferences}}}}
 
-à¦\86পনার à¦¨à¦\9cরতালিà¦\95া à¦¸à§\87à¦\9fিà¦\82স à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 à¦\8fà¦\96ানà§\87 à¦¯à¦¾à¦¨:
+à¦\86পনার à¦¨à¦\9cরতালিà¦\95া à¦¸à§\87à¦\9fিà¦\82স à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 à¦¦à§\87à¦\96à§\81ন, 
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-
 নজরতালিকা থেকে কোন পাতা অপসারণ করতে চাইলে এখানে যান:
 $UNWATCHURL
 
-
 প্রতিক্রিয়া জানাতে ও আরও সহযোগিতার জন্য:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'তৈরী হয়েছিল',
+'changed' => 'পরিবর্তিত',
 
 # Delete
 'deletepage' => 'পাতাটি মুছে ফেলা হোক',
@@ -2188,6 +2194,7 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]]-কে [[$2]]-এ সরিয়ে নেওয়া হয়েছে',
 'protect-badnamespace-title' => 'নামস্থানটি সুরক্ষিত করা সম্ভব নয়',
 'protect-badnamespace-text' => 'এই নামস্থানের পাতাগুলো সুরক্ষিত করা সম্ভব নয়।',
+'protect-norestrictiontypes-title' => 'সুরক্ষা প্রযোজ্য নয় এমন পাতা',
 'protect-legend' => 'সুরক্ষা নিশ্চিত করুন',
 'protectcomment' => 'কারণ:',
 'protectexpiry' => 'মেয়াদোত্তীর্ণ হবে:',
@@ -2814,6 +2821,10 @@ $1',
 'pageinfo-contentpage' => 'তথ্য পাতা হিসাবে বিবেচিত হয়েছে',
 'pageinfo-contentpage-yes' => 'হ্যাঁ',
 'pageinfo-protect-cascading-yes' => 'হ্যাঁ',
+'pageinfo-category-info' => 'বিষয়শ্রেণী তথ্য',
+'pageinfo-category-pages' => 'পাতার সংখ্যা',
+'pageinfo-category-subcats' => 'উপবিষয়শ্রেণীর সংখ্যা',
+'pageinfo-category-files' => 'ফাইলের সংখ্যা',
 
 # Patrolling
 'markaspatrolleddiff' => 'পরীক্ষিত বলে চিহ্নিত করুন',
@@ -2857,6 +2868,7 @@ $1',
 'file-nohires' => 'এর চেয়ে বেশি রেজোলিউশন লভ্য নয়।',
 'svg-long-desc' => 'SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
 'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
+'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
 'show-big-image' => 'পূর্ণ রেজোলিউশন',
 'show-big-image-preview' => 'এই প্রিভিউ-এর আকার: $1।',
 'show-big-image-other' => 'অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।',
@@ -2886,7 +2898,10 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 মিনিট|$1 মিনিট}}',
 'hours' => '{{PLURAL:$1|$1 ঘণ্টা|$1 ঘণ্টা}}',
 'days' => '{{PLURAL:$1|$1 দিন|$1 দিন}}',
+'months' => '{{PLURAL:$1|$1 মাস}}',
+'years' => '{{PLURAL:$1|$1 বছর}}',
 'ago' => '$1 আগে',
+'just-now' => 'এখনই',
 
 # Bad image list
 'bad_image_list' => 'ফরম্যাটটি এরকম:
@@ -3590,11 +3605,14 @@ $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 à¦\8fà¦\95à¦\9fি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87à¦\9bà§\87ন',
-'logentry-newusers-create' => '$1 à¦\8fà¦\95à¦\9fি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87à¦\9bà§\87ন',
-'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামে একটি অ্যাকাউন্ট তৈরি করেছেন',
+'logentry-newusers-newusers' => '$1 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¤à§\88রি à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87',
+'logentry-newusers-create' => '$1 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¤à§\88রà§\80 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87',
+'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি তৈরী করেছেন',
 'logentry-newusers-autocreate' => '$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে',
 'newuserlog-byemail' => 'শব্দচাবি ইমেইলের মাধ্যমে পাঠানো হয়েছে',
+'logentry-rights-rights' => '$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ পরিবর্তন করেছেন',
+'logentry-rights-autopromote' => '$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ উন্নীত হয়েছে',
+'rightsnone' => '(কিছু নাই)',
 
 # Feedback
 'feedback-subject' => 'বিষয়:',
index cdd68b8..21f2d27 100644 (file)
@@ -531,7 +531,6 @@ $messages = array(
 
 # User rights log
 'rightslog' => 'སྤྱོད་མིའི་ཐོབ་ཐང་།',
-'rightsnone' => '(སྟོང་པ།)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ཤོག་ངོས་འདི་ཀློག་པ།',
@@ -701,6 +700,8 @@ $messages = array(
 'unwatching' => 'ལྟ་ཐོ་ལས་འདོར་བཞིན་པ་་་',
 
 'enotif_reset' => 'ཤོག་ངོས་ཚང་མ་བལྟས་ཟིན་དུ་རྟགས་རྒྱོབ།',
+'created' => 'བཟོས་ཟིན།',
+'changed' => 'བསྒྱུར་ཟིན།',
 
 # Delete
 'deletepage' => 'ཤོག་ངོས་འདོར་བ།',
@@ -877,4 +878,7 @@ $messages = array(
 # Special:SpecialPages
 'specialpages' => 'དམིགས་གསལ་ཤོག་ངོས།',
 
+# New logging system
+'rightsnone' => '(སྟོང་པ།)',
+
 );
index 20f8f7b..d2e61c2 100644 (file)
@@ -963,9 +963,11 @@ $2',
 
 'grouppage-sysop' => '{{ns:project}}:প্রশাসকগি',
 
+# Special:Log/newusers
+'newuserlogpage' => 'আতাকুরা হঙসে লগহানি',
+
 # User rights log
 'rightslog' => 'আতাকুরার অধিকারর লগ',
-'rightsnone' => '(নেই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'পাতা এহান পাকর',
@@ -1231,9 +1233,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers-noresult' => 'আতাকুরা নাপেইলাং।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'আতাকুরা হঙসে লগহানি',
-
 # Special:ListGroupRights
 'listgrouprights-key' => '* <span class="listgrouprights-granted">য়্যাথাং পাসে অধিকার</span>
 * <span class="listgrouprights-revoked">থেপকরানি অসে অধিকার</span>',
@@ -1276,6 +1275,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watching' => 'চা...',
 'unwatching' => 'নাউচা...',
 
+'changed' => 'পতেসে',
+
 # Delete
 'deletepage' => 'পাতাহান পুস',
 'confirm' => 'লেপকরানি',
@@ -1728,6 +1729,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'revdelete-restricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি ফলা',
 'revdelete-unrestricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর',
 'newuserlog-byemail' => 'ই-মেইলর মা পেঠাদিয়াসি পাসৱার্ডগ',
+'rightsnone' => '(নেই)',
 
 # Search suggestions
 'searchsuggest-search' => 'বিসারা',
index cc9b054..44f89a5 100644 (file)
@@ -1457,12 +1457,13 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'right-sendemail' => "Kas ur postel d'an implijerien all",
 'right-passwordreset' => 'Gwelet ar posteloù assevel gerioù-tremen',
 
+# Special:Log/newusers
+'newuserlogpage' => "Marilh ar c'hontoù krouet",
+'newuserlogpagetext' => "Marilh krouiñ ar c'hontoù implijer.",
+
 # User rights log
 'rightslog' => 'Marilh statud an implijerien',
 'rightslogtext' => "Setu marilh ar c'hemmoù statud bet c'hoarvezet d'an implijerien.",
-'rightslogentry' => '{{Gender:.|en|he}} deus cheñchet gwirioù an {{Gender:.|implijer|implijerez}}  $1 a oa $2 hag a zo bet lakaet da $3',
-'rightslogentry-autopromote' => 'zo bet anvet ent emgefre a $2 da $3',
-'rightsnone' => '(netra)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lenn ar bajenn-mañ',
@@ -2107,10 +2108,6 @@ Protokoloù skoret : <code>$1</code> (defaults to http:// na lakait hini ebet eu
 'activeusers-hidesysops' => 'Kuzhat ar verourien',
 'activeusers-noresult' => "N'eus bet kavet implijer ebet.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Marilh ar c'hontoù krouet",
-'newuserlogpagetext' => "Marilh krouiñ ar c'hontoù implijer.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gwirioù ar strolladoù implijer',
 'listgrouprights-summary' => 'Da-heul ez eus ur roll eus ar strolladoù implijerien termenet war ar wiki-mañ, gant ar gwirioù moned stag outo.
@@ -2243,6 +2240,8 @@ $UNWATCHURL
 
 Evezhiadennoù ha skoazell pelloc\'h :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Krouet',
+'changed' => 'kemmet',
 
 # Delete
 'deletepage' => 'Diverkañ ur bajenn',
@@ -3835,6 +3834,7 @@ Diskouezet eo ar skeudennoù gant ur pizhder uhel, erounit a ra ar restroù all
 'logentry-newusers-create2' => 'Gant $1 eo bet krouet ar gont implijer $3',
 'logentry-newusers-autocreate' => 'Krouet eo bet kont $1 ent emgefre',
 'newuserlog-byemail' => 'ger-tremen kaset dre bostel',
+'rightsnone' => '(netra)',
 
 # Feedback
 'feedback-bugornote' => "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [\$1 kemenn un draen].
index 6638da4..eff8e5f 100644 (file)
@@ -1570,13 +1570,13 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'right-sendemail' => 'Slanje e-maila drugim korisnicima',
 'right-passwordreset' => 'Pogledaj e-mailove za obnavljanje šifre',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Zapis novih korisnika',
+'newuserlogpagetext' => 'Ovo je zapis o registraciji novih korisnika.',
+
 # User rights log
 'rightslog' => 'Zapisnik korisničkih prava',
 'rightslogtext' => 'Ovo je zapis promjena korisničkih prava.',
-'rightslogentry' => 'promjena članstva u grupi za $1 sa $2 na $3',
-'rightslogentry-autopromote' => 'je automatski unaprijeđen iz $2 u $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
-'rightsnone' => '(nema)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitate ovu stranicu',
@@ -2189,10 +2189,6 @@ Podržani protokoli: <code>$1</code> (ne dodavajte bilo koji od ovih u vašu pre
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Nije pronađen korisnik.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Zapis novih korisnika',
-'newuserlogpagetext' => 'Ovo je zapis o registraciji novih korisnika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Slijedi spisak korisničkih grupa na ovoj wiki, s njihovim pravima pristupa.
@@ -2324,6 +2320,8 @@ $UNWATCHURL
 
 Povratne informacije i daljnja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'promijenjena',
 
 # Delete
 'deletepage' => 'Obrišite stranicu',
@@ -2911,6 +2909,7 @@ Nedostaje privremeni folder.',
 'javascripttest-title' => 'Pokretanje $1 testova',
 'javascripttest-pagetext-noframework' => 'Ova stranica je određena za pokretanje JavaScript testova.',
 'javascripttest-pagetext-unknownframework' => 'Nepoznat radni okvir testiranja"$1".',
+'javascripttest-pagetext-frameworks' => 'Molimo Vas izaberite jednu od sljedećih testnih okvira: $1',
 'javascripttest-pagetext-skins' => 'Izaberite s kojom temom želite da pokrenete probu:',
 'javascripttest-qunit-intro' => 'Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.',
 
@@ -3031,9 +3030,11 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'spambot_username' => 'MediaWiki čišćenje spama',
 'spam_reverting' => 'Vraćanje na zadnju verziju koja ne sadrži linkove ka $1',
 'spam_blanking' => 'Sve revizije koje sadrže linkove ka $1, očisti',
+'spam_deleting' => 'Sve revizije koje sadrže linkove na $1, brišem',
 
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
+'pageinfo-not-current' => 'Nažalost, nemoguće je dati ove informacije za starije revizije.',
 'pageinfo-header-basic' => 'Osnovne informacije',
 'pageinfo-header-edits' => 'Historija izmjena',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
@@ -3044,19 +3045,25 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'pageinfo-language' => 'Jezik sadržaja stranice',
 'pageinfo-views' => 'Broj pogleda',
 'pageinfo-watchers' => 'Broj onih koji pregledaju',
+'pageinfo-redirects-name' => 'Preusmjeravanja na ovu stranicu',
 'pageinfo-subpages-name' => 'Podstranice ove stranice',
 'pageinfo-firstuser' => 'Korisnik koji je napravio stranicu',
 'pageinfo-firsttime' => 'Datum stvaranja stranice',
 'pageinfo-lastuser' => 'Posljednji urednik stranice',
+'pageinfo-lasttime' => 'Datum posljednje izmjene',
 'pageinfo-edits' => 'Ukupan broj izmjena',
 'pageinfo-authors' => 'Ukupan broj različitih autora',
 'pageinfo-recent-edits' => 'Broj nedavnih izmjena (u poslednjih $1)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Čarobna riječ|Čarobne riječi}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
 'pageinfo-toolboxlink' => 'Informacije o stranici',
 'pageinfo-redirectsto' => 'Preusmjerava na',
 'pageinfo-redirectsto-info' => 'Informacije',
 'pageinfo-contentpage' => 'Broji se kao stranica sa sadržajem',
 'pageinfo-contentpage-yes' => 'Da',
 'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-category-pages' => 'Broj stranica',
 
 # Skin names
 'skinname-standard' => 'Klasično',
@@ -3078,6 +3085,8 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'markedaspatrollederror' => 'Ne može se označiti kao patrolirano',
 'markedaspatrollederrortext' => 'Morate naglasiti reviziju koju treba označiti kao patroliranu.',
 'markedaspatrollederror-noautopatrol' => 'Nije Vam dopušteno da vlastite izmjene označavate patroliranim.',
+'markedaspatrollednotify' => 'Ova izmjena na stranici „$1“ je označena kao pregledana.',
+'markedaspatrollederrornotify' => 'Označavanje stranice pregledanom nije uspjelo.',
 
 # Patrol log
 'patrol-log-page' => 'Zapisnik patroliranja',
@@ -3136,6 +3145,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minute|$1 minuta}}',
 'hours' => '{{PLURAL:$1|$1 sat|$1 sata|$1 sati}}',
 'days' => '{{PLURAL:$1|$1 dan|$1 dana|$1 dana}}',
+'months' => '{{PLURAL:$1|$1 mjesec|$1 mjeseci}}',
+'years' => '{{PLURAL:$1|$1 godina|$1 godine|$1 godina}}',
 'ago' => 'prije $1',
 
 # Bad image list
@@ -3840,7 +3851,7 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 * <strong class="mw-specialpagerestricted">Zaštićene posebne stranice.</strong>',
 'specialpages-group-maintenance' => 'Izvještaji za održavanje',
 'specialpages-group-other' => 'Ostale posebne stranice',
-'specialpages-group-login' => 'Prijava / Otvaranje računa',
+'specialpages-group-login' => 'Prijava / otvaranje računa',
 'specialpages-group-changes' => 'Nedavne izmjene i evidencije',
 'specialpages-group-media' => 'Mediji i postavljanje datoteka',
 'specialpages-group-users' => 'Korisnici i korisnička prava',
@@ -3933,9 +3944,13 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'logentry-patrol-patrol-auto' => '$1 je automatski označio izmjenu $4 stranice $3 pregledanim',
 'logentry-newusers-newusers' => 'Korisnički račun $1 je napravljen',
 'logentry-newusers-create' => 'Korisnički račun $1 je napravljen',
-'logentry-newusers-create2' => '$1 je napravio korisnički račun $3',
+'logentry-newusers-create2' => '$3 je {{GENDER:$2|napravio|napravila}} korisnički račun $1',
 'logentry-newusers-autocreate' => 'Korisnički račun $1 je automatski napravljen',
 'newuserlog-byemail' => 'šifra je poslana putem e-maila',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => 'Korisničkom računu $1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5',
+'rightsnone' => '(nema)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite "bug" (grešku)].
@@ -4006,5 +4021,6 @@ Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan
 'duration-years' => '$1 {{PLURAL:$1|godina|godine|godina}}',
 'duration-decades' => '$1 {{PLURAL:$1|decenija|decenije|decenija}}',
 'duration-centuries' => '$1 {{PLURAL:$1|vijek|vijeka|vijekova}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenij|milenija}}',
 
 );
index 228f721..cdd3c93 100644 (file)
@@ -765,7 +765,7 @@ Contrasenya temporal: $2",
 'link_tip' => 'Enllaç intern',
 'extlink_sample' => "http://www.example.com títol de l'enllaç",
 'extlink_tip' => 'Enllaç extern (recordeu el prefix http://)',
-'headline_sample' => "Text per a l'encapçalament",
+'headline_sample' => "Text de l'encapçalament",
 'headline_tip' => 'Encapçalat de secció de 2n nivell',
 'nowiki_sample' => 'Inseriu ací text sense format',
 'nowiki_tip' => 'Ignora el format wiki',
@@ -1476,15 +1476,13 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'right-sendemail' => 'Enviar missatges de correu electrònic a altres usuaris',
 'right-passwordreset' => 'Veure les soŀlicituds de restabliment de contrasenya per correu electrònic',
 
+# Special:Log/newusers
+'newuserlogpage' => "Registre de creació de l'usuari",
+'newuserlogpagetext' => 'Aquest és un registre de creació de nous usuaris.',
+
 # User rights log
 'rightslog' => "Registre dels permisos d'usuari",
 'rightslogtext' => "Aquest és un registre de canvis dels permisos d'usuari.",
-'rightslogentry' => 'ha modificat els drets de $1 del grup $2 a $3',
-'rightslogentry-autopromote' => 'ha estat promogut automàticament de $2 a $3',
-'logentry-rights-rights' => '$1 ha canviat la pertinença de grups per $3 de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 ha canviat la pertinença de grups per $3',
-'logentry-rights-autopromote' => '$1 ha estat promogut automàticament de $4 a $5',
-'rightsnone' => '(cap)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'llegir aquesta pàgina',
@@ -2108,10 +2106,6 @@ Es necessita com a mínim un domini de primer nivell, per exemple "*.org".<br />
 'activeusers-hidesysops' => 'Amaga administradors',
 'activeusers-noresult' => "No s'han trobat usuaris.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Registre de creació de l'usuari",
-'newuserlogpagetext' => 'Aquest és un registre de creació de nous usuaris.',
-
 # Special:ListGroupRights
 'listgrouprights' => "Drets dels grups d'usuaris",
 'listgrouprights-summary' => "A continuació hi ha una llista dels grups d'usuaris definits en aquest wiki, així com dels seus drets d'accés associats.
@@ -2250,6 +2244,8 @@ $UNWATCHURL
 
 Suggeriments i ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Elimina la pàgina',
@@ -2260,7 +2256,7 @@ Suggeriments i ajuda:
 'exblank' => 'la pàgina estava en blanc',
 'delete-confirm' => 'Elimina «$1»',
 'delete-legend' => 'Elimina',
-'historywarning' => "'''Avís:''' La pàgina que eliminareu té un historial amb aproximadament {{PLURAL:$1|una modificació|$1 modificacions}}:",
+'historywarning' => "'''Atenció:''' La pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|versió|versions}}, aproximadament:",
 'confirmdeletetext' => "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.
 Confirmeu que realment ho voleu fer, que enteneu les
 conseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
@@ -3824,6 +3820,10 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'logentry-newusers-create2' => "$1 ha creat el compte d'usuari $3",
 'logentry-newusers-autocreate' => "El compte d'usuari $1 ha estat creat de manera automàtica",
 'newuserlog-byemail' => 'contrasenya enviada per correu electrònic',
+'logentry-rights-rights' => '$1 ha canviat la pertinença de grups per $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha canviat la pertinença de grups per $3',
+'logentry-rights-autopromote' => '$1 ha estat promogut automàticament de $4 a $5',
+'rightsnone' => '(cap)',
 
 # Feedback
 'feedback-bugornote' => "Si podeu descriure un problema tècnic en detall, [$1 informeu-ne].
index d47e804..4f0a236 100644 (file)
@@ -409,6 +409,9 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g
 'group-sysop-member' => 'Guāng-lī-uòng',
 'group-bureaucrat-member' => 'Guăng-lièu-cū',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kŭi dióng-hô̤ nĭk-cé',
+
 # Recent changes
 'recentchanges' => 'Cī-bŏng gì gāi-biéng',
 'recentchanges-summary' => 'Găk cī hiĕk dŭi-sùi wiki cī-bŏng dék sĭng gì gāi-biéng.',
@@ -567,9 +570,6 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g
 # Special:LinkSearch
 'linksearch-ok' => 'Sìng-tō̤',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kŭi dióng-hô̤ nĭk-cé',
-
 # E-mail user
 'emailuser' => 'Gié diêng-piĕ ké̤ṳk ĭ',
 'emailpage' => 'Gié diêng-piĕ ké̤ṳk ĭ',
index 4b2eebe..452ada1 100644 (file)
@@ -826,6 +826,9 @@ $1',
 'grouppage-bureaucrat' => '{{ns:project}}:Даржахой',
 'grouppage-suppress' => '{{ns:project}}:Левисорхой',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Декъашхой дlабазбина тептар',
+
 # User rights log
 'rightslog' => 'Декъашхон бакъона тéптар',
 
@@ -1059,9 +1062,6 @@ PICT # тайп тайпан
 # Special:ActiveUsers
 'activeusers' => 'Жигар декъашхой могlам',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Декъашхой дlабазбина тептар',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Декъашхойн тобанаши бакъонаш',
 'listgrouprights-group' => 'Тоба',
index b894232..96ead71 100644 (file)
@@ -844,9 +844,12 @@ Kon gipili nimo nga ihatag kini, gamiton kini aron pasidunggan ka sa imong mga t
 
 'grouppage-sysop' => '{{ns:project}}:Mga tigdumala',
 
+# Special:Log/newusers
+'newuserlogpage' => "Log sa paghimo'g gumagamit",
+'newuserlogpagetext' => "Kini mao ang ''log'' sa bag-ong namugnang mga gumagamit.",
+
 # User rights log
 'rightslog' => 'Log sa mga katungod sa gumagamit',
-'rightsnone' => '(wala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha kining panid',
@@ -972,10 +975,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch' => 'Mga sumpay sa gawas',
 
-# Special:Log/newusers
-'newuserlogpage' => "Log sa paghimo'g gumagamit",
-'newuserlogpagetext' => "Kini mao ang ''log'' sa bag-ong namugnang mga gumagamit.",
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(talaan sa mga miyembro)',
 
@@ -1250,5 +1249,6 @@ Ang uban default nga nakatago.
 'revdelete-restricted' => 'mga na-aplay nga restriksyon sa mga tagdumala',
 'revdelete-unrestricted' => 'gitangtang ang mga restriksyon alang sa mga tagdumala',
 'newuserlog-byemail' => "ang pasword gipadala na pinaagi sa ''e-mail''",
+'rightsnone' => '(wala)',
 
 );
index b2a0041..256e83c 100644 (file)
@@ -278,7 +278,7 @@ $messages = array(
 
 'about' => 'سەبارەت',
 'article' => 'بابەت',
-'newwindow' => '(لە پەڕەیەکی نوێ دەکرێتەوە)',
+'newwindow' => '(لە پەڕەیەکی نوێدا دەکرێتەوە)',
 'cancel' => 'ھەڵیوەشێنەوە',
 'moredotdotdot' => 'زیاتر',
 'mypage' => 'پەڕه‌',
@@ -399,7 +399,7 @@ $1',
 
 'badaccess' => 'ھەڵە لە بە دەست ھێنان',
 'badaccess-group0' => 'ڕێگەت پێ نەدراوە بۆ بەجێهێنای ئەو ئەنجامە وا داخوازیت کردووه.',
-'badaccess-groups' => 'ئەو ئەنجامەی وا داخوازیت کردووه مەحدود کراوە بۆ بەکارهێنەرانی {{PLURAL:$2|دەستەی|یەکێک لە دەستەکانی}}: $1',
+'badaccess-groups' => 'ئەو کردەوەیەی داوات کردووه تایبەتە بۆ بەکارھێنەرانی {{PLURAL:$2|گرووپی|گرووپەکانی}}: $1.',
 
 'versionrequired' => 'وەشانی $1ی‌ میدیاویکی پێویستە',
 'versionrequiredtext' => 'پێویستیت بە وەشانی $1ی ویکیمیدیا ھەیە بۆ بەکاربردنی ئەم پەڕەیە.
@@ -429,7 +429,7 @@ $1',
 'hidetoc' => 'بیشارەوە',
 'collapsible-collapse' => 'کۆیبکەوە',
 'collapsible-expand' => 'بڵاویبکەوە',
-'thisisdeleted' => 'نیشاندان یا گەڕاندنەوەی $1؟',
+'thisisdeleted' => '$1 نیشان بدە یا بھێنەوە؟',
 'viewdeleted' => '$1 نیشان بده‌؟',
 'restorelink' => '{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}',
 'feedlinks' => 'خۆراک:',
@@ -744,7 +744,7 @@ $2
 'missingcommentheader' => "'''بیرهێنانەوە:''' بۆ ئەم بۆچوونەت سەردێڕ\\بابەت ڕاچاو نەکردووە.
 ئەگەر دیسان «{{int:savearticle}}» لێبدەی، دەستکاریەکەت بێ سەردێڕ یان بابەت پاشەکەوت دەبێ.",
 'summary-preview' => 'پێشبینینی کورتە:',
-'subject-preview' => 'پێشبینینی بابەت\\سەردێڕ :',
+'subject-preview' => 'پێشبینینی بابەت/سەردێڕ:',
 'blockedtitle' => 'به‌کار هینه‌ر له‌کار خراوه',
 'blockedtext' => "'''ناوی بەکارهێنەری یان ئای‌پی ئەدرەسی تۆ بەربەست‌ کراوە.'''
 
@@ -966,7 +966,7 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'historyempty' => '(پووچ)',
 
 # Revision feed
-'history-feed-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8cاÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95',
+'history-feed-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86',
 'history-feed-description' => 'مێژووی پیاچوونەوە بۆ ئەم پەڕە لە ویکییەکە',
 'history-feed-item-nocomment' => '$1 لە $2',
 'history-feed-empty' => 'لاپەڕەی داخوازی‌کراو بوونی نیە.<br />
@@ -1106,7 +1106,7 @@ $1",
 'mergelogpagetext' => 'لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.',
 
 # Diffs
-'history-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8cاچوونەوەکانی «$1»',
+'history-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8eداچوونەوەکانی «$1»',
 'difference-title' => 'جیاوازیی نێوان پێداچوونەوەکانی «$1»',
 'difference-title-multipage' => 'جیاوازیی نێوان پەڕەی «$1» و «$2»',
 'difference-multipage' => '(جیاوازی نێوان پەڕەکان)',
@@ -1190,7 +1190,7 @@ $1",
 'qbsettings-floatingright' => 'سەراوی ڕاست',
 
 # Preferences page
-'preferences' => 'ھەڵبژاردەکان',
+'preferences' => 'ھەڵبەژاردەکان',
 'mypreferences' => 'ھەڵبژاردەکان',
 'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
 'prefsnologin' => 'لەژوورەوە نیت',
@@ -1328,8 +1328,8 @@ $1",
 'userrights-nodatabase' => 'بنکەدراوی $1 بوونی نیە یا لەم شوێنە نیە.',
 'userrights-nologin' => 'بۆ دانانی مافەکانی بەکارهێنەر دەبێ بە هەژماری بەڕێوبەری [[Special:UserLogin|بچیتە ژووروە]].',
 'userrights-notallowed' => 'ھەژمارەکەی تۆ دەسەڵاتی دانان یان لابردنی مافەکانی بەکارھێنەری نییە.',
-'userrights-changeable-col' => 'ئەو گرووپانە بۆت ئەگۆڕدرێن',
-'userrights-unchangeable-col' => 'ئەو گرووپانە بۆت ناگۆڕدرێن',
+'userrights-changeable-col' => 'ئەو گرووپانەی دەتوانی بیگۆڕی',
+'userrights-unchangeable-col' => 'ئەو گرووپانەی ناتوانی بیگۆڕی',
 
 # Groups
 'group' => 'گرووپ:',
@@ -1339,7 +1339,7 @@ $1",
 'group-sysop' => 'بەڕێوبەران',
 'group-bureaucrat' => 'بیوروکراتەکان',
 'group-suppress' => 'چاودێرەکان',
-'group-all' => '(هەموو)',
+'group-all' => '(ھەموو)',
 
 'group-user-member' => '{{GENDER:$1|بەکارھێنەر}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەرانی پەسندکراوی خۆگەڕ}}',
@@ -1413,11 +1413,13 @@ $1",
 'right-override-export-depth' => 'هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت',
 'right-sendemail' => 'ئەمەیل بنێرە بۆ بەکارھێنەرانی تر',
 
+# Special:Log/newusers
+'newuserlogpage' => 'لۆگی دروستکردنی بەکارھێنەر',
+'newuserlogpagetext' => 'ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.',
+
 # User rights log
 'rightslog' => 'لۆگی مافەکانی بەکارھێنەر',
 'rightslogtext' => 'ئەمە لۆگی دەستکاری مافەکانی بەکار‌هێنەرە.',
-'rightslogentry' => 'بۆ $1 ئەندامەتی گرووپی $2 گۆڕدرا بۆ $3',
-'rightsnone' => '(ھیچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خوێندنەوەی ئەم پەڕە',
@@ -1914,7 +1916,7 @@ $1',
 'prevpage' => 'پەڕەی پێشەوە ($1)',
 'allpagesfrom' => 'نیشاندانی پەڕەکان بە دەستپێکردن لە:',
 'allpagesto' => 'نیشاندانی پەڕەکان بە دوایی ھاتن بە:',
-'allarticles' => 'ھەمووی وتارەکان',
+'allarticles' => 'ھەموو پەڕەکان',
 'allinnamespace' => 'ھەموو پەڕەکان (بۆشایی-ناوی $1)',
 'allnotinnamespace' => 'ھەموو پەڕەکان (ئەوانەی لە بۆشایی-ناوی $1دا نین)',
 'allpagesprev' => 'پێش',
@@ -1940,7 +1942,7 @@ $1',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'بەشدارییە سڕاوەکان',
-'deletedcontributions-title' => 'هاوبەشییەکانی سڕاوەی بەکارهێنەر',
+'deletedcontributions-title' => 'بەشدارییە سڕاوەکانی بەکارھێنەر',
 'sp-deletedcontributions-contribs' => 'بەشدارییەکان',
 
 # Special:LinkSearch
@@ -1968,10 +1970,6 @@ $1',
 'activeusers-hidesysops' => 'بەڕێوبەران بشارەوە',
 'activeusers-noresult' => 'هیچ بەکارهێنەرێک نەدۆزرایەوە',
 
-# Special:Log/newusers
-'newuserlogpage' => 'لۆگی دروستکردنی بەکارھێنەر',
-'newuserlogpagetext' => 'ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'مافەکانی گرووپی بەکارھێنەر',
 'listgrouprights-summary' => 'ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.
@@ -2061,7 +2059,7 @@ $1',
 'unwatching' => 'لابردنی چاودێری...',
 
 'enotif_mailer' => 'نامەی ڕاگەیاندنی {{SITENAME}}',
-'enotif_reset' => 'گشت پەڕەکان وەک بینراو دیاری بکە',
+'enotif_reset' => 'Ú¾Û\95Ù\85Ù\88Ù\88 پەڕەکان وەک بینراو دیاری بکە',
 'enotif_impersonal_salutation' => 'بەکارهێنەری      {{SITENAME}}',
 'enotif_subject_deleted' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} سڕایەوە.',
 'enotif_subject_created' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} دروست کرا.',
@@ -2102,6 +2100,8 @@ $UNWATCHURL
 
 کاردانەوە و یارمەتیی زۆرتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'دروستکرا',
+'changed' => 'گۆڕدرا',
 
 # Delete
 'deletepage' => 'پەڕە بسڕەوە',
@@ -2381,6 +2381,7 @@ $1',
 'blocklist-userblocks' => 'ھەژمارە بەربەستکراوەکان بشارەوە',
 'blocklist-target' => 'مەبەست',
 'blocklist-expiry' => 'ھەتا:',
+'blocklist-by' => 'بەڕێوەبەری بەربەستکەر',
 'blocklist-params' => 'پارامەترەکانی بەربەستن',
 'blocklist-reason' => 'ھۆکار',
 'ipblocklist-submit' => 'گەڕان',
@@ -2388,11 +2389,11 @@ $1',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|بەربەستنەکانی}} تر',
 'infiniteblock' => 'بێکۆتایی',
 'expiringblock' => 'لە $2، $1 ماوەی بەسەر دەچێ',
-'anononlyblock' => 'تەنها بۆ چەن سات',
+'anononlyblock' => 'تەنیا بەکارھێنەرە بێناوەکان',
 'noautoblockblock' => 'بەربەستنی خۆگەڕ ناچالاکە',
-'createaccountblock' => 'درووست‌کردنی هەژمارە بەربەست کرا',
-'emailblock' => 'ئی‌مەیل بەربەست‌کرا',
-'blocklist-nousertalk' => 'دەستکاری لاپەڕەی وتووێژی خۆ ناکرێت',
+'createaccountblock' => 'دروستکردنی ھەژمار ناچالاکە',
+'emailblock' => 'ئیمەیل ناچالاکە',
+'blocklist-nousertalk' => 'دەستکاریکردنی پەڕەی وتووێژی خۆی ناچالاکە',
 'ipblocklist-empty' => 'لیستی بەربەستەکان بەتاڵە',
 'ipblocklist-no-results' => 'ئای‌پی ئەدرەس یان ناوی‌ بەکارهێنەری داواکراو بەربەست نەکراوە.',
 'blocklink' => 'بەربەستن',
@@ -2405,13 +2406,13 @@ $1',
 'blocklogpage' => 'لۆگی بەربەستن',
 'blocklog-showlog' => 'ئەم بەکارھێنەرە پێشتر بربەست کراوە.
 لۆگی بەربەستن لە ژێرەوە ھاتووە:',
-'blocklogentry' => '[[$1]]ی بۆ ماوەی $2 بەربەست کرد',
+'blocklogentry' => '[[$1]]ی بۆ ماوەی $2 بەربەست کرد $3',
 'reblock-logentry' => 'دۆخی ئاستەنگ کردنی [[$1]]  بۆ گۆڕدرا بۆ ماوەی $2 $3',
 'blocklogtext' => 'ئەمە لۆگێکی کردەوەکانی بەربەستن یان لابردنی بەربەستنی بەکارھێنەرە.
 ئەو ئایپی ئەدرەسانە خۆکارانە بەربستکراون بە ڕیز نەکراون.
 سەیری [[Special:BlockList|لیستی بەربەستن]] بکە بۆ بینینی ئەو بەرگری و بەربەستنانە ئێستا لە بەرکاردان.',
 'unblocklogentry' => '$1ی کردەوە',
-'block-log-flags-anononly' => 'تەنیا بەکارھێنەرە نەناسراوەکان',
+'block-log-flags-anononly' => 'تەنیا بەکارھێنەرە بێناوەکان',
 'block-log-flags-nocreate' => 'دروستکردنی ھەژمار ناچالاک کرا',
 'block-log-flags-noautoblock' => 'بەربەستنی خۆگەڕ ناچالاک کرا',
 'block-log-flags-noemail' => 'ئیمەیل ناچالاک کرا',
@@ -2561,7 +2562,7 @@ $1',
 بۆ هەناردنی لاپەڕەکان، سەردێڕەکان لە چوارچێوەی دەقی خوارەوە بنووسە، هەر هێڵێک یەک سەردێڕ. هەروا هەڵبژێرە ئایا پێداچوونەوەی ئێستا و هەموو پێداچوونەوە کۆنەکانت دەوێ یان هەر پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.
 
 لە بابەتی دواتر هەروەها دەتوانی لە بەستەرێک کەڵک وەرگریت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ لەپەڕەی "[[{{MediaWiki:Mainpage}}]]".',
-'exportall' => 'گشت پەڕەکان ھەناردە بکە',
+'exportall' => 'Ú¾Û\95Ù\85Ù\88Ù\88 پەڕەکان ھەناردە بکە',
 'exportcuronly' => 'تەنها پێداچوونەوەی ئێستا لەخۆ بگرێت نەک هەموو مێژوو',
 'exportnohistory' => "----
 '''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.",
@@ -2647,7 +2648,7 @@ $1',
 # Import log
 'importlogpage' => 'هێنانەناوەی لۆگ',
 'importlogpagetext' => 'ھاوردنی پەڕەکان لەگەڵ مێژووی دەستکاری لە ویکییەکانی ترەوە.',
-'import-logentry-upload' => 'هێنراوەناوەی [[$1]] بە بارکردنی پەڕگە',
+'import-logentry-upload' => 'ھاوردنی [[$1]] بە بارکردنی پەڕگە',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}',
 'import-logentry-interwiki' => 'ترانس‌ویکی‌کراو $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} لە $2',
@@ -3439,9 +3440,9 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 پەڕەی $3ی سڕییەوە',
 'logentry-delete-restore' => '$1 پەڕەی $3ی ھێنایەوە',
-'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3 گۆڕیی: $4',
+'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی گۆڕیی: $4',
 'logentry-suppress-delete' => '$1 پەڕەی $3 بەرگری کرد.',
-'revdelete-content-hid' => 'شاردنەوەی ناوەرۆک',
+'revdelete-content-hid' => 'ناوەرۆک شاردراوە',
 'revdelete-summary-hid' => 'کورتەی دەستکاری شاردراوە',
 'revdelete-uname-hid' => 'ناوی بەکارهێنەری شاراوە',
 'revdelete-content-unhid' => 'ناوەرۆک نیشان درا',
@@ -3458,6 +3459,7 @@ $5
 'logentry-newusers-create2' => 'ھەژماری بەکارھێنەریی $3 لە لایەن $1 دروست کرا',
 'logentry-newusers-autocreate' => 'ھەژماری $1 بە شێوەی خۆگەڕ دروستکرا',
 'newuserlog-byemail' => 'تێپەڕوشە بە ئیمەیل نێردرا.',
+'rightsnone' => '(ھیچ)',
 
 # Feedback
 'feedback-subject' => 'بابەت:',
index dde0ed4..1184b13 100644 (file)
@@ -607,6 +607,9 @@ Tistingan mo i-prefiks ang imo pamangkot upod sang ''tanan:'' para makita mo ang
 
 'grouppage-sysop' => '{{ns:project}}:Mga manugdumala',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Listahan sang pag-ubra sang manug-usar',
+
 # User rights log
 'rightslog' => 'Lista sang mga karapatan sang manug-usar',
 
@@ -714,9 +717,6 @@ Ang paglarawan nga yara sa ibabaw sang [$2 pahina sang paglarawan sang akta] sin
 # Special:LinkSearch
 'linksearch' => 'Panggwa nga mga link',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Listahan sang pag-ubra sang manug-usar',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lista sang mga myembro)',
 
index d3e87b5..d8f0afd 100644 (file)
@@ -1022,6 +1022,10 @@ $3 мына бу себепни бильдирди: ''$2''",
 'grouppage-bureaucrat' => '{{ns:project}}:Бюрократлар',
 'grouppage-suppress' => '{{ns:project}}:Тефтишчилер',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Янъы къулланыджы журналы',
+'newuserlogpagetext' => 'Энъ сонъки къайд олгъан къулланыджы журналы.',
+
 # User rights log
 'rightslog' => 'Къулланыджынынъ акълары журналы',
 
@@ -1374,10 +1378,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 'listusers-submit' => 'Косьтер',
 'listusers-noresult' => 'Ич бир къулланыджы тапылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Янъы къулланыджы журналы',
-'newuserlogpagetext' => 'Энъ сонъки къайд олгъан къулланыджы журналы.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(азалар джедвели)',
 
@@ -1469,6 +1469,8 @@ $UNWATCHURL
 
 Ярдым ве теклифлер ичюн:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'яратылды',
+'changed' => 'денъиштирильди',
 
 # Delete
 'deletepage' => 'Саифени ёкъ эт',
index 93f8a21..26c99c1 100644 (file)
@@ -1018,6 +1018,10 @@ Eger bildirseñiz, saifelerdeki deñişmelerni kimniñ yapqanını köstermek i
 'grouppage-bureaucrat' => '{{ns:project}}:Bürokratlar',
 'grouppage-suppress' => '{{ns:project}}:Teftişçiler',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yañı qullanıcı jurnalı',
+'newuserlogpagetext' => 'Eñ sоñki qayd оlğan qullanıcı jurnalı.',
+
 # User rights log
 'rightslog' => 'Qullanıcınıñ aqları jurnalı',
 
@@ -1369,10 +1373,6 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 'listusers-submit' => 'Köster',
 'listusers-noresult' => 'İç bir qullanıcı tapılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yañı qullanıcı jurnalı',
-'newuserlogpagetext' => 'Eñ sоñki qayd оlğan qullanıcı jurnalı.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(azalar cedveli)',
 
@@ -1462,6 +1462,8 @@ $UNWATCHURL
 
 Yardım ve teklifler içün:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yaratıldı',
+'changed' => 'deñiştirildi',
 
 # Delete
 'deletepage' => 'Saifeni yoq et',
index b0d79cf..7fc0544 100644 (file)
@@ -493,6 +493,7 @@ $messages = array(
 'newwindow' => '(otevře se v novém okně)',
 'cancel' => 'Storno',
 'moredotdotdot' => 'Další…',
+'morenotlisted' => 'Další neuvedené…',
 'mypage' => 'Stránka',
 'mytalk' => 'Diskuse',
 'anontalk' => 'Diskuse k této IP adrese',
@@ -862,6 +863,7 @@ Počkejte chvíli, než to zkusíte znovu.',
 # E-mail sending
 'php-mail-error-unknown' => 'Neznámá chyba v PHP funkci mail()',
 'user-mail-no-addy' => 'Pokus o odeslání e-mailu bez e-mailové adresy',
+'user-mail-no-body' => 'Pokus o odeslání prázdného nebo nesmyslně krátkého e-mailu.',
 
 # Change password dialog
 'resetpass' => 'Změna hesla',
@@ -1081,7 +1083,8 @@ Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírová
 Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>), podrobnosti najdete na $1. '''Nekopírujte díla chráněná autorským právem bez dovolení!'''",
 'longpageerror' => "'''Chyba: Pokoušíte se uložit text o velikosti {{PLURAL:$1|$1 KiB}}, přičemž dovolené maximum je {{PLURAL:$2|$2 KiB}}.'''
 Vaše změna nemůže být uložena.",
-'readonlywarning' => "'''VAROVÁNÍ: Databáze byla uzamčena kvůli údržbě, takže nebudete moci uložit své změny. Můžete si okopírovat text do souboru a uložit ho na později.'''
+'readonlywarning' => "'''Varování: Databáze byla uzamčena kvůli údržbě, takže momentálně nebudete moci uložit své změny.'''
+Můžete si okopírovat text do souboru a uložit ho na později.
 
 Správce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1",
 'protectedpagewarning' => "'''Varování: Tato stránka byla zamčena, takže ji mohou editovat pouze správci.'''
@@ -1642,15 +1645,13 @@ Tuto operaci nelze vrátit zpět.',
 'right-sendemail' => 'Odesílání e-mailů ostatním uživatelům',
 'right-passwordreset' => 'Prohlížení e-mailů pro znovunastavení hesla',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kniha nových uživatelů',
+'newuserlogpagetext' => 'Toto je záznam nově zaregistrovaných uživatelů.',
+
 # User rights log
 'rightslog' => 'Kniha práv uživatelů',
 'rightslogtext' => 'Toto je záznam změn uživatelských práv.',
-'rightslogentry' => 'změnil pro $1 zařazení ve skupinách z $2 na $3',
-'rightslogentry-autopromote' => 'byl automaticky povýšen z $2 na $3',
-'logentry-rights-rights' => '$1 změnil č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',
-'rightsnone' => '(žádné)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'přečíst tuto stránku',
@@ -2290,10 +2291,6 @@ Povinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br
 'activeusers-hidesysops' => 'Skrýt správce',
 'activeusers-noresult' => 'Nenalezen žádný uživatel.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kniha nových uživatelů',
-'newuserlogpagetext' => 'Toto je záznam nově zaregistrovaných uživatelů.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Práva skupin uživatelů',
 'listgrouprights-summary' => 'Toto je seznam uživatelských skupin definovaných na této wiki a&nbsp;jejich přístupových práv.
@@ -2429,6 +2426,8 @@ $UNWATCHURL
 
 Rady a kontakt:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'vytvořil',
+'changed' => 'upravil',
 
 # Delete
 'deletepage' => 'Smazat stránku',
@@ -2494,6 +2493,8 @@ Můžete si prohlédnout též [[Special:ProtectedPages|seznam aktuálně platn
 'prot_1movedto2' => 'Stránka [[$1]] přemístěna na stránku [[$2]]',
 'protect-badnamespace-title' => 'Nezamykatelný jmenný prostor',
 'protect-badnamespace-text' => 'Stránky v tomto jmenném prostoru nelze zamykat.',
+'protect-norestrictiontypes-text' => 'Tuto stránku nelze zamknout, protože nejsou k dispozici žádné typy zámků.',
+'protect-norestrictiontypes-title' => 'Nezamykatelná stránka',
 'protect-legend' => 'Potvrdit zamčení',
 'protectcomment' => 'Důvod:',
 'protectexpiry' => 'Čas vypršení:',
@@ -2508,9 +2509,9 @@ Současné nastavení pro tuto stránku je: '''$1''':",
 Současné nastavení pro tuto stránku je: '''$1''':",
 'protect-cascadeon' => 'Tato stránka je právě zamčena, protože je vložena do {{PLURAL:$1|následující stránky zamčené|následujících stránek zamčených|následujících stránek zamčených}} kaskádovým zámkem. Můžete změnit zámky pro tuto stránku, ale nebude to mít žádný vliv na kaskádové zamčení.',
 'protect-default' => 'Povolit všem',
-'protect-fallback' => 'Vyžaduje oprávnění „$1“',
-'protect-level-autoconfirmed' => 'Zakázat novým a neregistrovaným uživatelům',
-'protect-level-sysop' => 'Pouze správci',
+'protect-fallback' => 'Povolit jen uživatelům s oprávněním „$1“',
+'protect-level-autoconfirmed' => 'Povolit jen automaticky schváleným uživatelům',
+'protect-level-sysop' => 'Povolit jen správcům',
 'protect-summary-cascade' => 'kaskádový',
 'protect-expiring' => 'vyprší $1 (UTC)',
 'protect-expiring-local' => 'vyprší $1',
@@ -2802,11 +2803,12 @@ Přesměrování na původní název můžete nechat aktualizovat automaticky.
 Pokud nenecháte, nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.
 Je na vaší zodpovědnosti zajistit, aby odkazy stále vedly tam, kam mají.
 
-Stránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací.
+Stránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka přesměrováním na tuto stránku a nemá žádnou historii editací.
 To znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.
 
 '''Upozornění!'''
-Přejmenování oblíbené stránky může být drastická a nečekaná změna; ujistěte se, prosím, že chápete důsledky svého kroku před tím, než změnu provedete.",
+Přejmenování oblíbené stránky může být drastická a nečekaná změna;
+ujistěte se, že chápete důsledky svého kroku před tím, než změnu provedete.",
 'movepagetext-noredirectfixer' => "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.
 Původní název se stane přesměrováním na nový název.
 Nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.
@@ -3159,6 +3161,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Kouzelné slovo|Kouzelná slova}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá|Skryté}} kategorie ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Použitá šablona|Použité šablony}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Stránka, do které|Stránky, do kterých}} je tato stránka vložena ($1)',
 'pageinfo-toolboxlink' => 'Informace o stránce',
 'pageinfo-redirectsto' => 'Přesměrovává na',
 'pageinfo-redirectsto-info' => 'info',
@@ -3167,6 +3170,10 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-protect-cascading' => 'Kaskádový zámek',
 'pageinfo-protect-cascading-yes' => 'Ano',
 'pageinfo-protect-cascading-from' => 'Zámky pocházejí z kaskádových zámků na',
+'pageinfo-category-info' => 'Informace o kategorii',
+'pageinfo-category-pages' => 'Počet stránek',
+'pageinfo-category-subcats' => 'Počet podkategorií',
+'pageinfo-category-files' => 'Počet souborů',
 
 # Skin names
 'skinname-standard' => 'Klasický',
@@ -3254,6 +3261,8 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minuty|$1 minut}}',
 'hours' => '{{PLURAL:$1|$1 hodina|$1 hodiny|$1 hodin}}',
 'days' => '{{PLURAL:$1|$1 den|$1 dny|$1 dní}}',
+'months' => '{{PLURAL:$1|$1 měsícem|$1 měsíci}}',
+'years' => '{{PLURAL:$1|$1 rokem|$1 roky}}',
 'ago' => 'před 
 $1',
 'just-now' => 'Právě teď',
@@ -4066,6 +4075,10 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'logentry-newusers-create2' => '$1 založil uživatelský účet $3',
 'logentry-newusers-autocreate' => 'Automaticky byl založen účet $1',
 'newuserlog-byemail' => 'heslo zasláno e-mailem',
+'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',
+'rightsnone' => '(žádné)',
 
 # Feedback
 'feedback-bugornote' => 'Pokud dokážete podrobně popsat technický problém, můžete [$1 nahlásit chybu].
@@ -4118,7 +4131,8 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'api-error-nomodule' => 'Interní chyba: není nastaven načítací modul.',
 'api-error-ok-but-empty' => 'Interní chyba: ze serveru nepřišla odpověď.',
 'api-error-overwrite' => 'Není dovoleno přepsat existující soubor.',
-'api-error-stashfailed' => 'Vnitřní chyba: serveru se nepodařilo uložit dočasný soubor.',
+'api-error-stashfailed' => 'Vnitřní chyba: Serveru se nepodařilo uložit dočasný soubor.',
+'api-error-publishfailed' => 'Vnitřní chyba: Serveru se nepodařilo zveřejnit dočasný soubor.',
 'api-error-timeout' => 'Server neodpověděl v očekávaném čase.',
 'api-error-unclassified' => 'Došlo k neznámé chybě',
 'api-error-unknown-code' => 'Neznámá chyba: „$1“',
index 7f37b57..ae8744a 100644 (file)
@@ -710,6 +710,9 @@ Mòżesz zezwòlëc jinszim brëkòwniką na łączbã z Tobą przez Twòją sta
 'right-autoconfirmed' => 'Edicëjô dzélowò zazychrowónych starnów',
 'right-bot' => 'Nacéchòwanié edicëjó jakno aùtomatnych',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nowi brëkòwnicë',
+
 # User rights log
 'rightslog' => 'Prawa brëkòwnika',
 
@@ -884,9 +887,6 @@ Mòżesz zawãżëc wëszłosc przez wëbranié ôrtu registru, miona brëkòwni
 # Special:LinkSearch
 'linksearch' => 'Bùtnowé lënczi',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nowi brëkòwnicë',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lësta nôlëżników karna)',
 
@@ -929,6 +929,8 @@ Czej chcesz remôc starnã z lëste ùzéronëch artiklów, klikni ''Òprzestôj
 'unwatching' => 'Ju ni ùzéróm...',
 
 'enotif_reset' => 'Òznaczë wszëtczé artiklë jakno òbëzdrzóné',
+'created' => 'zrobionô',
+'changed' => 'zmienioné',
 
 # Delete
 'deletepage' => 'Rëmôj starnã',
index 1914124..12f7f34 100644 (file)
@@ -445,6 +445,9 @@ $messages = array(
 'grouppage-sysop' => '{{ns:project}}:Съмотритєлє',
 'grouppage-bureaucrat' => '{{ns:project}}:Чинодатєлє',
 
+# Special:Log/newusers
+'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ',
+
 # User rights log
 'rightslog' => 'чинодатєльства їсторїꙗ',
 
@@ -596,9 +599,6 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'виждь',
 
-# Special:Log/newusers
-'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ',
-
 # E-mail user
 'emailuser' => 'посъли єпїстолѫ',
 
@@ -616,6 +616,8 @@ $messages = array(
 'watching' => 'блюдєниѥ ...',
 'unwatching' => 'оставьлєниѥ блюдєниꙗ ...',
 
+'created' => 'сътворѥнъ ѥстъ',
+
 # Delete
 'deletepage' => 'поничьжєниѥ',
 'excontent' => "вънѫтри бѣ: '$1'",
index 8e02957..377a32c 100644 (file)
@@ -660,7 +660,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 
 # User rights log
 'rightslogtext' => 'Ку пользовательсен прависене улăштарниссен журналě',
-'rightsnone' => '(çук)',
 
 # Recent changes
 'recentchanges' => 'Улшăнусем',
@@ -923,6 +922,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_reset' => 'Пур страницăсене те пăхнă пек палăрт',
 'enotif_anon_editor' => '$1 анонимлă хутшăнакан',
+'created' => 'хатĕрленĕ',
+'changed' => 'улăштарнă',
 
 # Delete
 'deletepage' => 'Кăларса парахнă статьясем',
@@ -1212,4 +1213,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'specialpages-group-users' => 'Хутшăнакансем тата правасем',
 'specialpages-group-highuse' => 'Нумай усă куракан страницăсем',
 
+# New logging system
+'rightsnone' => '(çук)',
+
 );
index ccd1dd7..eba65c0 100644 (file)
@@ -249,6 +249,7 @@ $messages = array(
 'newwindow' => '(yn agor mewn ffenest newydd)',
 'cancel' => 'Diddymu',
 'moredotdotdot' => 'Rhagor...',
+'morenotlisted' => 'Ni restrir y lleill...',
 'mypage' => 'Tudalen defnyddiwr',
 'mytalk' => 'Sgwrs',
 'anontalk' => 'Sgwrs ar gyfer y cyfeiriad IP hwn',
@@ -393,8 +394,8 @@ $1',
 'toc' => 'Cynnwys',
 'showtoc' => 'dangos',
 'hidetoc' => 'cuddio',
-'collapsible-collapse' => 'Crebachu',
-'collapsible-expand' => 'Ehangu',
+'collapsible-collapse' => 'Crebacher',
+'collapsible-expand' => 'Ehanger',
 'thisisdeleted' => 'Ydych chi am ddangos, neu ddad-ddileu $1?',
 'viewdeleted' => 'Gweld $1?',
 'restorelink' => "$1 {{PLURAL:$1|golygiad sydd wedi'i ddileu|golygiad sydd wedi'i ddileu|olygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu}}",
@@ -491,7 +492,7 @@ Gofyniad: $2',
 'actionthrottled' => 'Tagwyd y weithred',
 'actionthrottledtext' => "Mae camau gwrth-sbam y wici yn cyfyngu ar ba mor aml y gall defnyddwyr ailwneud y weithred hon mewn byr amser, ac rydych chi wedi croesi'r terfyn.
 Ceisiwch eto ymhen rhai munudau.",
-'protectedpagetext' => "Mae'r dudalen hon wedi'i diogelu rhag cael ei golygu.",
+'protectedpagetext' => "Mae'r dudalen hon wedi'i diogelu rhag cael ei thrin a'i thrafod.",
 'viewsourcetext' => 'Cewch weld a chopïo côd y dudalen:',
 'viewyourtext' => "Cewch weld a copïo ffynhonnell ''eich golygiadau'' i'r dudalen hon:",
 'protectedinterface' => "Testun ar gyfer rhyngwyneb y wici yw cynnwys y dudalen hon. Clowyd y dudalen er mwyn ei diogeli. Os am gyfieithu'r neges neu ei newid ym mhob wici yn hytrach nag yn hwn yn unig, defnyddiwch [//translatewiki.net/ translatewiki.net], y prosiect MediaWiki sy'n hyrwyddo'r gwaith cyfieithu.",
@@ -611,6 +612,7 @@ Oedwch ychydig cyn mentro eto.',
 # E-mail sending
 'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP',
 'user-mail-no-addy' => 'Wedi ceisio anfon e-bost heb gyfeiriad e-bost',
+'user-mail-no-body' => 'Ceisiwyd anfon e-bost gwag neu e-bost oedd a thestun rhy bwt iddo.',
 
 # Change password dialog
 'resetpass' => 'Newid cyfrinair y cyfrif',
@@ -668,6 +670,7 @@ Y cyfrinair dros dro: $2",
 'changeemail-oldemail' => 'Y cyfeiriad e-bost presennol:',
 'changeemail-newemail' => 'Cyfeiriad e-bost newydd:',
 'changeemail-none' => '(dim)',
+'changeemail-password' => 'Eich cyfrinair ar {{SITENAME}}:',
 'changeemail-submit' => 'Newidier y cyfeiriad e-bost',
 'changeemail-cancel' => 'Dileer',
 
@@ -868,6 +871,7 @@ Mae ar gael yn barod.',
 
 # Content models
 'content-model-wikitext' => 'cystrawen wici',
+'content-model-text' => 'testun plaen',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
 
@@ -1079,6 +1083,10 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi
 'editundo' => 'dadwneud',
 'diff-multi' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol gan {{PLURAL:$2||un defnyddiwr|$2 ddefnyddiwr|$2 defnyddiwr|$2 o ddefnyddwyr|$2 o ddefnyddwyr}}.)',
 'diff-multi-manyusers' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol gan mwy na $2 {{PLURAL:$2|o ddefnyddwyr}}.)',
+'difference-missing-revision' => "Ni chafwyd hyd i $1 {{PLURAL:$2|diwygiad|diwygiad|ddiwygiad|diwygiad}} o'r gwahaniaeth ($1) {{PLURAL:$2|hwn}}.
+
+Fel arfer, fe ddigwydd hyn pan mae dyn wedi dilyn hen gyswllt gwahaniaeth i dudalen sydd erbyn hyn wedi cael ei dileu.
+Mae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lòg y dileuon].",
 
 # Search results
 'searchresults' => "Canlyniadau'r chwiliad",
@@ -1181,7 +1189,7 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
 'prefs-setemail' => 'Gosod cyfeiriad e-bost',
 'prefs-email' => 'E-bostio',
 'prefs-rendering' => 'Ymddangosiad',
-'saveprefs' => "Cadw'r dewisiadau",
+'saveprefs' => 'Cadwer y dewisiadau',
 'resetprefs' => "Clirio'r darpar newidiadau",
 'restoreprefs' => 'Adfer yr holl osodiadau diofyn',
 'prefs-editing' => 'Golygu',
@@ -1231,9 +1239,9 @@ Ni allwch ddadwneud y weithred hon.",
 'prefs-emailconfirm-label' => "Cadarnhau'r e-bost:",
 'prefs-textboxsize' => 'Maint y ffenestr olygu',
 'youremail' => 'Eich cyfeiriad e-bost',
-'username' => 'Enw defnyddiwr:',
-'uid' => 'ID Defnyddiwr:',
-'prefs-memberingroups' => "Yn aelod o'r {{PLURAL:$1|grŵp|grŵp|grwpiau|grwpiau|grwpiau|grwpiau}} canlynol:",
+'username' => '{{GENDER:$1|Enw defnyddiwr}}:',
+'uid' => '{{GENDER:$1|ID y defnyddiwr}}:',
+'prefs-memberingroups' => "Yn {{GENDER:$2|aelod}} o'r {{PLURAL:$1|grŵp|grŵp|grwpiau}} canlynol:",
 'prefs-registration' => "Amser dechrau'r cyfrif:",
 'yourrealname' => 'Eich enw cywir*',
 'yourlanguage' => 'Iaith y rhyngwyneb',
@@ -1382,12 +1390,13 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'right-sendemail' => 'Anfon e-bost at ddefnyddwyr eraill',
 'right-passwordreset' => "Gweld e-byst sy'n ailosod cyfrinair",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Lòg creu cyfrifon defnyddwyr newydd',
+'newuserlogpagetext' => "Dyma restr o'r defnyddwyr newydd sydd wedi ymuno â'r wici.",
+
 # User rights log
 'rightslog' => 'Lòg galluoedd defnyddiwr',
 'rightslogtext' => 'Lòg y newidiadau i alluoedd defnyddwyr yw hwn.',
-'rightslogentry' => "wedi gosod $1 yn aelod o'r grŵp $3 (grŵp cynt $2)",
-'rightslogentry-autopromote' => "wedi ei ddyrchafu'n awtomatig o $2 i $3",
-'rightsnone' => '(dim)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'darllen y dudalen',
@@ -2003,7 +2012,7 @@ Gweler hefyd [[Special:WantedCategories|categorïau sydd eu hangen]].",
 'linksearch-ok' => 'Chwilio',
 'linksearch-text' => 'Gellir defnyddio cardiau gwyllt megis "*.wikipedia.org".
 Mae angen parth lefel-uchaf o leiaf, er enghraifft "*.org".<br />
-Protocoliau sy\'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na roddir protocol o gwbl).',
+{{PLURAL:$2|Protocol|Protocol|Protocoliau}} sy\'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na roddir protocol o gwbl).',
 'linksearch-line' => 'Mae cysylltiad i gael i $1 oddi wrth $2',
 'linksearch-error' => "Dim ond ar ddechrau enw'r gwesteiwr y gallwch osod cardiau gwyllt.",
 
@@ -2022,10 +2031,6 @@ Protocoliau sy\'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na rod
 'activeusers-hidesysops' => 'Cuddio gweinyddwyr',
 'activeusers-noresult' => "Dim defnyddwyr i'w cael.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Lòg creu cyfrifon defnyddwyr newydd',
-'newuserlogpagetext' => "Dyma restr o'r defnyddwyr newydd sydd wedi ymuno â'r wici.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Galluoedd grwpiau defnyddwyr',
 'listgrouprights-summary' => "Dyma restr o'r grwpiau defnyddwyr sydd i'w cael ar y wici hon, ynghyd â galluoedd aelodau'r gwahanol grwpiau. Cewch wybodaeth pellach am y gwahanol alluoedd ar y [[{{MediaWiki:Listgrouprights-helppage}}|dudalen gymorth]].",
@@ -2092,10 +2097,8 @@ Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau]] yn
 'watchnologin' => 'Nid ydych wedi mewngofnodi',
 'watchnologintext' => "Mae'n rhaid i chi [[Special:UserLogin|fewngofnodi]] er mwyn newid eich rhestr wylio.",
 'addwatch' => 'Ychwanegu at y rhestr wylio',
-'addedwatchtext' => "Mae'r dudalen \"[[:\$1|\$1]]\" wedi cael ei hychwanegu at eich [[Special:Watchlist|rhestr wylio]].
-Pan fydd y dudalen hon, neu ei thudalen sgwrs, yn newid, fe fyddant yn ymddangos ar eich rhestr wylio ac hefyd '''yn gryf''' ar restr y [[Special:RecentChanges|newidiadau diweddar]], fel ei bod yn haws eu gweld.
-
-Os ydych am ddiddymu'r dudalen o'r rhestr wylio, cliciwch ar \"Stopio gwylio\" yn y bar ar frig y dudalen.",
+'addedwatchtext' => 'Mae\'r dudalen "[[:$1|$1]]" wedi cael ei hychwanegu at eich [[Special:Watchlist|rhestr wylio]].
+Pan fydd y dudalen hon, neu ei thudalen sgwrs, yn newid, fe fyddant yn ymddangos ar y rhestr honno.',
 'removewatch' => 'Tynnu oddi ar eich rhestr wylio',
 'removedwatchtext' => 'Mae\'r dudalen "[[:$1]]" wedi\'i thynnu oddi ar [[Special:Watchlist|eich rhestr wylio]].',
 'watch' => 'Gwylio',
@@ -2124,14 +2127,18 @@ Os ydych am ddiddymu'r dudalen o'r rhestr wylio, cliciwch ar \"Stopio gwylio\" y
 'enotif_mailer' => 'Sustem hysbysu {{SITENAME}}',
 'enotif_reset' => 'Ystyried bod pob tudalen wedi cael ymweliad',
 'enotif_impersonal_salutation' => 'at ddefnyddiwr {{SITENAME}}',
+'enotif_subject_deleted' => 'Dilewyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_created' => 'Dechrewyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Symudwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Adferwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Newidiwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Dilewyd y dudalen $1 ar {{SITENAME}} ar $PAGEEDITDATE gan {{gender:$2|$2}}, gweler $3.',
 'enotif_lastvisited' => 'Gwelwch $1 am bob newid ers eich ymweliad blaenorol.',
 'enotif_lastdiff' => 'Gallwch weld y newid ar $1.',
 'enotif_anon_editor' => 'defnyddiwr anhysbys $1',
 'enotif_body' => 'Annwyl $WATCHINGUSERNAME,
 
-$CHANGEDORCREATED y dudalen \'$PAGETITLE\' ar {{SITENAME}} ar $PAGEEDITDATE gan $PAGEEDITOR; gwelir y diwygiad presennol ar $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Crynodeb y golygydd: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2139,7 +2146,7 @@ Cysylltu â\'r golygydd:
 e-bost: $PAGEEDITOR_EMAIL
 wici: $PAGEEDITOR_WIKI
 
-Os digwydd mwy o olygiadau i\'r dudalen cyn i chi ymweld â hi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
+Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
 
              Sustem hysbysu {{SITENAME}}
 
@@ -2155,6 +2162,8 @@ $UNWATCHURL
 
 Am fwy o gymorth ac adborth:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'crëwyd',
+'changed' => 'Newidiwyd',
 
 # Delete
 'deletepage' => 'Dileer y dudalen',
@@ -2193,8 +2202,8 @@ Gallai dileu tudalen, gyda hanes golygu cymaint â hyn iddi, beri dryswch i weit
 'rollback' => 'Gwrthdroi golygiadau',
 'rollback_short' => 'Gwrthdroi',
 'rollbacklink' => 'gwrthdröer',
-'rollbacklinkcount' => 'gwrthdröer $1 {{PLURAL:$1||golygiad|olygiad|golygiad|golygiad|golygiad}}',
-'rollbacklinkcount-morethan' => 'gwrthdröer mwy na $1 {{PLURAL:$1||golygiad|olygiad|golygiad|golygiad|golygiad}}',
+'rollbacklinkcount' => 'gwrthdröer $1 {{PLURAL:$1||golygiad|olygiad|golygiad}}',
+'rollbacklinkcount-morethan' => 'gwrthdröer mwy na $1 {{PLURAL:$1||golygiad|olygiad|golygiad}}',
 'rollbackfailed' => 'Methodd y gwrthdroi',
 'cantrollback' => "Wedi methu gwrthdroi'r golygiad; y cyfrannwr diwethaf oedd unig awdur y dudalen hon.",
 'alreadyrolled' => "Nid yw'n bosib dadwneud y golygiad diwethaf i'r dudalen [[:$1|$1]] gan [[User:$2|$2]] ([[User talk:$2|Sgwrs]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2690,6 +2699,7 @@ Mae cofnod o bob weithred o fewnforio i'w gweld ar y [[Special:Log/import|lòg m
 'import-interwiki-templates' => 'Cynhwyser pob nodyn',
 'import-interwiki-submit' => 'Mewnforio',
 'import-interwiki-namespace' => 'Parth y cyrchir ato:',
+'import-interwiki-rootpage' => 'Tudalen wraidd y cyrchfan (dewisol):',
 'import-upload-filename' => "Enw'r ffeil:",
 'import-comment' => 'Sylw:',
 'importtext' => "Allforiwch y ffeil o'r wici gwreiddiol trwy ddefnyddio'r [[Special:Export|nodwedd allforio]]. Rhowch hi ar gadw ar eich cyfrifiadur, ac wedyn ei huwchlwytho fan hyn.",
@@ -2725,6 +2735,7 @@ Mae ffolder dros dro yn eisiau.',
 'import-error-special' => 'Ni fewnforiwyd y dudalen "$1" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i\'w cael.',
 'import-error-invalid' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni yn annilys.',
 'import-options-wrong' => '{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Mae teitl y dudalen wraidd a roddir yn annilys.',
 'import-rootpage-nosubpage' => 'Nid yw\'r parth "$1", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.',
 
 # Import log
@@ -2842,6 +2853,7 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 
 # Info page
 'pageinfo-title' => 'Manylion "$1"',
+'pageinfo-not-current' => "Nid oes modd dangos y wybodaeth hon am hen olygiadau, gwaetha'r modd.",
 'pageinfo-header-basic' => 'Gwybodaeth sylfaenol',
 'pageinfo-header-edits' => 'Hanes golygu',
 'pageinfo-header-restrictions' => 'Diogelwch y dudalen',
@@ -2852,10 +2864,13 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-article-id' => 'ID y dudalen',
 'pageinfo-language' => 'Iaith cynnwys y dudalen',
 'pageinfo-robot-policy' => 'Statws i beiriannau chwilio',
+'pageinfo-robot-index' => 'Gellir ei rhestri gan beiriannau chwilio',
+'pageinfo-robot-noindex' => 'Ni ellir ei rhestri gan beiriannau chwilio',
 'pageinfo-views' => 'Nifer yr ymweliadau',
 'pageinfo-watchers' => 'Nifer gwylwyr y dudalen',
 'pageinfo-redirects-name' => "Nifer yr ailgyfeiriadau i'r dudalen hon",
 'pageinfo-subpages-name' => "Nifer yr is-dudalennau i'r dudalen hon",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ailgyfeiriad}}; $3 {{PLURAL:$3|is-dudalen arall}})',
 'pageinfo-firstuser' => 'Y defnyddiwr a ddechreuodd y dudalen',
 'pageinfo-firsttime' => "Dyddiad dechrau'r dudalen",
 'pageinfo-lastuser' => 'Y golygydd diweddaraf',
@@ -2863,9 +2878,16 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-edits' => 'Cyfanswm y golygiadau',
 'pageinfo-authors' => 'Cyfanswm yr awduron gwahanol',
 'pageinfo-recent-edits' => 'Nifer y golygiadau diweddar (o fewn y $1 diwethaf).',
+'pageinfo-recent-authors' => 'Nifer yr awduron gwahanol diweddar',
 'pageinfo-magic-words' => '{{PLURAL:$1|Gair|Gair|Geiriau}} hud ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categori|Categori|Categorïau}} cudd ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Nodyn|Nodyn|Nodiadau}} a drawsgynhwyswyd ($1)',
 'pageinfo-toolboxlink' => 'Gwybodaeth am y dudalen',
+'pageinfo-redirectsto' => 'Yn ailgyfeirio i',
+'pageinfo-category-info' => 'Gwybodaeth am y categori',
+'pageinfo-category-pages' => 'Nifer y tudalennau',
+'pageinfo-category-subcats' => 'Nifer yr is-gategorïau',
+'pageinfo-category-files' => 'Nifer y ffeiliau',
 
 # Skin names
 'skinname-standard' => 'Safonol',
@@ -2914,6 +2936,7 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'file-info-size-pages' => '$1 × $2 picsel, maint ffeil: $3, math MIME: $4, $5 {{PLURAL:$5|tudalen|tudalen}}',
 'file-nohires' => 'Wedi ei chwyddo hyd yr eithaf.',
 'svg-long-desc' => 'Ffeil SVG, maint mewn enw $1 × $2 picsel, maint y ffeil: $3',
+'svg-long-desc-animated' => 'Ffeil SVG animeiddiedig, maint mewn enw $1 × $2 picsel, maint y ffeil: $3',
 'show-big-image' => 'Maint llawn',
 'show-big-image-preview' => 'Maint y rhagolwg: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Datrysiad arall|Datrysiad arall|Datrysiadau eraill|Datrysiadau eraill|Datrysiadau eraill|Datrysiadau eraill}}: $1.',
@@ -2923,6 +2946,8 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'file-info-png-looped' => 'dolennog',
 'file-info-png-repeat' => "wedi'i chwarae {{PLURAL:$1||unwaith|ddwywaith|deirgwaith|$1 gwaith|$1 gwaith}}",
 'file-info-png-frames' => '$1 {{PLURAL:$1|ffrâm}}',
+'file-no-thumb-animation' => "'''Sylwer: Oherwydd cyfyngiadau technegol, ni chaiff mân-luniau o'r ffeil hon eu hanimeiddio.'''",
+'file-no-thumb-animation-gif' => "'''Sylwer: Oherwydd cyfyngiadau technegol, ni chaiff mân-luniau o luniau GIF o gydraniad uchel, fel hon, eu hanimeiddio.'''",
 
 # Special:NewFiles
 'newimages' => 'Oriel y ffeiliau newydd',
@@ -2944,7 +2969,10 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'minutes' => '{{PLURAL:$1||$1 munud|$1 funud|$1 munud|$1 munud|$1 munud}}',
 'hours' => '{{PLURAL:$1|$1 awr}}',
 'days' => '{{PLURAL:$1||$1 diwrnod|$1 ddiwrnod|$1 diwrnod|$1 diwrnod|$1 diwrnod}}',
+'months' => '{{PLURAL:$1|$1 mis|mis|deufis|$1 mis}}',
+'years' => '{{PLURAL:$1|$1 blwyddyn|blwyddyn|$1 flynedd|$1 blynedd|$1 blynedd|$1 mlynedd}}',
 'ago' => '$1 yn ôl',
+'just-now' => 'gynnau',
 
 # Bad image list
 'bad_image_list' => "Dyma'r fformat:
@@ -3683,6 +3711,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'logentry-newusers-create2' => 'Dechreuwyd y cyfrif defnyddiwr $3 gan $1',
 'logentry-newusers-autocreate' => 'Crëwyd y cyfrif $1 yn awtomatig',
 'newuserlog-byemail' => 'anfonwyd y cyfrinair trwy e-bost',
+'rightsnone' => '(dim)',
 
 # Feedback
 'feedback-bugornote' => 'Os ydych yn barod i ddisgrifio problem technegol yn fanwl gallwch [$1 gyflwyno adroddiad am y bỳg]. Fel arall, gallwch ddefnyddio\'r ffurflen syml isod. Fe roddir eich sylwadau ar y dudalen "[$3 $2]", ynghyd â\'ch enw defnyddiwr ac enw\'r gweinydd sydd ar waith gennych.',
index 14a2e47..745a4d9 100644 (file)
@@ -1471,15 +1471,13 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 'right-sendemail' => 'Sende e-mail til andre brugere',
 'right-passwordreset' => 'Se emails til nulstilling af adgangskoder',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brugeroprettelseslog',
+'newuserlogpagetext' => 'Dette er en log over de senest oprettede brugere.',
+
 # User rights log
 'rightslog' => 'Rettighedslog',
 'rightslogtext' => 'Dette er en log over ændringer i brugeres rettigheder.',
-'rightslogentry' => 'ændrede grupperettigheder for „$1“ fra „$2“ til „$3“.',
-'rightslogentry-autopromote' => 'blev automatisk forfremmet fra $2 til $3',
-'logentry-rights-rights' => '$1 ændrede gruppemedlemskabet for $3 fra $4 til $5',
-'logentry-rights-rights-legacy' => '$1 ændrede gruppemedlemskabet for $3',
-'logentry-rights-autopromote' => '$1 blev automatisk forfremmet fra $4 til $5',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'se denne side',
@@ -2122,10 +2120,6 @@ Der skal som minimum angives et topniveau-domæne som f. eks. "*.org".<br />
 'activeusers-hidesysops' => 'Skjul administratorer',
 'activeusers-noresult' => 'Ingen brugere fundet.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brugeroprettelseslog',
-'newuserlogpagetext' => 'Dette er en log over de senest oprettede brugere.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brugergrupperettigheder',
 'listgrouprights-summary' => 'Denne side viser de brugergrupper der er defineret på denne wiki og de enkelte gruppers rettigheder.
@@ -2261,6 +2255,8 @@ $UNWATCHURL
 
 Tilbagemelding og yderligere hjælp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oprettet',
+'changed' => 'ændret',
 
 # Delete
 'deletepage' => 'Slet side',
@@ -2328,6 +2324,8 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sideb
 'prot_1movedto2' => '$1 flyttet til $2',
 'protect-badnamespace-title' => 'Navnerum, der ikke kan beskyttes',
 'protect-badnamespace-text' => 'Sider i dette navnerum kan ikke beskyttes.',
+'protect-norestrictiontypes-text' => 'Denne side kan ikke beskyttes, da der er ikke er nogen tilgængelige begrænsningstyper.',
+'protect-norestrictiontypes-title' => 'Ikke muligt at beskytte side',
 'protect-legend' => 'Bekræft beskyttelse',
 'protectcomment' => 'Begrundelse:',
 'protectexpiry' => 'Udløb',
@@ -2974,6 +2972,10 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'pageinfo-protect-cascading' => 'Kaskadebeskyttelser begynder her',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Kaskadebeskyttelser begynder fra',
+'pageinfo-category-info' => 'Kategorioplysninger',
+'pageinfo-category-pages' => 'Antal sider',
+'pageinfo-category-subcats' => 'Antal underkategorier',
+'pageinfo-category-files' => 'Antal filer',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -3061,6 +3063,8 @@ Du kan beskadige dit system hvis du udfører den.",
 'minutes' => '{{PLURAL: $1|$1 minut|$1 minutter}}',
 'hours' => '{{PLURAL: $1|$1 time|$1 timer}}',
 'days' => '{{PLURAL: $1|$1 dag|$1 dage}}',
+'months' => '{{PLURAL:$1|$1 måned|$1 måneder}}',
+'years' => '{{PLURAL:$1|$1 år}}',
 'ago' => '$1 siden',
 'just-now' => 'lige nu',
 
@@ -3806,6 +3810,10 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'logentry-newusers-create2' => 'Brugerkontoen $3 blev oprettet af $1',
 'logentry-newusers-autocreate' => 'Kontoen $1 blev automatisk oprettet',
 'newuserlog-byemail' => 'kodeord tilsendt pr. e-mail',
+'logentry-rights-rights' => '$1 ændrede gruppemedlemskabet for $3 fra $4 til $5',
+'logentry-rights-rights-legacy' => '$1 ændrede gruppemedlemskabet for $3',
+'logentry-rights-autopromote' => '$1 blev automatisk forfremmet fra $4 til $5',
+'rightsnone' => '(-)',
 
 # Feedback
 'feedback-bugornote' => 'Hvis du er klar til at beskrive et teknisk problem i detaljer, bedes du [$1 rapportere en fejl].
index 10212bd..01ad316 100644 (file)
@@ -61,6 +61,7 @@
  * @author Tischbeinahe
  * @author UV
  * @author Umherirrender
+ * @author Vogone
  * @author W (aka Wuzur)
  * @author Wikifan
  * @author Wikinaut
@@ -540,6 +541,7 @@ $messages = array(
 'newwindow' => '(wird in einem neuen Fenster geöffnet)',
 'cancel' => 'Abbrechen',
 'moredotdotdot' => 'Mehr …',
+'morenotlisted' => 'Weitere, nicht aufgeführte …',
 'mypage' => 'Eigene Seite',
 'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionsseite dieser IP',
@@ -912,6 +914,7 @@ Bitte warte, bevor du es erneut probierst.',
 # E-mail sending
 'php-mail-error-unknown' => 'Unbekannter Fehler mit der Funktion mail() von PHP',
 'user-mail-no-addy' => 'Versuchte, eine E-Mail ohne Angabe einer E-Mail-Adresse zu versenden.',
+'user-mail-no-body' => 'Es wurde versucht, eine E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.',
 
 # Change password dialog
 'resetpass' => 'Passwort ändern',
@@ -1689,15 +1692,13 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'right-sendemail' => 'E-Mails an andere Benutzer senden',
 'right-passwordreset' => 'Passwort eines Benutzers zurücksetzen und die dazu verschickte E-Mail einsehen',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neuanmeldungs-Logbuch',
+'newuserlogpagetext' => 'Dies ist ein Logbuch der neu erstellten Benutzerkonten.',
+
 # User rights log
 'rightslog' => 'Rechte-Logbuch',
 'rightslogtext' => 'Dies ist das Logbuch der Änderungen der Benutzerrechte.',
-'rightslogentry' => 'änderte die Benutzerrechte für „$1“ von „$2“ zu „$3“',
-'rightslogentry-autopromote' => 'wurde automatisch von „$2“ zu „$3“ zugeordnet',
-'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',
-'rightsnone' => '(–)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'die Seite zu lesen',
@@ -1983,7 +1984,7 @@ Sie kann daher keiner ordnungsgemäßen Sicherheitsüberprüfung unterzogen werd
 
 # Special:UploadStash
 'uploadstash' => 'Vorabspeicherung beim Hochladen',
-'uploadstash-summary' => 'Diese Seite ermöglicht den Zugriff auf Dateien, die hochgeladen wurden, bzw. gerade hochgeladen werden, aber noch nicht auf dem Wiki publiziert wurden. Diese Dateien sind, der hochladende Benutzer ausgenommen, noch nicht öffentlich einsehbar.',
+'uploadstash-summary' => 'Diese Seite ermöglicht den Zugriff auf Dateien, die hochgeladen wurden, bzw. gerade hochgeladen werden, aber noch nicht auf dem Wiki publiziert wurden. Die Dateien sind ausschließlich für den hochladenden Benutzer einsehbar.',
 'uploadstash-clear' => 'Die vorab gespeicherten Dateien entfernen',
 'uploadstash-nofiles' => 'Es sind keine vorab gespeicherten Dateien vorhanden.',
 'uploadstash-badtoken' => 'Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.',
@@ -2340,10 +2341,6 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].',
 'activeusers-hidesysops' => 'Administratoren ausblenden',
 'activeusers-noresult' => 'Keine Benutzer gefunden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neuanmeldungs-Logbuch',
-'newuserlogpagetext' => 'Dies ist ein Logbuch der neu erstellten Benutzerkonten.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppenrechte',
 'listgrouprights-summary' => 'Dies ist eine Liste der in diesem Wiki definierten Benutzergruppen und der damit verbundenen Rechte.
@@ -2475,6 +2472,8 @@ Um die Einstellungen deiner Beobachtungsliste anzupassen, besuche {{canonicalurl
 Um die Seite von deiner Beobachtungsliste herunterzunehmen, besuche $UNWATCHURL
 
 Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'erstellt',
+'changed' => 'geändert',
 
 # Delete
 'deletepage' => 'Seite löschen',
@@ -2540,6 +2539,8 @@ Siehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle akt
 'prot_1movedto2' => 'hat „[[$1]]“ nach „[[$2]]“ verschoben',
 'protect-badnamespace-title' => 'Nicht-schützbarer Namensraum',
 'protect-badnamespace-text' => 'Seiten dieses Namensraums können nicht geschützt werden.',
+'protect-norestrictiontypes-text' => 'Diese Seite kann nicht geschützt werden, da keine Beschränkungstypen verfügbar sind.',
+'protect-norestrictiontypes-title' => 'Nicht schützbare Seite',
 'protect-legend' => 'Seitenschutzstatus ändern',
 'protectcomment' => 'Grund:',
 'protectexpiry' => 'Sperrdauer:',
@@ -2552,9 +2553,9 @@ Siehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle akt
 'protect-locked-access' => "Dein Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen der Seite '''„$1“:'''",
 'protect-cascadeon' => 'Diese Seite ist gegenwärtig Teil einer Kaskadensperre. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, welche durch die Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}. Der Seitenschutzstatus dieser Seite kann geändert werden, dies hat jedoch keinen Einfluss auf die Kaskadensperre:',
 'protect-default' => 'Alle Benutzer',
-'protect-fallback' => 'Es wird die „$1“-Berechtigung benötigt.',
-'protect-level-autoconfirmed' => 'Sperrung für neue und nicht registrierte Benutzer',
-'protect-level-sysop' => 'Nur Administratoren',
+'protect-fallback' => 'Nur Benutzern mit der „$1“-Berechtigung erlauben.',
+'protect-level-autoconfirmed' => 'Nur automatisch bestätigten Benutzern erlauben',
+'protect-level-sysop' => 'Nur Administratoren erlauben',
 'protect-summary-cascade' => 'kaskadierend',
 'protect-expiring' => 'bis $2, $3 Uhr (UTC)',
 'protect-expiring-local' => 'bis $1',
@@ -2849,7 +2850,7 @@ Du kannst Weiterleitungen, die auf den Originaltitel verlinken, automatisch korr
 Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfst.
 Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.
 
-Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte.
+Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese eine Weiterleitung ohne Versionsgeschichte.
 Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine Seite überschreiben.
 
 '''Warnung!'''
@@ -2860,7 +2861,7 @@ Der alte Titel wird danach zum neuen weiterleiten.
 Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfst.
 Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.
 
-Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte.
+Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.
 Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine Seite überschreiben.
 
 '''Warnung!'''
@@ -3024,7 +3025,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'import-noarticle' => 'Es wurde keine zu importierende Seite angegeben!',
 'import-nonewrevisions' => 'Alle Versionen wurden bereits zu einem früheren Zeitpunkt importiert.',
 'xml-error-string' => '$1 Zeile $2, Spalte $3, (Byte $4): $5',
-'import-upload' => 'XML-Daten importieren',
+'import-upload' => 'XML-Dateien importieren',
 'import-token-mismatch' => 'Verlust der Sessiondaten. Bitte versuche es erneut.',
 'import-invalid-interwiki' => 'Aus dem angegebenen Wiki ist kein Import möglich.',
 'import-error-edit' => 'Die Seite „$1“ wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.',
@@ -3216,6 +3217,7 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisches Wort|Magische Wörter}} ($1)',
 'pageinfo-hidden-categories' => 'Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
 'pageinfo-templates' => 'Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)',
+'pageinfo-transclusions' => 'Eingebunden in {{PLURAL:$1|1 Seite|$1 Seiten}}',
 'pageinfo-toolboxlink' => 'Seiteninformationen',
 'pageinfo-redirectsto' => 'Weiterleitungen nach',
 'pageinfo-redirectsto-info' => 'Information',
@@ -3224,6 +3226,10 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-protect-cascading' => 'Seiten mit Kaskadenschutz von hier',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Seiten mit Kaskadenschutz von',
+'pageinfo-category-info' => 'Kategorieinformationen',
+'pageinfo-category-pages' => 'Anzahl der Seiten',
+'pageinfo-category-subcats' => 'Anzahl der Unterkategorien',
+'pageinfo-category-files' => 'Anzahl der Dateien',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -3311,6 +3317,8 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 'minutes' => '{{PLURAL:$1|$1 Minute|$1 Minuten}}',
 'hours' => '{{PLURAL:$1|einer Stunde|$1 Stunden}}',
 'days' => '{{PLURAL:$1|$1 Tag|$1 Tage}}',
+'months' => '{{PLURAL:$1|Ein Monat|$1 Monate}}',
+'years' => '{{PLURAL:$1|Ein Jahr|$1 Jahre}}',
 'ago' => 'vor $1',
 'just-now' => 'Gerade eben',
 
@@ -3926,6 +3934,7 @@ Du kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutz
 'version-variables' => 'Erweiterungen mit Variablen',
 'version-antispam' => 'Spamschutzerweiterungen',
 'version-skins' => 'Benutzeroberflächen',
+'version-api' => 'API-Erweiterungen',
 'version-other' => 'Andere Erweiterungen',
 'version-mediahandlers' => 'Mediennutzungserweiterungen',
 'version-hooks' => "Schnittstellen ''(Hooks)''",
@@ -4085,6 +4094,10 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 erstellt',
 'logentry-newusers-autocreate' => 'Benutzerkonto $1 wurde automatisch erstellt',
 'newuserlog-byemail' => 'das Passwort wurde per E-Mail versandt',
+'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',
+'rightsnone' => '(–)',
 
 # Feedback
 'feedback-bugornote' => 'Sofern du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].
@@ -4138,6 +4151,7 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'api-error-ok-but-empty' => 'Interner Fehler: Der Server reagiert nicht.',
 'api-error-overwrite' => 'Das Überschreiben einer vorhandenen Datei ist nicht erlaubt.',
 'api-error-stashfailed' => 'Interner Fehler: Der Server konnte keine temporäre Datei speichern.',
+'api-error-publishfailed' => 'Interner Fehler: Der Server konnte die temporäre Datei nicht veröffentlichen.',
 'api-error-timeout' => 'Der Server hat nicht innerhalb der erwarteten Zeit reagiert.',
 'api-error-unclassified' => 'Ein unbekannter Fehler ist aufgetreten.',
 'api-error-unknown-code' => 'Unbekannter Fehler: „$1“',
index d294f10..8c3fed9 100644 (file)
@@ -460,7 +460,7 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Mesel Vırazê',
-'vector-action-delete' => 'Besterne',
+'vector-action-delete' => 'Bestere',
 'vector-action-move' => 'Berê',
 'vector-action-protect' => 'Bıpawe',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
@@ -495,7 +495,7 @@ $messages = array(
 'create' => 'Vıraze',
 'editthispage' => 'Ena pele bıvurne',
 'create-this-page' => 'Na pele bınuse',
-'delete' => 'Besterne',
+'delete' => 'Bestere',
 'deletethispage' => 'Ena perer besternê',
 'undelete_short' => '{{PLURAL:$1|Yew vurnayışi|$1 Vurnayışan}} mestere',
 'viewdeleted_short' => '{{PLURAL:$1|Yew vurnayışo esterıte|$1 Vurnayışanê esterıtan}} bımocne',
@@ -1600,15 +1600,13 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-sendemail' => 'Karberanê binî ra e-mail bişirav',
 'right-passwordreset' => 'E-postayanê parola reset kerdışa vineno',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Cıkewtışê hesabvıraştışi',
+'newuserlogpagetext' => 'Ena log de viraştişê karberî esta.',
+
 # User rights log
 'rightslog' => 'Qeydê heqanê karberi',
 'rightslogtext' => 'Ena listeyê loganê ke heqqa karbaranî mucneno.',
-'rightslogentry' => 'eza biyayişê grupî $1 ra $2 rê $3î bivurne',
-'rightslogentry-autopromote' => '$2 otomatikmen gırdkerdışi ra kerd $3.',
-'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
-'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
-'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
-'rightsnone' => '(çino)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ena pela wanayış',
@@ -1937,7 +1935,7 @@ bıewnê keyepel akerdeyo ya zi bıne vınderê u newe ra tesel bıkerê.
 keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 
 'license' => 'Lisans:',
-'license-header' => 'Lisans',
+'license-header' => 'Lisansdayış',
 'nolicense' => 'Theba nêweçineya',
 'license-nopreview' => '(verqeydî çin o)',
 'upload_source_url' => '(yew URLê raştî, şar rê akerde yo)',
@@ -1961,7 +1959,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'filehist' => 'Ravêrdê dosya',
 'filehist-help' => 'bıploxne ser yew tarih u aye tarih dı versionê dosya bıvin.',
 'filehist-deleteall' => 'hemî biestere',
-'filehist-deleteone' => 'bıestere',
+'filehist-deleteone' => 'bestere',
 'filehist-revert' => 'reyna biyere',
 'filehist-current' => 'nıkayên',
 'filehist-datetime' => 'Tarix/Zeman',
@@ -2014,7 +2012,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'filedelete-intro' => "Ti ho dosyayê '''[[Media:$1|$1]]'''i u tarixê ey dosyayê hemî estereno.",
 'filedelete-intro-old' => "Ti ho versiyonê '''[[Media:$1|$1]]'''i [$4 $3, $2] estereno.",
 'filedelete-comment' => 'Sebeb:',
-'filedelete-submit' => 'Bıestere',
+'filedelete-submit' => 'Bestere',
 'filedelete-success' => "'''$1'''  esteriyayo.",
 'filedelete-success-old' => "Versiyonê'''[[Media:$1|$1]]'''î $3, $2 esteriyayo.",
 'filedelete-nofile' => "'''$1''' çin o.",
@@ -2089,7 +2087,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'brokenredirects' => 'Hetenayışê vengi',
 'brokenredirectstext' => 'Redireksiyonê ey ki pelanê hama çiniyeno ra link dano:',
 'brokenredirects-edit' => 'bıvurne',
-'brokenredirects-delete' => 'bıestere',
+'brokenredirects-delete' => 'bestere',
 
 'withoutinterwiki' => 'Peleyê ke zıwanan de bina re gırey cı çınyo',
 'withoutinterwiki-summary' => 'Enê pelî ke versiyonê ziwanî binî ra link nidano.',
@@ -2250,10 +2248,6 @@ Qeydeyê destegbiyayey: <code>$1</code> (qet yew qeydeyo hesabiyaye http:// ke n
 'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
 'activeusers-noresult' => 'Karberi nêdiyayê.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Cıkewtışê hesabvıraştışi',
-'newuserlogpagetext' => 'Ena log de viraştişê karberî esta.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'heqê grubê karberi',
 'listgrouprights-summary' => 'wikiya cêrın a ke tede grubê karberi nişane biyê, listeya heqê cıresayişê inan o.
@@ -2393,6 +2387,8 @@ $UNWATCHURL
 
 Qey hemkari u pêşniyazi:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'viraziya',
+'changed' => 'vurneya',
 
 # Delete
 'deletepage' => 'Pele bıestere',
@@ -2402,7 +2398,7 @@ Qey hemkari u pêşniyazi:
 'exbeforeblank' => "behsê verê esteriyayişi: '$1'",
 'exblank' => 'zerreyê peli vengo',
 'delete-confirm' => '"$1" bıestere',
-'delete-legend' => 'Bıestere',
+'delete-legend' => 'Bestere',
 'historywarning' => "'''Teme:''' Pela ke şıma esterenê tede yew viyarte be teqriben $1 {{PLURAL:$1|versiyon esto|versiyoni estê}}:",
 'confirmdeletetext' => 'Tı ho yew pele u tarixê pele wederneno.
 Tı ra rica keno, tı zani tı ho sekeno, tı zani neticeyanê eno wedarnayışi u tı zani tı ser [[{{MediaWiki:Policy-url}}|poliçe]] kar keno.',
@@ -4682,6 +4678,10 @@ Ena sita dı newke xırabiya teknik esta.',
 'logentry-newusers-create2' => 'Hesabê karberi $1 terefê $3 ra vıraziya',
 'logentry-newusers-autocreate' => 'Hesabê $1 Otomatikmen vıraziya',
 'newuserlog-byemail' => 'pê e-mail ra paralo şiravt',
+'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
+'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
+'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
+'rightsnone' => '(çino)',
 
 # Feedback
 'feedback-bugornote' => 'Jew mersela teferruato teknik esta şıma reca malumatê şıma hazıro se [ $1  jew xırab rapor] bıvinê.Zewbi zi, formê cerê xo rê şenê karfiyê. Vatışê xo pela da "[ $3  $2 ]", namey karber dê xoya piya u wasteriya karfiye.',
index 41445ca..91f9190 100644 (file)
@@ -291,6 +291,7 @@ $messages = array(
 'newwindow' => '(se wótcynijo w nowem woknje)',
 'cancel' => 'Pśetergnuś',
 'moredotdotdot' => 'Wěcej…',
+'morenotlisted' => 'Dalšne njepódane...',
 'mypage' => 'Bok',
 'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusija z toś teju IP',
@@ -651,6 +652,7 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj
 # E-mail sending
 'php-mail-error-unknown' => 'Njeznata zmólka w PHP-funkciji mail()',
 'user-mail-no-addy' => 'Jo se wopytało, e-mail bźez e-mailoweje adrese pósłaś',
+'user-mail-no-body' => 'Jo se wopytało, e-mail bźez teksta abo z pśekrotkim tekstom pósłaś',
 
 # Change password dialog
 'resetpass' => 'Gronidło změniś',
@@ -1415,15 +1417,13 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'right-sendemail' => 'Drugim wužywarjam e-mail pósłaś',
 'right-passwordreset' => 'E-maile za slědkstajanje gronidłow se woglědaś',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Protokol nowych wužywarjow',
+'newuserlogpagetext' => 'To jo protokol wó nowych wužywarskich kontow.',
+
 # User rights log
 'rightslog' => 'Protokol wužywarskich pšawow',
 'rightslogtext' => 'To jo protokol wužywarskich pšawow.',
-'rightslogentry' => 'Pśisłušnosć ku kupce jo se za „$1“ změniła wót „$2“ na „$3“.',
-'rightslogentry-autopromote' => 'jo se awtomatiski wót $2 do $3 změnił',
-'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ł',
-'rightsnone' => '(nic)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'toś ten bok cytaś',
@@ -2059,10 +2059,6 @@ Jo nanejmjenjej głowna domena trěbna, na pśikład "*.org"<br />
 'activeusers-hidesysops' => 'Administratorow schowaś',
 'activeusers-noresult' => 'Žedne wužywarje namakane.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Protokol nowych wužywarjow',
-'newuserlogpagetext' => 'To jo protokol wó nowych wužywarskich kontow.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pšawa wužywarskeje kupki',
 'listgrouprights-summary' => 'To jo lisćina wužywarskich kupkow definěrowanych w toś tom wikiju z jich zwězanymi pśistupnymi pšawami. Móžo [[{{MediaWiki:Listgrouprights-helppage}}|pśidatne informacije]] wó jadnotliwych pšawach daś.',
@@ -2195,6 +2191,8 @@ $UNWATCHURL
 
 Pšašanja a dalšna pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napórał',
+'changed' => 'změnił',
 
 # Delete
 'deletepage' => 'Bok wulašowaś',
@@ -2260,6 +2258,8 @@ Pšosym nawroś se na bok, wót kótaregož sy pśišeł a wopytaj hyšći raz.'
 'prot_1movedto2' => '„[[$1]]“ pśesunjone na „[[$2]]“',
 'protect-badnamespace-title' => 'Nješćitajobny mjenjowy rum',
 'protect-badnamespace-text' => 'Boki w toś tom mjenjowem rumje njedaju se šćitaś.',
+'protect-norestrictiontypes-text' => 'Toś ten bok njedajo se šćitaś, dokulaž njestoje žedne wobgranicowanja k dispoziciji.',
+'protect-norestrictiontypes-title' => 'Nješćitajobne boki',
 'protect-legend' => 'Šćitanje wobkšuśiś',
 'protectcomment' => 'Pśicyna:',
 'protectexpiry' => 'cas wótběžy:',
@@ -2272,9 +2272,9 @@ Pšosym nawroś se na bok, wót kótaregož sy pśišeł a wopytaj hyšći raz.'
 'protect-locked-access' => "Wašo wužywarske konto njama notne pšawa za změnu šćita toś togo boka. How su aktualne nastajenja šćita boka '''„$1“:'''.",
 'protect-cascadeon' => 'Toś ten bok jo tuchylu šćitany, dokulaž jo zawězany do {{PLURAL:$1|slědujucego boka|slědujuceju bokowu|slědujucych bokow}}, źož kaskadowy šćit jo aktiwěrowany. Status šćita móžo se za toś ten bok změniś, to ale njewówliwujo kaskadowy šćit:',
 'protect-default' => 'Wšyknym wužywarjam dowóliś',
-'protect-fallback' => 'Slědujuce pšawo jo notne: „$1“.',
-'protect-level-autoconfirmed' => 'Nowych a njeregistrěrowanych wužywarjow blokěrowaś',
-'protect-level-sysop' => 'Jano administratory',
+'protect-fallback' => 'Jano wužywarjow z pšawom "$1" dowóliś',
+'protect-level-autoconfirmed' => 'Jano awtomatiski wobkšuśonych wužywarjow dowóliś',
+'protect-level-sysop' => 'Jano administratorow dowóliś',
 'protect-summary-cascade' => 'kaskaděrujucy',
 'protect-expiring' => 'kóńcy $1 (UTC)',
 'protect-expiring-local' => 'płaśiwy do $1',
@@ -2897,6 +2897,7 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapśěgnjona pśedłoga|Zapśěgnjonej pśedłoze|Zapśěgnjone pśedłogi|Zapśěgnjone pśedłogi}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Bok zapśěgnjony|Boka zapśěgnjonej|Boki zapśěgnjone}}  do ($1)',
 'pageinfo-toolboxlink' => 'Informacije wó boku',
 'pageinfo-redirectsto' => 'Pósrědnja dalej k',
 'pageinfo-redirectsto-info' => 'Info',
@@ -2905,6 +2906,10 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-protect-cascading' => 'Kaskadowy šćit wót how',
 'pageinfo-protect-cascading-yes' => 'Jo',
 'pageinfo-protect-cascading-from' => 'Kaskadowy šćit wót',
+'pageinfo-category-info' => 'Kategorijowe informacije',
+'pageinfo-category-pages' => 'Licba bokow',
+'pageinfo-category-subcats' => 'Licba pódkategorijow',
+'pageinfo-category-files' => 'Licba datajow',
 
 # Skin names
 'skinname-standard' => 'Klasiski',
@@ -2990,6 +2995,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minutu|$1 minutoma|$1 minutami|$1 minutami}}',
 'hours' => '{{PLURAL:$1|$1 góźinu|$1 góźinoma|$1 góźinami|$1 góźinami}}',
 'days' => '{{PLURAL:$1|$1 dnjom|$1 dnjoma|$1 dnjami|$1 dnjami}}',
+'months' => '{{PLURAL:$1|$1 mjasecom|$1 mjasecoma|$1 mjasecami}}',
+'years' => '{{PLURAL:$1|$1 lětom|$1 lětoma|$1 lětami}}',
 'ago' => 'pśed $1',
 'just-now' => 'rowno',
 
@@ -3743,6 +3750,10 @@ Wobraze se w połnym wótgranicowanju pokazuju, druge datajowe typy se ze zwěza
 'logentry-newusers-create2' => '$1 jo załožył wužywarske konto $3',
 'logentry-newusers-autocreate' => 'Konto $1 jo se awtomatiski załožyło',
 'newuserlog-byemail' => 'Pótajne słowo bu pśez e-mail pósłane.',
+'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ł',
+'rightsnone' => '(nic)',
 
 # Feedback
 'feedback-bugornote' => 'Jolic sy zwólny, techniski problem nadrobnje wopisaś, [$1 daj pšosym zmólku k wěsći].
index 8f89642..a0153f0 100644 (file)
@@ -1042,6 +1042,9 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 
 'grouppage-sysop' => '{{ns:project}}:Mandur',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pinamansaian momomoguno',
+
 # User rights log
 'rightslog' => 'Log kasagaan momomoguno',
 
@@ -1201,9 +1204,6 @@ Kointalangan dilo [$2 kointalangan pail] okito id siriba.',
 'linksearch-ok' => 'Ihumo',
 'linksearch-line' => '$1 toput mantad $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pinamansaian momomoguno',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis do kinoruhangan)',
 
index 7bcf0a7..71ee574 100644 (file)
@@ -131,6 +131,7 @@ $messages = array(
 'category-empty' => "''މި ޤިސްމުގައި އެއްވެސް ސަފްހާ އެއް އަދި އެއްވެސް ފައިލެއް ނުހިމެނެއެވެ.''",
 'hidden-categories' => '{{PLURAL:$1|ފޮރުވިފައިވާ ޤިސްމު|ފޮރުވިފައިވާ ޤިސްމުތައް}}',
 'hidden-category-category' => 'ފޮރުވިފައިވާ ޤިސްމުތައް',
+'category-subcat-count-limited' => 'މި ޤިސްމުގައި ހިމެނެނީ {{PLURAL:$1|ކުދިޤިސްމެވެ|$1 ކުދިޤިސްމުތަކެވެ}}.',
 
 'about' => 'ތަޢާރަފު',
 'article' => 'ފިހުރިސްތު ޞަފްޙާ',
@@ -186,6 +187,7 @@ $messages = array(
 'create-this-page' => 'މި ޞަފްޙާ ފަށްޓަވާ',
 'delete' => 'ފޮހެލައްވާ',
 'deletethispage' => 'މި ޞަފްޙާ ފޮހެލައްވާ',
+'viewdeleted_short' => '{{PLURAL:$1|ފޮހެލެވިފައިވާ އެއް އުނިއިތުރު|ފޮހެލެވިފައިވާ $1 އުނިއިތުރު}} ބައްލަވާ',
 'protect' => 'ދިފާއުކުރައްވާ',
 'protect_change' => 'ބަދަލު ގެންނަވާ',
 'protectthispage' => 'މި ޞަފްޙާ ދިފާއުކުރައްވާ',
@@ -225,7 +227,7 @@ $1',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}}ގެ ތަޢާރަފު',
-'aboutpage' => 'Project:ތާރަފު',
+'aboutpage' => 'Project:Þ\8cÞ¦Þ¢Þ§Þ\83Þ¦Þ\8aÞª',
 'copyright' => 'ހުރިހާ މާއްދާއެއް $1 ގެ ދަށުން ލިބެން އެބަހުއްޓެވެ.',
 'copyrightpage' => '{{ns:project}}:ނަކަލުކުރުމުގެހައްގު',
 'currentevents' => 'ހިނގަމުންދާ ހާދިސާތައް',
@@ -311,6 +313,7 @@ $1',
 'createaccount' => 'މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
 'gotaccount' => 'މެމްބަރުކަން ހާސިލް ކުރައްވާފައި ނުވޭތޯ؟ $1',
 'gotaccountlink' => 'ވަދެވަޑައިގަންނަވާ',
+'userlogin-resetlink' => 'ވަދެވަޑައިގަތުމުގެ ސިއްރު ބަހާއި މެމްބަރު ނަން ހަނދާންނެތުނީތޯ؟',
 'createaccountreason' => 'ސަބަބު:',
 'badretype' => 'ތިޔަ ލިޔުއްވި ދެ ސިއްރުބަސް އެއް ސިއްރު ބަހާއި އަނެއް ސިއްރު ބަހާއި ދިމަލެއް ނުވޭ. އަދި ސިއްރުބަސް ރަނގަޅަށް ޖައްސަވާށެވެ!',
 'userexists' => 'ތިޔަ ލިޔުއްވި ނަން މިހާރުވެސް ދަނީ ބޭނުން ކުރެވެމުންނެވެ.
@@ -360,6 +363,7 @@ $1',
 'italic_sample' => 'ކަތި އިބާރާތް',
 'italic_tip' => 'ކަތި އިބާރާތް',
 'headline_sample' => 'ސުރުހީގެ އިބާރާތް',
+'media_tip' => 'ފައިލު ފާލަން',
 'sig_tip' => 'ތިޔަބޭފުޅާގެ ސޮއި، ތާރީޚް ތަތްގަނޑާއެކު',
 
 # Edit pages
@@ -394,6 +398,8 @@ $1',
 'newarticle' => '(އައު)',
 'noarticletext' => 'މި ޞަފްޙާގައި އެއްވެސް ލިޔުމެއް ނުވެއެވެ. ތިޔަބޭފުޅާއަށް މި ނަން [[Special:Search/{{PAGENAME}}|އެހެން ޞަފްޙާތަކުން ހޯއްދެވިދާނެއެވެ]]. ނުވަތަ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} މިއާ ގުޅޭ ލޮގްތައް ހޯއްދެވިދާނެއެވެ].
 [{{fullurl:{{FULLPAGENAME}}|action=edit}} ނުވަތަ މި ޞަފްޙާއަށް އުނިއިތުރު ގެނެވިދާނެއެވެ].</span>.',
+'previewnote' => "'''މިއީ ހަމައެކަނި ނަމޫނާ އެކެވެ.'''
+އަދި ތިބޭފުޅާގެ ބަދަލުތައް ރައްކާނުކުރެވެއެވެ!",
 'editing' => '$1 އަށް އުނިއިތުރު ގެންނަނީ',
 'creating' => '$1 ފަށްޓަވަނީ',
 'editingsection' => '$1ގެ ބަޔަކަށް އުނިއިތުރު ގެންނަނީ',
@@ -406,16 +412,26 @@ $1',
 'templatesused' => 'މި ޞަފްޙާ ގައި ބޭނުން ކުރެވިފައިވާ {{PLURAL:$1|ފަންވަތް|ފަންވަތްތައް}}:',
 'template-protected' => '(ދިފާޢުކުރެވިފައި)',
 'template-semiprotected' => '(ބައެއް ދިފާޢުކުރެވިފައި)',
+'recreate-moveddeleted-warn' => "'''ސަމާލުކަމަށް: ތިޔަ ފަށްޓަވަން އުޅުއްވަނީ ކުރީގައި ފޮހެލެވިފައިވާ ޞަފްޙާއެކެވެ.'''
+
+މި ޞަފްޙާ ކުރިއަށް ގެންދެވުމަށް ރަނގަޅުތޯ އަދި އެއްފަހަރު ވިސްނަވާލައްވާށެވެ.
+ފޮހެލެވުނު އަދި ބަދަލުކުރެވުނު ލޮގް ތިރީގައި ވަނީއެވެ :",
+'moveddeleted-notice' => 'މި ޞަފްޙާ ވަނީ ފޮހެލެވިފައެވެ.
+ފޮހެލުމުގެ އަދި ނަން ބަދަލުކުރުމުގެ ލޮގް ތިރީގައިވަނީއެވެ.',
 
 # History pages
 'currentrev' => 'އެންމެފަހުން ގެނެވުނު ބަދަލު',
 'currentrev-asof' => 'އެންމެ ފަހުން ގެނެވުނު ބަދަލު $1',
 'revisionasof' => '$1ގެ ނުސްހާ',
 'previousrevision' => '→ ކުރީގެ ނުސްހާ',
+'nextrevision' => 'ފަހުގެ ނުސްހާ ←',
 'next' => 'ކުރިޔަށް',
+'histfirst' => 'އެންމެ ކުރީގެ',
+'histlast' => 'އެންމެ ފަހުގެ',
 
 # Revision deletion
 'revdel-restore-deleted' => 'ފޮހެލެވިފައިވާ ނުސްހާތައް',
+'revdel-restore-visible' => 'ފާޅު ނުސްހާތައް',
 
 # Diffs
 'lineno' => 'ފޮޅުވަތް $1:',
@@ -489,10 +505,17 @@ $1',
 'group-bureaucrat' => 'ބިއުރޯކްރެޓުން',
 'group-all' => '(ހުރިހާ)',
 
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'މި ޞަފްޙާއަށް އުނިއިތުރު ގެންނަވާ',
+
 # Recent changes
 'recentchanges' => 'އެންމެ ފަހުގެ ބަދަލުތައް',
 'recentchanges-summary' => 'މި ވިކިޕީޑިއާ އަށް ގެނެވިފައިވާ އެންމެ ފަހުގެ ބަދަލުތައް މި ޞަފްހާ އިން ބައްލަވާ!',
+'recentchanges-label-newpage' => 'މި އުނިއިތުރުން އާ ޞަފްޙާއެއް ފަށައިގަނެވުނެވެ.',
+'recentchanges-label-minor' => 'މިއީ ކުޑަކުޑަ އުނިއިތުރެކެވެ.',
+'recentchanges-label-bot' => 'މި އުނިއިތުރު ގެނައީ ބޮޓެކެވެ.',
 'diff' => 'ފަރަގު',
+'hist' => 'ތާރީޚް',
 'hide' => 'ފޮރުވާ',
 'show' => 'ދައްކަވާ',
 
@@ -523,6 +546,8 @@ $1',
 'filehist-user' => 'މެމްބަރު',
 'filehist-comment' => 'ޚިޔާލު',
 'imagelinks' => 'ފާލަންތައް',
+'sharedupload-desc-here' => 'މި ފައިލަކީ $1ގެ ފައިލެކެވެ. އަދި އެހެން މަޝްރޫޢުތަކުގައި ބޭނުން ކުރެވިފައި ހުރެދާނެއެވެ.
+މި ފައިލުގެ ތަފްސީލް [$2 ފައިލު ތަފްސީލް ޞަފްޙާއިން] ތިރީގައިވަނީއެވެ.',
 
 # Random page
 'randompage' => 'ކޮންމެވެސް ޞަފްޙާއެއް',
@@ -591,6 +616,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'activeusers-hidebots' => 'ބޮޓް ފޮރުއްވާ',
 'activeusers-hidesysops' => 'އެޑްމިނިސްޓްރޭޓަރުން ފޮރުއްވާ',
 
+# Special:ListGroupRights
+'listgrouprights-members' => '(މެމްބަރުންގެ ލިސްޓު)',
+
 # E-mail user
 'emailuser' => 'މި މެންބަރަށް އީމޭލު ފޮނުއްވާ',
 
@@ -604,6 +632,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watchlistcontains' => 'ތިޔަބޭފުޅާގެ ހާއްސަ ނަޒަރު ފިހުރިސްތުގައި ވަނީ $1 ޞަފްޙާއެވެ.',
 'wlnote' => 'ތިރީގައި މިވަނީ އެއީ ފާއިތުވި <b>$2</b> ގަޑި އިރުގެ ތެރޭގައިގެނެވިފައިވާ ފަހު $1 ބަދަލެވެ.',
 
+'changed' => 'ބަދަލުކުރެވިއްޖެ',
+
 # Delete
 'deletepage' => 'ޞަފްޙާ ފޮހެލައްވާ',
 'confirm' => 'ޔަގީން',
@@ -612,6 +642,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'deletecomment' => 'ސަބަބު',
 
 # Rollback
+'rollbacklink' => 'ކުރީގެ ނުސްހާ އަކަށް ބަދަލުކުރައްވާ',
 'cantrollback' => 'އުނިއިތުރު އިއާދައެއް ނުކުރެވޭނެ؛ އެހެނީ އެންމެ ފަހު އުނިއިތުރުގައި ހިއްސާވި ފަރާތަކީ މިޞަފްޙާގެ ހަމައެކަނި މުއައްލިފެވެ.',
 
 # Protect
@@ -635,7 +666,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'contributions' => 'މެންބަރު ގެ ހިއްސާ',
 'mycontris' => 'މަގޭ ހިއްސާ',
 
+'sp-contributions-talk' => 'ވާހަކަ',
 'sp-contributions-userrights' => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
+'sp-contributions-search' => 'ހިއްސާތަށް ހޯއްދަވާ',
 
 # What links here
 'whatlinkshere' => 'މިއާ ގުޅެނީ ކޮންއެއްޗެއް',
@@ -646,8 +679,10 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'ipbsubmit' => 'މި މެމްބަރާއި މެދު ފިޔަވަޅު އަޅުއްވާ!',
 'ipboptions' => '2 ގަޑިއިރު:2 hours, 1 ދުވަސް:1 day, 3 ދުވަސް:3 days, 1 ހަފްތާ:1 week, 2 ހަފްތާ:2 weeks, 1 މަސް:1 month,3 މަސް:3 months, 6 މަސް:6 months, 1 އަހަރު:1 year, ހަމައެއްނެތް:infinite',
 'badipaddress' => 'ނުރަނގަޅު އައި.ޕީ އެޑްރެހެއް',
+'ipblocklist' => 'ފިޔަވަޅު އެޅިފައިވާ މެމްބަރުން',
 'expiringblock' => 'މުއްދަތު ހަމަވާނީ $1 $2',
 'blocklink' => 'ފިޔަވަޅުއަޅުއްވާ',
+'unblocklink' => 'ފިޔަވަޅުއެޅުން ބަދަލުކުރައްވާ',
 'contribslink' => 'ޙިއްޞާ',
 'proxyblocksuccess' => 'ފުރިހަމަވެއްޖެ.',
 
@@ -692,9 +727,11 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'tooltip-ca-viewsource' => 'މި ޞަފްޙާވަނީ ދިފާޢުކުރެވިފައެވެ.
 މި ޞަފްޙާގެ މަސްދަރު ތިބޭފުޅާއަށް ބައްލަވާލެއްވޭނެއެވެ.',
 'tooltip-ca-history' => 'މި ޞަފްޙާގެ ކުރީގެ ނުސްހާތައް',
+'tooltip-ca-protect' => 'މި ޞަފްޙާ ދިފާޢުކުރައްވާ',
 'tooltip-ca-delete' => 'މި ޞަފްޙާ ފޮހެލައްވާ',
 'tooltip-ca-move' => 'މި ޞަފްހާގެ ނަން/ތަން ބަދަލުކުރައްވާ',
 'tooltip-ca-watch' => 'މި ޞަފްޙާއަށް ނަޒަރު ބަހައްޓަވާ',
+'tooltip-ca-unwatch' => 'މަގޭ ނަޒަރުން މި ޞަފްޙާ ދުރުކޮށްލައްވާ',
 'tooltip-search' => '{{SITENAME}}އިން ހޯއްދަވާ',
 'tooltip-search-fulltext' => 'މި ބަސް ޞަފްޙާތަކުން ހޯއްދަވާ',
 'tooltip-p-logo' => 'މައި ޞަފްޙާއަށް ވަޑައިގަންނަވާ',
@@ -715,16 +752,23 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'tooltip-t-permalink' => 'ނުސްހާއަށް ދާއިމީ ފާލަން',
 'tooltip-ca-nstab-main' => 'މަޢުލޫމާތު ޞަފްޙާ ބައްލަވާ',
 'tooltip-ca-nstab-user' => 'މެމްބަރު ޞަފްޙާ ބައްލަވާ',
+'tooltip-ca-nstab-special' => 'މިއީ ޚާއްސަ ޞަފްޙާއެކެވެ. މި ޞަފްޙާއަށް އުނިއިތުރު ނުގެނެވޭނެއެވެ.',
+'tooltip-ca-nstab-project' => 'މަޝްރޫޢު ޞަފްޙާ ބައްލަވާ',
 'tooltip-ca-nstab-image' => 'ފައިލު ޞަފްޙާ ބައްލަވާ',
 'tooltip-ca-nstab-template' => 'ފަންވަތް ބައްލަވާ',
 'tooltip-ca-nstab-category' => 'ޤިސްމު ޞަފްޙާ ބައްލަވާ',
 'tooltip-save' => 'ބަދަލުތައް ރައްކާކުރައްވާ',
 'tooltip-preview' => 'ބަދަލުތައް ދައްކަވާ، ރައްކާކުރެއްވުމުގެ ކުރިން މި ބޭނުންކުރައްވާ!',
+'tooltip-rollback' => '"ކުރީގެ ނުސްހާ އަކަށް ބަދަލުކުރައްވާ" އިން މި ޞަފްޙާއަށް އެންމެ ފަހުން އުނިއިތުރު ގެންނެވި މެމްބަރުގެ އުނިއިތުރު(އުނިއިތުރުތައް) ފޮހެލެވޭނެއެވެ.',
 'tooltip-summary' => 'ކުރު ޚުލާސާއެއް ލިޔުއްވާ',
 
 # Info page
 'pageinfo-toolboxlink' => 'ސަފްޙާ އާއި ބެހޭ މައުލޫމާތު',
 
+# Browsing diffs
+'previousdiff' => '→ ކުރީގެ ނުސްހާ',
+'nextdiff' => 'ފަހުގެ ނުސްހާ ←',
+
 # Special:NewFiles
 'showhidebots' => '($1 ބޮޓްސް)',
 'ilsubmit' => 'ހޯއްދަވާ',
index a405853..a49218b 100644 (file)
@@ -385,7 +385,7 @@ $messages = array(
 'tog-externaleditor' => 'Χρήση εξωτερικού επεξεργαστή από προεπιλογή (για προχωρημένους μόνο, χρειάζεται ειδικές ρυθμίσεις του υπολογιστή σας. [//www.mediawiki.org/wiki/Manual:External_editors Περισσότερες πληροφορίες.])',
 'tog-externaldiff' => 'Χρήση εξωτερικού diff από προεπιλογή (για προχωρημένους μόνο, χρειάζεται ειδικές ρυθμίσεις του υπολογιστή σας. [//www.mediawiki.org/wiki/Manual:External_editors Περισσότερες πληροφορίες.])',
 'tog-showjumplinks' => 'Ενεργοποίησε τους συνδέσμους προσβασιμότητας του τύπου "μετάβαση σε"',
-'tog-uselivepreview' => 'ΧÏ\81ηÏ\83ιμοÏ\80οίηÏ\83ε Î¬Î¼ÎµÏ\83η Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83η (JavaScript) (Πειραματικό)',
+'tog-uselivepreview' => 'ΧÏ\81ήÏ\83η Î¶Ï\89νÏ\84ανήÏ\82 Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83ηÏ\82 (αÏ\80αιÏ\84εί JavaScript) (Ï\80ειραματικό)',
 'tog-forceeditsummary' => 'Να ειδοποιούμαι κατά την εισαγωγή κενής σύνοψης επεξεργασίας',
 'tog-watchlisthideown' => 'Απόκρυψη των επεξεργασιών μου από τη λίστα παρακολούθησης',
 'tog-watchlisthidebots' => 'Απόκρυψη των επεξεργασιών των bot από τη λίστα παρακολούθησης',
@@ -1414,7 +1414,7 @@ $1",
 'prefs-watchlist-token' => 'Σημείο λίστας παρακολούθησης:',
 'prefs-misc' => 'Διάφορες ρυθμίσεις',
 'prefs-resetpass' => 'Αλλαγή κωδικού',
-'prefs-changeemail' => 'Î\91λλαγή Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Î¼Î·Î½Ï\8dμαÏ\84οÏ\82',
+'prefs-changeemail' => 'Î\91λλαγή Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85',
 'prefs-setemail' => 'Ορίστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου',
 'prefs-email' => 'Επιλογές e-mail',
 'prefs-rendering' => 'Εμφάνιση',
@@ -1617,14 +1617,13 @@ $1",
 'right-sendemail' => 'Αποστολή ηλεκτρονικού μηνύματος σε άλλους χρήστες',
 'right-passwordreset' => 'Εμφάνιση email επαναφοράς κωδικού πρόσβασης',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Αρχείο δημιουργίας χρηστών',
+'newuserlogpagetext' => 'Αυτή είναι μια καταγραφή δημιουργίας χρηστών.',
+
 # User rights log
 'rightslog' => 'Αρχείο καταγραφών δικαιωμάτων χρηστών',
 'rightslogtext' => 'Καταγραφές των αλλαγών στα δικαιώματα χρηστών.',
-'rightslogentry' => 'η ιδιότητα μέλους ομάδας για τον/την $1 από $2 σε $3 άλλαξε',
-'rightslogentry-autopromote' => 'προωθήθηκε αυτόματα από $2 σε $3',
-'logentry-rights-rights-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3',
-'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
-'rightsnone' => '(κανένα)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'να διαβάσετε αυτή τη σελίδα',
@@ -1883,6 +1882,8 @@ $1',
 # Lock manager
 'lockmanager-notlocked' => 'Δεν μπορέσατε να  ξεκλειδώσετε το " $1 ". Δεν είναι κλειδωμένο.',
 'lockmanager-fail-closelock' => 'Δεν μπόρεσε να κλείσει το κλειδωμένο αρχείο για "$1".',
+'lockmanager-fail-deletelock' => 'Δεν μπόρεσε να διαγράψει το αρχείο κλειδώματος για το "$1".',
+'lockmanager-fail-openlock' => 'Δεν μπόρεσε να ανοίξει το αρχείο κλειδώματος για το "$1".',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Παρουσιάστηκε σφάλμα κατά το άνοιγμα του αρχείου για ZIP ελέγχους.',
@@ -2250,10 +2251,6 @@ $1',
 'activeusers-hidesysops' => 'Απόκρυψη διαχειριστών',
 'activeusers-noresult' => 'Δεν βρέθηκε χρήστης.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Αρχείο δημιουργίας χρηστών',
-'newuserlogpagetext' => 'Αυτή είναι μια καταγραφή δημιουργίας χρηστών.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ομάδων χρηστών',
 'listgrouprights-summary' => 'Ακόλουθεί μία λίστα με τις ομάδες χρηστών σε αυτό το wiki καθώς και με τα δικαιώματα πρόσβασης αυτών.
@@ -2392,6 +2389,8 @@ $UNWATCHURL
 
 Παρατηρήσεις και περισσότερη βοήθεια:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'δημιουργήθηκε',
+'changed' => 'έχει αλλάξει',
 
 # Delete
 'deletepage' => 'Διαγραφή σελίδας',
@@ -3130,6 +3129,9 @@ $1',
 'pageinfo-protect-cascading' => 'Οι προστασίες ξεκινούν τη διαδοχή τους από εδώ',
 'pageinfo-protect-cascading-yes' => 'Ναι',
 'pageinfo-protect-cascading-from' => 'Οι προστασίες ξεκινούν τη διαδοχή τους από',
+'pageinfo-category-pages' => 'Αριθμός σελίδων',
+'pageinfo-category-subcats' => 'Αριθμός υποκατηγοριών',
+'pageinfo-category-files' => 'Αριθμός αρχείων',
 
 # Skin names
 'skinname-standard' => 'Κλασσικό',
@@ -3931,6 +3933,7 @@ $5
 'logentry-delete-restore' => 'Ο/η $1 αποκατέστησε τη σελίδα $3',
 'logentry-delete-event' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ορατότητα σε {{PLURAL:$5|ένα γεγονός καταγραφής|$5 log events}} στο $3: $4',
 'logentry-delete-revision' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μιας έκδοσης|$5 εκδόσεων}} στη σελίδα $3: $4',
+'logentry-delete-event-legacy' => '{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα της καταγραφής συμβάντων στη σελίδα $3',
 'logentry-delete-revision-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
 'logentry-suppress-delete' => '{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3',
 'logentry-suppress-revision-legacy' => '$1 κρυφά άλλαξαν την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
@@ -3953,6 +3956,9 @@ $5
 'logentry-newusers-create2' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$1|τον|την}} $1',
 'logentry-newusers-autocreate' => 'Ο λογαριασμός $1 δημιουργήθηκε αυτόματα',
 'newuserlog-byemail' => 'ο κωδικός έχει σταλεί μέσω ηλεκτρονικού μηνύματος',
+'logentry-rights-rights-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3',
+'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
+'rightsnone' => '(κανένα)',
 
 # Feedback
 'feedback-bugornote' => 'Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλώ [ $1  κάντε μια αναφορά σφάλματος].
index 2579849..85f3d6a 100644 (file)
@@ -775,6 +775,7 @@ XHTML id names.
 'moredotdotdot' => 'More...',
 'mypage'        => 'Page',
 'mytalk'        => 'Talk',
+'morenotlisted' => 'More not listed...',
 'anontalk'      => 'Talk for this IP address',
 'navigation'    => 'Navigation',
 'and'           => '&#32;and',
@@ -1178,13 +1179,13 @@ You may ignore this message, if this account was created in error.',
 Please wait before trying again.',
 'login-abort-generic'        => 'Your login was unsuccessful - Aborted',
 'loginlanguagelabel'         => 'Language: $1',
-'loginlanguagelinks'         => '* Deutsch|de
-* English|en
-* Esperanto|eo
-* Français|fr
-* Español|es
-* Italiano|it
-* Nederlands|nl', # do not translate or duplicate this message to other languages
+'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.',
 
 # E-mail sending
@@ -1192,6 +1193,7 @@ Please wait before trying again.',
 'php-mail-error'         => '$1', # do not translate or duplicate this message to other languages
 'php-mail-error-unknown' => "Unknown error in PHP's mail() function.",
 'user-mail-no-addy'      => 'Tried to send e-mail without an e-mail address.',
+'user-mail-no-body'      => 'Tried to send e-mail with an empty or unreasonably short body.',
 
 # Change password dialog
 'resetpass'                 => 'Change password',
@@ -1441,7 +1443,7 @@ You are also promising us that you wrote this yourself, or copied it from a publ
 'longpageerror'                    => "'''Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''
 It cannot be saved.",
 'readonlywarning'                  => "'''Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.'''
-You may wish to cut-n-paste the text into a text file and save it for later.
+You may wish to copy and paste your text into a text file and save it for later.
 
 The administrator who locked it offered this explanation: $1",
 'protectedpagewarning'             => "'''Warning: This page has been protected so that only users with administrator privileges can edit it.'''
@@ -2878,16 +2880,16 @@ Future changes to this page and its associated talk page will be listed there.',
 'enotif_mailer'                => '{{SITENAME}} notification mailer',
 'enotif_reset'                 => 'Mark all pages visited',
 'enotif_impersonal_salutation' => '{{SITENAME}} user',
-'enotif_subject_deleted'       => '{{SITENAME}} page $1 has been deleted by {{gender:$2|$2}}',
-'enotif_subject_created'       => '{{SITENAME}} page $1 has been created by {{gender:$2|$2}}',
-'enotif_subject_moved'         => '{{SITENAME}} page $1 has been moved by {{gender:$2|$2}}',
-'enotif_subject_restored'      => '{{SITENAME}} page $1 has been restored by {{gender:$2|$2}}',
-'enotif_subject_changed'       => '{{SITENAME}} page $1 has been changed by {{gender:$2|$2}}',
-'enotif_body_intro_deleted'    => 'The {{SITENAME}} page $1 has been deleted on $PAGEEDITDATE by {{gender:$2|$2}}, see $3.',
-'enotif_body_intro_created'    => 'The {{SITENAME}} page $1 has been created on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_moved'      => 'The {{SITENAME}} page $1 has been moved on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_restored'   => 'The {{SITENAME}} page $1 has been restored on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_changed'    => 'The {{SITENAME}} page $1 has been changed on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
+'enotif_subject_deleted'       => '{{SITENAME}} page $1 has been {{GENDER:$2|deleted}} by $2',
+'enotif_subject_created'       => '{{SITENAME}} page $1 has been {{GENDER:$2|created}} by $2',
+'enotif_subject_moved'         => '{{SITENAME}} page $1 has been {{GENDER:$2|moved}} by $2',
+'enotif_subject_restored'      => '{{SITENAME}} page $1 has been {{GENDER:$2|restored}} by $2',
+'enotif_subject_changed'       => '{{SITENAME}} page $1 has been {{GENDER:$2|changed}} by $2',
+'enotif_body_intro_deleted'    => 'The {{SITENAME}} page $1 has been {{GENDER:$2|deleted}} on $PAGEEDITDATE by $2, see $3.',
+'enotif_body_intro_created'    => 'The {{SITENAME}} page $1 has been {{GENDER:$2|created}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
+'enotif_body_intro_moved'      => 'The {{SITENAME}} page $1 has been {{GENDER:$2|moved}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
+'enotif_body_intro_restored'   => 'The {{SITENAME}} page $1 has been {{GENDER:$2|restored}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
+'enotif_body_intro_changed'    => 'The {{SITENAME}} page $1 has been {{GENDER:$2|changed}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
 'enotif_lastvisited'           => 'See $1 for all changes since your last visit.',
 'enotif_lastdiff'              => 'See $1 to view this change.',
 'enotif_anon_editor'           => 'anonymous user $1',
@@ -2917,6 +2919,8 @@ $UNWATCHURL
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created'                      => 'created', # only translate this message to other languages if you have to change it
+'changed'                      => 'changed', # only translate this message to other languages if you have to change it
 
 # Delete
 'deletepage'             => 'Delete page',
@@ -2978,61 +2982,63 @@ this action has been canceled as a precaution against session hijacking.
 Go back to the previous page, reload that page and then try again.',
 
 # Protect
-'protectlogpage'              => 'Protection log',
-'protectlogtext'              => 'Below is a list of changes to page protections.
+'protectlogpage'                   => 'Protection log',
+'protectlogtext'                   => 'Below is a list of changes to page protections.
 See the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.',
-'protectedarticle'            => 'protected "[[$1]]"',
-'modifiedarticleprotection'   => 'changed protection level for "[[$1]]"',
-'unprotectedarticle'          => 'removed protection from "[[$1]]"',
-'movedarticleprotection'      => 'moved protection settings from "[[$2]]" to "[[$1]]"',
-'protect-title'               => 'Change protection level for "$1"',
-'protect-title-notallowed'    => 'View protection level of "$1"',
-'prot_1movedto2'              => '[[$1]] moved to [[$2]]',
-'protect-badnamespace-title'  => 'Non-protectable namespace',
-'protect-badnamespace-text'   => 'Pages in this namespace cannot be protected.',
-'protect-legend'              => 'Confirm protection',
-'protectcomment'              => 'Reason:',
-'protectexpiry'               => 'Expires:',
-'protect_expiry_invalid'      => 'Expiry time is invalid.',
-'protect_expiry_old'          => 'Expiry time is in the past.',
-'protect-unchain-permissions' => 'Unlock further protect options',
-'protect-text'                => "Here you may view and change the protection level for the page '''$1'''.",
-'protect-locked-blocked'      => "You cannot change protection levels while blocked.
+'protectedarticle'                 => 'protected "[[$1]]"',
+'modifiedarticleprotection'        => 'changed protection level for "[[$1]]"',
+'unprotectedarticle'               => 'removed protection from "[[$1]]"',
+'movedarticleprotection'           => 'moved protection settings from "[[$2]]" to "[[$1]]"',
+'protect-title'                    => 'Change protection level for "$1"',
+'protect-title-notallowed'         => 'View protection level of "$1"',
+'prot_1movedto2'                   => '[[$1]] moved to [[$2]]',
+'protect-badnamespace-title'       => 'Non-protectable namespace',
+'protect-badnamespace-text'        => 'Pages in this namespace cannot be protected.',
+'protect-norestrictiontypes-text'  => 'This page cannot be protected as there are no restriction types available.',
+'protect-norestrictiontypes-title' => 'Non-protectable page',
+'protect-legend'                   => 'Confirm protection',
+'protectcomment'                   => 'Reason:',
+'protectexpiry'                    => 'Expires:',
+'protect_expiry_invalid'           => 'Expiry time is invalid.',
+'protect_expiry_old'               => 'Expiry time is in the past.',
+'protect-unchain-permissions'      => 'Unlock further protect options',
+'protect-text'                     => "Here you may view and change the protection level for the page '''$1'''.",
+'protect-locked-blocked'           => "You cannot change protection levels while blocked.
 Here are the current settings for the page '''$1''':",
-'protect-locked-dblock'       => "Protection levels cannot be changed due to an active database lock.
+'protect-locked-dblock'            => "Protection levels cannot be changed due to an active database lock.
 Here are the current settings for the page '''$1''':",
-'protect-locked-access'       => "Your account does not have permission to change page protection levels.
+'protect-locked-access'            => "Your account does not have permission to change page protection levels.
 Here are the current settings for the page '''$1''':",
-'protect-cascadeon'           => "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.
+'protect-cascadeon'                => "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.
 You can change this page's protection level, but it will not affect the cascading protection.",
-'protect-default'             => 'Allow all users',
-'protect-fallback'            => 'Require "$1" permission',
-'protect-level-autoconfirmed' => 'Block new and unregistered users',
-'protect-level-sysop'         => 'Administrators only',
-'protect-summary-desc'        => '[$1=$2] ($3)', # only translate this message to other languages if you have to change it
-'protect-summary-cascade'     => 'cascading',
-'protect-expiring'            => 'expires $1 (UTC)',
-'protect-expiring-local'      => 'expires $1',
-'protect-expiry-indefinite'   => 'indefinite',
-'protect-cascade'             => 'Protect pages included in this page (cascading protection)',
-'protect-cantedit'            => 'You cannot change the protection levels of this page because you do not have permission to edit it.',
-'protect-othertime'           => 'Other time:',
-'protect-othertime-op'        => 'other time',
-'protect-existing-expiry'     => 'Existing expiry time: $3, $2',
-'protect-otherreason'         => 'Other/additional reason:',
-'protect-otherreason-op'      => 'Other reason',
-'protect-dropdown'            => '*Common protection reasons
+'protect-default'                  => 'Allow all users',
+'protect-fallback'                 => 'Allow only users with "$1" permission',
+'protect-level-autoconfirmed'      => 'Allow only autoconfirmed users',
+'protect-level-sysop'              => 'Allow only administrators',
+'protect-summary-desc'             => '[$1=$2] ($3)', # only translate this message to other languages if you have to change it
+'protect-summary-cascade'          => 'cascading',
+'protect-expiring'                 => 'expires $1 (UTC)',
+'protect-expiring-local'           => 'expires $1',
+'protect-expiry-indefinite'        => 'indefinite',
+'protect-cascade'                  => 'Protect pages included in this page (cascading protection)',
+'protect-cantedit'                 => 'You cannot change the protection levels of this page because you do not have permission to edit it.',
+'protect-othertime'                => 'Other time:',
+'protect-othertime-op'             => 'other time',
+'protect-existing-expiry'          => 'Existing expiry time: $3, $2',
+'protect-otherreason'              => 'Other/additional reason:',
+'protect-otherreason-op'           => 'Other reason',
+'protect-dropdown'                 => '*Common protection reasons
 ** Excessive vandalism
 ** Excessive spamming
 ** Counter-productive edit warring
 ** High traffic page',
-'protect-edit-reasonlist'     => 'Edit protection reasons',
-'protect-expiry-options'      => '1 hour:1 hour,1 day:1 day,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite',
-'restriction-type'            => 'Permission:',
-'restriction-level'           => 'Restriction level:',
-'minimum-size'                => 'Min size',
-'maximum-size'                => 'Max size:',
-'pagesize'                    => '(bytes)',
+'protect-edit-reasonlist'          => 'Edit protection reasons',
+'protect-expiry-options'           => '1 hour:1 hour,1 day:1 day,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite',
+'restriction-type'                 => 'Permission:',
+'restriction-level'                => 'Restriction level:',
+'minimum-size'                     => 'Min size',
+'maximum-size'                     => 'Max size:',
+'pagesize'                         => '(bytes)',
 
 # Restrictions (nouns)
 'restriction-edit'   => 'Edit',
@@ -3330,7 +3336,7 @@ You can update redirects that point to the original title automatically.
 If you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].
 You are responsible for making sure that links continue to point where they are supposed to go.
 
-Note that the page will '''not''' be moved if there is already a page at the new title, unless it is empty or a redirect and has no past edit history.
+Note that the page will '''not''' be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.
 This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.
 
 '''Warning!'''
@@ -3341,7 +3347,7 @@ The old title will become a redirect page to the new title.
 Be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].
 You are responsible for making sure that links continue to point where they are supposed to go.
 
-Note that the page will '''not''' be moved if there is already a page at the new title, unless it is empty or a redirect and has no past edit history.
+Note that the page will '''not''' be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.
 This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.
 
 '''Warning!'''
@@ -3778,6 +3784,7 @@ This is probably caused by a link to a blacklisted external site.',
 '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-toolboxlink'            => 'Page information',
 'pageinfo-redirectsto'            => 'Redirects to',
 'pageinfo-redirectsto-info'       => 'info',
@@ -3786,6 +3793,10 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-protect-cascading'      => 'Protections are cascading from here',
 'pageinfo-protect-cascading-yes'  => 'Yes',
 'pageinfo-protect-cascading-from' => 'Protections are cascading from',
+'pageinfo-category-info'          => 'Category information',
+'pageinfo-category-pages'         => 'Number of pages',
+'pageinfo-category-subcats'       => 'Number of subcategories',
+'pageinfo-category-files'         => 'Number of files',
 
 # Skin names
 'skinname-standard'    => 'Classic', # only translate this message to other languages if you have to change it
@@ -4904,8 +4915,8 @@ This site is experiencing technical difficulties.',
 'newuserlog-create-entry'     => 'New user account', # do not translate or duplicate this message to other languages
 'newuserlog-create2-entry'    => 'created new account $1', # do not translate or duplicate this message to other languages
 'newuserlog-autocreate-entry' => 'Account created automatically', # do not translate or duplicate this message to other languages
-'rightslogentry'              => 'changed group membership for $1 from $2 to $3',
-'rightslogentry-autopromote'  => 'was automatically promoted from $2 to $3',
+'rightslogentry'              => 'changed group membership for $1 from $2 to $3', # do not translate or duplicate this message to other languages
+'rightslogentry-autopromote'  => 'was automatically promoted from $2 to $3', # do not translate or duplicate this message to other languages
 
 # Feedback
 'feedback-bugornote' => 'If you are ready to describe a technical problem in detail please [$1 report a bug].
@@ -4959,6 +4970,7 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'api-error-ok-but-empty'                  => 'Internal error: No response from server.',
 'api-error-overwrite'                     => 'Overwriting an existing file is not allowed.',
 'api-error-stashfailed'                   => 'Internal error: Server failed to store temporary file.',
+'api-error-publishfailed'                 => 'Internal error: Server failed to publish temporary file.',
 'api-error-timeout'                       => 'The server did not respond within the expected time.',
 'api-error-unclassified'                  => 'An unknown error occurred.',
 'api-error-unknown-code'                  => 'Unknown error: "$1".',
index bec7807..f19e10e 100644 (file)
@@ -31,6 +31,7 @@
  * @author Omnipaedista
  * @author Pedroca cerebral
  * @author Petrus Adamus
+ * @author Renardo
  * @author Smeira
  * @author ThomasPusch
  * @author Tlustulimu
@@ -1615,15 +1616,13 @@ Jen hazarde generita valoro por via uzo: $1',
 'right-sendemail' => 'Sendi retpoŝton al aliaj uzantoj',
 'right-passwordreset' => 'Vidi retpoŝtojn de pasvorta restarado.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Protokolo de uzanto-kreado',
+'newuserlogpagetext' => 'Jen protokolo de lastaj kreadoj de uzantoj.',
+
 # User rights log
 'rightslog' => 'Protokolo de uzanto-rajtoj',
 'rightslogtext' => 'Ĉi tio estas protokolo pri la ŝanĝoj de uzantorajtoj.',
-'rightslogentry' => 'ŝanĝis grupan membrecon por $1 de $2 al $3',
-'rightslogentry-autopromote' => 'estis aŭtomate altrangigita de $2 al $3',
-'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',
-'rightsnone' => '(nenia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'legi ĉi tiun paĝon',
@@ -2257,10 +2256,6 @@ Subtenataj {{PLURAL:$2|protokolo|protokoloj}}:: <code>$1</code> (ne aldonu ĉi t
 'activeusers-hidesysops' => 'Kaŝi administrantojn',
 'activeusers-noresult' => 'Neniuj uzantoj trovitaj.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Protokolo de uzanto-kreado',
-'newuserlogpagetext' => 'Jen protokolo de lastaj kreadoj de uzantoj.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gruprajtoj de uzantoj',
 'listgrouprights-summary' => 'Jen listo de uzanto-grupoj difinitaj en ĉi tiu vikio, kun ties asociaj atingrajtoj.
@@ -2397,6 +2392,8 @@ $UNWATCHURL
 
 Komentoj kaj plia helpo:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kreita',
+'changed' => 'ŝanĝita',
 
 # Delete
 'deletepage' => 'Forigi paĝon',
@@ -3241,6 +3238,7 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutoj}}',
 'hours' => '{{PLURAL:$1|$1 horo|$1 horoj}}',
 'days' => '{{PLURAL:$1|$1 tago|$1 tagoj}}',
+'months' => '{{PLURAL:$1|$1 monato|$1 monatoj}}',
 'ago' => 'antaŭ $1',
 'just-now' => 'ĵus nune',
 
@@ -4051,6 +4049,10 @@ Bildoj montriĝas en plena distingivo, aliaj dosiertipoj estas malfermataj rekte
 'logentry-newusers-create2' => '$1 kreis uzanton $3',
 'logentry-newusers-autocreate' => 'Konto $1 estis kreita aŭtomate',
 'newuserlog-byemail' => 'pasvorto sendita retpoŝte',
+'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',
+'rightsnone' => '(nenia)',
 
 # Feedback
 'feedback-bugornote' => 'Se vi pretas priskribi teknikan problemon detale, bonvolu [$1 raporti cimon].
index 41f2f80..5b643c2 100644 (file)
@@ -1514,7 +1514,7 @@ Esto no se puede deshacer.',
 'username' => '{{GENDER:$1|Nombre de usuario|Nombre de usuaria}}:',
 'uid' => 'ID de {{GENDER:$1|usuario|usuaria}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Miembro}} {{PLURAL:$1|del grupo|de los grupos}}:',
-'prefs-registration' => 'Hora de registro:',
+'prefs-registration' => 'Fecha y hora de registro:',
 'yourrealname' => 'Nombre real:',
 'yourlanguage' => 'Idioma:',
 'yourvariant' => 'Variante lingüística del contenido:',
@@ -1661,15 +1661,13 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'right-sendemail' => 'Enviar un correo electrónico a otros usuarios',
 'right-passwordreset' => 'Ver os correos electrónicos de restablecimiento de contraseñas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de creación de usuarios',
+'newuserlogpagetext' => 'Este es un registro de creación de usuarios.',
+
 # User rights log
 'rightslog' => 'Cambios de perfil de usuario',
 'rightslogtext' => 'Este es un registro de cambios en los permisos de usuarios.',
-'rightslogentry' => 'modificó los grupos a los que pertenece $1: de $2 a $3',
-'rightslogentry-autopromote' => 'fue promovido automáticamente desde $2 a $3',
-'logentry-rights-rights' => '$1 modificó los grupos a los que pertenece $3: de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 ha cambiado la pertenencia a grupos de $3',
-'logentry-rights-autopromote' => '$1 fue promocionado automáticamente de $4 a $5',
-'rightsnone' => '(ninguno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leer esta página',
@@ -2315,10 +2313,6 @@ Es necesario, por lo menos, un dominio de alto nivel, por ejemplo "*.org".<br />
 'activeusers-hidesysops' => 'Ocultar administradores',
 'activeusers-noresult' => 'No se encontraron usuarios.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de creación de usuarios',
-'newuserlogpagetext' => 'Este es un registro de creación de usuarios.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Permisos del grupo de usuarios',
 'listgrouprights-summary' => 'La siguiente es una lista de los grupos de usuario definidos en esta wiki y de sus privilegios de acceso asociados.
@@ -2449,6 +2443,8 @@ $UNWATCHURL
 
 Comentarios y asistencia adicional:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Borrar esta página',
@@ -2519,6 +2515,7 @@ Véase [[Special:ProtectedPages|la lista de páginas protegidas]] para ver las p
 'prot_1movedto2' => 'heredando la protección al trasladar [[$1]] a [[$2]]',
 'protect-badnamespace-title' => 'Espacio de nombres no protegible',
 'protect-badnamespace-text' => 'Las páginas de este espacio de nombres no pueden ser protegidas',
+'protect-norestrictiontypes-title' => 'Página no protegible',
 'protect-legend' => 'Confirmar protección',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Caducidad:',
@@ -3199,6 +3196,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra mágica|Palabras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría oculta|Categorías ocultas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Plantilla incluida|Plantillas incluidas}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Página incluida|Páginas incluidas}} ($1)',
 'pageinfo-toolboxlink' => 'Información de la página',
 'pageinfo-redirectsto' => 'Redirige a',
 'pageinfo-redirectsto-info' => 'Información',
@@ -3207,6 +3205,10 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-protect-cascading' => 'Protecciones en serie activadas',
 'pageinfo-protect-cascading-yes' => 'Sí',
 'pageinfo-protect-cascading-from' => 'Protecciones en serie activadas',
+'pageinfo-category-info' => 'Información de la categoría',
+'pageinfo-category-pages' => 'Número de páginas',
+'pageinfo-category-subcats' => 'Número de subcategorías',
+'pageinfo-category-files' => 'Número de archivos',
 
 # Skin names
 'skinname-standard' => 'Estándar',
@@ -3299,6 +3301,8 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'minutes' => '{{PLURAL:$1|un minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|una hora|$1 horas}}',
 'days' => '{{PLURAL:$1|un día|$1 días}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 año|$1 años}}',
 'ago' => 'hace $1',
 'just-now' => 'Ahora mismo',
 
@@ -4053,6 +4057,10 @@ Este sitio está experimentando dificultades técnicas.',
 'logentry-newusers-create2' => '$1 ha creado la cuenta de usuario $3',
 'logentry-newusers-autocreate' => 'La cuenta $1 fue creada automáticamente',
 'newuserlog-byemail' => 'contraseña enviada por correo electrónico',
+'logentry-rights-rights' => '$1 modificó los grupos a los que pertenece $3: de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha cambiado la pertenencia a grupos de $3',
+'logentry-rights-autopromote' => '$1 fue promocionado automáticamente de $4 a $5',
+'rightsnone' => '(ninguno)',
 
 # Feedback
 'feedback-bugornote' => 'Si estás preparado para describir en detalle un problema técnico, [$1 informa de un bug] por favor.
index be42f44..847affb 100644 (file)
@@ -1570,12 +1570,13 @@ See ei tohi olla pikem kui {{PLURAL:$1|üks märk|$1 märki}}.',
 'right-sendemail' => 'Saata teistele kasutajatele e-kirju',
 'right-passwordreset' => 'Vaadata parooli lähtestamise e-kirju',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kasutaja loomise logi',
+'newuserlogpagetext' => 'See logi sisaldab infot äsja loodud uute kasutajate kohta.',
+
 # User rights log
 'rightslog' => 'Kasutaja õiguste logi',
 'rightslogtext' => 'See on logi kasutajate õiguste muutuste kohta.',
-'rightslogentry' => 'andis kasutajale $1 järgmised õigused: $3; seni oli ta $2',
-'rightslogentry-autopromote' => 'sai automaatselt järgmised õigused: $3; seni oli ta $2',
-'rightsnone' => '(puudub)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'seda lehekülge lugeda',
@@ -2198,10 +2199,6 @@ Toetatud protokollid: <code>$1</code> (määramata protokolli korral vaikimisi h
 'activeusers-hidesysops' => 'Peida administraatorid',
 'activeusers-noresult' => 'Kasutajaid ei leidunud.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kasutaja loomise logi',
-'newuserlogpagetext' => 'See logi sisaldab infot äsja loodud uute kasutajate kohta.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kasutajarühma õigused',
 'listgrouprights-summary' => 'Siin on loetletud selle viki kasutajarühmad ja rühmaga seotud õigused.
@@ -2335,6 +2332,8 @@ Lehekülje kustutamiseks jälgimisloendist mine leheküljele $UNWATCHURL.
 
 Tagasiside ja abi:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'loonud lehekülje',
+'changed' => 'muutnud lehekülge',
 
 # Delete
 'deletepage' => 'Kustuta lehekülg',
@@ -3878,6 +3877,7 @@ Pilt kuvatakse algupärases suuruses, muu fail avatakse koheselt seostuva progra
 'logentry-newusers-create2' => '$1 lõi kasutajakonto $3',
 'logentry-newusers-autocreate' => 'Konto $1 loodi automaatselt',
 'newuserlog-byemail' => 'parool saadetud e-postiga',
+'rightsnone' => '(puudub)',
 
 # Feedback
 'feedback-bugornote' => 'Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].
index fde558f..56cb1f4 100644 (file)
@@ -1336,11 +1336,13 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'right-override-export-depth' => '5eko sakonerararteko loturiko orrialdeak barne esportatu',
 'right-sendemail' => 'Beste erabiltzaileei e-posta bidali',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Erabiltzaile erregistroa',
+'newuserlogpagetext' => 'Hau azken erabiltzaileen sorreren erregistroa da.',
+
 # User rights log
 'rightslog' => 'Erabiltzaile eskubideen erregistroa',
 'rightslogtext' => 'Erabiltzaile eskubideetan izandako aldaketen erregistroa da hau.',
-'rightslogentry' => '$1(r)en partaidetza aldatu da $2(e)tik $3(e)ra',
-'rightsnone' => '(bat ere ez)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'orrialde hau irakurri',
@@ -1867,10 +1869,6 @@ Baimendutako protokoloak: <code>$1</code> (protokoloa zehazten ez bada http:// h
 'activeusers-hidesysops' => 'Ezkutatu administratzaileak',
 'activeusers-noresult' => 'Ez da lankiderik aurkitu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Erabiltzaile erregistroa',
-'newuserlogpagetext' => 'Hau azken erabiltzaileen sorreren erregistroa da.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Erabiltzaile talde eskumenak',
 'listgrouprights-summary' => 'Ondorengo zerrendak wikian dauden lankide taldeak agertzen dira, beraien eskubideekin.
@@ -1990,6 +1988,8 @@ $UNWATCHURL
 
 Laguntza:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'sortu',
+'changed' => 'aldatu',
 
 # Delete
 'deletepage' => 'Orrialdea ezabatu',
@@ -3334,6 +3334,7 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'logentry-newusers-create' => '$1 wikilariak erabiltzaile kontu bat sortu du',
 'logentry-newusers-create2' => '$1 wikilariak $3 erabiltzaile kontu bat sortu du',
 'newuserlog-byemail' => 'pasahitza e-postaz bidali da',
+'rightsnone' => '(bat ere ez)',
 
 # Feedback
 'feedback-subject' => 'Gaia:',
index 04e411c..2d52418 100644 (file)
@@ -948,11 +948,12 @@ Amás premiti qu'otrus ussuárius contatin contigu pol mé la tu página d'ussu
 'right-userrights' => 'Eital los derechus de tolos usuárius',
 'right-siteadmin' => 'Atarugal i desatarugal la basi e datus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rustrihu de nuevus usuárius',
+
 # User rights log
 'rightslog' => 'Rustrihu e derechus de los usuárius',
 'rightslogtext' => 'Esti es un rustrihu e chambus enus derechus los usuárius.',
-'rightslogentry' => 'chambó el grupu al que preteneci $1: de $2 a $3',
-'rightsnone' => '(dengunu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leyel esta página',
@@ -1339,9 +1340,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Muestral',
 'listusers-noresult' => 'Nu s´alcuentró dengún usuáriu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rustrihu de nuevus usuárius',
-
 # Special:ListGroupRights
 'listgrouprights' => "Derechus del grupu d'usuárius",
 'listgrouprights-group' => 'Grupu',
@@ -1443,6 +1441,8 @@ Pa hazel chambus ena tu lista e seguimientu, vesita
 
 Ayua la Güiquipeya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criá',
+'changed' => 'chambau',
 
 # Delete
 'deletepage' => 'Esborral páhina',
@@ -2405,5 +2405,6 @@ Las imahin se muestran a resolución compreta; las demas crasis d'archivu s'ehec
 'revdelete-restricted' => 'las restricionis a los çahorilis án siu apricás',
 'revdelete-unrestricted' => 'las restricionis a los çahorilis án siu esborrás',
 'newuserlog-byemail' => 'consínia enviá pol e-mail',
+'rightsnone' => '(dengunu)',
 
 );
index 41a8e49..bb0931b 100644 (file)
@@ -562,6 +562,7 @@ $messages = array(
 'newwindow' => '(در پنجرهٔ جدید باز می‌شود)',
 'cancel' => 'لغو',
 'moredotdotdot' => 'بیشتر...',
+'morenotlisted' => 'ادامه لیست...',
 'mypage' => 'صفحه',
 'mytalk' => 'بحث',
 'anontalk' => 'بحث برای این آی‌پی',
@@ -951,6 +952,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی',
 'user-mail-no-addy' => 'تلاش برای ارسال نامه بدون یک آدرس رایانامه.',
+'user-mail-no-body' => 'تلاش برای فرستادن پست‌الکترونیک بی‌دلیل کوتاه یا خالی',
 
 # Change password dialog
 'resetpass' => 'تغییر گذرواژه',
@@ -1753,15 +1755,13 @@ $1",
 'right-sendemail' => 'ارسال رایانامه به دیگر کاربران',
 'right-passwordreset' => 'مشاهدهٔ نامه‌های تنظیم مجدد گذرواژه',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سیاههٔ ایجاد کاربر',
+'newuserlogpagetext' => 'این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.',
+
 # User rights log
 'rightslog' => 'سیاههٔ اختیارات کاربر',
 'rightslogtext' => 'این سیاههٔ تغییرات اختیارات کاربر است.',
-'rightslogentry' => 'عضویت $1 را از گروه $2 به $3 تغییر داد',
-'rightslogentry-autopromote' => 'به طور خودکار از $2 به $3 ارتقا یافت',
-'logentry-rights-rights' => '$1 عضویت $3 را از گروه $4 به $5 تغییر داد',
-'logentry-rights-rights-legacy' => '$1 گروه عضویت $3 را تغییر داد',
-'logentry-rights-autopromote' => '$1 به طور خودکار از $4 به $5 ارتقا یافت',
-'rightsnone' => '(هیچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خواندن این صفحه',
@@ -2391,7 +2391,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'linksearch-ok' => 'جستجو',
 'linksearch-text' => 'نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.
 حداقل یک دامنه سطح بالا ، به عنوان مثال "*.org" نیاز دارد.<br />
-پروتکل‌های پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است)',
+{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).',
 'linksearch-line' => '$1 از $2 پیوند دارد',
 'linksearch-error' => 'نشانه‌ها فقط در ابتدای نام میزبان اینترنتی می‌توانند استفاده شوند.',
 
@@ -2410,10 +2410,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'activeusers-hidesysops' => 'نهفتن مدیران',
 'activeusers-noresult' => 'کاربری پیدا نشد.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سیاههٔ ایجاد کاربر',
-'newuserlogpagetext' => 'این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'اختیارات گروه‌های کاربری',
 'listgrouprights-summary' => 'فهرست زیر شامل گروه‌های کاربری تعریف شده در این ویکی و اختیارات داده شده به آن‌ها است.
@@ -2479,8 +2475,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'watchnologin' => 'به سامانه وارد نشده‌اید',
 'watchnologintext' => 'برای تغییر فهرست پی‌گیری‌هایتان باید [[Special:UserLogin|به سامانه وارد شوید]].',
 'addwatch' => 'افزودن به فهرست پی‌گیری',
-'addedwatchtext' => "صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.
-تغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد؛ به‌علاوه، این صفحه، برای واضح‌تر دیده شدن در [[Special:RecentChanges|فهرست تغییرات اخیر]] به شکل '''پررنگ''' نمایش خواهد یافت.",
+'addedwatchtext' => 'صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.
+تغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد.',
 'removewatch' => 'حذف از فهرست پی‌گیری',
 'removedwatchtext' => 'صفحهٔ «[[:$1]]» از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.',
 'watch' => 'پی‌گیری',
@@ -2514,7 +2510,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 '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_deleted' => 'صفحهٔ $1 {{SITENAME}} در تاریخ $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 را برای نسخهٔ کنونی شاهده کنید.',
@@ -2547,6 +2543,8 @@ $PAGEINTRO $NEWPAGE
 
 بازخورد و کمک بیشتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ایجاد شده',
+'changed' => 'تغییر یافته',
 
 # Delete
 'deletepage' => 'حذف صفحه',
@@ -2621,6 +2619,8 @@ $PAGEINTRO $NEWPAGE
 'prot_1movedto2' => '[[$1]] به [[$2]] منتقل شد',
 'protect-badnamespace-title' => 'فضای نام بدون محافظت',
 'protect-badnamespace-text' => 'صفحه‌های موجود در این فضای نام، نمی‌توانند محافظت شوند.',
+'protect-norestrictiontypes-text' => 'امکان محافظت این صفحه به علت نبودن نوع محدودیت، مقدور نیست.',
+'protect-norestrictiontypes-title' => 'صفحهٔ غیرقابل محافظت',
 'protect-legend' => 'تأیید محافظت',
 'protectcomment' => 'دلیل:',
 'protectexpiry' => 'زمان سرآمدن:',
@@ -2637,8 +2637,8 @@ $PAGEINTRO $NEWPAGE
 'protect-cascadeon' => 'این صفحه  در حال حاضر محافظت شده‌است زیرا در {{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آن‌ها}} فعال است، گنجانده شده است.
 شما می‌توانید سطح محافظت این صفحه را تغییر بدهید اما این کار تاثیری بر محافظت آبشاری صفحه نخواهد گذاشت.',
 'protect-default' => 'همهٔ کاربرها',
-'protect-fallback' => 'سطح دسترسی «$1» لازم است',
-'protect-level-autoconfirmed' => 'بستن کاربران جدید و ثبت‌نام‌نکرده',
+'protect-fallback' => 'فقط به کاربرهایی که دسترسی «$1» دارند، اجازه داده می‌شود',
+'protect-level-autoconfirmed' => 'فقط به کاربرهای تائیدشده اجازه بده',
 'protect-level-sysop' => 'فقط مدیران',
 'protect-summary-cascade' => 'آبشاری',
 'protect-expiring' => 'زمان سرآمدن $1 (UTC)',
@@ -3285,6 +3285,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' => 'اطلاعات',
@@ -3293,6 +3294,10 @@ $1',
 'pageinfo-protect-cascading' => 'محافظت آبشاری از اینجا',
 'pageinfo-protect-cascading-yes' => 'بله',
 'pageinfo-protect-cascading-from' => 'محافظت آبشاری از',
+'pageinfo-category-info' => 'اطلاعات رده',
+'pageinfo-category-pages' => 'تعداد صفحه‌ها',
+'pageinfo-category-subcats' => 'تعداد زیررده‌ها',
+'pageinfo-category-files' => 'تعداد پرونده‌ها',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -3381,6 +3386,8 @@ $1',
 'minutes' => '{{PLURAL: $1|دقیقه|دقیقه}}',
 'hours' => '{{PLURAL: $1|ساعت|ساعت}}',
 'days' => '{{PLURAL: $1|روز|روز}}',
+'months' => '{{PLURAL:$1|$1 ماه|}}',
+'years' => '{{PLURAL:$1|$1 سال|}}',
 'ago' => '$1 پیش',
 'just-now' => 'هم‌اکنون',
 
@@ -4200,6 +4207,10 @@ $5
 'logentry-newusers-create2' => 'حساب کاربری $3 توسط $1 ایجاد شد',
 'logentry-newusers-autocreate' => 'حساب $1  به شکل خودکار ساخته شد',
 'newuserlog-byemail' => 'گذرواژه بوسیله رایانامه ارسال شد',
+'logentry-rights-rights' => '$1 عضویت $3 را از گروه $4 به $5 تغییر داد',
+'logentry-rights-rights-legacy' => '$1 گروه عضویت $3 را تغییر داد',
+'logentry-rights-autopromote' => '$1 به طور خودکار از $4 به $5 ارتقا یافت',
+'rightsnone' => '(هیچ)',
 
 # Feedback
 'feedback-bugornote' => 'اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$2 $3]» افزوده خواهد شد.',
index e68511e..9789e29 100644 (file)
@@ -1565,14 +1565,13 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'right-sendemail' => 'Lähettää sähköpostia muille käyttäjille',
 'right-passwordreset' => 'Tarkastella salasanan alustusviestejä',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uudet käyttäjät',
+'newuserlogpagetext' => 'Tämä on loki luoduista käyttäjätunnuksista.',
+
 # User rights log
 'rightslog' => 'Käyttöoikeusloki',
 'rightslogtext' => 'Tämä on loki käyttäjien käyttöoikeuksien muutoksista.',
-'rightslogentry' => 'muutti käyttäjän $1 oikeudet ryhmistä $2 ryhmiin $3',
-'rightslogentry-autopromote' => 'muutettiin automaattisesti ryhmistä $2 ryhmiin $3',
-'logentry-rights-rights' => '$1 muutti käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5',
-'logentry-rights-autopromote' => '$1 ylennettiin automaattisesti ryhmistä $4 ryhmiin $5',
-'rightsnone' => '(ei oikeuksia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lukea tätä sivua',
@@ -2204,10 +2203,6 @@ Vaaditaan vähintään ylätason verkkotunnus, esimerkiksi "*.org".<br />
 'activeusers-hidesysops' => 'Piilota ylläpitäjät',
 'activeusers-noresult' => 'Käyttäjiä ei löytynyt.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uudet käyttäjät',
-'newuserlogpagetext' => 'Tämä on loki luoduista käyttäjätunnuksista.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Käyttäjäryhmien oikeudet',
 'listgrouprights-summary' => 'Tämä lista sisältää tämän wikin käyttäjäryhmät sekä ryhmiin liitetyt käyttöoikeudet.
@@ -2341,6 +2336,8 @@ $UNWATCHURL
 
 Palaute ja lisäapu osoitteessa:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'luonut sivun',
+'changed' => 'muuttanut sivua',
 
 # Delete
 'deletepage' => 'Poista sivu',
@@ -2404,6 +2401,8 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'prot_1movedto2' => 'siirsi sivun [[$1]] uudelle nimelle [[$2]]',
 'protect-badnamespace-title' => 'Nimiavaruus ei suojattavissa',
 'protect-badnamespace-text' => 'Tämän nimiavaruuden sivuja ei voi suojata.',
+'protect-norestrictiontypes-text' => 'Tätä sivua ei voi suojata, koska mitään rajoitusvaihtoehtoja ei ole käytettävissä.',
+'protect-norestrictiontypes-title' => 'Ei suojattavissa oleva sivu',
 'protect-legend' => 'Suojaukset',
 'protectcomment' => 'Syy',
 'protectexpiry' => 'Vanhentuu',
@@ -2418,7 +2417,7 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'protect-default' => 'Salli kaikki käyttäjät',
 'protect-fallback' => 'Vaadi $1-oikeus',
 'protect-level-autoconfirmed' => 'Estä uudet ja kirjautumattomat käyttäjät',
-'protect-level-sysop' => 'Vain ylläpitäjät',
+'protect-level-sysop' => 'Salli vain ylläpitäjät',
 'protect-summary-cascade' => 'laajennettu',
 'protect-expiring' => 'vanhentuu $1 (UTC)',
 'protect-expiring-local' => 'vanhentuu $1',
@@ -3061,6 +3060,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Taikasana|Taikasanat}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Piilotettu luokka|Piilotetut luokat}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Sisällytetty malline|Sisällytetyt mallineet}} ($1)',
+'pageinfo-transclusions' => 'Sisällytetty {{PLURAL:$1|sivulle|sivuille}} ($1)',
 'pageinfo-toolboxlink' => 'Sivun tiedot',
 'pageinfo-redirectsto' => 'Ohjaus sivulle',
 'pageinfo-redirectsto-info' => 'tiedot',
@@ -3904,6 +3904,9 @@ Kuvat näytetään täysikokoisina. Muut tiedostot avataan niille määritetyss
 'logentry-newusers-create2' => '$1 loi käyttäjätunnuksen $3',
 'logentry-newusers-autocreate' => 'Käyttäjätunnus $1 luotiin automaattisesti',
 'newuserlog-byemail' => 'salasana lähetetty sähköpostitse',
+'logentry-rights-rights' => '$1 muutti käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5',
+'logentry-rights-autopromote' => '$1 ylennettiin automaattisesti ryhmistä $4 ryhmiin $5',
+'rightsnone' => '(ei oikeuksia)',
 
 # Feedback
 'feedback-bugornote' => 'Jos voit kuvailla teknisen ongelman tarkasti – [$1 ilmoita ohjelmointivirheestä].
diff --git a/languages/messages/MessagesFiu_vro.php b/languages/messages/MessagesFiu_vro.php
deleted file mode 100644 (file)
index 9407647..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Võro
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- * @comment Deprecated language code. Falls back to 'vro'.
- */
-
-$fallback = 'vro, et';
index 0af0e8d..c449f1e 100644 (file)
@@ -1285,12 +1285,13 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'right-sendemail' => 'Send t-post til aðrir brúkarar',
 'right-passwordreset' => 'Sí teldupostar til nullstilling av loyniorði',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brúkara logg',
+'newuserlogpagetext' => 'Hetta er ein listi yvir seinast stovnaðu brúkarar.',
+
 # User rights log
 'rightslog' => 'Rættindaloggur',
 'rightslogtext' => 'Hetta er ein loggur sum vísir broytingar í brúkararættindum.',
-'rightslogentry' => 'broyttar bólka limaskap fyri $1 frá $2 til $3',
-'rightslogentry-autopromote' => 'varð sjálvvirkandi fluttur upp frá $2 til $3',
-'rightsnone' => '(ongin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'les hesa síðu',
@@ -1685,10 +1686,6 @@ Sí eisini [[Special:WantedCategories|ynsktir bólkar]].',
 'activeusers-hidesysops' => 'Fjal umboðsstjórar (administratorar)',
 'activeusers-noresult' => 'Ongir brúkarar funnir.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brúkara logg',
-'newuserlogpagetext' => 'Hetta er ein listi yvir seinast stovnaðu brúkarar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brúkara bólka rættindi',
 'listgrouprights-summary' => 'Henda síða vísir ein lista av brúkarabólkum, sum eru útgreinaðir á hesi wiki og rættindini hjá teimum einstøku bólkunum.
@@ -1762,6 +1759,7 @@ Vilt tú flyta síðuna undan tínum eftirliti, kanst tú trýsta á \"Strika ef
 'unwatching' => 'Strikar eftirlit...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}}brúkari',
+'created' => 'stovnað',
 
 # Delete
 'deletepage' => 'Strika síðu',
@@ -2252,6 +2250,9 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'compare-page1' => 'Síða 1',
 'compare-page2' => 'Síða 2',
 
+# New logging system
+'rightsnone' => '(ongin)',
+
 # Search suggestions
 'searchsuggest-search' => 'Leita',
 
index c797979..b6eeb76 100644 (file)
@@ -24,6 +24,7 @@
  * @author Dereckson
  * @author Diti
  * @author Dodoïste
+ * @author Drongou
  * @author Elfix
  * @author Enzoreg
  * @author Erkethan
@@ -41,6 +42,7 @@
  * @author Houcinee1
  * @author Hégésippe Cormier
  * @author IAlex
+ * @author Isildur
  * @author Jagwar
  * @author Jean-Frédéric
  * @author JeanVoisin
@@ -511,6 +513,7 @@ $messages = array(
 'newwindow' => '(ouvre une nouvelle fenêtre)',
 'cancel' => 'Annuler',
 'moredotdotdot' => 'Plus...',
+'morenotlisted' => 'Davantage non listé…',
 'mypage' => 'Page',
 'mytalk' => 'Discussion',
 'anontalk' => 'Discussion avec cette adresse IP',
@@ -696,12 +699,12 @@ Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{in
 # General errors
 'error' => 'Erreur',
 'databaseerror' => 'Erreur de la base de données',
-'dberrortext' => 'Une erreur de syntaxe de la requête dans la base de données est survenue.
+'dberrortext' => "Une erreur de syntaxe de la requête dans la base de données est survenue.
 Ceci peut indiquer un bogue dans le logiciel.
 La dernière requête traitée par la base de données était :
 <blockquote><code>$1</code></blockquote>
 depuis la fonction « <code>$2</code> ».
-La base de données a renvoyé l’erreur « <samp>$3 : $4</samp> ».',
+La base de données a renvoyé l'erreur « <samp>$3 : $4</samp> ».",
 'dberrortextcl' => "Une requête dans la base de données comporte une erreur de syntaxe.
 La dernière requête émise était :
 « $1 »
@@ -883,6 +886,7 @@ Veuillez attendre avant d'essayer à nouveau.",
 # E-mail sending
 'php-mail-error-unknown' => 'Erreur inconnue dans la fonction mail() de PHP.',
 'user-mail-no-addy' => "Tenté d'envoyer un courriel sans adresse de courriel",
+'user-mail-no-body' => "Essai d'envoi d'un courriel avec un corps vide ou déraisonnablement court.",
 
 # Change password dialog
 'resetpass' => 'Changer de mot de passe',
@@ -1041,8 +1045,8 @@ Cela survient en général en suivant un lien historique obsolète vers une page
 Vous pouvez trouver plus de détails dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].",
 'userpage-userdoesnotexist' => "Le compte utilisateur « <nowiki>$1</nowiki> » n'est pas enregistré. Veuillez vérifier que vous voulez créer cette page.",
 'userpage-userdoesnotexist-view' => "Le compte utilisateur « $1 » n'est pas enregistré.",
-'blocked-notice-logextract' => 'Cet utilisateur est actuellement bloqué.
-La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
+'blocked-notice-logextract' => "Cet utilisateur est actuellement bloqué.
+La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
 'clearyourcache' => "'''Note :''' après avoir enregistré vos préférences, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
 * '''Firefox / Safari :''' Maintenez la touche ''Maj'' (''Shift'') en cliquant sur le bouton ''Actualiser'' ou pressez ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac) ;
 * '''Google Chrome :''' Appuyez sur ''Ctrl-Maj-R'' (''⌘-Shift-R'' sur un Mac) ;
@@ -1213,10 +1217,10 @@ Elle a peut-être été effacée ou renommée.
 Essayez de [[Special:Search|rechercher sur le wiki]] pour trouver des pages en rapport.",
 
 # Revision deletion
-'rev-deleted-comment' => "(résumé d'édition enlevé)",
-'rev-deleted-user' => "(nom d'utilisateur supprimé)",
-'rev-deleted-event' => '(entrée supprimée)',
-'rev-deleted-user-contribs' => "[nom d'utilisateur ou adresse IP supprimée - modification cachée sur les contributions]",
+'rev-deleted-comment' => '(résumé de modification retiré)',
+'rev-deleted-user' => '(nom d’utilisateur retiré)',
+'rev-deleted-event' => '(entrée retirée)',
+'rev-deleted-user-contribs' => '[nom d’utilisateur ou adresse IP retiré - modification masquée sur les contributions]',
 'rev-deleted-text-permission' => "Cette version de la page a été '''effacée'''.
 Des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].",
 'rev-deleted-text-unhide' => "Cette version de la page a été '''effacée'''.
@@ -1272,7 +1276,7 @@ Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu
 'revdelete-radio-same' => '(ne pas changer)',
 'revdelete-radio-set' => 'Oui',
 'revdelete-radio-unset' => 'Non',
-'revdelete-suppress' => 'Cacher les données également pour les administrateurs',
+'revdelete-suppress' => 'Masquer également les données pour les administrateurs',
 'revdelete-unsuppress' => 'Enlever les restrictions sur les versions restaurées',
 'revdelete-log' => 'Motif :',
 'revdelete-submit' => 'Appliquer {{PLURAL:$1|à la révision sélectionnée|aux révisions sélectionnées}}',
@@ -1657,15 +1661,13 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'right-sendemail' => 'Envoyer un courriel aux autres utilisateurs',
 'right-passwordreset' => 'Voir les courriels de réinitialisation des mots de passe',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Journal des créations de comptes utilisateur',
+'newuserlogpagetext' => "Cette page affiche l'historique des créations de comptes utilisateur.",
+
 # User rights log
 'rightslog' => "Journal des modifications de droits d'utilisateurs",
 'rightslogtext' => "Voici l'historique des modifications des droits des utilisateurs.",
-'rightslogentry' => "a modifié les droits de l'utilisateur « $1 » de $2 à $3",
-'rightslogentry-autopromote' => 'a été automatiquement promu de $2 à $3',
-'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',
-'rightsnone' => '(aucun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lire cette page',
@@ -1681,7 +1683,7 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'action-upload' => 'importer ce fichier',
 'action-reupload' => 'écraser ce fichier existant',
 'action-reupload-shared' => 'outrepasser localement ce fichier présent sur un dépôt partagé',
-'action-upload_by_url' => 'importer ce fichier à partir d’une adresse URL',
+'action-upload_by_url' => "importer ce fichier à partir d'une adresse URL",
 'action-writeapi' => "utiliser l‘API d'écriture",
 'action-delete' => 'supprimer cette page',
 'action-deleterevision' => 'supprimer cette version',
@@ -2127,7 +2129,7 @@ N'oubliez pas de vérifier s'il n'y a pas d'autres liens vers les modèles avant
 'statistics-articles' => 'Pages de contenu',
 'statistics-pages' => 'Pages',
 'statistics-pages-desc' => 'Toutes les pages du wiki, y compris les pages de discussion, les redirections, etc.',
-'statistics-files' => 'Fichers importés',
+'statistics-files' => 'Fichiers importés',
 'statistics-edits' => "Modifications de pages depuis l'installation de {{SITENAME}}",
 'statistics-edits-average' => 'Nombre moyen de modifications par page',
 'statistics-views-total' => 'Visites',
@@ -2316,10 +2318,6 @@ Ils nécessitent au moins un domaine de niveau supérieur, par exemple « *.org
 'activeusers-hidesysops' => 'Masquer les administrateurs',
 'activeusers-noresult' => 'Aucun utilisateur trouvé.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Journal des créations de comptes utilisateur',
-'newuserlogpagetext' => "Cette page affiche l'historique des créations de comptes utilisateur.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Droits des groupes d'utilisateurs",
 'listgrouprights-summary' => "Cette page contient une liste des groupes définis sur ce wiki ainsi que les droits d'accès qui leur sont associés.
@@ -2454,6 +2452,8 @@ $UNWATCHURL
 
 Retour et assistance :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'créée',
+'changed' => 'modifiée',
 
 # Delete
 'deletepage' => 'Supprimer la page',
@@ -2526,6 +2526,8 @@ Consultez la [[Special:ProtectedPages|liste des pages protégées]] pour la list
 'prot_1movedto2' => '[[$1]] renommé en [[$2]]',
 'protect-badnamespace-title' => 'Espace de noms non protégeable',
 'protect-badnamespace-text' => 'Les pages dans cet espace de noms ne peuvent pas être protégées.',
+'protect-norestrictiontypes-text' => "Cette page ne peut pas être protégée car il n'y a pas de type de restriction disponible.",
+'protect-norestrictiontypes-title' => 'Page non protégeable',
 'protect-legend' => 'Confirmer la protection',
 'protectcomment' => 'Motif :',
 'protectexpiry' => "Date d'expiration :",
@@ -2541,9 +2543,9 @@ Voici les réglages actuels de la page '''$1''' :",
 Voici les réglages actuels de la page '''$1''' :",
 'protect-cascadeon' => "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
 'protect-default' => 'Autoriser tous les utilisateurs',
-'protect-fallback' => 'Nécessite la permission « $1 »',
-'protect-level-autoconfirmed' => 'Bloquer les nouveaux utilisateurs et les utilisateurs anonymes',
-'protect-level-sysop' => 'Administrateurs uniquement',
+'protect-fallback' => 'Autoriser uniquement les utilisateurs avec le droit « $1 »',
+'protect-level-autoconfirmed' => 'Autoriser uniquement les utilisateurs auto-confirmés',
+'protect-level-sysop' => 'Autoriser uniquement les administrateurs',
 'protect-summary-cascade' => 'protection en cascade',
 'protect-expiring' => 'expire le $1 (UTC)',
 'protect-expiring-local' => 'expire le $1',
@@ -2643,7 +2645,7 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contributions de l’{{GENDER:$1|utilisateur|utilisatrice}}',
+'contributions' => "Contributions de l'{{GENDER:$1|utilisateur|utilisatrice}}",
 'contributions-title' => "Liste des contributions de l'utilisateur $1",
 'mycontris' => 'Contributions',
 'contribsub2' => 'Pour $1 ($2)',
@@ -2654,18 +2656,18 @@ $1',
 
 'sp-contributions-newbies' => 'Ne montrer que les contributions des nouveaux utilisateurs',
 'sp-contributions-newbies-sub' => 'Parmi les nouveaux comptes',
-'sp-contributions-newbies-title' => 'Contributions d’utilisateurs parmi les nouveaux comptes',
+'sp-contributions-newbies-title' => "Contributions d'utilisateurs parmi les nouveaux comptes",
 'sp-contributions-blocklog' => 'journal des blocages',
 'sp-contributions-deleted' => 'contributions supprimées',
 'sp-contributions-uploads' => 'imports',
 'sp-contributions-logs' => 'journaux',
 'sp-contributions-talk' => 'discuter',
 'sp-contributions-userrights' => 'gérer les droits',
-'sp-contributions-blocked-notice' => 'Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
-'sp-contributions-blocked-notice-anon' => 'Cette adresse IP est actuellement bloquée.
-La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
+'sp-contributions-blocked-notice' => "Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
+'sp-contributions-blocked-notice-anon' => "Cette adresse IP est actuellement bloquée.
+La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
 'sp-contributions-search' => 'Rechercher les contributions',
-'sp-contributions-username' => 'Adresse IP ou nom d’utilisateur :',
+'sp-contributions-username' => "Adresse IP ou nom d'utilisateur :",
 'sp-contributions-toponly' => 'Ne montrer que les contributions qui sont les dernières des articles',
 'sp-contributions-submit' => 'Rechercher',
 
@@ -2675,7 +2677,7 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 'whatlinkshere-page' => 'Page :',
 'linkshere' => "Les pages ci-dessous contiennent un lien vers '''[[:$1]]''' :",
 'nolinkshere' => "Aucune page ne contient de lien vers '''[[:$1]]'''.",
-'nolinkshere-ns' => "Aucune page ne contient de lien vers '''[[:$1]]''' dans lespace de noms choisi.",
+'nolinkshere-ns' => "Aucune page ne contient de lien vers '''[[:$1]]''' dans l'espace de noms choisi.",
 'isredirect' => 'page de redirection',
 'istemplate' => 'inclusion',
 'isimage' => 'lien vers le fichier',
@@ -2690,38 +2692,38 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 
 # Block/unblock
 'autoblockid' => 'Blocage automatique #$1',
-'block' => 'Bloquer l’utilisateur',
+'block' => "Bloquer l'utilisateur",
 'unblock' => "Débloquer l'utilisateur",
-'blockip' => 'Bloquer l’utilisateur',
-'blockip-title' => 'Bloquer l’utilisateur',
-'blockip-legend' => 'Bloquer l’utilisateur',
-'blockiptext' => 'Utilisez le formulaire ci-dessous pour bloquer l’accès aux modifications faites à partir d’une adresse IP spécifique ou d’un nom d’utilisateur.
+'blockip' => "Bloquer l'utilisateur",
+'blockip-title' => "Bloquer l'utilisateur",
+'blockip-legend' => "Bloquer l'utilisateur",
+'blockiptext' => "Utilisez le formulaire ci-dessous pour bloquer l'accès aux modifications faites à partir d'une adresse IP spécifique ou d'un nom d'utilisateur.
 Une telle mesure ne devrait être prise que pour prévenir le vandalisme et en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].
-Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).',
+Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).",
 'ipadressorusername' => "Adresse IP ou nom d'utilisateur :",
 'ipbexpiry' => 'Durée avant expiration :',
 'ipbreason' => 'Motif :',
 'ipbreasonotherlist' => 'Autre motif',
-'ipbreason-dropdown' => '* Motifs de blocage les plus fréquents
+'ipbreason-dropdown' => "* Motifs de blocage les plus fréquents
 ** Insertion de fausses informations
 ** Suppression injustifiée de contenu des pages
 ** Insertion répétée de liens externes publicitaires (pollupostage)
 ** Insertion de contenu sans aucun sens et de déchets dans les pages
-** Tentative dintimidation ou harcèlement
-** Abus dutilisation de comptes multiples
-** Nom d’utilisateur inacceptable, injurieux ou diffamant',
+** Tentative d'intimidation ou harcèlement
+** Abus d'utilisation de comptes multiples
+** Nom d'utilisateur inacceptable, injurieux ou diffamant",
 'ipb-hardblock' => 'Empêcher les utilisateurs connectés de modifier en utilisant cette adresse IP',
 'ipbcreateaccount' => 'Empêcher la création de compte',
-'ipbemailban' => 'Empêcher l’utilisateur d’envoyer des courriels',
-'ipbenableautoblock' => 'Bloquer automatiquement la dernière adresse IP utilisée par l’utilisateur et toutes ses IPs ultérieures qu’il pourrait essayer',
+'ipbemailban' => "Empêcher l'utilisateur d'envoyer des courriels",
+'ipbenableautoblock' => "Bloquer automatiquement la dernière adresse IP utilisée par l'utilisateur et toutes ses IPs ultérieures qu'il pourrait essayer",
 'ipbsubmit' => 'Bloquer cet utilisateur',
 'ipbother' => 'Autre durée :',
 'ipboptions' => '2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 semaine:1 week,2 semaines:2 weeks,1 mois:1 month,3 mois:3 months,6 mois:6 months,1 an:1 year,indéfiniment:infinite',
 'ipbotheroption' => 'autre',
 'ipbotherreason' => 'Motif différent ou supplémentaire :',
-'ipbhidename' => 'Masquer le nom d’utilisateur des modifications et des listes',
+'ipbhidename' => "Masquer le nom d'utilisateur des modifications et des listes",
 'ipbwatchuser' => 'Suivre les pages utilisateur et de discussion de cet utilisateur',
-'ipb-disableusertalk' => 'Empêcher cet utilisateur de modifier sa propre page de discussion pendant la durée de son blocage',
+'ipb-disableusertalk' => 'Empêcher l’utilisateur de modifier sa page de discussion pendant le blocage',
 'ipb-change-block' => 'Bloquer à nouveau cet utilisateur avec ces paramètres',
 'ipb-confirm' => 'Confirmer le blocage',
 'badipaddress' => 'Adresse IP incorrecte',
@@ -2729,7 +2731,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />
 Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.',
 'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain de vouloir faire cela ?',
-'ipb-confirmhideuser' => 'Vous êtes sur le point de bloquer un utilisateur avec « cacher l’utilisateur » activé. Cela supprime le nom de l’utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?',
+'ipb-confirmhideuser' => "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?",
 'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut',
 'ipb-unblock-addr' => 'Débloquer $1',
 'ipb-unblock' => 'Débloquer un compte utilisateur ou une adresse IP',
@@ -2778,9 +2780,9 @@ Le motif fourni pour le blocage de $1 est : « $2 ».',
 'blocklog-showsuppresslog' => 'Cet utilisateur a été bloqué et caché précédemment. Le journal des suppressions est disponible ci-dessous :',
 'blocklogentry' => 'a bloqué [[$1]] ; expiration : $2 $3',
 'reblock-logentry' => 'a modifié les paramètres du blocage de [[$1]] avec une expiration au $2 $3',
-'blocklogtext' => 'Ceci est le journal des actions de blocages et déblocages d’utilisateurs.
+'blocklogtext' => "Ceci est le journal des actions de blocages et déblocages d'utilisateurs.
 Les adresses IP automatiquement bloquées ne sont pas listées.
-Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.',
+Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.",
 'unblocklogentry' => 'a débloqué $1',
 'block-log-flags-anononly' => 'utilisateurs anonymes seulement',
 'block-log-flags-nocreate' => 'création de compte interdite',
@@ -2844,7 +2846,7 @@ Pour bloquer ou débloquer la base de données, il doit être accessible par le
 'move-page-legend' => 'Renommer une page',
 'movepagetext' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom. L'ancien titre deviendra une page de redirection vers le nouveau titre. Vous pouvez mettre à jour automatiquement les redirections actuelles qui pointent vers le titre original. Si vous choisissez de ne pas le faire, assurez-vous de vérifier toute [[Special:DoubleRedirects|double redirection]] ou [[Special:BrokenRedirects|redirection cassée]]. Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.
 
-Notez que la page ne sera '''pas''' renommée s'il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d'origine si le déplacement s'avère erroné.
+Notez que la page ne sera '''pas''' renommée s'il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est une simple redirection. Ceci permet de renommer une page vers sa position d'origine si le déplacement s'avère erroné.
 
 '''Attention !'''
 Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d'en avoir compris les conséquences avant de continuer.",
@@ -3209,6 +3211,7 @@ Permet de rétablir la version précédente et d'ajouter un motif dans la boîte
 'pageinfo-magic-words' => '{{PLURAL:$1|Mot magique|Mots magiques}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Page traduite|Pages traduites}} sur ($1)',
 'pageinfo-toolboxlink' => 'Information sur la page',
 'pageinfo-redirectsto' => 'Rediriger vers',
 'pageinfo-redirectsto-info' => 'info',
@@ -3217,6 +3220,10 @@ Permet de rétablir la version précédente et d'ajouter un motif dans la boîte
 'pageinfo-protect-cascading' => "Les protections sont déduites d'ici",
 'pageinfo-protect-cascading-yes' => 'Oui',
 'pageinfo-protect-cascading-from' => 'Les protections sont déduites depuis',
+'pageinfo-category-info' => 'Informations sur la catégorie',
+'pageinfo-category-pages' => 'Nombre de pages',
+'pageinfo-category-subcats' => 'Nombre de sous-catégories',
+'pageinfo-category-files' => 'Nombre de fichiers',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3305,6 +3312,8 @@ Si vous l'exécutez, votre système peut être compromis.",
 'minutes' => '{{PLURAL:$1|$1 minute|$1 minutes}}',
 'hours' => '{{PLURAL:$1|$1 heure|$1 heures}}',
 'days' => '{{PLURAL:$1|$1 jour|$1 jours}}',
+'months' => '{{PLURAL:$1|$1 mois}}',
+'years' => '{{PLURAL:$1|$1 an|$1 ans}}',
 'ago' => 'Il y a $1',
 'just-now' => "à l'instant",
 
@@ -3333,6 +3342,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 * gpslatitude
 * gpslongitude
 * gpsaltitude",
+'metadata-langitem' => "'''$2&nbsp;:''' $1",
 
 # EXIF tags
 'exif-imagewidth' => 'Largeur',
@@ -3805,27 +3815,27 @@ Ce code de confirmation expirera le $4.
 Si le compte ne vous appartient PAS, suivez plutôt ce lien pour annuler la confirmation de l'adresse de courriel :
 
 $5",
-'confirmemail_invalidated' => 'Confirmation de l’adresse courriel annulée',
-'invalidateemail' => 'Annuler la confirmation de l’adresse de courriel',
+'confirmemail_invalidated' => "Confirmation de l'adresse courriel annulée",
+'invalidateemail' => "Annuler la confirmation de l'adresse de courriel",
 
 # Scary transclusion
 'scarytranscludedisabled' => '[La transclusion interwiki est désactivée]',
 'scarytranscludefailed' => '[La récupération de modèle a échoué pour $1]',
 'scarytranscludefailed-httpstatus' => '[Échec de la récupération du modèle pour  $1 : HTTP  $2 ]',
-'scarytranscludetoolong' => '[L’URL est trop longue]',
+'scarytranscludetoolong' => "[L'URL est trop longue]",
 
 # Delete conflict
 'deletedwhileediting' => "'''Attention''' : cette page a été supprimée après que vous avez commencé à la modifier !",
-'confirmrecreate' => "L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l’éditer, pour le motif suivant :
+'confirmrecreate' => "L'utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l'éditer, pour le motif suivant :
 : ''$2''
 Veuillez confirmer que vous désirez réellement recréer cette page.",
-'confirmrecreate-noreason' => 'L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l’éditer. Veuillez confirmer que vous désirez réellement recréer cette page.',
+'confirmrecreate-noreason' => "L'utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l'éditer. Veuillez confirmer que vous désirez réellement recréer cette page.",
 'recreate' => 'Recréer',
 
 # action=purge
 'confirm_purge_button' => 'Confirmer',
 'confirm-purge-top' => 'Voulez-vous rafraîchir cette page (purger le cache) ?',
-'confirm-purge-bottom' => 'Purger une page l’efface du cache de rendu et force sa dernière version à être régénérée et affichée.',
+'confirm-purge-bottom' => "Purger une page l'efface du cache de rendu et force sa dernière version à être régénérée et affichée.",
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Valider',
@@ -3868,18 +3878,23 @@ Veuillez confirmer que vous désirez réellement recréer cette page.",
 'size-kilobytes' => '$1 Kio',
 'size-megabytes' => '$1 Mio',
 'size-gigabytes' => '$1 Gio',
+'size-terabytes' => '$1 Tio',
+'size-petabytes' => '$1 Pio',
+'size-exabytes' => '$1 Eio',
+'size-zetabytes' => '$1 Zio',
+'size-yottabytes' => '$1 Yio',
 
 # Live preview
 'livepreview-loading' => 'Chargement...',
 'livepreview-ready' => 'Chargement … terminé !',
-'livepreview-failed' => 'L’aperçu rapide a échoué !
-Essayez la prévisualisation normale.',
+'livepreview-failed' => "L'aperçu rapide a échoué !
+Essayez la prévisualisation normale.",
 'livepreview-error' => 'Impossible de se connecter : $1 « $2 ».
 Essayez la prévisualisation normale.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Les modifications datant de moins de $1 seconde{{PLURAL:$1||s}} peuvent ne pas apparaître dans cette liste.',
-'lag-warn-high' => 'En raison d’un retard important du serveur de base de données, les modifications datant de moins de $1 seconde{{PLURAL:$1||s}} peuvent ne pas apparaître dans cette liste.',
+'lag-warn-high' => "En raison d'un retard important du serveur de base de données, les modifications datant de moins de $1 seconde{{PLURAL:$1||s}} peuvent ne pas apparaître dans cette liste.",
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Votre liste de suivi contient {{PLURAL:$1|un titre|$1 titres}}, sans compter les pages de discussion.',
@@ -3893,9 +3908,9 @@ Vous pouvez aussi [[Special:EditWatchlist/raw|modifier la liste en mode brut]].'
 'watchlistedit-normal-done' => '{{PLURAL:$1|Un titre a été enlevé|$1 titres ont été enlevés}} de votre liste de suivi :',
 'watchlistedit-raw-title' => 'Modifier la liste de suivi en mode brut',
 'watchlistedit-raw-legend' => 'Modification de la liste de suivi en mode brut',
-'watchlistedit-raw-explain' => 'Les titres de votre liste de suivi sont affichés ci-dessous et peuvent être modifiés en les ajoutant ou les retirant de la liste (un titre par ligne).
+'watchlistedit-raw-explain' => "Les titres de votre liste de suivi sont affichés ci-dessous et peuvent être modifiés en les ajoutant ou les retirant de la liste (un titre par ligne).
 Lorsque vous avez fini, cliquez sur le bouton « {{int:Watchlistedit-raw-submit}} » en bas.
-Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
+Vous pouvez aussi [[Special:EditWatchlist|utiliser l'éditeur normal]].",
 'watchlistedit-raw-titles' => 'Titres :',
 'watchlistedit-raw-submit' => 'Mettre à jour la liste de suivi',
 'watchlistedit-raw-done' => 'Votre liste de suivi a été mise à jour.',
@@ -3965,23 +3980,23 @@ Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])',
 
 # Core parser functions
-'unknown_extension_tag' => 'Balise d’extension « $1 » inconnue',
+'unknown_extension_tag' => "Balise d'extension « $1 » inconnue",
 'duplicate-defaultsort' => 'Attention : la clé de tri par défaut « $2 » écrase la précédente « $1 ».',
 
 # Special:Version
 'version' => 'Version',
 'version-extensions' => 'Extensions installées',
 'version-specialpages' => 'Pages spéciales',
-'version-parserhooks' => 'Greffons de l’analyseur syntaxique',
+'version-parserhooks' => "Greffons de l'analyseur syntaxique",
 'version-variables' => 'Variables',
 'version-antispam' => 'Prévention du spam',
 'version-skins' => 'Habillages',
 'version-other' => 'Divers',
 'version-mediahandlers' => 'Manipulateurs de médias',
 'version-hooks' => 'Greffons',
-'version-extension-functions' => 'Fonctions d’extension internes',
-'version-parser-extensiontags' => 'Balises étendues de l’analyseur syntaxique',
-'version-parser-function-hooks' => 'Fonctions étendues de l’analyseur syntaxique',
+'version-extension-functions' => "Fonctions d'extension internes",
+'version-parser-extensiontags' => "Balises étendues de l'analyseur syntaxique",
+'version-parser-function-hooks' => "Fonctions étendues de l'analyseur syntaxique",
 'version-hook-name' => 'Nom du greffon',
 'version-hook-subscribedby' => 'Abonnés :',
 'version-version' => '(version $1)',
@@ -3989,37 +4004,37 @@ Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
 'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'autres',
 'version-credits-summary' => 'Nous tenons à remercier les personnes suivantes pour leur contribution à  [[Special:Version|MediaWiki]].',
-'version-license-info' => 'MediaWiki est un logiciel libre, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
+'version-license-info' => "MediaWiki est un logiciel libre, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
 
-MediaWiki est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D’ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
+MediaWiki est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
 
-Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].',
+Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].",
 'version-software' => 'Logiciels installés',
 'version-software-product' => 'Produit',
 'version-software-version' => 'Version',
-'version-entrypoints' => 'URL des points d’entrée',
-'version-entrypoints-header-entrypoint' => 'Point d’entrée',
+'version-entrypoints' => "URL des points d'entrée",
+'version-entrypoints-header-entrypoint' => "Point d'entrée",
 'version-entrypoints-header-url' => 'URL',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Chemin d’article]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Chemin de script]',
 
 # Special:FilePath
-'filepath' => 'Chemin d’accès du fichier',
+'filepath' => "Chemin d'accès du fichier",
 'filepath-page' => 'Fichier :',
 'filepath-submit' => 'Aller',
-'filepath-summary' => 'Cette page spéciale retourne le chemin d’accès complet d’un fichier.
-Les images sont montrées dans leur pleine résolution, les autres fichiers sont chargés et démarrés directement avec leur programme associé.',
+'filepath-summary' => "Cette page spéciale retourne le chemin d'accès complet d'un fichier.
+Les images sont montrées dans leur pleine résolution, les autres fichiers sont chargés et démarrés directement avec leur programme associé.",
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Recherche de doublons',
-'fileduplicatesearch-summary' => 'Recherche des copies de fichiers identiques d’après leur empreinte de hachage.',
+'fileduplicatesearch-summary' => "Recherche des copies de fichiers identiques d'après leur empreinte de hachage.",
 'fileduplicatesearch-legend' => 'Rechercher un doublon',
 'fileduplicatesearch-filename' => 'Nom du fichier :',
 'fileduplicatesearch-submit' => 'Rechercher',
 'fileduplicatesearch-info' => '$1 × $2 pixels<br />Taille du fichier : $3<br />Type MIME : $4',
-'fileduplicatesearch-result-1' => 'Le fichier « $1 » n’a aucun doublon.',
+'fileduplicatesearch-result-1' => "Le fichier « $1 » n'a aucun doublon.",
 'fileduplicatesearch-result-n' => 'Le fichier « $1 » a {{PLURAL:$2|1 doublon|$2 doublons}}.',
-'fileduplicatesearch-noresults' => 'Aucun fichier nommé « $1 » n’a été trouvé.',
+'fileduplicatesearch-noresults' => "Aucun fichier nommé « $1 » n'a été trouvé.",
 
 # Special:SpecialPages
 'specialpages' => 'Pages spéciales',
@@ -4033,7 +4048,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'specialpages-group-changes' => 'Modifications récentes et journaux',
 'specialpages-group-media' => 'Rapports et import de fichiers médias',
 'specialpages-group-users' => 'Utilisateurs et droits rattachés',
-'specialpages-group-highuse' => 'Pages d’utilisation intensive',
+'specialpages-group-highuse' => "Pages d'utilisation intensive",
 'specialpages-group-pages' => 'Listes de pages',
 'specialpages-group-pagetools' => 'Outils pour les pages',
 'specialpages-group-wiki' => 'Données du wiki et outils',
@@ -4045,14 +4060,14 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'intentionallyblankpage' => 'Cette page est laissée intentionellement vide.',
 
 # External image whitelist
-'external_image_whitelist' => ' #Laisser cette ligne exactement telle quelle.<pre>
-#Indiquer les fragments dexpressions rationnelles (juste la partie indiquée entre les //) ci-dessous.
+'external_image_whitelist' => " #Laisser cette ligne exactement telle quelle.<pre>
+#Indiquer les fragments d'expressions rationnelles (juste la partie indiquée entre les //) ci-dessous.
 #Ils correspondront avec les URL des images externes.
-#Celles qui correspondent s’afficheront comme des images, sinon seul un lien vers l’image sera affiché.
+#Celles qui correspondent s'afficheront comme des images, sinon seul un lien vers l'image sera affiché.
 #Les lignes commençant par un # seront considérées comme des commentaires.
-#Cette liste nest pas sensible à la casse.
+#Cette liste n'est pas sensible à la casse.
 
-#Mettez tous les fragments d’expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>',
+#Mettez tous les fragments d'expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>",
 
 # Special:Tags
 'tags' => 'Balises des modifications valides',
@@ -4082,7 +4097,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 # Database error messages
 'dberr-header' => 'Ce wiki a un problème',
 'dberr-problems' => 'Désolé ! Ce site rencontre des difficultés techniques.',
-'dberr-again' => 'Essayez d’attendre quelques minutes et rechargez.',
+'dberr-again' => "Essayez d'attendre quelques minutes et rechargez.",
 'dberr-info' => '(Connexion au serveur de base de données impossible : $1)',
 'dberr-usegoogle' => 'Vous pouvez essayer de chercher avec Google pendant ce temps.',
 'dberr-outofdate' => 'Notez que leurs index de notre contenu peuvent être dépassés.',
@@ -4090,9 +4105,9 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 
 # HTML forms
 'htmlform-invalid-input' => 'Des problèmes sont survenus avec certaines valeurs',
-'htmlform-select-badoption' => 'La valeur que vous avez spécifiée n’est pas une option valide.',
-'htmlform-int-invalid' => 'La valeur que vous avec spécifiée n’est pas un entier.',
-'htmlform-float-invalid' => 'La valeur que vous avez spécifiée n’est pas un nombre.',
+'htmlform-select-badoption' => "La valeur que vous avez spécifiée n'est pas une option valide.",
+'htmlform-int-invalid' => "La valeur que vous avec spécifiée n'est pas un entier.",
+'htmlform-float-invalid' => "La valeur que vous avez spécifiée n'est pas un nombre.",
 'htmlform-int-toolow' => 'La valeur que vous avez spécifiée est plus petite que le minimum de $1',
 'htmlform-int-toohigh' => 'La valeur que vous avez spécifiée est plus grande que le maximum de $1',
 'htmlform-required' => 'Cette valeur est requise',
@@ -4108,7 +4123,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 '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: $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',
@@ -4117,11 +4132,11 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 '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',
 'revdelete-content-hid' => 'contenu masqué',
-'revdelete-summary-hid' => 'résumé de modification caché',
-'revdelete-uname-hid' => "nom d'utilisateur caché",
-'revdelete-content-unhid' => 'contenu révélé',
-'revdelete-summary-unhid' => 'résumé de modification démasqué',
-'revdelete-uname-unhid' => "nom d'utilisateur démasqué",
+'revdelete-summary-hid' => 'résumé de modification masqué',
+'revdelete-uname-hid' => 'nom d’utilisateur masqué',
+'revdelete-content-unhid' => 'contenu affiché',
+'revdelete-summary-unhid' => 'résumé de modification affiché',
+'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',
@@ -4135,10 +4150,14 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-newusers-create2' => 'Le compte utilisateur $3 a été créé par $1',
 'logentry-newusers-autocreate' => 'Le compte $1 a été créé automatiquement',
 'newuserlog-byemail' => 'mot de passe envoyé par courriel',
+'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',
+'rightsnone' => '(aucun)',
 
 # Feedback
-'feedback-bugornote' => 'Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].
-Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d’utilisateur et le navigateur que vous utilisez.',
+'feedback-bugornote' => "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].
+Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur et le navigateur que vous utilisez.",
 'feedback-subject' => 'Objet :',
 'feedback-message' => 'Message :',
 'feedback-cancel' => 'Annuler',
@@ -4149,7 +4168,7 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'feedback-error3' => "Erreur : aucune réponse de l'API",
 'feedback-thanks' => 'Merci ! Votre commentaire a été publié sur la page "[$2 $1]".',
 'feedback-close' => 'Fait',
-'feedback-bugcheck' => 'Formidable ! Vérifiez simplement que ce n’est pas un des [$1 bogues déjà connus].',
+'feedback-bugcheck' => "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].",
 'feedback-bugnew' => "J'ai vérifié. Signaler un nouveau bogue",
 
 # Search suggestions
@@ -4157,39 +4176,39 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'searchsuggest-containing' => 'contenant...',
 
 # API errors
-'api-error-badaccess-groups' => 'Vous n’êtes pas autorisé à verser des fichiers sur ce wiki.',
+'api-error-badaccess-groups' => "Vous n'êtes pas autorisé à verser des fichiers sur ce wiki.",
 'api-error-badtoken' => 'Erreur interne : mauvais « jeton ».',
 'api-error-copyuploaddisabled' => 'Les versements via URL sont désactivés sur ce serveur.',
-'api-error-duplicate' => 'Il y a déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d’autres fichiers présents]}} sur le site avec le même contenu.',
-'api-error-duplicate-archive' => 'Il y avait déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d’autres fichiers présents]}} sur le site avec le même contenu, mais {{PLURAL:$1|il a été supprimé|ils ont été supprimés}}.',
+'api-error-duplicate' => "Il y a déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d'autres fichiers présents]}} sur le site avec le même contenu.",
+'api-error-duplicate-archive' => "Il y avait déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d'autres fichiers présents]}} sur le site avec le même contenu, mais {{PLURAL:$1|il a été supprimé|ils ont été supprimés}}.",
 'api-error-duplicate-archive-popup-title' => 'Dupliquer {{PLURAL:$1|le fichier|les fichiers}} qui {{PLURAL:$1|a déjà été supprimé|ont déjà été supprimés}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|fichier|fichiers}} en double',
 'api-error-empty-file' => 'Le fichier que vous avez soumis était vide.',
 'api-error-emptypage' => "Création de pages vide n'est pas autorisée.",
-'api-error-fetchfileerror' => 'Erreur interne : Quelque chose s’est mal passé lors de la récupération du fichier.',
+'api-error-fetchfileerror' => "Erreur interne : Quelque chose s'est mal passé lors de la récupération du fichier.",
 'api-error-fileexists-forbidden' => 'Un fichier nommé "$1" existe déjà, et ne peut pas être écrasé.',
 'api-error-fileexists-shared-forbidden' => 'Un fichier nommé "$1" existe déjà dans le répertoire des fichiers partagés, et ne peut pas être écrasé.',
 'api-error-file-too-large' => 'Le fichier que vous avez soumis était trop grand.',
 'api-error-filename-tooshort' => 'Le nom du fichier est trop court.',
 'api-error-filetype-banned' => 'Ce type de fichier est interdit.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|n’est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.',
-'api-error-filetype-missing' => 'L’extension du fichier est manquante.',
+'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|n'est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.",
+'api-error-filetype-missing' => "L'extension du fichier est manquante.",
 'api-error-hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
 'api-error-http' => 'Erreur interne : ne peut se connecter au serveur.',
-'api-error-illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
-'api-error-internal-error' => 'Erreur interne : Quelque chose s’est mal passé lors du traitement de votre import sur le wiki.',
+'api-error-illegal-filename' => "Le nom du fichier n'est pas autorisé.",
+'api-error-internal-error' => "Erreur interne : Quelque chose s'est mal passé lors du traitement de votre import sur le wiki.",
 'api-error-invalid-file-key' => 'Erreur interne : aucun fichier trouvé dans le stockage temporaire.',
 'api-error-missingparam' => 'Erreur interne : Il manque des paramètres dans la requête.',
-'api-error-missingresult' => 'Erreur interne : Nous n’avons pas pu déterminer si la copie avait réussi.',
+'api-error-missingresult' => "Erreur interne : Nous n'avons pas pu déterminer si la copie avait réussi.",
 'api-error-mustbeloggedin' => 'Vous devez être connecté pour télécharger des fichiers.',
 'api-error-mustbeposted' => 'Erreur interne : cette requête nécessite la méthode HTTP POST.',
-'api-error-noimageinfo' => 'Le téléversement a réussi, mais le serveur n’a pas donné d’informations sur le fichier.',
+'api-error-noimageinfo' => "Le téléversement a réussi, mais le serveur n'a pas donné d'informations sur le fichier.",
 'api-error-nomodule' => 'Erreur interne : aucun module de versement défini.',
-'api-error-ok-but-empty' => 'Erreur interne : Le serveur n’a pas répondu.',
-'api-error-overwrite' => 'Écraser un fichier existant n’est pas autorisé.',
-'api-error-stashfailed' => 'Erreur interne : le serveur n’a pas pu enregistrer le fichier temporaire.',
-'api-error-timeout' => 'Le serveur n’a pas répondu dans le délai imparti.',
-'api-error-unclassified' => 'Une erreur inconnue s’est produite',
+'api-error-ok-but-empty' => "Erreur interne : Le serveur n'a pas répondu.",
+'api-error-overwrite' => "Écraser un fichier existant n'est pas autorisé.",
+'api-error-stashfailed' => "Erreur interne : le serveur n'a pas pu enregistrer le fichier temporaire.",
+'api-error-timeout' => "Le serveur n'a pas répondu dans le délai imparti.",
+'api-error-unclassified' => "Une erreur inconnue s'est produite",
 'api-error-unknown-code' => 'Erreur inconnue : « $1 »',
 'api-error-unknown-error' => 'Erreur interne : Quelque chose a mal tourné lors du versement de votre fichier.',
 'api-error-unknown-warning' => 'Avertissement inconnu : $1',
index 2e0c21c..461b83e 100644 (file)
@@ -325,11 +325,11 @@ $messages = array(
 'tog-rememberpassword' => 'Sè rapelar de mon contresegno sur ceti navigator (por lo més $1 jorn{{PLURAL:$1||s}})',
 'tog-watchcreations' => 'Apondre les pâges que fé et pués los fichiérs que tèlècharjo a ma lista de siuvu',
 'tog-watchdefault' => 'Apondre les pâges et los fichiérs que chanjo a ma lista de siuvu',
-'tog-watchmoves' => 'Apondre les pâges et los fichiérs que renomo a ma lista de siuvu',
+'tog-watchmoves' => 'Apondre les pâges et los fichiérs que dèplaço a ma lista de siuvu',
 'tog-watchdeletion' => 'Apondre les pâges et los fichiérs que suprimo a ma lista de siuvu',
 'tog-minordefault' => 'Marcar per dèfôt tôs los changements coment petiôts',
-'tog-previewontop' => 'Montrar la prèvisualisacion d’amont la zona de changement',
-'tog-previewonfirst' => 'Montrar la prèvisualisacion pendent lo premiér changement',
+'tog-previewontop' => 'Montrar l’apèrçu d’amont la zona de changement',
+'tog-previewonfirst' => 'Montrar l’apèrçu pendent lo premiér changement',
 'tog-nocache' => 'Dèsactivar lo cacho de les pâges per lo navigator',
 'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge ou ben un fichiér de ma lista de siuvu est changiê(e)',
 'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiêe',
@@ -350,10 +350,10 @@ $messages = array(
 'tog-watchlisthideanons' => 'Cachiér los changements fêts per des utilisators anonimos dedens la lista de siuvu',
 'tog-watchlisthidepatrolled' => 'Cachiér los changements gouardâs dedens la lista de siuvu',
 'tog-ccmeonemails' => 'Mè mandar na copia des mèssâjos que mando ux ôtros utilisators',
-'tog-diffonly' => 'Pas montrar lo contegnu de les pâges desot los difs',
+'tog-diffonly' => 'Pas montrar lo contegnu de les pâges desot les difs',
 'tog-showhiddencats' => 'Montrar les catègories cachiêes',
 'tog-noconvertlink' => 'Dèsactivar la convèrsion des titros des lims',
-'tog-norollbackdiff' => 'Pas fâre vêre lo dif pendent na rèvocacion',
+'tog-norollbackdiff' => 'Pas fâre vêre la dif pendent na rèvocacion',
 
 'underline-always' => 'Tojorn',
 'underline-never' => 'Jamés',
@@ -442,6 +442,7 @@ $messages = array(
 'newwindow' => '(ôvre na fenétra novèla)',
 'cancel' => 'Anular',
 'moredotdotdot' => 'Més...',
+'morenotlisted' => 'Més pas listâ...',
 'mypage' => 'Pâge',
 'mytalk' => 'Discussion',
 'anontalk' => 'Discussion avouéc cet’adrèce IP',
@@ -461,7 +462,7 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Apondre na chousa',
 'vector-action-delete' => 'Suprimar',
-'vector-action-move' => 'Renomar',
+'vector-action-move' => 'Dèplaciér',
 'vector-action-protect' => 'Protègiér',
 'vector-action-undelete' => 'Refâre',
 'vector-action-unprotect' => 'Changiér la protèccion',
@@ -512,7 +513,7 @@ $messages = array(
 'postcomment' => 'Novèla sèccion',
 'articlepage' => 'Vêde la pâge de contegnu',
 'talk' => 'Discussion',
-'views' => 'Visualisacions',
+'views' => 'Vues',
 'toolbox' => 'Bouèta d’outils',
 'userpage' => 'Vêde la pâge utilisator',
 'projectpage' => 'Vêde la pâge projèt',
@@ -561,8 +562,8 @@ $1',
 'privacypage' => 'Project:Politica de confidencialitât',
 
 'badaccess' => 'Fôta de pèrmission',
-'badaccess-group0' => 'Vos avéd pas los drêts sufisents por rèalisar l’accion demandâye.',
-'badaccess-groups' => 'L’accion que vos tâchiéd de rèalisar est accèssibla ren qu’ux utilisators de {{PLURAL:$2|la tropa|les tropes}} : $1.',
+'badaccess-group0' => 'Vos éte pas ôtorisâ a fâre l’accion demandâye.',
+'badaccess-groups' => 'L’accion demandâye est limitâye ux utilisators de {{PLURAL:$2|la tropa|yona de les tropes}} : $1.',
 
 'versionrequired' => 'Vèrsion $1 de MediaWiki nècèssèra',
 'versionrequiredtext' => 'La vèrsion $1 de MediaWiki est nècèssèra por empleyér ceta pâge.
@@ -593,7 +594,7 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 'viewdeleted' => 'Vêre $1 ?',
 'restorelink' => '{{PLURAL:$1|yon changement suprimâ|$1 changements suprimâs}}',
 'feedlinks' => 'Flux :',
-'feed-invalid' => 'Tipo d’abonement du flux envalido.',
+'feed-invalid' => 'Tipo d’abonement du flux pas justo.',
 'feed-unavailable' => 'Los flux de sindicacion sont pas disponiblos',
 'site-rss-feed' => 'Flux RSS de $1',
 'site-atom-feed' => 'Flux Atom de $1',
@@ -617,13 +618,13 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 
 # Main script and global functions
 'nosuchaction' => 'Accion encognua',
-'nosuchactiontext' => 'L’accion spècifiâye dens l’URL est envalida.
+'nosuchactiontext' => 'L’accion spècifiâye dens l’URL est pas justa.
 Pôt-étre vos éd mâl-buchiê l’URL ou ben siuvu un lim fôx.
 Pôt asse-ben étre quèstion d’una cofierie dedens la programeria empleyêe per {{SITENAME}}.',
 'nosuchspecialpage' => 'Pâge spèciâla pas ègzistenta',
 'nospecialpagetext' => '<strong>Vos éd demandâ na pâge spèciâla qu’ègziste pas.</strong>
 
-Na lista de les pâges spèciâles valides sè trove dessus [[Special:SpecialPages|{{int:specialpages}}]].',
+Na lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Fôta',
@@ -647,7 +648,7 @@ La bâsa de donâs at retornâ la fôta « $3 : $4 ».',
 L’administrator que l’at vèrrolyê at balyê cet’èxplicacion : $1',
 'missing-article' => 'La bâsa de donâs at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, apelâye « $1 » $2.
 
-En g·ènèral cen arreve en siuvent un lim d’un dif ou ben d’un historico dèpassâ de vers na pâge qu’est étâye suprimâye.
+En g·ènèral cen arreve en siuvent un lim d’una dif ou ben d’un historico dèpassâ(ye) de vers na pâge qu’est étâye suprimâye.
 
 S’o est pas lo câs, pôt étre quèstion d’una cofierie dedens la programeria.
 La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.',
@@ -670,10 +671,10 @@ La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar d
 'cannotdelete' => 'Empossiblo de suprimar la pâge ou ben lo fichiér « $1 ».
 Pôt-étre la suprèssion est ja étâye fêta per quârqu’un d’ôtro.',
 'cannotdelete-title' => 'Empossiblo de suprimar la pâge « $1 »',
-'delete-hook-aborted' => 'Suprèssion anulâye per n’èxtension.
-Nionèxplicacion est étâye balyêe.',
+'delete-hook-aborted' => 'Suprèssion anulâye per un grèfon.
+Nionèxplicacion est étâye balyêe.',
 'badtitle' => 'Crouyo titro',
-'badtitletext' => 'Lo titro de la pâge demandâye est envalido, vouedo ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
+'badtitletext' => 'Lo titro de la pâge demandâye est pas justo, vouedo ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
 Contint sûrament yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.',
 'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
 'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
@@ -707,8 +708,8 @@ La rêson balyêe est « ''$2'' ».",
 'filereadonlyerror' => 'Empossiblo de changiér lo fichiér « $1 » perce que lo dèpôt de fichiérs « $2 » est en lèctura solèta.
 
 L’administrator que l’at vèrrolyê at balyê cet’èxplicacion : « $3 ».',
-'invalidtitle-knownnamespace' => 'Titro envalido avouéc l’èspâço de noms « $2 » et lo tèxto « $3 »',
-'invalidtitle-unknownnamespace' => 'Titro envalido avouéc lo numerô d’èspâço de noms encognu $1 et lo tèxto « $2 »',
+'invalidtitle-knownnamespace' => 'Titro pas justo avouéc l’èspâço de noms « $2 » et lo tèxto « $3 »',
+'invalidtitle-unknownnamespace' => 'Titro pas justo avouéc lo numerô d’èspâço de noms encognu $1 et lo tèxto « $2 »',
 'exception-nologin' => 'Pas branchiê',
 'exception-nologin-text' => 'Cela pâge ou ben cel’accion at fôta d’étre branchiê sur ceti vouiqui.',
 
@@ -761,7 +762,7 @@ Los volyéd activar et pués vos tornar branchiér avouéc lo mémo nom et lo m
 Los volyéd activar et pués tornar èprovar.",
 'nocookiesfornew' => "Lo compto utilisator est pas étâ fêt, perce que nos ens pas possu confirmar la sina sôrsa.
 Controlâd que vos éd activâ los tèmouens (''cookies''), rechargiéd la pâge et pués tornâd èprovar.",
-'noname' => 'Vos éd pas spècifiâ un nom d’utilisator valido.',
+'noname' => 'Vos éd pas spècifiâ un nom d’utilisator justo.',
 'loginsuccesstitle' => 'Branchement reussi',
 'loginsuccess' => "'''Ora vos éte branchiê{{GENDER:||e|(e)}} a {{SITENAME}} por « $1 ».'''",
 'nosuchuser' => 'L’utilisator « $1 » ègziste pas.
@@ -771,7 +772,7 @@ Controlâd l’ortografia ou ben [[Special:UserLogin/signup|féte un compto nov
 Volyéd controlar l’ortografia.',
 'nouserspecified' => 'Vos dête spècifiar un nom d’utilisator.',
 'login-userblocked' => 'Cet’utilisator est blocâ. Branchement pas ôtorisâ.',
-'wrongpassword' => 'Lo contresegno est fôx.
+'wrongpassword' => 'Lo contresegno buchiê est fôx.
 Volyéd tornar èprovar.',
 'wrongpasswordempty' => 'Vos éd pas buchiê de contresegno.
 Volyéd tornar èprovar.',
@@ -789,15 +790,15 @@ Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|yon jorn|$5 jorns}}.
 Se cela demanda vint pas de vos ou ben que vos vos éte rapelâ
 de voutron contresegno 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.',
-'noemail' => 'Nionadrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
-'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica valida',
+'noemail' => 'Nionadrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
+'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica justa',
 'passwordsent' => 'Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».
 Vos volyéd tornar 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}}.
-Por èvitar los abus, solament yon mèssâjo de sovegnence serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
+Por èvitar los abus, ren que yon mèssâjo de sovegnence 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' => 'Quârqu’un qu’emplèye voutron adrèce IP at fêt {{PLURAL:$1|yon compto|$1 comptos}} pendent les 24 hores passâyes, cen qu’est la limita ôtorisâye dens ceti temps.
 Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel’adrèce IP.',
@@ -806,7 +807,7 @@ Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel
 Nion mèssâjo serat mandâ por châcuna de cetes fonccionalitâts.',
 'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.',
 'emailconfirmlink' => 'Confirmâd voutron adrèce èlèctronica',
-'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format envalido.
+'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format pas justo.
 Volyéd buchiér n’adrèce bien formatâye ou ben lèssiér cél champ vouedo.',
 'cannotchangeemail' => 'Les adrèces èlèctroniques des comptos pôvont pas étre changiêes sur ceti vouiqui.',
 'emaildisabled' => 'Ceti seto pôt pas mandar des mèssâjos.',
@@ -818,7 +819,7 @@ Vos vos devriâd branchiér et pués changiér dês ora voutron contresegno.
 
 Ignorâd ceti mèssâjo se cél compto est étâ fêt per fôta.',
 'usernamehasherror' => 'Lo nom d’utilisator pôt pas contegnir des caractèros de chaplâjo',
-'login-throttled' => 'Dês pou vos éd èprovâ un trop grant nombro de branchements.
+'login-throttled' => 'Dês pou vos éd èprovâ un mouél de branchements.
 Volyéd atendre devant que tornar èprovar.',
 'login-abort-generic' => 'Voutra tentativa de branchement at pas reussi - Anulâye',
 'loginlanguagelabel' => 'Lengoua : $1',
@@ -827,6 +828,7 @@ Volyéd atendre devant que tornar èprovar.',
 # E-mail sending
 'php-mail-error-unknown' => 'Fôta encognua dens la fonccion mail() de PHP.',
 'user-mail-no-addy' => 'At tâchiê de mandar un mèssâjo sen adrèce èlèctronica.',
+'user-mail-no-body' => 'At tâchiê de mandar un mèssâjo avouéc un côrp vouedo ou ben dèrêsonâblament côrt.',
 
 # Change password dialog
 'resetpass' => 'Changiér lo contresegno',
@@ -844,14 +846,14 @@ Branchement en cors...',
 'resetpass-no-info' => 'Vos dête étre branchiê por arrevar tot drêt a cela pâge.',
 'resetpass-submit-loggedin' => 'Changiér lo contresegno',
 'resetpass-submit-cancel' => 'Anular',
-'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora envalido.
+'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora pas justo.
 Pôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.',
 'resetpass-temp-password' => 'Contresegno temporèro :',
 
 # Special:PasswordReset
 'passwordreset' => 'Remisa 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-legend' => 'Tornar inicialisar lo contresegno',
+'passwordreset-legend' => 'Remetre a zérô lo contresegno',
 'passwordreset-disabled' => 'La remisa 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 donâs ce-desot}}',
 'passwordreset-username' => 'Nom d’utilisator :',
@@ -892,7 +894,7 @@ Contresegno temporèro : $2',
 'changeemail-text' => 'Rempléd ceti formulèro por changiér voutron adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.',
 'changeemail-no-info' => 'Vos dête étre branchiê por arrevar tot drêt a cela pâge.',
 'changeemail-oldemail' => 'Adrèce èlèctronica d’ora :',
-'changeemail-newemail' => 'Novèladrèce èlèctronica :',
+'changeemail-newemail' => 'Novèladrèce èlèctronica :',
 'changeemail-none' => '(niona)',
 'changeemail-password' => 'Voutron contresegno dessus {{SITENAME}} :',
 'changeemail-submit' => 'Changiér l’adrèce èlèctronica',
@@ -924,9 +926,9 @@ Contresegno temporèro : $2',
 'minoredit' => 'O est un petiôt changement',
 'watchthis' => 'Siuvre ceta pâge',
 'savearticle' => 'Encartar la pâge',
-'preview' => 'Prèvisualisacion',
-'showpreview' => 'Montrar na prèvisualisacion',
-'showlivepreview' => 'Apèrçu rapido',
+'preview' => 'Apèrçu',
+'showpreview' => 'Montrar un apèrçu',
+'showlivepreview' => 'Apèrçu drêt',
 'showdiff' => 'Montrar los changements',
 'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê(e).
 Voutron adrèce IP serat encartâye dedens l’historico des changements de ceta pâge.",
@@ -949,9 +951,9 @@ La rêson balyêe est ''$2''.
 * Compto blocâ : $7
 
 Vos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.
-Vos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens qu’un’adrèce èlèctronica valida est spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
+Vos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens qu’un’adrèce èlèctronica justa est spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
 Voutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.
-Volyéd entrebetar tôs los dètalys ce-dessus dedens sé-quinta demanda que vos faréd.",
+Volyéd entrebetar tôs los dètalys ce-dessus dedens na sé-quinta demanda que vos faréd.",
 'autoblockedtext' => "Voutron adrèce IP est étâye blocâye ôtomaticament perce qu’el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.
 La rêson balyêe est :
 
@@ -963,10 +965,10 @@ La rêson balyêe est :
 
 Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
 
-Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens que vos avéd n’adrèce èlèctronica valida encartâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
+Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens que vos avéd n’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
 
 Voutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.
-Volyéd entrebetar tôs los dètalys ce-dessus dedens sé-quinta demanda que vos faréd.",
+Volyéd entrebetar tôs los dètalys ce-dessus dedens na sé-quinta demanda que vos faréd.",
 'blockednoreason' => 'niona rêson balyêe',
 'whitelistedittext' => 'Vos vos dête $1 por povêr changiér les pâges.',
 'confirmedittext' => 'Vos dête confirmar voutron adrèce èlèctronica devant que changiér les pâges.
@@ -1011,28 +1013,28 @@ La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :',
 * '''Opera :''' èfaciéd lo cacho dedens ''Outils → Prèferences''",
 'usercssyoucanpreview' => "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.",
 'userjsyoucanpreview' => "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JS novèla devant que l’encartar.",
-'usercsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvisualisar voutra prôpra fôlye CSS.'''
+'usercsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra prôpra fôlye CSS.'''
 '''El est p’oncor étâye encartâye !'''",
-'userjspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés èprovar / prèvisualisar voutron code JavaScript.'''
+'userjspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés èprovar / prèvêre voutron code JavaScript.'''
 '''Il est p’oncor étâ encartâ !'''",
-'sitecsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvisualisar cela fôlye CSS.'''
+'sitecsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.'''
 '''El est p’oncor étâye encartâye !'''",
-'sitejspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvisualisar cél code JavaScript.'''
+'sitejspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.'''
 '''Il est p’oncor étâ encartâ !'''",
 'userinvalidcssjstitle' => "'''Atencion :''' ègziste gins d’habelyâjo « $1 ».
 Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Betâ a jorn)',
 'note' => "'''Nota :'''",
-'previewnote' => "'''Rapelâd-vos qu’o est ren qu’una prèvisualisacion.'''
+'previewnote' => "'''Rapelâd-vos qu’o est ren qu’un apèrçu.'''
 Voutros changements sont p’oncor étâs encartâs !",
 'continue-editing' => 'Alar a la zona de changement',
-'previewconflict' => 'Ceta prèvisualisacion fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.',
+'previewconflict' => 'Cet’apèrçu fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.',
 'session_fail_preview' => "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''
 Volyéd tornar èprovar.
 Se cen tôrne pas reussir, vos volyéd [[Special:UserLogout|dèbranchiér]] et pués vos tornar branchiér.",
 'session_fail_preview_html' => "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''
 
-''Perce que {{SITENAME}} at activâ l’HTML bruto, la prèvisualisacion est étâye cachiêe por prèvegnir les ataques per JavaScript.''
+''Perce que {{SITENAME}} at activâ l’HTML bruto, l’apèrçu est étâ cachiê por prèvegnir les ataques per JavaScript.''
 
 '''Se la tentativa de changement ére lèg·itima, volyéd tornar èprovar.'''
 Se cen tôrne pas reussir, vos volyéd [[Special:UserLogout|dèbranchiér]] et pués vos tornar branchiér.",
@@ -1079,7 +1081,7 @@ La dèrriére entrâ du jornal est montrâye ce-desot por refèrence :",
 'titleprotectedwarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que des [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre.'''
 La dèrriére entrâ du jornal est montrâye ce-desot por refèrence :",
 'templatesused' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per ceta pâge :',
-'templatesusedpreview' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens ceta prèvisualisacion :',
+'templatesusedpreview' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cet’apèrçu :',
 'templatesusedsection' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens ceta sèccion :',
 'template-protected' => '(protègiê)',
 'template-semiprotected' => '(mié-protègiê)',
@@ -1096,12 +1098,12 @@ Vos pouede tornar arriér et pués changiér na pâge ègzistenta ou ben [[Speci
 'recreate-moveddeleted-warn' => "'''Atencion : vos éte aprés refâre na pâge qu’est étâye suprimâye dês devant.'''
 
 Demandâd-vos se fôt franc continuar son changement.
-Por comoditât, lo jornal de les suprèssions et des changements de nom de cela pâge est montrâ ce-desot :",
+Por comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est montrâ ce-desot :",
 'moveddeleted-notice' => 'Ceta pâge est étâye suprimâye.
-Por refèrence, lo jornal de les suprèssions et des changements de nom est montrâ ce-desot.',
+Por refèrence, lo jornal de les suprèssions et des dèplacements de cela pâge est montrâ ce-desot.',
 'log-fulllog' => 'Vêre lo jornal complèt',
-'edit-hook-aborted' => 'Changement anulâ per n’èxtension.
-Nionèxplicacion est étâye balyêe.',
+'edit-hook-aborted' => 'Changement anulâ per un grèfon.
+Nionèxplicacion est étâye balyêe.',
 'edit-gone-missing' => 'Empossiblo de betar a jorn la pâge.
 Semble que seye étâye suprimâye.',
 'edit-conflict' => 'Conflit de changement.',
@@ -1110,7 +1112,7 @@ Semble que seye étâye suprimâye.',
 Ègziste ja.',
 'defaultmessagetext' => 'Mèssâjo per dèfôt',
 'content-failed-to-parse' => 'Falyita de l’analisa du contegnu de $2 por lo modèlo $1 : $3',
-'invalid-content-data' => 'Donâs du contegnu envalides',
+'invalid-content-data' => 'Donâs du contegnu pas justes',
 'content-not-allowed-here' => 'Lo contegnu « $1 » est pas ôtorisâ sur la pâge [[$2]]',
 
 # Content models
@@ -1139,140 +1141,141 @@ Celos arguments sont pas étâs betâs.",
 'expansion-depth-exceeded-warning' => 'Pâge que dèpâsse la provondior d’èxpension',
 'parser-unstrip-loop-warning' => 'Boclla pas dèmontâbla dècelâye',
 'parser-unstrip-recursion-limit' => 'Limita de rècursion pas dèmontâbla dèpassâye ($1)',
-'converter-manual-rule-error' => 'Fôta dècelâye dens la règlla de convèrsion manuèla de lengoua',
+'converter-manual-rule-error' => 'Fôta dècelâye dens la règlla de convèrsion de lengoua manuèla',
 
 # "Undo" feature
-'undo-success' => 'Ceti changement vôt étre dèfêt.
-Volyéd controlar los changements ce-desot, et pués sôvar s’o est franc cen que vos voléd fâre.',
-'undo-failure' => 'Cél changement pôt pas étre dèfêt : cen rentrerêt en conflit avouéc los changements entèrmèdièros.',
-'undo-norev' => 'Lo changement at pas possu étre dèfêt perce qu’il est pas ègzistent ou ben qu’il at étâ suprimâ.',
-'undo-summary' => 'Anulacion du changement $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]])',
+'undo-success' => 'Lo changement pôt étre dèfêt.
+Volyéd controlar la comparèson ce-desot por vos assurar qu’o est franc cen que vos voléd fâre et pués encartar los changements ce-desot por chavonar la sina dèfêta.',
+'undo-failure' => 'Lo changement at pas possu étre dèfêt a côsa d’un conflit avouéc des changements entèrmèdièros.',
+'undo-norev' => 'Lo changement at pas possu étre dèfêt perce qu’il est pas ègzistent ou ben qu’il est étâ suprimâ.',
+'undo-summary' => 'Dèfêta du changement $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]])',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Vos pouede pas fâre un compto.',
-'cantcreateaccount-text' => "La crèacion de compto dês ceta adrèce IP ('''$1''') at étâ dèfendua per [[User:$3|$3]].
+'cantcreateaccounttitle' => 'Empossiblo de fâre lo compto',
+'cantcreateaccount-text' => "La crèacion de compto dês cet’adrèce IP ('''$1''') est étâye blocâye per [[User:$3|$3]].
 
-La rêson balyê per $3 ére ''$2''.",
+La rêson balyêe per $3 ére ''$2''.",
 
 # History pages
 'viewpagelogs' => 'Vêde los jornals de ceta pâge',
 'nohistory' => 'Ègziste gins d’historico por ceta pâge.',
 'currentrev' => 'Vèrsion d’ora',
-'currentrev-asof' => 'Vèrsion d’ora en dâta du $1',
-'revisionasof' => 'Vèrsion du $1',
-'revision-info' => 'Vèrsion du $1 per $2',
-'previousrevision' => '← Vèrsion devant',
-'nextrevision' => 'Vèrsion aprés →',
-'currentrevisionlink' => 'vêde la vèrsion d’ora',
-'cur' => 'ora',
+'currentrev-asof' => 'Vèrsion d’ora du $2 a $3',
+'revisionasof' => 'Vèrsion du $2 a $3',
+'revision-info' => 'Vèrsion du $4 a $5 per $2',
+'previousrevision' => '← Vèrsion ples vielye',
+'nextrevision' => 'Vèrsion ples novèla →',
+'currentrevisionlink' => 'Vèrsion d’ora',
+'cur' => 'd’ora',
 'next' => 'aprés',
-'last' => 'dif',
-'page_first' => 'premiére',
+'last' => 'devant',
+'page_first' => 'Premiére',
 'page_last' => 'dèrriére',
-'histlegend' => "Lègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora,
-'''({{int:last}})''' = difèrence avouéc la vèrsion devant, '''{{int:minoreditletter}}''' = petiôt changement.",
-'history-fieldset-title' => 'Navegar dens l’historico',
-'history-show-deleted' => 'Solament los suprimâs',
-'histfirst' => 'Tota premiére',
-'histlast' => 'Tota dèrriére',
+'histlegend' => "Chouèx de difs : pouentâd les câses de les vèrsions a comparar et pués apoyéd dessus « Entrâ » ou ben lo boton d’avâl.<br />
+Lègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora, '''({{int:last}})''' = difèrence avouéc la vèrsion devant, '''{{int:minoreditletter}}''' = petiôt changement.",
+'history-fieldset-title' => 'Fâre dèfelar l’historico',
+'history-show-deleted' => 'Ren que les suprimâyes',
+'histfirst' => 'premiére',
+'histlast' => 'Dèrriére',
 'historysize' => '($1 octèt{{PLURAL:$1||s}})',
-'historyempty' => '(vouedo)',
+'historyempty' => '(voueda)',
 
 # Revision feed
 'history-feed-title' => 'Historico de les vèrsions',
 'history-feed-description' => 'Historico por ceta pâge sur lo vouiqui',
-'history-feed-item-nocomment' => '$1 lo $2',
-'history-feed-empty' => 'La pâge demandâ ègziste pas.
-El at pôt-étre étâ suprimâ ou ben renomâ.
+'history-feed-item-nocomment' => '$1 lo $3 a $4',
+'history-feed-empty' => 'La pâge demandâye ègziste pas.
+Pôt-étre el est étâye suprimâye du vouiqui ou ben renomâye.
 Tâchiéd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar des pâges novèles que vont avouéc.',
 
 # Revision deletion
 'rev-deleted-comment' => '(rèsumâ de changement enlevâ)',
-'rev-deleted-user' => '(nom d’usanciér suprimâ)',
-'rev-deleted-event' => '(entrâ suprimâ)',
-'rev-deleted-user-contribs' => '[nom d’usanciér ou ben adrèce IP suprimâ - changement cachiê sur les contribucions]',
+'rev-deleted-user' => '(nom d’utilisator enlevâ)',
+'rev-deleted-event' => '(accion du jornal enlevâye)',
+'rev-deleted-user-contribs' => '[nom d’utilisator ou ben adrèce IP enlevâ(ye) - changement cachiê sur les contribucions]',
 'rev-deleted-text-permission' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
 Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-deleted-text-unhide' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cela vèrsion] se vos lo voléd.",
-'rev-suppressed-text-unhide' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cela vèrsion] se vos lo voléd.",
+'rev-deleted-text-unhide' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
+Vos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+'rev-suppressed-text-unhide' => "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
+Vos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
 'rev-deleted-text-view' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
 Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-suppressed-text-view' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
-Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-deleted-no-diff' => "Vos pouede pas vêre ceti dif perce que yona de les vèrsions est étâye '''suprimâye'''.
+'rev-suppressed-text-view' => "Ceta vèrsion de la pâge est étâye '''primâye'''.
+Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les prèssions].",
+'rev-deleted-no-diff' => "Vos pouede pas vêre ceta dif perce que yona de les vèrsions est étâye '''suprimâye'''.
 Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-suppressed-no-diff' => "Vos pouede pas vêre ceta difèrence perce que yona de les vèrsions at étâ '''suprimâ'''.",
-'rev-deleted-unhide-diff' => "Yona de les vèrsions de ceti dif at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cél dif] se vos lo voléd.",
-'rev-suppressed-unhide-diff' => "Yona de les vèrsions de ceti dif at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cél dif] se vos lo voléd.",
-'rev-deleted-diff-view' => "Yona de les vèrsions de ceti dif est étâye '''suprimâye'''.
-Vos pouede vêre ceti dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-suppressed-diff-view' => "Yona de les vèrsions de ceti dif est étâye '''suprimâye'''.
-Vos pouede vêre ceti dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+'rev-suppressed-no-diff' => "Vos pouede pas vêre ceta dif perce que yona de les vèrsions est étâye '''suprimâye'''.",
+'rev-deleted-unhide-diff' => "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
+Vos pouede adés [$1 vêre cela dif] se vos o voléd.",
+'rev-suppressed-unhide-diff' => "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
+Vos pouede adés [$1 vêre cela dif] se vos o voléd.",
+'rev-deleted-diff-view' => "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.
+Vos pouede vêre ceta dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+'rev-suppressed-diff-view' => "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.
+Vos pouede vêre ceta dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
 'rev-delundel' => 'montrar / cachiér',
 'rev-showdeleted' => 'montrar',
 'revisiondelete' => 'Suprimar / refâre des vèrsions',
-'revdelete-nooldid-title' => 'Vèrsion ciba envalida',
-'revdelete-nooldid-text' => 'Vos éd pas spècefiâ la vèrsion ciba ou ben les vèrsions cibes de cela fonccion,
-la vèrsion ciba ègziste pas, ou ben o est la vèrsion d’ora.',
-'revdelete-nologtype-title' => 'Gins de tipo de jornal spècefiâ',
-'revdelete-nologtype-text' => 'Vos éd pas spècefiâ un tipo de jornal sur loquint cela accion dêt étre rèalisâ.',
-'revdelete-nologid-title' => 'Entrâ du jornal envalida',
-'revdelete-nologid-text' => 'Ou ben vos éd pas spècefiâ una entrâ du jornal sur laquinta cela accion dêt étre rèalisâ, ou ben l’entrâ ègziste pas.',
-'revdelete-no-file' => 'Lo fichiér spècefiâ ègziste pas.',
-'revdelete-show-file-confirm' => 'Éte-vos de sûr de volêr vêre una vèrsion suprimâ du fichiér « <nowiki>$1</nowiki> » que dâte du $2 a $3 ?',
+'revdelete-nooldid-title' => 'Vèrsion ciba pas justa',
+'revdelete-nooldid-text' => 'Vos éd pas spècifiâ na vèrsion ciba (ou ben des vèrsions cibes) por fâre cela
+fonccion, la vèrsion spècifiâye ègziste pas ou ben vos tâchiéd de cachiér la vèrsion d’ora.',
+'revdelete-nologtype-title' => 'Nion tipo de jornal balyê',
+'revdelete-nologtype-text' => 'Vos éd pas spècifiâ un tipo de jornal por fâre cel’accion.',
+'revdelete-nologid-title' => 'Entrâ du jornal pas justa',
+'revdelete-nologid-text' => 'Ou ben vos éd pas spècifiâ un èvènement du jornal ciba por fâre cela fonccion ou ben l’entrâ spècifiâye ègziste pas.',
+'revdelete-no-file' => 'Lo fichiér spècifiâ ègziste pas.',
+'revdelete-show-file-confirm' => 'Éte-vos de sûr de volêr vêre na vèrsion suprimâye du fichiér « <nowiki>$1</nowiki> » du $2 a $3 ?',
 'revdelete-show-file-submit' => 'Ouè',
 'revdelete-selected' => "'''{{PLURAL:$2|Vèrsion chouèsia|Vèrsions chouèsies}} de [[:$1]] :'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Entrâ du jornal chouèsia|Entrâs du jornal chouèsies}} :'''",
-'revdelete-text' => "'''Les vèrsions et les entrâs suprimâs aparètront adés dens l’historico de la pâge et dens los jornals, mas lor contegnu tèxtuèl serat pas accèssiblo u publico.'''
-Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela méma entèrface, a muens que des rèstriccions de ples seyont betâs en place.",
-'revdelete-confirm' => '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]].',
-'revdelete-suppress-text' => "La suprèssion dêt étre utilisâ '''ren que''' dens cetos câs :
-* Enformacions a sè que vont pas avouéc :
-*: ''adrèce et numerô de tèlèfono, numerô de sècuritât sociâla, ...''",
-'revdelete-legend' => 'Betar en place des rèstriccions de visibilitât :',
+'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.'''
+Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela mém’entèrface, a muens que des rèstriccions de ples seyont pas dèfenies.",
+'revdelete-confirm' => '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 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 :
+* Enformacions que pôvont étre difamatouères
+* Enformacions a sè que vont pas avouéc
+*: ''adrèces et numerôs de tèlèfono, numerôs de sècuritât sociâla, ...''",
+'revdelete-legend' => 'Dèfenir des rèstriccions de visibilitât',
 'revdelete-hide-text' => 'Cachiér lo tèxto de la vèrsion',
 'revdelete-hide-image' => 'Cachiér lo contegnu du fichiér',
 'revdelete-hide-name' => 'Cachiér l’accion et la ciba',
 'revdelete-hide-comment' => 'Cachiér lo rèsumâ de changement',
-'revdelete-hide-user' => 'Cachiér lo nom ou l’adrèce IP u contributor.',
-'revdelete-hide-restricted' => 'Cachiér les balyês ux administrators et pués ux ôtros',
+'revdelete-hide-user' => 'Cachiér lo nom d’utilisator / l’adrèce IP du contributor',
+'revdelete-hide-restricted' => 'Rèprimar celes donâs ux administrators et pués ux ôtros',
 'revdelete-radio-same' => '(pas changiér)',
 'revdelete-radio-set' => 'Ouè',
 'revdelete-radio-unset' => 'Nan',
-'revdelete-suppress' => 'Suprimar les balyês ux administrators et pués ux ôtros',
+'revdelete-suppress' => 'Rèprimar celes donâs ux administrators et pués ux ôtros',
 'revdelete-unsuppress' => 'Enlevar les rèstriccions sur les vèrsions refêtes',
 'revdelete-log' => 'Rêson :',
 'revdelete-submit' => 'Aplicar a {{PLURAL:$1|la vèrsion chouèsia|les vèrsions chouèsies}}',
-'revdelete-success' => "'''Visibilitât de la vèrsion betâ a jorn avouéc reusséta.'''",
-'revdelete-failure' => "'''La visibilitât de la vèrsion at pas possu étre betâ a jorn :'''
+'revdelete-success' => "'''Visibilitât de la vèrsion betâye a jorn avouéc reusséta.'''",
+'revdelete-failure' => "'''La visibilitât de la vèrsion at pas possu étre betâye a jorn :'''
 $1",
 'logdelete-success' => "'''Visibilitât du jornal dèfenia avouéc reusséta.'''",
 'logdelete-failure' => "'''La visibilitât du jornal at pas possu étre dèfenia :'''
 $1",
-'revdel-restore' => 'Changiér la visibilitât',
-'revdel-restore-deleted' => 'vèrsions suprimâs',
+'revdel-restore' => 'changiér la visibilitât',
+'revdel-restore-deleted' => 'vèrsions suprimâyes',
 'revdel-restore-visible' => 'vèrsions visibles',
 'pagehist' => 'Historico de la pâge',
 'deletedhist' => 'Historico suprimâ',
-'revdelete-hide-current' => 'Èrror pendent la suprèssion de l’èlèment datâ du $1 a $2 : o est la vèrsion d’ora.
-Pôt pas étre suprimâ.',
-'revdelete-show-no-access' => 'Fôta pendent la visualisacion de la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
+'revdelete-hide-current' => 'Fôta en cachient la piéce datâye du $1 a $2 : o est la vèrsion d’ora.
+Pôt pas étre cachiêe.',
+'revdelete-show-no-access' => 'Fôta en montrent la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
 Vos y avéd pas accès.',
-'revdelete-modify-no-access' => 'Fôta pendent lo changement de la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
+'revdelete-modify-no-access' => 'Fôta en changient la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
 Vos y avéd pas accès.',
-'revdelete-modify-missing' => 'Èrror pendent lo changement de l’èlèment avouéc lo numerô $1 : il est manquent dens la bâsa de balyês !',
-'revdelete-no-change' => "'''Atencion :''' l’èlèment datâ du $1 a $2 at ja los paramètres de visibilitât demandâs.",
-'revdelete-concurrent-change' => 'Èrror pendent lo changement de l’èlèment datâ du $1 a $2 : son statut at étâ changiê per quârqu’un d’ôtro pendent que vos lo changiéd.
+'revdelete-modify-missing' => 'Fôta en changient la piéce avouéc l’identifient $1 : el est manquenta dedens la bâsa de donâs !',
+'revdelete-no-change' => "'''Atencion :''' la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.",
+'revdelete-concurrent-change' => 'Fôta en changient la piéce datâye du $1 a $2 : lo sin statut semble étre étâ changiê per quârqu’un d’ôtro justo que vos tâchiêvâd d’o changiér.
 Volyéd controlar los jornals.',
-'revdelete-only-restricted' => 'Èrror pendent la suprèssion de l’entrâ datâ du $1 a $2 : vos pouede pas suprimar celos èlèments ux administrators sen chouèsir avouéc des ôtros chouèx de suprèssion.',
+'revdelete-only-restricted' => 'Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar celes piéces de la vua ux administrators sen chouèsir avouéc des ôtros chouèx de visibilitât.',
 'revdelete-reason-dropdown' => '*Rêsons corentes de suprèssion
 ** Violacion du drêt d’ôtor
 ** Comentèros ou ben enformacions a sè que vont pas avouéc
@@ -1290,34 +1293,34 @@ Vêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements
 
 # History merging
 'mergehistory' => 'Fusionar los historicos de les pâges',
-'mergehistory-header' => 'Ceta pâge vos pèrmèt de fusionar des vèrsions de l’historico d’una pâge d’origina vers una pâge novèla.
-Assurâd-vos que cela opèracion consèrverat la continuitât de l’historico de la pâge.',
+'mergehistory-header' => 'Ceta pâge vos pèrmèt de fusionar des vèrsions de l’historico d’una pâge d’origina vers na pâge novèla.
+Assurâd-vos que cél changement consèrverat la continuitât de l’historico de la pâge.',
 'mergehistory-box' => 'Fusionar les vèrsions de doves pâges :',
 'mergehistory-from' => 'Pâge d’origina :',
 'mergehistory-into' => 'Pâge de dèstinacion :',
 'mergehistory-list' => 'Historico des changements que pôvont étre fusionâs',
-'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâs dedens [[:$2]].
-Utilisâd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècefiâ.
-Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colona.',
-'mergehistory-go' => 'Fâre vêre los changements que pôvont étre fusionâs',
+'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].
+Empleyéd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècifiâye.
+Notâd que l’usâjo des lims de navigacion remetrat a zérô cela colona.',
+'mergehistory-go' => 'Montrar los changements que pôvont étre fusionâs',
 'mergehistory-submit' => 'Fusionar les vèrsions',
-'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâ.',
-'mergehistory-success' => '$3 vèrsion{{PLURAL:$3||s}} de [[:$1]] fusionâ{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].',
-'mergehistory-fail' => 'Empossiblo de fâre la fusion des historicos. Volyéd tornar chouèsir la pâge et pués los paramètres de dâta.',
+'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâye.',
+'mergehistory-success' => '$3 vèrsion{{PLURAL:$3||s}} de [[:$1]] fusionâye{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].',
+'mergehistory-fail' => 'Empossiblo de fâre la fusion des historicos, volyéd tornar chouèsir la pâge et pués los paramètros de dâta.',
 'mergehistory-no-source' => 'La pâge d’origina $1 ègziste pas.',
 'mergehistory-no-destination' => 'La pâge de dèstinacion $1 ègziste pas.',
-'mergehistory-invalid-source' => 'La pâge d’origina dêt avêr un titro valido.',
-'mergehistory-invalid-destination' => 'La pâge de dèstinacion dêt avêr un titro valido.',
-'mergehistory-autocomment' => '[[:$1]] fusionâ dedens [[:$2]]',
-'mergehistory-comment' => '[[:$1]] fusionâ dedens [[:$2]] : $3',
+'mergehistory-invalid-source' => 'La pâge d’origina dêt avêr un titro justo.',
+'mergehistory-invalid-destination' => 'La pâge de dèstinacion dêt avêr un titro justo.',
+'mergehistory-autocomment' => '[[:$1]] fusionâye dedens [[:$2]]',
+'mergehistory-comment' => '[[:$1]] fusionâye dedens [[:$2]] : $3',
 'mergehistory-same-destination' => 'Les pâges d’origina et de dèstinacion pôvont pas étre la méma',
 'mergehistory-reason' => 'Rêson :',
 
 # Merge log
 'mergelog' => 'Jornal de les fusions',
-'pagemerge-logentry' => '[[$1]] fusionâ dedens [[$2]] (vèrsions tant qu’u $3)',
+'pagemerge-logentry' => '[[$1]] fusionâye dedens [[$2]] (vèrsions tant qu’u $3)',
 'revertmerge' => 'Sèparar',
-'mergelogpagetext' => 'Vê-que la lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’una ôtra.',
+'mergelogpagetext' => 'Vê-que na lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’un’ôtra.',
 
 # Diffs
 'history-title' => 'Historico de les vèrsions de « $1 »',
@@ -1326,85 +1329,85 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo
 'difference-multipage' => '(Difèrences entre les pâges)',
 'lineno' => 'Legne $1 :',
 'compareselectedversions' => 'Comparar les vèrsions chouèsies',
-'showhideselectedversions' => 'Fâre vêre / cachiér les vèrsions chouèsies',
+'showhideselectedversions' => 'Montrar / cachiér les vèrsions chouèsies',
 'editundo' => 'dèfâre',
-'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon usanciér|$2 usanciérs}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})',
-'diff-multi-manyusers' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 usanciér{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})',
-'difference-missing-revision' => '{{PLURAL:$2|Yona vèrsion|$2 vèrsions}} de ceta difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.
+'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon utilisator|$2 utilisators}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 utilisator{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'difference-missing-revision' => '{{PLURAL:$2|Yona 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’un dif dèpassâ de vers na pâge qu’est étâye suprimâye.
+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].',
 
 # Search results
 'searchresults' => 'Rèsultats de la rechèrche',
 'searchresults-title' => 'Rèsultats de la rechèrche por « $1 »',
-'searchresulttext' => 'Por més d’enformacions sur la rechèrche dens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => 'Por més d’enformacions sur la rechèrche dedens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => "Vos éd rechèrchiê « '''[[:$1]]''' » ([[Special:Prefixindex/$1|totes les pâges que començont per « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|totes les pâges qu’ont un lim de vers « $1 »]])",
 'searchsubtitleinvalid' => "Vos éd rechèrchiê « '''$1''' »",
-'toomanymatches' => 'Un trop grant nombro d’ocasions at étâ retornâ, volyéd sometre una requéta difèrenta.',
-'titlematches' => 'Corrèspondances dens los titros de pâges',
-'notitlematches' => 'Nion titro de pâge corrèspond a la rechèrche.',
-'textmatches' => 'Corrèspondances dens lo tèxto de les pâges',
-'notextmatches' => 'Nion tèxto de pâge corrèspond a la rechèrche.',
+'toomanymatches' => 'Un mouél de corrèspondances est étâ retornâ, volyéd èprovar na rechèrche difèrenta.',
+'titlematches' => 'Corrèspondances dedens los titros de les pâges',
+'notitlematches' => 'Niona corrèspondance dedens los titros de les pâges',
+'textmatches' => 'Corrèspondances dedens lo tèxto de les pâges',
+'notextmatches' => 'Niona corrèspondance dedens lo tèxto de les pâges',
 'prevn' => '{{PLURAL:$1|$1}} devant',
 'nextn' => '{{PLURAL:$1|$1}} aprés',
 'prevn-title' => '$1 rèsultat{{PLURAL:$1||s}} devant',
 'nextn-title' => '$1 rèsultat{{PLURAL:$1||s}} aprés',
-'shown-title' => 'Fâre vêre $1 rèsultat{{PLURAL:$1||s}} per pâge',
+'shown-title' => 'Montrar $1 rèsultat{{PLURAL:$1||s}} per pâge',
 'viewprevnext' => 'Vêre ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Chouèx de rechèrche',
 'searchmenu-exists' => "'''Y at na pâge apelâye « [[:$1]] » sur ceti vouiqui.'''",
 'searchmenu-new' => "'''Fâre la pâge « [[:$1|$1]] » sur ceti vouiqui !'''",
 'searchhelp-url' => 'Help:Somèro',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Rechèrchiér les pâges que començont per ceti prèfixo]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Fâre dèfelar les pâges que començont per ceti prèfixo]]',
 'searchprofile-articles' => 'Pâges de contegnu',
-'searchprofile-project' => 'Pâges d’éde et du projèt',
+'searchprofile-project' => 'Pâges d’éde et pâges projèt',
 'searchprofile-images' => 'Multimèdia',
 'searchprofile-everything' => 'Tot',
-'searchprofile-advanced' => 'Rechèrche avanciê',
-'searchprofile-articles-tooltip' => 'Rechèrchiér dens $1',
-'searchprofile-project-tooltip' => 'Rechèrchiér dens $1',
-'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs mèdia',
-'searchprofile-everything-tooltip' => 'Rechèrchiér dens tot lo seto (les pâges de discussion avouéc)',
+'searchprofile-advanced' => 'Rechèrche avanciêe',
+'searchprofile-articles-tooltip' => 'Rechèrchiér dedens $1',
+'searchprofile-project-tooltip' => 'Rechèrchiér dedens $1',
+'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs',
+'searchprofile-everything-tooltip' => 'Rechèrchiér dedens tot lo contegnu (les pâges de discussion avouéc)',
 'searchprofile-advanced-tooltip' => 'Chouèsir los èspâços de noms por la rechèrche',
 'search-result-size' => '$1 ($2 mot{{PLURAL:$2||s}})',
 'search-result-category-size' => '$1 membro{{PLURAL:$1||s}} ($2 sot-catègorie{{PLURAL:$2||s}}, $3 fichiér{{PLURAL:$3||s}})',
-'search-result-score' => 'Rapôrt : $1 %',
+'search-result-score' => 'Rapôrt : $1%',
 'search-redirect' => '(redirèccion dês $1)',
 'search-section' => '(sèccion $1)',
 'search-suggest' => 'Voléd-vos dére : $1',
 'search-interwiki-caption' => 'Projèts frâres',
 'search-interwiki-default' => 'Rèsultats dessus $1 :',
 'search-interwiki-more' => '(més)',
-'search-relatedarticle' => 'Raportâ',
-'mwsuggest-disable' => 'Dèsactivar los consèlys AJAX',
-'searcheverything-enable' => 'Rechèrchiér dens tôs los èspâços de noms',
-'searchrelated' => 'raportâ',
+'search-relatedarticle' => 'Aparentâ',
+'mwsuggest-disable' => 'Dèsactivar les idês AJAX',
+'searcheverything-enable' => 'Rechèrchiér dedens tôs los èspâços de noms',
+'searchrelated' => 'aparentâ',
 'searchall' => 'tot',
-'showingresults' => "Visualisacion de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
-'showingresultsnum' => "Visualisacion de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
+'showingresults' => "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
+'showingresultsnum' => "Vua de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Rèsultat '''$1'''|Rèsultats '''$1 - $2'''}} de '''$3''' por '''$4'''",
 'nonefound' => "'''Nota :''' solament quârques èspâços de noms sont rechèrchiês per dèfôt.
-Èprovâd en utilisent lo prèfixo ''all:'' por rechèrchiér dens tot lo contegnu (les pâges de discussion, los modèlos, ... avouéc) ou ben utilisâd l’èspâço de noms souhètâ coment prèfixo.",
-'search-nonefound' => 'Y at gins de rèsultat que corrèspond a la requéta.',
-'powersearch' => 'Rechèrche avanciê',
-'powersearch-legend' => 'Rechèrche avanciê',
-'powersearch-ns' => 'Rechèrchiér dens los èspâços de noms :',
-'powersearch-redir' => 'Fâre vêre les redirèccions',
+Èprovâd en empleyent lo prèfixo ''all:'' por rechèrchiér dedens tot lo contegnu (les pâges de discussion, los modèlos, ... avouéc) ou ben empleyéd l’èspâço de noms volu coment prèfixo.",
+'search-nonefound' => 'Y at gins de rèsultat que corrèspond a la rechèrche.',
+'powersearch' => 'Rechèrche avanciêe',
+'powersearch-legend' => 'Rechèrche avanciêe',
+'powersearch-ns' => 'Rechèrchiér dedens los èspâços de noms :',
+'powersearch-redir' => 'Listar les redirèccions',
 'powersearch-field' => 'Rechèrchiér',
-'powersearch-togglelabel' => 'Pouentar :',
+'powersearch-togglelabel' => 'Chouèsir :',
 'powersearch-toggleall' => 'Tot',
-'powersearch-togglenone' => 'Niona',
+'powersearch-togglenone' => 'Nion',
 'search-external' => 'Rechèrche de defôr',
-'searchdisabled' => 'La rechèrche dessus {{SITENAME}} est dèsactivâ.
-En atendent la rèactivacion, vos pouede fâre una rechèrche per Google.
-Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
+'searchdisabled' => 'La rechèrche dessus {{SITENAME}} est dèsactivâye.
+Pendent cél temps, vos pouede fâre na rechèrche avouéc Google.
+Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 
 # Quickbar
-'qbsettings' => 'Bârra d’outils',
+'qbsettings' => 'Bârra rapida',
 'qbsettings-none' => 'Niona',
-'qbsettings-fixedleft' => 'Gôche',
-'qbsettings-fixedright' => 'Drêta',
+'qbsettings-fixedleft' => 'Fixa a gôche',
+'qbsettings-fixedright' => 'Fixa a drêta',
 'qbsettings-floatingleft' => 'Fllotenta a gôche',
 'qbsettings-floatingright' => 'Fllotenta a drêta',
 'qbsettings-directionality' => 'Fixa, d’aprés la dirèccionalitât d’ècritura de voutra lengoua',
@@ -1414,55 +1417,55 @@ Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 'mypreferences' => 'Prèferences',
 'prefs-edits' => 'Nombro de changements :',
 'prefsnologin' => 'Pas branchiê',
-'prefsnologintext' => 'Vos dête étre <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê]</span> por changiér voutres prèferences usanciér.',
+'prefsnologintext' => 'Vos dête étre <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê]</span> por dèfenir les prèferences utilisator.',
 'changepassword' => 'Changiér lo contresegno',
 'prefs-skin' => 'Habelyâjo',
-'skin-preview' => 'Prèvisualisar',
-'datedefault' => 'Gins de prèference',
+'skin-preview' => 'Prèvêre',
+'datedefault' => 'Niona prèference',
 'prefs-beta' => 'Fonccionalitâts « Bèta »',
 'prefs-datetime' => 'Dâta et hora',
 'prefs-labs' => 'Fonccionalitâts « Laboratiors »',
 'prefs-user-pages' => 'Pâges utilisator',
 'prefs-personal' => 'Enformacions a sè',
 'prefs-rc' => 'Dèrriérs changements',
-'prefs-watchlist' => 'Lista de survelyence',
-'prefs-watchlist-days' => 'Nombro de jorns a montrar dedens la lista de survelyence :',
-'prefs-watchlist-days-max' => '$1 jorn{{PLURAL:$1||s}} u més',
-'prefs-watchlist-edits' => 'Nombro maximon de changements a montrar dedens la lista de survelyence ètendua :',
-'prefs-watchlist-edits-max' => 'Nombro lo ples grant : 1000',
-'prefs-watchlist-token' => 'Jeton por la lista de survelyence :',
-'prefs-misc' => 'Prèferences de totes sôrtes',
+'prefs-watchlist' => 'Lista de siuvu',
+'prefs-watchlist-days' => 'Nombro de jorns a montrar dedens la lista de siuvu :',
+'prefs-watchlist-days-max' => 'Por lo més $1 jorn{{PLURAL:$1||s}}',
+'prefs-watchlist-edits' => 'Nombro maximon de changements a montrar dedens la lista de siuvu ètendua :',
+'prefs-watchlist-edits-max' => 'Nombro maximon : 1000',
+'prefs-watchlist-token' => 'Jeton por la lista de siuvu :',
+'prefs-misc' => 'De totes sôrtes',
 'prefs-resetpass' => 'Changiér lo contresegno',
 'prefs-changeemail' => 'Changiér l’adrèce èlèctronica',
-'prefs-setemail' => 'Configurar l’adrèce èlèctronica',
+'prefs-setemail' => 'Dèfenir n’adrèce èlèctronica',
 'prefs-email' => 'Chouèx de mèssageria èlèctronica',
 'prefs-rendering' => 'Aparence',
-'saveprefs' => 'Encartar les prèferences',
-'resetprefs' => 'Rètablir les prèferences',
-'restoreprefs' => 'Rètablir totes les valors per dèfôt',
-'prefs-editing' => 'Fenétra d’èdicion',
-'prefs-edit-boxsize' => 'Talye de la fenétra d’èdicion.',
-'rows' => 'Rengiês :',
+'saveprefs' => 'Encartar',
+'resetprefs' => 'Èfaciér los changements pas encartâs',
+'restoreprefs' => 'Rètablir tota la configuracion per dèfôt',
+'prefs-editing' => 'Changement',
+'prefs-edit-boxsize' => 'Talye de la fenétra de changement.',
+'rows' => 'Renches :',
 'columns' => 'Colones :',
 'searchresultshead' => 'Rechèrche',
 'resultsperpage' => 'Nombro de rèponses per pâge :',
 'stub-threshold' => 'Limita d’amont por los <a href="#" class="stub">lims de vers los començons</a> (octèts) :',
 'stub-threshold-disabled' => 'Dèsactivâ',
 'recentchangesdays' => 'Nombro de jorns a montrar dedens los dèrriérs changements :',
-'recentchangesdays-max' => '$1 jorn{{PLURAL:$1||s}} u més',
+'recentchangesdays-max' => 'Por lo més $1 jorn{{PLURAL:$1||s}}',
 'recentchangescount' => 'Nombro de changements a montrar per dèfôt :',
-'prefs-help-recentchangescount' => 'Cen encllut los dèrriérs changements, los historicos de les pâges et los jornals.',
-'prefs-help-watchlist-token' => 'En remplent cen avouéc una valor secrèta farat un flux RSS por voutra lista de survelyence.
-Tota pèrsona que cognêt cél jeton porrat liére voutra lista de survelyence, chouèsésséd vêr una valor sècurisâ.
-Vê-que una valor fêta per hasârd que vos pouede utilisar : $1',
-'savedprefs' => 'Les prèferences ont étâ encartâs.',
+'prefs-help-recentchangescount' => 'Los dèrriérs changements, los historicos de pâges et pués los jornals avouéc.',
+'prefs-help-watchlist-token' => 'Rempléd ceti champ avouéc na cllâf secrèta et pués un flux RSS serat fêt por voutra lista de siuvu.
+Tôs celos que cognessont cela cllâf porront liére voutra lista de siuvu, chouèsésséd vêr na valor sècurisâye.
+Vê-que na valor fêta per hasârd que vos pouede empleyér : $1',
+'savedprefs' => 'Voutres prèferences sont étâyes encartâyes.',
 'timezonelegend' => 'Fus horèro :',
 'localtime' => 'Hora locala :',
-'timezoneuseserverdefault' => 'Utilisar la valor per dèfôt du vouiqui ($1)',
-'timezoneuseoffset' => 'Ôtro (spècefiar lo dècalâjo)',
+'timezoneuseserverdefault' => 'Empleyér la valor du vouiqui per dèfôt ($1)',
+'timezoneuseoffset' => 'Ôtro (spècifiar lo dècalâjo)',
 'timezoneoffset' => 'Dècalâjo horèro¹ :',
-'servertime' => 'Hora du sèrvor :',
-'guesstimezone' => 'Utilisar la valor du navigator',
+'servertime' => 'Hora du sèrvior :',
+'guesstimezone' => 'Empleyér la valor du navigator',
 'timezoneregion-africa' => 'Africa',
 'timezoneregion-america' => 'Amèriques',
 'timezoneregion-antarctica' => 'Antartica',
@@ -1472,107 +1475,107 @@ Vê-que una valor fêta per hasârd que vos pouede utilisar : $1',
 'timezoneregion-australia' => 'Ôstralie',
 'timezoneregion-europe' => 'Eropa',
 'timezoneregion-indian' => 'Ocèan endien',
-'timezoneregion-pacific' => 'Ocèan pacefico',
-'allowemail' => 'Ôtorisar l’èxpèdicion de mèssâjos que vegnont d’ôtros usanciérs',
+'timezoneregion-pacific' => 'Ocèan pacifico',
+'allowemail' => 'Activar l’èxpèdicion de mèssâjos que vegnont d’ôtros utilisators',
 'prefs-searchoptions' => 'Rechèrche',
 'prefs-namespaces' => 'Èspâços de noms',
-'defaultns' => 'Ôtrament rechèrchiér dens cetos èspâços de noms :',
-'default' => 'per dèfôt',
+'defaultns' => 'Ôtrament rechèrchiér dedens cetos èspâços de noms :',
+'default' => 'dèfôt',
 'prefs-files' => 'Fichiérs',
 'prefs-custom-css' => 'CSS pèrsonalisâ',
 'prefs-custom-js' => 'JavaScript pèrsonalisâ',
 'prefs-common-css-js' => 'CSS / JS partagiê por tôs los habelyâjos :',
-'prefs-reset-intro' => 'Vos pouede utilisar ceta pâge por rètablir voutres prèferences a les valors du seto per dèfôt.
+'prefs-reset-intro' => 'Vos pouede empleyér ceta pâge por rètablir voutres prèferences a les valors du seto per dèfôt.
 Cen pôt pas étre dèfêt.',
-'prefs-emailconfirm-label' => 'Confirmacion de la mèssageria èlèctronica :',
-'prefs-textboxsize' => 'Talye de la fenétra d’èdicion',
+'prefs-emailconfirm-label' => 'Confirmacion de l’adrèce èlèctronica :',
+'prefs-textboxsize' => 'Talye de la fenétra de changement',
 'youremail' => 'Adrèce èlèctronica :',
 'username' => 'Nom d’utilisat{{GENDER:$1|or|rice}} :',
-'uid' => 'Numerô d’utilisat{{GENDER:$1|or|rice}} :',
+'uid' => 'Identifient d’utilisat{{GENDER:$1|or|rice}} :',
 'prefs-memberingroups' => '{{GENDER:$2|Membro}} de l{{PLURAL:$1|a tropa|es tropes}} :',
 'prefs-registration' => 'Dâta d’encartâjo :',
 'yourrealname' => 'Veré nom :',
-'yourlanguage' => 'Lengoua de l’entèrface :',
+'yourlanguage' => 'Lengoua :',
 'yourvariant' => 'Varianta de la lengoua du contegnu :',
-'prefs-help-variant' => 'Voutra varianta ou ben ortografia prèferâ por nen fâre vêre les pâges de contegnu de ceti vouiqui.',
-'yournick' => 'Signatura por les discussions :',
-'prefs-help-signature' => 'Los comentèros sur les pâges de discussion dêvont étre signês avouéc « <nowiki>~~~~</nowiki> », que serat convèrti per voutra signatura avouéc la dâta.',
-'badsig' => 'Signatura bruta fôssa.
-Controlâd voutres balises HTML.',
+'prefs-help-variant' => 'Voutra varianta ou ben ortografia prèferâye por fâre vêre les pâges de contegnu de ceti vouiqui.',
+'yournick' => 'Signatura novèla :',
+'prefs-help-signature' => 'Los comentèros sur les pâges de discussion dêvont étre signês avouéc « <nowiki>~~~~</nowiki> » que serat convèrti per voutra signatura avouéc la dâta et hora.',
+'badsig' => 'Signatura bruta pas justa.
+Controlâd les balises HTML.',
 'badsiglength' => 'Voutra signatura est trop longe.
 Dêt pas dèpassar $1 caractèro{{PLURAL:$1||s}}.',
 'yourgender' => 'Sèxo :',
 'gender-unknown' => 'Pas rensègnê',
 'gender-male' => 'Masculin',
 'gender-female' => 'Femenin',
-'prefs-help-gender' => 'U chouèx : utilisâ por acordar en genro los mèssâjos de l’entèrface.
-Ceta enformacion serat publica.',
+'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 spècefiâd, serat utilisâ por vos atribuar voutres contribucions.',
-'prefs-help-email' => 'L’adrèce èlèctronica est u chouèx, mas el est nècèssèra por tornar inicialisar voutron contresegno, se vos vegné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 sur voutra pâge usanciér ou ben de discussion sen que seye nècèssèro de dèvouèlar voutra identitât.',
-'prefs-help-email-required' => 'Una adrèce èlèctronica est nècèssèra.',
+'prefs-help-realname' => 'U chouèx : se vos lo balyéd, serat empleyê por vos atribuar voutres ôvres.',
+'prefs-help-email' => 'U chouèx : mas el est nècèssèra por remetre 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' => 'N’adrèce èlèctronica est nècèssèra.',
 'prefs-info' => 'Enformacions de bâsa',
 'prefs-i18n' => 'Entèrnacionalisacion',
 'prefs-signature' => 'Signatura',
-'prefs-dateformat' => 'Format de les dâtes',
+'prefs-dateformat' => 'Format de la dâta',
 'prefs-timeoffset' => 'Dècalâjo horèro',
 'prefs-advancedediting' => 'Chouèx avanciês',
 'prefs-advancedrc' => 'Chouèx avanciês',
 'prefs-advancedrendering' => 'Chouèx avanciês',
 'prefs-advancedsearchoptions' => 'Chouèx avanciês',
 'prefs-advancedwatchlist' => 'Chouèx avanciês',
-'prefs-displayrc' => 'Chouèx de visualisacion',
-'prefs-displaysearchoptions' => 'Chouèx de visualisacion',
-'prefs-displaywatchlist' => 'Chouèx de visualisacion',
+'prefs-displayrc' => 'Chouèx de vua',
+'prefs-displaysearchoptions' => 'Chouèx de vua',
+'prefs-displaywatchlist' => 'Chouèx de vua',
 'prefs-diffs' => 'Difèrences',
 
 # User preference: e-mail validation using jQuery
-'email-address-validity-valid' => 'L’adrèce èlèctronica semble valida',
-'email-address-validity-invalid' => 'Buchiéd una adrèce èlèctronica valida',
+'email-address-validity-valid' => 'L’adrèce èlèctronica semble justa',
+'email-address-validity-invalid' => 'Buchiéd n’adrèce èlèctronica justa',
 
 # User rights
-'userrights' => 'Administracion des drêts d’usanciér',
+'userrights' => 'Administracion des drêts d’utilisator',
 'userrights-lookup-user' => 'Administracion de les tropes d’utilisators',
-'userrights-user-editname' => 'Buchiéd un nom d’usanciér :',
-'editusergroup' => 'Changiér les tropes a l’usanciér',
-'editinguser' => "Changement des drêts d’usanciér a l’usanciér '''[[User:$1|$1]]''' $2",
-'userrights-editusergroup' => 'Changiér les tropes a l’usanciér',
+'userrights-user-editname' => 'Buchiéd un nom d’utilisator :',
+'editusergroup' => 'Changiér les tropes d’utilisators',
+'editinguser' => "Changement des drêts d’utilisator de l’utilisat{{GENDER:$1|or|rice}} '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Changiér les tropes d’utilisators',
 'saveusergroups' => 'Encartar les tropes d’utilisators',
-'userrights-groupsmember' => 'Membro de :',
-'userrights-groupsmember-auto' => 'Membro emplicito de :',
-'userrights-groups-help' => 'Vos pouede changiér les tropes a lesquintes est ceti usanciér.
-* Una câsa pouentâ vôt dére que l’usanciér sè trove dens cela tropa.
-* Una câsa pas pouentâ vôt dére qu’y sè trove pas.
-* Una petiôta ètêla (*) endique que vos porréd pas enlevar cela tropa setout que vos l’aréd apondua et l’un l’ôtro.',
+'userrights-groupsmember' => 'Membr{{GENDER:$2|o|a}} de :',
+'userrights-groupsmember-auto' => '{{GENDER:$2|Membro tacito|Membra tacita}} de :',
+'userrights-groups-help' => 'Vos pouede changiér les tropes a lesquintes est cet’utilisat{{GENDER:$1|or|rice}} :
+* Na câsa pouentâye vôt dére que l’utilisat{{GENDER:$1|or|rice}} sè trôve dedens cela tropa.
+* Na câsa pas pouentâye vôt dére que s’y trôve pas.
+* Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.',
 'userrights-reason' => 'Rêson :',
-'userrights-no-interwiki' => 'Vos avéd pas la pèrmission de changiér des drêts d’usanciér dessus d’ôtros vouiquis.',
-'userrights-nodatabase' => 'La bâsa de balyês « $1 » ègziste pas ou ben el est pas locala.',
-'userrights-nologin' => 'Vos vos dête [[Special:UserLogin|branchiér]] avouéc un compto d’administrator por balyér des drêts d’usanciér.',
-'userrights-notallowed' => 'Voutron compto at pas la pèrmission de balyér ou enlevar des drêts d’usanciér.',
+'userrights-no-interwiki' => 'Vos avéd pas la pèrmission de changiér des drêts d’utilisator dessus d’ôtros vouiquis.',
+'userrights-nodatabase' => 'La bâsa de donâs « $1 » ègziste pas ou ben el est pas locala.',
+'userrights-nologin' => 'Vos vos dête [[Special:UserLogin|branchiér]] avouéc un compto d’administrator por balyér des drêts d’utilisator.',
+'userrights-notallowed' => 'Voutron compto at pas la pèrmission de balyér ou ben enlevar des drêts d’utilisator.',
 'userrights-changeable-col' => 'Les tropes que vos pouede changiér',
 'userrights-unchangeable-col' => 'Les tropes que vos pouede pas changiér',
 
 # Groups
 'group' => 'Tropa :',
-'group-user' => 'Usanciérs',
-'group-autoconfirmed' => 'Usanciérs encartâs',
-'group-bot' => 'Bots',
+'group-user' => 'Utilisators',
+'group-autoconfirmed' => 'Utilisators ôtoconfirmâs',
+'group-bot' => 'Robots',
 'group-sysop' => 'Administrators',
 'group-bureaucrat' => 'Grata-papiérs',
 'group-suppress' => 'Supèrvisors',
 'group-all' => '(tôs)',
 
-'group-user-member' => 'usanciér{{GENDER:$1||e}}',
-'group-autoconfirmed-member' => 'usanciér{{GENDER:$1||e}} encartâ',
-'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-user-member' => 'utilisat{{GENDER:$1|or|rice}}',
+'group-autoconfirmed-member' => 'utilisat{{GENDER:$1|or ôtoconfirmâ|rice ôtoconfirmâye}}',
+'group-bot-member' => '{{GENDER:$1|robot}}',
 'group-sysop-member' => 'administrat{{GENDER:$1|or|rice}}',
 'group-bureaucrat-member' => '{{GENDER:$1|grata-papiér}}',
 'group-suppress-member' => 'supèrviso{{GENDER:$1|r|sa}}',
 
-'grouppage-user' => '{{ns:project}}:Usanciérs',
-'grouppage-autoconfirmed' => '{{ns:project}}:Usanciérs encartâs',
-'grouppage-bot' => '{{ns:project}}:Bots',
+'grouppage-user' => '{{ns:project}}:Utilisators',
+'grouppage-autoconfirmed' => '{{ns:project}}:Utilisators ôtoconfirmâs',
+'grouppage-bot' => '{{ns:project}}:Robots',
 'grouppage-sysop' => '{{ns:project}}:Administrators',
 'grouppage-bureaucrat' => '{{ns:project}}:Grata-papiérs',
 'grouppage-suppress' => '{{ns:project}}:Supèrvisors',
@@ -1582,108 +1585,106 @@ Ceta enformacion serat publica.',
 'right-edit' => 'Changiér les pâges',
 'right-createpage' => 'Fâre des pâges (que sont pas des pâges de discussion)',
 'right-createtalk' => 'Fâre des pâges de discussion',
-'right-createaccount' => 'Fâre des comptos usanciér novéls',
-'right-minoredit' => 'Marcar sos changements coment petiôts',
-'right-move' => 'Renomar des pâges',
-'right-move-subpages' => 'Renomar des pâges avouéc lors sot-pâges',
-'right-move-rootuserpages' => 'Renomar la pâge principâla a un usanciér',
-'right-movefile' => 'Renomar des fichiérs',
-'right-suppressredirect' => 'Pas fâre de redirèccion dês lo titro d’origina en renoment una pâge',
+'right-createaccount' => 'Fâre des comptos utilisator novéls',
+'right-minoredit' => 'Marcar los changements coment petiôts',
+'right-move' => 'Dèplaciér des pâges',
+'right-move-subpages' => 'Dèplaciér des pâges avouéc lors sot-pâges',
+'right-move-rootuserpages' => 'Dèplaciér des pâges utilisator principâles',
+'right-movefile' => 'Dèplaciér des fichiérs',
+'right-suppressredirect' => 'Pas fâre de redirèccion dês la pâge d’origina en dèplacient na pâge',
 'right-upload' => 'Tèlèchargiér des fichiérs',
 'right-reupload' => 'Ècllafar un fichiér ègzistent',
-'right-reupload-own' => 'Ècllafar un fichiér qu’on at sè-mémo tèlèchargiê',
-'right-reupload-shared' => 'Ècllafar localament un fichiér present sur un dèpôt de fichiérs partagiê',
-'right-upload_by_url' => 'Tèlèchargiér un fichiér dês una URL',
-'right-purge' => 'Purgiér lo cache de les pâges sen demanda de confirmacion',
-'right-autoconfirmed' => 'Changiér les pâges mié-protègiês',
-'right-bot' => 'Étre trètâ coment una pratica ôtomatisâ',
-'right-nominornewtalk' => 'Pas dècllenchiér la notificacion de mèssâjo novél quand on fât un petiôt changement sur la pâge de discussion a un usanciér',
-'right-apihighlimits' => 'Utilisar des limites ples hôtes dens les requétes API',
-'right-writeapi' => 'Utilisar l’API d’ècritura',
+'right-reupload-own' => 'Ècllafar un fichiér ègzistent tèlèchargiê per sè-mémo',
+'right-reupload-shared' => 'Ècllafar localament un fichiér present sur un dèpôt de fichiérs mèdia partagiê',
+'right-upload_by_url' => 'Tèlèchargiér un fichiér dês n’URL',
+'right-purge' => 'Purgiér lo cacho du seto d’una pâge sen confirmacion',
+'right-autoconfirmed' => 'Changiér les pâges mié-protègiêes',
+'right-bot' => 'Étre trètâ coment na mètoda ôtomatisâye',
+'right-nominornewtalk' => 'Pas dècllenchiér la notificacion de mèssâjo novél quand font un petiôt changement sur la pâge de discussion d’un utilisator',
+'right-apihighlimits' => 'Empleyér des limites ples hôtes dedens les demandes API',
+'right-writeapi' => 'Empleyér l’API d’ècritura',
 'right-delete' => 'Suprimar des pâges',
-'right-bigdelete' => 'Suprimar des pâges qu’ont un grant historico',
+'right-bigdelete' => 'Suprimar des pâges qu’ont un grôs historico',
 'right-deletelogentry' => 'Suprimar et refâre n’entrâ spècifica du jornal',
-'right-deleterevision' => 'Suprimar ou refâre una vèrsion spècefica d’una pâge',
-'right-deletedhistory' => 'Vêre les entrâs des historicos suprimâs mas sen lor tèxto',
-'right-deletedtext' => 'Vêre lo tèxto suprimâ et les difèrences entre les vèrsions suprimâs',
-'right-browsearchive' => 'Rechèrchiér des pâges suprimâs',
-'right-undelete' => 'Refâre una pâge suprimâ',
-'right-suppressrevision' => 'Revêre et refâre les vèrsions cachiês ux administrators',
+'right-deleterevision' => 'Suprimar et refâre na vèrsion spècifica d’una pâge',
+'right-deletedhistory' => 'Vêre les entrâs suprimâyes de l’historico sen lor tèxto',
+'right-deletedtext' => 'Vêre lo tèxto suprimâ et pués los changements entre les vèrsions suprimâyes',
+'right-browsearchive' => 'Rechèrchiér des pâges suprimâyes',
+'right-undelete' => 'Refâre na pâge',
+'right-suppressrevision' => 'Revêre et refâre les vèrsions cachiêes ux administrators',
 'right-suppressionlog' => 'Vêre los jornals privâs',
-'right-block' => 'Blocar en ècritura d’ôtros usanciérs',
-'right-blockemail' => 'Empachiér un usanciér de mandar des mèssâjos',
-'right-hideuser' => 'Blocar un usanciér en cachient son nom u publico',
-'right-ipblock-exempt' => 'Pas étre afèctâ per les adrèces IP blocâs, los blocâjos ôtomaticos et los blocâjos de plages d’adrèces IP',
-'right-proxyunbannable' => "Pas étre afèctâ per los blocâjos ôtomaticos de sèrvors mandatèros (''proxies'')",
+'right-block' => 'Blocar en ècritura d’ôtros utilisators',
+'right-blockemail' => 'Empachiér un utilisator de mandar des mèssâjos',
+'right-hideuser' => 'Blocar un utilisator en cachient son nom u publico',
+'right-ipblock-exempt' => 'Èvitar los blocâjos d’adrèces IP, los blocâjos ôtomaticos et pués los blocâjos de plages d’adrèces IP',
+'right-proxyunbannable' => 'Èvitar los blocâjos ôtomaticos de proxis',
 'right-unblockself' => 'Sè dèblocar lor-mémos',
-'right-protect' => 'Changiér lo nivél de protèccion de les pâges et changiér les pâges protègiês',
-'right-editprotected' => 'Changiér les pâges protègiês (sen protèccion en cascâda)',
-'right-editinterface' => 'Changiér l’entèrface de la programeria',
-'right-editusercssjs' => 'Changiér los fichiérs CSS et JS d’ôtros usanciérs',
-'right-editusercss' => 'Changiér los fichiérs CSS d’ôtros usanciérs',
-'right-edituserjs' => 'Changiér los fichiérs JS d’ôtros usanciérs',
-'right-rollback' => 'Rèvocar rêdo los changements u dèrriér usanciér qu’at changiê una pâge spècefica',
-'right-markbotedits' => 'Marcar des changements rèvocâs coment Ã¨yent Ã©tâ fêts per un bot',
+'right-protect' => 'Changiér lo nivél de protèccion et pués changiér les pâges protègiêes',
+'right-editprotected' => 'Changiér les pâges protègiêes (sen protèccion en cascâda)',
+'right-editinterface' => 'Changiér l’entèrface utilisator',
+'right-editusercssjs' => 'Changiér los fichiérs CSS et JavaScript d’ôtros utilisators',
+'right-editusercss' => 'Changiér los fichiérs CSS d’ôtros utilisators',
+'right-edituserjs' => 'Changiér los fichiérs JavaScript d’ôtros utilisators',
+'right-rollback' => 'Rèvocar rêdo los changements du dèrriér utilisator qu’at changiê na pâge particuliére',
+'right-markbotedits' => 'Marcar des changements rèvocâs coment Ã©tent Ã©tâs fêts per un robot',
 'right-noratelimit' => 'Pas étre afèctâ per les limites de quota',
 'right-import' => 'Importar des pâges dês d’ôtros vouiquis',
 'right-importupload' => 'Importar des pâges dês un fichiér tèlèchargiê',
-'right-patrol' => 'Marcar des changements ux ôtros coment survelyês',
-'right-autopatrol' => 'Avêr sos changements marcâs ôtomaticament coment survelyês',
-'right-patrolmarks' => 'Vêre los marcâjos de survelyence dens los dèrriérs changements',
-'right-unwatchedpages' => 'Vêre la lista de les pâges pas siuvues',
+'right-patrol' => 'Marcar los changements des ôtros coment gouardâs',
+'right-autopatrol' => 'Avêr los sins changements marcâs ôtomaticament coment gouardâs',
+'right-patrolmarks' => 'Vêre les mârques de gouârda dedens los dèrriérs changements',
+'right-unwatchedpages' => 'Vêre na lista de les pâges pas siuvues',
 'right-mergehistory' => 'Fusionar los historicos de les pâges',
-'right-userrights' => 'Changiér tôs los drêts a un usanciér',
-'right-userrights-interwiki' => 'Changiér los drêts ux usanciérs sur d’ôtros vouiquis',
-'right-siteadmin' => 'Vèrrolyér ou dèvèrrolyér la bâsa de balyês',
-'right-override-export-depth' => 'Èxportar les pâges en encllusent les pâges liyês tant qu’a una provondior de 5 nivéls',
-'right-sendemail' => 'Mandar un mèssâjo ux ôtros usanciérs',
+'right-userrights' => 'Changiér tôs los drêts d’un utilisator',
+'right-userrights-interwiki' => 'Changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui',
+'right-siteadmin' => 'Vèrrolyér et dèvèrrolyér la bâsa de donâs',
+'right-override-export-depth' => 'Èxportar les pâges avouéc les pâges liyêes tant qu’a na provondior de 5 nivéls',
+'right-sendemail' => 'Mandar un mèssâjo ux ôtros utilisators',
 'right-passwordreset' => 'Vêre los mèssâjos de remisa a zérô des contresegnos',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jornal de les crèacions d’utilisators',
+'newuserlogpagetext' => 'O est un jornal de les crèacions d’utilisators.',
+
 # User rights log
-'rightslog' => 'Jornal des changements de statut d’usanciér',
-'rightslogtext' => 'Vê-que lo jornal des changements de statut d’usanciér.',
-'rightslogentry' => 'at changiê los drêts de l’utilisator « $1 » de $2 a $3',
-'rightslogentry-autopromote' => 'est étâ nomâ ôtomaticament de $2 a $3',
-'logentry-rights-rights' => '$1 at changiê l’apartegnence a la tropa por « $3 » de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 at changiê l’apartegnence a la tropa por « $3 »',
-'logentry-rights-autopromote' => '$1 est étâ nomâ ôtomaticament de $4 a $5',
-'rightsnone' => '(nion)',
+'rightslog' => 'Jornal des drêts d’utilisator',
+'rightslogtext' => 'O est un jornal des changements des drêts d’utilisator.',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'liére cela pâge',
 'action-edit' => 'changiér cela pâge',
 'action-createpage' => 'fâre des pâges',
 'action-createtalk' => 'fâre des pâges de discussion',
-'action-createaccount' => 'fâre cél compto usanciér',
+'action-createaccount' => 'fâre cél compto utilisator',
 'action-minoredit' => 'marcar cél changement coment petiôt',
-'action-move' => 'renomar cela pâge',
-'action-move-subpages' => 'renomar cela pâge et ses sot-pâges',
-'action-move-rootuserpages' => 'renomar la pâge principâla a un usanciér',
-'action-movefile' => 'renomar cél fichiér',
+'action-move' => 'dèplaciér cela pâge',
+'action-move-subpages' => 'dèplaciér cela pâge et les sines sot-pâges',
+'action-move-rootuserpages' => 'dèplaciér les pâges utilisator principâles',
+'action-movefile' => 'dèplaciér cél fichiér',
 'action-upload' => 'tèlèchargiér cél fichiér',
 'action-reupload' => 'ècllafar cél fichiér ègzistent',
 'action-reupload-shared' => 'ècllafar localament cél fichiér present sur un dèpôt partagiê',
-'action-upload_by_url' => 'tèlèchargiér cél fichiér dês una URL',
-'action-writeapi' => 'utilisar l’API d’ècritura',
+'action-upload_by_url' => 'tèlèchargiér cél fichiér dês n’URL',
+'action-writeapi' => 'empleyér l’API d’ècritura',
 'action-delete' => 'suprimar cela pâge',
 'action-deleterevision' => 'suprimar cela vèrsion',
 'action-deletedhistory' => 'vêre l’historico suprimâ de cela pâge',
-'action-browsearchive' => 'rechèrchiér des pâges suprimâs',
+'action-browsearchive' => 'rechèrchiér des pâges suprimâyes',
 'action-undelete' => 'refâre cela pâge',
-'action-suppressrevision' => 'revêre et refâre cela vèrsion cachiê',
+'action-suppressrevision' => 'revêre et refâre cela vèrsion cachiêe',
 'action-suppressionlog' => 'vêre cél jornal privâ',
-'action-block' => 'blocar en ècritura cél usanciér',
+'action-block' => 'blocar en ècritura cél utilisator',
 'action-protect' => 'changiér los nivéls de protèccion por cela pâge',
-'action-rollback' => 'rèvocar rêdo los changements u dèrriér usanciér qu’at changiê una pâge spècefica',
+'action-rollback' => 'rèvocar rêdo los changements du dèrriér utilisator qu’at changiê na pâge particuliére',
 'action-import' => 'importar cela pâge dês un ôtro vouiqui',
 'action-importupload' => 'importar cela pâge dês un fichiér tèlèchargiê',
-'action-patrol' => 'marcar lo changement ux ôtros coment survelyê',
-'action-autopatrol' => 'avêr voutron changement marcâ coment survelyê',
+'action-patrol' => 'marcar lo changement des ôtros coment gouardâ',
+'action-autopatrol' => 'avêr voutron changement marcâ coment gouardâ',
 'action-unwatchedpages' => 'vêre la lista de les pâges pas siuvues',
 'action-mergehistory' => 'fusionar l’historico de cela pâge',
-'action-userrights' => 'changiér tôs los drêts d’usanciér',
-'action-userrights-interwiki' => 'changiér los drêts ux usanciérs sur d’ôtros vouiquis',
-'action-siteadmin' => 'vèrrolyér ou ben dèvèrrolyér la bâsa de balyês',
+'action-userrights' => 'changiér tôs los drêts d’utilisator',
+'action-userrights-interwiki' => 'changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui',
+'action-siteadmin' => 'vèrrolyér ou ben dèvèrrolyér la bâsa de donâs',
 'action-sendemail' => 'mandar des mèssâjos',
 
 # Recent changes
@@ -1691,29 +1692,29 @@ Ceta enformacion serat publica.',
 'recentchanges' => 'Dèrriérs changements',
 'recentchanges-legend' => 'Chouèx des dèrriérs changements',
 'recentchanges-summary' => 'Siude los dèrriérs changements du vouiqui sur ceta pâge.',
-'recentchanges-feed-description' => 'Siude los dèrriérs changements du vouiqui dens ceti flux.',
-'recentchanges-label-newpage' => 'Ceti changement at fêt una pâge novèla.',
-'recentchanges-label-minor' => 'Ceti changement est petiôt.',
-'recentchanges-label-bot' => 'Ceti changement at étâ fêt per un bot.',
-'recentchanges-label-unpatrolled' => 'Ceti changement at p’oncor étâ survelyê.',
+'recentchanges-feed-description' => 'Siude los dèrriérs changements du vouiqui dedens ceti flux.',
+'recentchanges-label-newpage' => 'Ceti changement at fêt na pâge novèla',
+'recentchanges-label-minor' => 'O est un petiôt changement',
+'recentchanges-label-bot' => 'Ceti changement est étâ fêt per un robot',
+'recentchanges-label-unpatrolled' => 'Ceti changement est p’oncor étâ gouardâ',
 'rcnote' => "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|lo jorn passâ|los '''$2''' jorns passâs}} tant qu’a $5 lo $4.",
-'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' ('''$1''' u més).",
+'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' (tant qu’a '''$1''' montrâs).",
 'rclistfrom' => 'Montrar los novéls changements dês lo $1',
 'rcshowhideminor' => '$1 los petiôts changements',
-'rcshowhidebots' => '$1 los bots',
-'rcshowhideliu' => '$1 los usanciérs encartâs',
+'rcshowhidebots' => '$1 los robots',
+'rcshowhideliu' => '$1 los utilisators branchiês',
 'rcshowhideanons' => '$1 los utilisators anonimos',
-'rcshowhidepatr' => '$1 los changements survelyês',
-'rcshowhidemine' => '$1 mos changements',
+'rcshowhidepatr' => '$1 los changements gouardâs',
+'rcshowhidemine' => '$1 los mins changements',
 'rclinks' => 'Montrar los $1 dèrriérs changements fêts pendent los $2 jorns passâs<br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
-'hide' => 'cachiér',
+'hide' => 'Cachiér',
 'show' => 'Montrar',
 'minoreditletter' => 'p',
 'newpageletter' => 'N',
-'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|usanciér qu’est|usanciérs que sont}} aprés siuvre]',
+'boteditletter' => 'r',
+'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|utilisator qu’est|utilisators que sont}} aprés siuvre]',
 'rc_categories' => 'Limita de les catègories (sèparacion avouéc « | »)',
 'rc_categories_any' => 'Totes',
 'rc-change-size-new' => '$1 octèt{{PLURAL:$1||s}} aprés changement',
@@ -2304,10 +2305,6 @@ Protocolos recognus : <code>$1</code> (apondéd gins de cetos dedens voutra rech
 'activeusers-hidesysops' => 'Cachiér los administrators',
 'activeusers-noresult' => 'Gins d’usanciér trovâ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jornal de les crèacions de comptos usanciér',
-'newuserlogpagetext' => 'O est un jornal de les crèacions de comptos usanciér.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Drêts a les tropes d’usanciérs',
 'listgrouprights-summary' => 'Ceta pâge contint una lista a les tropes dèfenies sur ceti vouiqui et pués los drêts d’accès que lor sont associyês.
@@ -2443,6 +2440,8 @@ $UNWATCHURL
 
 Avis et assistance de ples :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'fêta',
+'changed' => 'changiê',
 
 # Delete
 'deletepage' => 'Suprimar la pâge',
@@ -4130,6 +4129,10 @@ Les émâges sont montrâs dens lor plêna rèsolucion, los ôtros fichiérs son
 'logentry-newusers-create2' => 'Lo compto utilisator $3 est étâ fêt per $1',
 'logentry-newusers-autocreate' => 'Lo compto $1 at étâ fêt ôtomaticament',
 'newuserlog-byemail' => 'contresegno mandâ per mèssageria èlèctronica',
+'logentry-rights-rights' => '$1 at changiê l’apartegnence a la tropa por « $3 » de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 at changiê l’apartegnence a la tropa por « $3 »',
+'logentry-rights-autopromote' => '$1 est étâ nomâ ôtomaticament de $4 a $5',
+'rightsnone' => '(nion)',
 
 # Feedback
 'feedback-bugornote' => 'Se vos éte prèst a dècrire un problèmo tècnico en dètaly, volyéd [$1 signalar una cofierie].
index b188ba5..48da258 100644 (file)
@@ -152,6 +152,7 @@ $messages = array(
 'newwindow' => '(wårt önj en nai waning ääm mååged)',
 'cancel' => 'Oufbreege',
 'moredotdotdot' => 'Mör ...',
+'morenotlisted' => 'Öödern, ei apfeerd ...',
 'mypage' => 'Sidj',
 'mytalk' => 'Diskusjuun',
 'anontalk' => 'Diskusjoonssid foon jüdeer IP',
@@ -185,6 +186,7 @@ $messages = array(
 'namespaces' => 'Noomerüme',
 'variants' => 'Fariante',
 
+'navigation-heading' => 'Nawigatsjuun',
 'errorpagetitle' => 'Fäägel',
 'returnto' => 'Tubääg tu jü side $1.',
 'tagline' => 'Üt {{SITENAME}}',
@@ -285,6 +287,10 @@ Sii jü [[Special:Version|Färsjoonssid]]',
 'youhavenewmessages' => 'Dü hääst $1 aw din diskusjoonssid ($2).',
 'newmessageslink' => 'naie tisinge',
 'newmessagesdifflink' => 'Leest änring',
+'youhavenewmessagesfromusers' => 'Dü heest $1 faan {{PLURAL:$3|en öödern brüker|$3 ööder brükern}} ($2).',
+'youhavenewmessagesmanyusers' => 'Dü heest $1 faan flook ööder brükern ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ian nei nooracht|nei noorachten}}',
+'newmessagesdifflinkplural' => 'leetst {{PLURAL:$1|feranrang|feranrangen}}',
 'youhavenewmessagesmulti' => 'Dü hääst nai tisinge aw $1',
 'editsection' => 'Beårbe',
 'editsection-brackets' => '[$1]',
@@ -413,6 +419,7 @@ Di grünj faan di administraator as: „$3“.',
 'invalidtitle-knownnamespace' => 'Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“',
 'invalidtitle-unknownnamespace' => 'Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“',
 'exception-nologin' => 'Ei uunmeldet',
+'exception-nologin-text' => 'Det könst dü bluas bewerke, wan dü uunmeldet beest.',
 
 # Virus scanner
 'virus-badscanner' => "Hiinje konfigurasjoon: ünbekånde fiirusscanner: ''$1''",
@@ -424,12 +431,16 @@ Di grünj faan di administraator as: „$3“.',
 
 Dü koost {{SITENAME}} nü anonüüm widerbrüke, unti de wider uner diseelew unti en oudern brükernoome <span class='plainlinks'>[$1 önjmälde]</span>.
 Påås aw, dåt hu side nuch wise koone, dåt dü önjmälded bast, sülung dü ai dan browsercache lääsimååged heest.",
+'welcomeuser' => 'Welkimen, $1!',
+'welcomecreation-msg' => 'Din brükerkonto as iinracht wurden.
+Ferjid det ei, an aachte üüb din [[Special:Preferences|{{SITENAME}} iinstelangen]].',
 'yourname' => 'Brükernoome:',
 'yourpassword' => 'Pååsuurd:',
 'yourpasswordagain' => 'Schriw pååsuurd nuch iinjsen:',
-'remembermypassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for {{PLURAL:$1|däi|deege}})',
+'remembermypassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for $1 {{PLURAL:$1|däi|deege}})',
 'securelogin-stick-https' => 'Eefter önjmälding ma HTTPS ferbünen bliwe',
 'yourdomainname' => 'Din domain:',
+'password-change-forbidden' => 'Üüb detheer wiki könst dü nian paaswurden feranre.',
 'externaldberror' => 'Deer läit en fäägel bai jü äkstärn autentifisiiring for, unti dü möist din äkstärn brükerkonto äi aktualisiire.',
 'login' => 'Önjmälde',
 'nav-login-createaccount' => 'Önjmälde',
@@ -519,6 +530,7 @@ Wees sü gödj än täif, bit dü wider ferseechst.',
 # E-mail sending
 'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktsjuun mail() faan PHP.',
 'user-mail-no-addy' => 'Köö niinj e-mail schake suner e-mail-adres.',
+'user-mail-no-body' => 'Dü wulst en e-mail saner tekst wechsjüür.',
 
 # Change password dialog
 'resetpass' => 'Pååsuurd änre',
@@ -575,6 +587,7 @@ Tidwis paasuurd: $2',
 'changeemail-oldemail' => 'Aktuel e-mail adres',
 'changeemail-newemail' => 'Nei e-mail adres',
 'changeemail-none' => '(niin)',
+'changeemail-password' => 'Din {{SITENAME}} paaswurd:',
 'changeemail-submit' => 'E-mail adres feranre',
 'changeemail-cancel' => 'Ufbreeg',
 
@@ -670,6 +683,10 @@ Dü koost dideere tiitel aw da ouder side [[Special:Search/{{PAGENAME}}|säke]],
 <span class="plainlinks">önj da deertuhiirende [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logböke säke] unti jüdeer sid [{{fullurl:{{FULLPAGENAME}}|action=edit}} beårbe]</span>.',
 'noarticletext-nopermission' => 'Üüb detdiar sidj stäänt noch niks, oober dü mutst diar uk niks iinskriiw.
 Dü könst diar üüb ööder sidjen efter [[Special:Search/{{PAGENAME}}|sjük]] of a <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAME}}}} logbuken uunluke].</span>',
+'missing-revision' => 'Det werjuun #$1 faan det sidj "{{PAGENAME}}" jaft at ei.
+
+Det komt diar miast faan, dat en ual ferwisang stregen wurden as.
+Dü könst det uun\'t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} logbuk faan stregen sidjen] efterlees.',
 'userpage-userdoesnotexist' => "Det brükerkonto ''$1'' as ei diar.
 Wel dü detdiar sidj würelk maage/bewerke?",
 'userpage-userdoesnotexist-view' => 'Benjüterkonto "$1" bestoont ai.',
@@ -773,6 +790,15 @@ Jü wörd önjscheened sleeked.',
 'edit-already-exists' => 'Köö niinj nai sid mååge.
 Dåt bestöö ål.',
 'defaultmessagetext' => 'Standard tekst',
+'content-failed-to-parse' => "Parsing faan $2 för't model $1 ging skiaf: $3",
+'invalid-content-data' => 'Diar stäänt wat uun, wat diar ei hen hiart',
+'content-not-allowed-here' => '„$1“ mut ei skrewen wurd üüb sidj [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-text' => 'normool tekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Woorschauing: Jüdeer sid önjthålt tu fool apteele foon widluftie parserfunksjoone.
@@ -792,6 +818,7 @@ Deer {{PLURAL:$2|mötj ai mör ås 1 apteel|mönje ai mör ås $1 apteele}} wees
 'expansion-depth-exceeded-warning' => 'Detdiar sidj hää tuföl ütjwidjangen (expansion)',
 'parser-unstrip-loop-warning' => 'Diar as en jinsidjag ferwisang',
 'parser-unstrip-recursion-limit' => 'Tuföl jinsidjag ferwisangen bi $1',
+'converter-manual-rule-error' => "Bi't manuel reegel för't spriakferanrang lääpt wat skiaf.",
 
 # "Undo" feature
 'undo-success' => 'Detdiar feranrang koon turag nimen wurd. 
@@ -979,6 +1006,10 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 'editundo' => 'tunintemååge',
 'diff-multi' => '({{PLURAL:$1|Ian wersjuun diartesken|$1 wersjuunen diartesken}} faan {{PLURAL:$2|ään brüker|$2 brükern}} {{PLURAL:$1|woort|wurd}} ei uunwiset)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ian wersjuun diartesken|$1 wersjuunen diartesken}} faan muar üs $2 {{PLURAL:$2|brüker|brükern}} wurd ei uunwiset)',
+'difference-missing-revision' => "{{PLURAL:$2|Ian werjuun|$2 werjuunen}} faan di ferskeel ($1) {{PLURAL:$2|as|san}} ei fünjen wurden.
+
+Det komt diar miast faan, dat en ual ferwisang stregen wurden as.
+Dü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} logbuk faan stregen sidjen] efterlees.",
 
 # Search results
 'searchresults' => 'Säkjresultoote',
@@ -1243,9 +1274,11 @@ Do san jo ual iinstelangen wech.',
 'right-browsearchive' => 'Sjük stregen sidjen',
 'right-sendemail' => 'E-mails tu oudere brükere schake',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nai-önjmäldings-logbök',
+
 # User rights log
 'rightslog' => 'Ruchte-logbök',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'jüdeer sid leese',
@@ -1412,9 +1445,6 @@ Det beskriiwang faan't [$2 beskriiwangssidj] woort oner uunwiset.",
 'linksearch-ok' => 'Säk',
 'linksearch-line' => '$2 ferwiset üüb $1',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nai-önjmäldings-logbök',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lasmoote-list)',
 
@@ -1852,6 +1882,7 @@ Deeraw föliende sidelinke önj dåtseelwi ra definiire ütnååme, önj di kont
 'logentry-move-move-noredirect' => '$1 hää det sidj $3 efter $4 saner widjerfeerang fersköwen.',
 'logentry-move-move_redir' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen.',
 'logentry-move-move_redir-noredirect' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen saner salew en widjerfeerang uuntuleien.',
+'rightsnone' => '(-)',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunden}}',
index 7d912b8..8cac7b2 100644 (file)
@@ -814,6 +814,10 @@ La tô direzion di pueste no ven mostrade cuant che i utents ti contatin.',
 
 'grouppage-sysop' => '{{ns:project}}:Aministradôrs',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Regjistri dai gnûfs utents',
+'newuserlogpagetext' => 'Ca sot tu cjatis un regjistri dai gnûfs utents creâts.',
+
 # User rights log
 'rightslog' => 'Regjistri dai dirits dai utents',
 
@@ -1112,10 +1116,6 @@ Cjale ancje lis [[Special:WantedCategories|categoriis desideradis]].',
 'activeusers-hidesysops' => 'Plate i aministradôrs',
 'activeusers-noresult' => 'Nissun utent cjatât.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Regjistri dai gnûfs utents',
-'newuserlogpagetext' => 'Ca sot tu cjatis un regjistri dai gnûfs utents creâts.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dirits dai grups di utents',
 'listgrouprights-group' => 'Grup',
@@ -1173,6 +1173,8 @@ e la pagjine e sarà '''gruessute''' te [[Special:RecentChanges|liste dai ultins
 'enotif_reset' => 'Segne dutis lis pagjinis come visitadis',
 'enotif_impersonal_salutation' => 'Utent di {{SITENAME}}',
 'enotif_anon_editor' => 'utent anonim $1',
+'created' => 'creade',
+'changed' => 'cambiade',
 
 # Delete
 'deletepage' => 'Elimine pagjine',
index 883816b..994b15b 100644 (file)
@@ -1154,11 +1154,13 @@ Jo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwi
 'right-siteadmin' => 'De database blokkearje en wer frij jaan',
 'right-override-export-depth' => 'Alle siden oant en mei in keppelingsdjipte fan fiif fuortskriuwe',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ynskriuwingsloch',
+'newuserlogpagetext' => "Dit is in loch fan meidoggers dy't de lêste tiid ynskreaun binne.",
+
 # User rights log
 'rightslog' => 'Rjochten-loch',
 'rightslogtext' => 'Dit is in loch fan feroarings fan meidoggerrjochten.',
-'rightslogentry' => 'groep foar $1 feroare fan $2 yn $3',
-'rightsnone' => '(gjin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dizze side besjen',
@@ -1643,10 +1645,6 @@ Stipe protokollen: <code>$1</code>',
 'activeusers' => 'Aktive meidoggers',
 'activeusers-noresult' => 'Gjin meidoggers fûn.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ynskriuwingsloch',
-'newuserlogpagetext' => "Dit is in loch fan meidoggers dy't de lêste tiid ynskreaun binne.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rjochten fan brûkersgroepen',
 'listgrouprights-summary' => 'Op dizze side steane de brûkersgroepen yn dizze wiki beskreaun, mei har derby hearrende rjochten.
@@ -1735,6 +1733,8 @@ om jo folchlistynstellings te feroarjen.
 
 Reaksjes en fierdere help:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oanmakke',
+'changed' => 'feroare',
 
 # Delete
 'deletepage' => 'Wisk side',
@@ -2356,5 +2356,6 @@ Wolle jo de side wier op 'e nij skriuwe?",
 'revdelete-restricted' => 'hat beheinings oplein oan behearders',
 'revdelete-unrestricted' => 'hat beheinings foar behearders goedmakke',
 'newuserlog-byemail' => 'wachtwurd is ferstjoerd oer e-mail',
+'rightsnone' => '(gjin)',
 
 );
index 5a58386..ba39b45 100644 (file)
@@ -946,6 +946,9 @@ do chuid dreachtaí a chur i leith tusa.',
 'right-undelete' => 'Díscrios leathanach',
 'right-userrights' => 'Cur gach cearta usáideoira in eagar',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log cruthú úsáideoira',
+
 # User rights log
 'rightslog' => 'Log cearta úsáideoira',
 
@@ -1239,9 +1242,6 @@ Féach freisin ar [[Special:WantedCategories|catagóirí faoi iarraidh]].',
 # Special:ListUsers
 'listusers-submit' => 'Taispeáin',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log cruthú úsáideoira',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ghrúpa',
 'listgrouprights-rights' => 'Cearta',
@@ -1336,6 +1336,8 @@ $UNWATCHURL
 
 Aiseolas agus a thuilleadh cabhrach:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Chruthaigh',
+'changed' => "D'athraigh",
 
 # Delete
 'deletepage' => 'Scrios an leathanach',
index 66bfeb9..2a20940 100644 (file)
@@ -616,6 +616,9 @@ Aaramaanızın önünä ''all:'' prefiksini koyun da deneyin hepsi içlii aarama
 
 'grouppage-sysop' => '{{ns:project}}:Önderciler',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Eni kullanıcı bennemäkleri',
+
 # User rights log
 'rightslog' => 'Kullanıcı hakları jurnalı',
 
@@ -791,9 +794,6 @@ Sizin bakmaa [[Special:Watchlist|listasındaki]] sayfalar verildi '''kalın''' b
 # Special:LinkSearch
 'linksearch' => 'İç baalantlar',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Eni kullanıcı bennemäkleri',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(azaların listası)',
 
index 4c45216..1479ce5 100644 (file)
@@ -867,11 +867,12 @@ $2',
 'grouppage-sysop' => '{{ns:project}}:操作员',
 'grouppage-bureaucrat' => '{{ns:project}}:行政员',
 
+# Special:Log/newusers
+'newuserlogpage' => '新开户𠮶人名单',
+
 # User rights log
 'rightslog' => '用户权限日志',
 'rightslogtext' => '底下记到用户权限𠮶更改记录。',
-'rightslogentry' => '拿 $1 𠮶权限从 $2 改到 $3',
-'rightsnone' => '(冇)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => '编辑个页',
@@ -1229,9 +1230,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => '显示',
 'listusers-noresult' => '寻伓到用户。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新开户𠮶人名单',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员名单)',
 
@@ -1306,6 +1304,8 @@ $NEWPAGE
 {{SITENAME}}通知系统 – 会改卟倷𠮶监视列表设置,请去 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 回馈同到别𠮶说明: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建正嘞',
+'changed' => '改卟嘞',
 
 # Delete
 'deletepage' => '删卟页面',
@@ -2260,6 +2260,9 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|标签]]过滤器:',
 
+# New logging system
+'rightsnone' => '(冇)',
+
 # Search suggestions
 'searchsuggest-search' => '寻吖',
 
index 79187c3..7a50d26 100644 (file)
@@ -889,11 +889,12 @@ $2',
 'grouppage-sysop' => '{{ns:project}}:操作員',
 'grouppage-bureaucrat' => '{{ns:project}}:行政員',
 
+# Special:Log/newusers
+'newuserlogpage' => '新開戶嗰人名單',
+
 # User rights log
 'rightslog' => '用戶許可權日誌',
 'rightslogtext' => '底下記到用戶許可權嗰更改記錄。',
-'rightslogentry' => '拿 $1 嗰許可權從 $2 改到 $3',
-'rightsnone' => '(冇)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => '編輯箇頁',
@@ -1251,9 +1252,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => '顯示',
 'listusers-noresult' => '尋伓到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新開戶嗰人名單',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成員名單)',
 
@@ -1328,6 +1326,8 @@ $NEWPAGE
 {{SITENAME}}通知系統 – 會改卟倷嗰監視列表設置,請去 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 回饋同到別嗰説明: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建正嘞',
+'changed' => '改卟嘞',
 
 # Delete
 'deletepage' => '刪卟頁面',
@@ -2282,6 +2282,9 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|標籤]]過濾器:',
 
+# New logging system
+'rightsnone' => '(冇)',
+
 # Search suggestions
 'searchsuggest-search' => '尋吖',
 
index d59ce19..7dc9d67 100644 (file)
@@ -1024,9 +1024,11 @@ Chan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.
 'grouppage-user' => '{{ns:project}}:Cleachdaichean',
 'grouppage-sysop' => '{{ns:project}}:Rianadairean',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Loga cruthachaidh de chleachdaichean',
+
 # User rights log
 'rightslog' => "Loga còraichean a' chleachdaiche",
-'rightsnone' => '(chan eil gin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'deasaich an duilleag seo',
@@ -1179,9 +1181,6 @@ Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan i
 'linksearch' => 'Ceanglaichean dhan taobh a-muigh',
 'linksearch-line' => "Tha $1 a' ceangal an-seo o $2",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Loga cruthachaidh de chleachdaichean',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(liosta de bhuill)',
 
@@ -1555,6 +1554,9 @@ Bidh an fheadhainn eile falaichte a ghnàth.
 # Special:Tags
 'tag-filter' => 'Criathrag [[Special:Tags|Tag]]:',
 
+# New logging system
+'rightsnone' => '(chan eil gin)',
+
 # Search suggestions
 'searchsuggest-containing' => 'anns a bheil...',
 
index 77c51cc..14b4bc2 100644 (file)
@@ -356,6 +356,7 @@ $messages = array(
 'newwindow' => '(abre unha ventá nova)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Máis...',
+'morenotlisted' => 'Máis que non están na lista...',
 'mypage' => 'Páxina',
 'mytalk' => 'Conversa',
 'anontalk' => 'Conversa con este enderezo IP',
@@ -738,8 +739,9 @@ Por favor, agarde antes de probar outra vez.',
 'suspicious-userlogout' => 'Rexeitouse a súa petición de saír do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.',
 
 # E-mail sending
-'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP',
+'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP.',
 'user-mail-no-addy' => 'Intentou enviar un correo sen enderezo de correo electrónico.',
+'user-mail-no-body' => 'Intentou enviar un correo baleiro ou cun corpo curto de máis.',
 
 # Change password dialog
 'resetpass' => 'Cambiar o contrasinal',
@@ -1538,15 +1540,13 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 'right-sendemail' => 'Enviar correos electrónicos a outros usuarios',
 'right-passwordreset' => 'Ver os correos electrónicos de restablecemento de contrasinais',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rexistro de creación de usuarios',
+'newuserlogpagetext' => 'Este é un rexistro de creación de contas de usuario.',
+
 # User rights log
 'rightslog' => 'Rexistro de dereitos de usuario',
 'rightslogtext' => 'Este é un rexistro dos cambios nos permisos de usuario.',
-'rightslogentry' => 'cambiou o grupo ao que pertence $1 de $2 a $3',
-'rightslogentry-autopromote' => 'foi promovido automaticamente de $2 a $3',
-'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',
-'rightsnone' => '(ningún)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta páxina',
@@ -2203,10 +2203,6 @@ Cómpre, polo menos, un dominio de nivel superior; por exemplo, "*.org".<br />
 'activeusers-hidesysops' => 'Agochar os administradores',
 'activeusers-noresult' => 'Non se atopou ningún usuario.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rexistro de creación de usuarios',
-'newuserlogpagetext' => 'Este é un rexistro de creación de contas de usuario.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dereitos dun usuario segundo o seu grupo',
 'listgrouprights-summary' => 'A seguinte lista mostra os grupos de usuario definidos neste wiki, cos seus dereitos de acceso asociados.
@@ -2342,6 +2338,8 @@ $UNWATCHURL
 
 Axuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Borrar a páxina',
@@ -2413,6 +2411,8 @@ Vexa a [[Special:ProtectedPages|lista de páxinas protexidas]] se quere obter a
 'prot_1movedto2' => 'moveu "[[$1]]" a "[[$2]]"',
 'protect-badnamespace-title' => 'Espazo de nomes que non se pode protexer',
 'protect-badnamespace-text' => 'As páxinas presentes neste espazo de nomes non se poden protexer.',
+'protect-norestrictiontypes-text' => 'Esta páxina non se pode protexer porque non hai dispoñible ningún tipo de restrición.',
+'protect-norestrictiontypes-title' => 'Páxina non protexible',
 'protect-legend' => 'Confirmar a protección',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Caducidade:',
@@ -2428,9 +2428,9 @@ Velaquí a configuración actual da páxina '''$1''':",
 'protect-cascadeon' => 'Esta páxina está protexida neste momento porque está incluída {{PLURAL:$1|na seguinte páxina, que foi protexida|nas seguintes páxinas, que foron protexidas}} coa opción protección en serie activada.
 Pode mudar o nivel de protección da páxina pero iso non afectará á protección en serie.',
 'protect-default' => 'Permitir a todos os usuarios',
-'protect-fallback' => 'Cómpre ter permisos de "$1"',
-'protect-level-autoconfirmed' => 'Bloquear os usuarios novos e anónimos',
-'protect-level-sysop' => 'Só os administradores',
+'protect-fallback' => 'Permitir só aos usuarios con permisos de "$1"',
+'protect-level-autoconfirmed' => 'Permitir só aos usuarios autoconfirmados',
+'protect-level-sysop' => 'Permitir só aos administradores',
 'protect-summary-cascade' => 'protección en serie',
 'protect-expiring' => 'remata o $2 ás $3 (UTC)',
 'protect-expiring-local' => 'caduca o $1',
@@ -2731,10 +2731,10 @@ Pode actualizar automaticamente as redireccións que van dar ao título orixinal
 Se escolle non facelo, asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]].
 Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
 
-Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que estea baleira ou sexa unha redirección e que non teña historial de edicións.
+Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que sexa unha redirección e non teña historial de edicións.
 Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe.
 
-'''ATENCIÓN!'''
+'''Atención!'''
 Este cambio nunha páxina popular pode ser drástico e inesperado;
 por favor, asegúrese de que entende as consecuencias disto antes de proseguir.",
 'movepagetext-noredirectfixer' => "Ao usar o formulario de embaixo vai cambiar o nome da páxina, movendo todo o seu historial ao novo nome.
@@ -2742,10 +2742,10 @@ O título vello vaise converter nunha páxina de redirección ao novo título.
 Asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]].
 Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
 
-Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que estea baleira ou sexa unha redirección e que non teña historial de edicións.
+Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que sexa unha redirección e non teña historial de edicións.
 Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe.
 
-'''ATENCIÓN!'''
+'''Atención!'''
 Este cambio nunha páxina popular pode ser drástico e inesperado;
 por favor, asegúrese de que entende as consecuencias disto antes de proseguir.",
 'movepagetalktext' => "A páxina de conversa asociada, se existe, será automaticamente movida con esta '''agás que''':
@@ -3096,14 +3096,19 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra máxica|Palabras máxicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría agochada|Categorías agochadas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modelo incluído|Modelos incluídos}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Páxina incluída|Páxinas incluídas}} ($1)',
 'pageinfo-toolboxlink' => 'Información da páxina',
 'pageinfo-redirectsto' => 'Redirixe cara a',
 'pageinfo-redirectsto-info' => 'información',
-'pageinfo-contentpage' => 'Cóntase como páxina de contido',
+'pageinfo-contentpage' => 'Cóntase como páxina de contido?',
 'pageinfo-contentpage-yes' => 'Si',
 'pageinfo-protect-cascading' => 'Protección en serie activada',
 'pageinfo-protect-cascading-yes' => 'Si',
 'pageinfo-protect-cascading-from' => 'Protección en serie activada',
+'pageinfo-category-info' => 'Información da categoría',
+'pageinfo-category-pages' => 'Número de páxinas',
+'pageinfo-category-subcats' => 'Número de subcategorías',
+'pageinfo-category-files' => 'Número de ficheiros',
 
 # Skin names
 'skinname-standard' => 'Clásica',
@@ -3191,6 +3196,8 @@ O seu sistema pode quedar comprometido se o executa.",
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 horas}}',
 'days' => '{{PLURAL:$1|$1 día|$1 días}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 ano|$1 anos}}',
 'ago' => 'hai $1',
 'just-now' => 'agora mesmo',
 
@@ -3955,6 +3962,10 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'logentry-newusers-create2' => '$1 creou a conta de usuario $3',
 'logentry-newusers-autocreate' => 'A conta de usuario $1 creouse automaticamente',
 'newuserlog-byemail' => 'contrasinal enviado por correo electrónico',
+'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',
+'rightsnone' => '(ningún)',
 
 # Feedback
 'feedback-bugornote' => 'Se está listo para describir un problema técnico en detalle, [$1 informe do erro].
@@ -4007,9 +4018,10 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'api-error-nomodule' => 'Erro interno: Non hai ningún módulo de cargas.',
 'api-error-ok-but-empty' => 'Erro interno: Non hai resposta do servidor.',
 'api-error-overwrite' => 'Non está permitido sobrescribir un ficheiro existente.',
-'api-error-stashfailed' => 'Erro interno: O servidor non puido almacenar os ficheiros temporais.',
+'api-error-stashfailed' => 'Erro interno: O servidor non puido almacenar o ficheiro temporal.',
+'api-error-publishfailed' => 'Erro interno: O servidor non puido publicar o ficheiro temporal.',
 'api-error-timeout' => 'O servidor non respondeu no tempo esperado.',
-'api-error-unclassified' => 'Houbo un erro descoñecido',
+'api-error-unclassified' => 'Houbo un erro descoñecido.',
 'api-error-unknown-code' => 'Erro descoñecido: "$1"',
 'api-error-unknown-error' => 'Erro interno: Houbo un problema ao intentar cargar o ficheiro.',
 'api-error-unknown-warning' => 'Advertencia descoñecida: $1',
index 466e3de..20117a8 100644 (file)
@@ -1045,11 +1045,13 @@ $1",
 'right-siteadmin' => 'Φράττειν καὶ ἀποφράττειν τὴν βάσιν δεδομένων',
 'right-override-export-depth' => 'Ἐξάγειν δέλτους περιλαμβανομένων συνδεδεμένων δέλτων ἕως βάθος τι 5 ἐπιπέδων',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Κατάλογος ποιήσεων λογισμῶν.',
+'newuserlogpagetext' => 'Ὅδε ἐστὶν κατάλογος τις τῶν ποιήσεων λογισμῶν.',
+
 # User rights log
 'rightslog' => 'Κατάλογος δικαιωμάτων χρωμένων',
 'rightslogtext' => 'Κατάλογος ἀλλαγῶν τῶν δικαιωμάτων χρωμένων.',
-'rightslogentry' => 'Μετεβλήθη ἡ μελότης (δικαιώματα μέλους) διὰ τὸν $1 ἐκ τῆς $2 εἰς τὴν $3',
-'rightsnone' => '(Οὐδέν)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ἀναγιγνώσκειν τήνδε τὴν δέλτον',
@@ -1483,10 +1485,6 @@ $1",
 'activeusers-hidesysops' => 'Κρύπτειν ἐπιτρόπους',
 'activeusers-noresult' => 'Οὐδεὶς χρώμενος εὑρέθη.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Κατάλογος ποιήσεων λογισμῶν.',
-'newuserlogpagetext' => 'Ὅδε ἐστὶν κατάλογος τις τῶν ποιήσεων λογισμῶν.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ὁμάδος χρωμένου',
 'listgrouprights-group' => 'Ὁμάς',
@@ -1588,6 +1586,8 @@ $NEWPAGE
 
 Ἀνάδρασις καὶ περαιτέρω βοήθεια:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ποιηθέν',
+'changed' => 'ἠλλαγμένη',
 
 # Delete
 'deletepage' => 'Διαγράφειν τὴν δέλτον',
@@ -2702,6 +2702,7 @@ $5
 'revdelete-restricted' => 'ἐφηρμοσμένοι περιορισμοὶ διὰ τοὺς ἐπιτρόπους',
 'revdelete-unrestricted' => 'αἱρεθέντες περιορισμοὶ διὰ τοὺς ἐπιτρόπους',
 'newuserlog-byemail' => 'σύνθημα ἀπεσταλμένον μέσῳ ἠλ-ταχυδρομείου',
+'rightsnone' => '(Οὐδέν)',
 
 # Feedback
 'feedback-cancel' => 'Ἀκυροῦν',
index 3767708..b456087 100644 (file)
@@ -1405,15 +1405,13 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'right-sendemail' => 'E-Mail an anderi Benutzer schicke',
 'right-passwordreset' => 'Passwort vun eme Benutzer zruggsetze',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nejaamäldigs-Logbuech',
+'newuserlogpagetext' => 'Des isch e Logbuech fir nej aagleiti Benutzerchonte.',
+
 # User rights log
 'rightslog' => 'Benutzerrächt-Logbuech',
 'rightslogtext' => 'Des ischs Logbuech vun de Änderunge on Bnutzerrechte.',
-'rightslogentry' => 'het d Benutzerrächt fir „$1“ vu „$2“ uf „$3“ gänderet',
-'rightslogentry-autopromote' => 'd Zueornig zue dr Benutzergruppe isch automatisch vu $2 in $3 gänderet wore',
-'logentry-rights-rights' => '$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet',
-'logentry-rights-rights-legacy' => '$1 het d Gruppezuegherigkeit fir $3 gänderet',
-'logentry-rights-autopromote' => '$1 isch automatisch vu $4 zue $5 zuegordnet wore',
-'rightsnone' => '(keini)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'die Syte z läse',
@@ -2040,10 +2038,6 @@ Lueg au d Lischt vu dr [[Special:WantedCategories|gwinschte Kategorie]].',
 'activeusers-hidesysops' => 'Ammanne (Administratore) uusblände',
 'activeusers-noresult' => 'Kei Benutzer gfunde.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nejaamäldigs-Logbuech',
-'newuserlogpagetext' => 'Des isch e Logbuech fir nej aagleiti Benutzerchonte.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppe-Rächt',
 'listgrouprights-summary' => 'Des isch e Liste vu dr Benutzergruppe, wu in däm Wiki definiert sin, un dr Rächt, wu dermit verbunde sin.
@@ -2170,6 +2164,8 @@ Go d Yystellige vu Dyyre Beobachtigslischte ändere, gang uf {{canonicalurl:{{#s
 Go d Syte us Dyyre Beobachtigslischte uuseneh, gang uf $UNWATCHURL
 
 Ruckmäldig un wyteri Hilf: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aagleit',
+'changed' => 'gänderet',
 
 # Delete
 'deletepage' => 'Syte lösche',
@@ -3686,6 +3682,10 @@ Di aagfrogt Datei wird diräkt dargstellt bzw. mit dr verchnipfte Aawändig gsta
 'logentry-newusers-create2' => 'Benutzerkonto $3 isch aalgeit wore vu $1',
 'logentry-newusers-autocreate' => 'S Benutzerchonto $1 isch automatisch erstellt worde',
 'newuserlog-byemail' => 's Passwort isch per E-Mail gschickt wore',
+'logentry-rights-rights' => '$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet',
+'logentry-rights-rights-legacy' => '$1 het d Gruppezuegherigkeit fir $3 gänderet',
+'logentry-rights-autopromote' => '$1 isch automatisch vu $4 zue $5 zuegordnet wore',
+'rightsnone' => '(keini)',
 
 # Feedback
 'feedback-bugornote' => 'Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].
index 638f508..afe55ba 100644 (file)
@@ -1452,12 +1452,13 @@ HTML નાકું ચકાસો',
 'right-sendemail' => ' અન્ય સભ્યોને ઈ-મેલ મોકલો',
 'right-passwordreset' => 'પાસવર્ડ રીસેટ ઇ-મેઇલ્સ જુઓ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'નવા બનેલા સભ્યોનો લૉગ',
+'newuserlogpagetext' => 'આ સભ્યોની રચનાનો લોગ છે.',
+
 # User rights log
 'rightslog' => 'સભ્ય હક્ક માહિતિ પત્રક',
 'rightslogtext' => 'સભ્યના બદલાયેલ હક્કોની આ સંપાદન યાદિ છે .',
-'rightslogentry' => '$2 થી $3 સુધી $1 માટે બદલાયેલું સમૂહ સભ્યપદ',
-'rightslogentry-autopromote' => 'આપોઆપ $2 માં થી $3 માં બઢતી થઇ',
-'rightsnone' => '(કંઈ નહી)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'આ પાનું વાંચો.',
@@ -2087,10 +2088,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'activeusers-hidesysops' => 'પ્રબંધકો છુપાવો',
 'activeusers-noresult' => 'કોઇ સક્રીય સભ્ય ન મળ્યો',
 
-# Special:Log/newusers
-'newuserlogpage' => 'નવા બનેલા સભ્યોનો લૉગ',
-'newuserlogpagetext' => 'આ સભ્યોની રચનાનો લોગ છે.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'સભ્ય જૂથ ના હક્કો',
 'listgrouprights-summary' => 'નીચે આ વિકિ પર વ્યાખ્યાયિત સભ્ય જૂથોની યાદી, તેમની સાથે સંકળાયેલા હક્કો સાથે આપી છે.
@@ -2183,11 +2180,18 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'unwatching' => 'નજર રાખવાની બંધ કરી છે...',
 'watcherrortext' => 'તમારી ધ્યાનસૂચિ નાં સેટિંગ્સ માં "$1" માં ફેરફાર કરતી વખતે ભૂલ આવી.',
 
-'enotif_mailer' => '{{SITENAME}} àª¸à«\82àª\9aના àª\88-મà«\87લ àªªàª¾àª ક',
+'enotif_mailer' => '{{SITENAME}} àª¸à«\82àª\9aના àª\88-મà«\87લ àªªà«\8dરà«\87ષક',
 'enotif_reset' => 'બધા પાનાને મુલાકાત લેવાયેલા અંકિત કરો',
 'enotif_impersonal_salutation' => '{{SITENAME}} સભ્ય',
+'enotif_subject_deleted' => '{{SITENAME}} પૃષ્ઠ $1 {{gender:$2|$2}}એ દૂર કર્યું છે',
+'enotif_subject_created' => '{{SITENAME}}માં {{gender:$2|$2}}એ પૃષ્ઠ $1 બનાવ્યું છે',
+'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_changed' => 'The {{SITENAME}} પૃષ્ઠ $1ને {{gender:$2|$2}}એ $PAGEEDITDATEના રોજ બદલ્યું છે, હાલની આવૃત્તિ માટે જુઓ: $3.',
+'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ને {{gender:$2|$2}}એ $PAGEEDITDATEના રોજ દિશાનિર્દેશન આપ્યું છે, હાલની આવૃત્તિ માટે જુઓ: $3.',
+'enotif_body_intro_changed' => '{{SITENAME}} પૃષ્ઠ $1ને {{gender:$2|$2}}એ $PAGEEDITDATEના રોજ બદલ્યું છે, હાલની આવૃત્તિ માટે જુઓ: $3.',
 'enotif_lastvisited' => 'તમારી પાછલી મુલાકાત પછી થયેલા બધા ફેરફારો માટે $1 જુઓ',
 'enotif_lastdiff' => 'આ ફેરફાર જોવા $1 જુઓ',
 'enotif_anon_editor' => 'અનામિ સભ્ય $1',
@@ -2218,6 +2222,8 @@ $UNWATCHURL
 
 મંતવ્યો અને વધુ મદદ માટે 
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'બનાવ્યું',
+'changed' => 'બદલ્યું',
 
 # Delete
 'deletepage' => 'પાનું હટાવો',
@@ -3760,6 +3766,7 @@ $5
 'logentry-newusers-create2' => 'સભ્ય ખાતું $3 $1 વડે બનાવવામાં આવ્યું',
 'logentry-newusers-autocreate' => 'એકાઉન્ટ $1 બનાવનાર આપોઆપ',
 'newuserlog-byemail' => 'ગુપ્ત સંજ્ઞા ઇ-મેલ દ્વારા મોકલાઇ છે.',
+'rightsnone' => '(કંઈ નહી)',
 
 # Feedback
 'feedback-bugornote' => 'જો તમે તકનીકી સમસ્યા વર્ણવવા માંગતા હોય તો  કૃપયા [$1 report a bug] એ બગ અહીં નોંધાવો.
index f40ded1..6f0b4c5 100644 (file)
@@ -707,9 +707,11 @@ My bailliu eh y chiarail, bee eh ymmydit son cur gys lieh y chur dhyt er son yn
 'right-upload' => 'Laadey neese coadanyn',
 'right-delete' => 'Duillag y scryssey',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Lioar chooishyn ny h-ymmydeyryn noa',
+
 # User rights log
 'rightslog' => 'Lioar chooishyn kiartyn ymmydeyr',
-'rightsnone' => '(veg)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'y duillag shoh y lhaih',
@@ -953,9 +955,6 @@ Ta duillagyn er [[Special:Watchlist|dty rolley arrey]] ayns '''clou trome'''.",
 # Special:ListUsers
 'listusers-submit' => 'Taishbyn',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Lioar chooishyn ny h-ymmydeyryn noa',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Possan',
 'listgrouprights-rights' => 'Kiartyn',
@@ -1028,6 +1027,8 @@ $UNWATCHURL
 
 Aaveaghey as cooney s\'odjey:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'crooit',
+'changed' => 'ceaghlit',
 
 # Delete
 'deletepage' => 'Scryss y duillag',
@@ -1467,6 +1468,9 @@ Bee adsyn elley follit dy seyr-obbragh.<br />
 # Special:Tags
 'tags-edit' => 'reaghey',
 
+# New logging system
+'rightsnone' => '(veg)',
+
 # Search suggestions
 'searchsuggest-search' => 'Ronsaghey',
 'searchsuggest-containing' => 'goaill stiagh...',
index 02ae94e..0eaceca 100644 (file)
@@ -374,6 +374,9 @@ Ku gwada tare da amfani da \"all:\" don bincikar duka shafunan (har da shafunan
 
 'grouppage-sysop' => '{{ns:project}}:Masu hukunci',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rajistan sabbin akwantoci',
+
 # User rights log
 'rightslog' => "Rajistan bayar da izini ga ma'aikata",
 
@@ -483,9 +486,6 @@ Ku gwada tare da amfani da \"all:\" don bincikar duka shafunan (har da shafunan
 # Special:ListUsers
 'listusers-submit' => 'Nuna',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rajistan sabbin akwantoci',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(jerin mambobi)',
 
index 7af6014..d66885c 100644 (file)
@@ -715,11 +715,13 @@ Tshòng-tón pit-sî chhai $1-ke sṳ-ngièn yî-ha.',
 'grouppage-bot' => '{{ns:project}}:Kî-hi-ngìn',
 'grouppage-sysop' => '{{ns:project}}:Kón-lî-yèn',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Sîn-chin yung-fu miàng-chhak',
+'newuserlogpagetext' => 'Liá-he yit-ke chui-khiun pûn chhóng-kien yung-fu ke ngit-ki.',
+
 # User rights log
 'rightslog' => 'Yung-fu khièn-han ngit-ki',
 'rightslogtext' => 'Yî-ha ki-liu̍k yung-fu khièn-han ke kiên-kói ki-liu̍k.',
-'rightslogentry' => 'Chiong $1 ke khièn-han chhiùng $2 kói-vi $3',
-'rightsnone' => '(mò)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'phiên-siá pún-chông',
@@ -1003,10 +1005,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Hién-sṳ',
 'listusers-noresult' => 'Cháu put-to yung-fu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Sîn-chin yung-fu miàng-chhak',
-'newuserlogpagetext' => 'Liá-he yit-ke chui-khiun pûn chhóng-kien yung-fu ke ngit-ki.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(sṳ̀n-yèn chhîn-tân)',
 
@@ -1067,6 +1065,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'enotif_lastdiff' => 'Kiám-chhà kiên-kói chhiáng chhâm-siòng $1.',
 'enotif_anon_editor' => 'ngia̍k-miàng yung-fu $1',
 'enotif_body' => 'Chhîn-oi ke $WATCHINGUSERNAME, $PAGEEDITOR yí-kîn chhai $PAGEEDITDATE $CHANGEDORCREATED{{SITENAME}} ke $PAGETITLE vùn-chông, chhiáng-to $PAGETITLE_URL kiám-sṳ siên-chhièn pán-pún.  $NEWPAGE phiên-si̍p chak-yeu: $PAGESUMMARY $PAGEMINOREDIT lièn-kiê chhṳ́ phiên-si̍p-chá: email: $PAGEEDITOR_EMAIL pún-chham: $PAGEEDITOR_WIKI chhai ngì fóng-mun chhṳ́-chông chṳ̂-chhièn, chiông-lòi ke kiên-kói vù-nèn hiong ngì thûng-tî. Ngì khó-yî chhûng-sat ngì só-yû kam-sṳ vùn-chông ke thûng-tî phêu-ki. {{SITENAME}} thûng-tî ne-thúng -- yeu kói-pien ngì-ke kam-sṳ lie̍t-péu sat-thin, chhiáng chhâm-siòng {{canonicalurl:{{#special:EditWatchlist}}}} chin-yit-phu ke pông-chhu: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Yí-kîn kien-li̍p',
+'changed' => 'siû-kói liáu',
 
 # Delete
 'deletepage' => 'Chhù-thet hong-mien',
@@ -1668,5 +1668,6 @@ Sòn-chhṳ phêu-chún yi-liau.',
 # New logging system
 'revdelete-restricted' => 'yí-kîn yin-yung han-tsṳ tsṳ tshâu-tsok-yèn',
 'revdelete-unrestricted' => 'yí-kîn yì-tshù yû-kûan tshâu-tsok-yè ke han-tsṳ',
+'rightsnone' => '(mò)',
 
 );
index 4501a66..a6e9b8e 100644 (file)
@@ -659,6 +659,8 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā
 'watching' => 'Ke kia‘i nei...',
 'unwatching' => 'Ke wehe nei i ke kiaʻi...',
 
+'changed' => 'ua loli ‘ia',
+
 # Delete
 'deletepage' => 'Kāpae ʻaoʻao',
 'actioncomplete' => 'Ua pau',
index 1008889..1931f90 100644 (file)
@@ -374,7 +374,7 @@ $messages = array(
 'tog-previewontop' => 'הצגת תצוגה מקדימה לפני תיבת העריכה (או: אחריה)',
 'tog-previewonfirst' => 'הצגת תצוגה מקדימה בעריכה ראשונה',
 'tog-nocache' => 'מניעת אחסון הדפים בזיכרון המטמון בדפדפן',
-'tog-enotifwatchlistpages' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×\90×\95 ×\91קובץ ברשימת המעקב שלי',
+'tog-enotifwatchlistpages' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\90שר ×\9eשתנ×\94 ×\93×£ ×\90×\95 קובץ ברשימת המעקב שלי',
 'tog-enotifusertalkpages' => 'לשלוח אליי דואר אלקטרוני כאשר נעשה שינוי בדף שיחת המשתמש שלי',
 'tog-enotifminoredits' => 'לשלוח אליי דואר אלקטרוני גם על עריכות משניות של דפים וקבצים',
 'tog-enotifrevealaddr' => 'חשיפת כתובת הדוא"ל שלך בהודעות דוא"ל',
@@ -485,6 +485,7 @@ $messages = array(
 'newwindow' => '(נפתח בחלון חדש)',
 'cancel' => 'ביטול / יציאה',
 'moredotdotdot' => 'עוד…',
+'morenotlisted' => 'עוד פריטים שאינם ברשימה…',
 'mypage' => 'דף משתמש',
 'mytalk' => 'שיחה',
 'anontalk' => 'השיחה עבור IP זה',
@@ -866,7 +867,8 @@ $2',
 
 # E-mail sending
 'php-mail-error-unknown' => 'שגיאה לא ידועה בפונקציה mail()‎ של PHP',
-'user-mail-no-addy' => 'ניסיון לשלוח דוא"ל ללא כתובת דוא"ל',
+'user-mail-no-addy' => 'ניסיון לשלוח דוא"ל ללא כתובת דוא"ל.',
+'user-mail-no-body' => 'ניסיון לשלוח דוא"ל עם תוכן ריק או קצר מאוד.',
 
 # Change password dialog
 'resetpass' => 'שינוי סיסמה',
@@ -1110,7 +1112,7 @@ $2
 'template-protected' => '(מוגנת)',
 'template-semiprotected' => '(מוגנת חלקית)',
 'hiddencategories' => 'דף זה כלול ב{{PLURAL:$1|קטגוריה מוסתרת אחת|־$1 קטגוריות מוסתרות}}:',
-'edittools' => '<!-- הטקסט הנכתב כאן יוצג מתחת לטפסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->',
+'edittools' => '<!-- ×\94×\98קס×\98 ×\94× ×\9bת×\91 ×\9b×\90×\9f ×\99×\95צ×\92 ×\9eת×\97ת ×\9c×\98×\95פס×\99 ×¢×¨×\99×\9bת ×\93פ×\99×\9d ×\95×\94×¢×\9c×\90ת ×§×\91צ×\99×\9d, ×\95×\9cפ×\99×\9b×\9a × ×\99ת×\9f ×\9c×\9bת×\95×\91 ×\9c×\94צ×\99×\92 ×\91×\95 ×ª×\95×\95×\99×\9d ×§×©×\99×\9d ×\9c×\9bת×\99×\91×\94, ×§×\98×¢×\99×\9d ×\9e×\95×\9b× ×\99×\9d ×©×\9c ×\98קס×\98 ×\95×¢×\95×\93. -->',
 'nocreatetext' => 'אתר זה מגביל את האפשרות ליצור דפים חדשים. באפשרותכם לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון]].',
 'nocreate-loggedin' => 'אינכם מורשים ליצור דפים חדשים.',
 'sectioneditnotsupported-title' => 'עריכת פסקאות אינה נתמכת',
@@ -1661,15 +1663,13 @@ $1",
 'right-sendemail' => 'שליחת דואר אלקטרוני למשתמשים אחרים',
 'right-passwordreset' => 'צפייה בדואר אלקטרוני של איפוס סיסמה',
 
+# Special:Log/newusers
+'newuserlogpage' => 'יומן רישום משתמשים',
+'newuserlogpagetext' => 'זהו יומן המכיל הרשמות של משתמשים.',
+
 # User rights log
 'rightslog' => 'יומן תפקידים',
 'rightslogtext' => 'זהו יומן השינויים בתפקידי המשתמשים.',
-'rightslogentry' => 'שינה את ההרשאות של $1 מ$2 ל$3',
-'rightslogentry-autopromote' => 'קודם אוטומטית מ$2 ל$3',
-'logentry-rights-rights' => '$1 שינה את ההרשאות של $3 מ$4 ל$5',
-'logentry-rights-rights-legacy' => '$1 שינה את ההרשאות של $3',
-'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
-'rightsnone' => '(כלום)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'לקרוא דף זה',
@@ -2322,10 +2322,6 @@ $1',
 'activeusers-hidesysops' => 'הסתרת מפעילי מערכת',
 'activeusers-noresult' => 'לא נמצאו משתמשים.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'יומן רישום משתמשים',
-'newuserlogpagetext' => 'זהו יומן המכיל הרשמות של משתמשים.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'רשימת הרשאות לקבוצה',
 'listgrouprights-summary' => 'זוהי רשימה של קבוצות המשתמש המוגדרות באתר זה, עם ההרשאות של כל אחת.
@@ -2421,16 +2417,16 @@ $1',
 'enotif_mailer' => 'הודעות {{SITENAME}}',
 'enotif_reset' => 'סימון כל הדפים כאילו נצפו',
 'enotif_impersonal_salutation' => 'משתמש של {{SITENAME}}',
-'enotif_subject_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על ידי {{gender:$2|$2}}',
-'enotif_subject_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על ידי {{gender:$2|$2}}',
-'enotif_subject_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על ידי {{gender:$2|$2}}',
-'enotif_subject_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על ידי {{gender:$2|$2}}',
-'enotif_subject_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על ידי {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3.',
-'enotif_body_intro_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
+'enotif_subject_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על ידי $2',
+'enotif_subject_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על ידי $2',
+'enotif_subject_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על ידי $2',
+'enotif_subject_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על ידי $2',
+'enotif_subject_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על ידי $2',
+'enotif_body_intro_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק ב־$PAGEEDITDATE על ידי $2, ראו $3.',
+'enotif_body_intro_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
+'enotif_body_intro_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
+'enotif_body_intro_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
+'enotif_body_intro_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
 'enotif_lastvisited' => 'ראו $1 לכל השינויים מאז ביקורכם האחרון.',
 'enotif_lastdiff' => 'ראו $1 לשינוי זה.',
 'enotif_anon_editor' => 'משתמש אנונימי $1',
@@ -2460,6 +2456,8 @@ $UNWATCHURL
 
 למשוב ולעזרה נוספת:
 {{canonicalurl::{{MediaWiki:Helppage}}}}',
+'created' => 'נוצר',
+'changed' => 'שונה',
 
 # Delete
 'deletepage' => 'מחיקה',
@@ -2529,6 +2527,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] הועבר לשם [[$2]]',
 'protect-badnamespace-title' => 'מרחב שם שבו לא ניתן להגן על דפים',
 'protect-badnamespace-text' => 'לא ניתן להגן על דפים במרחב שם זה.',
+'protect-norestrictiontypes-text' => 'לא ניתן להגן על דף זה כי אין סוגי הגנה זמינים.',
+'protect-norestrictiontypes-title' => 'דף שלא ניתן להגן עליו',
 'protect-legend' => 'אישור הפעלת ההגנה',
 'protectcomment' => 'סיבה:',
 'protectexpiry' => 'פקיעת ההגנה:',
@@ -2544,9 +2544,9 @@ $UNWATCHURL
 להלן ההגדרות הנוכחיות עבור הדף '''$1''':",
 'protect-cascadeon' => 'דף זה מוגן כרגע כיוון שהוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת. באפשרותכם לשנות את רמת ההגנה על הדף, אך זה לא ישפיע על ההגנה המדורגת.',
 'protect-default' => 'כל המשתמשים מורשים',
-'protect-fallback' => '×\9eשת×\9eש×\99×\9d ×\91×¢×\9c×\99 ×\94רש×\90ת "$1" ×\91×\9c×\91×\93',
-'protect-level-autoconfirmed' => '×\9e× ×\99עת ×\9eשת×\9eש×\99×\9d ×\97×\93ש×\99×\9d ×\95×\9c×\90 ×¨×©×\95×\9eים',
-'protect-level-sysop' => '×\9eפע×\99×\9c×\99 ×\9eער×\9bת ×\91×\9c×\91×\93',
+'protect-fallback' => 'רק ×\9eשת×\9eש×\99×\9d ×\91×¢×\9c×\99 ×\94רש×\90ת "$1" ×\9e×\95רש×\99×\9d',
+'protect-level-autoconfirmed' => 'רק ×\9eשת×\9eש×\99×\9d ×\95ת×\99ק×\99×\9d ×\9e×\95רשים',
+'protect-level-sysop' => 'רק ×\9eפע×\99×\9c×\99 ×\9eער×\9bת ×\9e×\95רש×\99×\9d',
 'protect-summary-cascade' => 'מדורג',
 'protect-expiring' => 'פוקעת $1 (UTC)',
 'protect-expiring-local' => 'פוקעת $1',
@@ -2846,7 +2846,7 @@ $1',
 אם תבחרו לא לעשות זאת, אנא ודאו שאין [[Special:DoubleRedirects|הפניות כפולות]] או [[Special:BrokenRedirects|שבורות]].
 אתם אחראים לוודא שכל הקישורים ימשיכו להצביע למקום שאליו הם אמורים להצביע.
 
-ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×¨×\99ק, ×\90×\95 ×©×\94×\95×\90 ×\94פנ×\99×\94, ואין לו היסטוריית עריכות קודמות.
+ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×\94×\95×\90 ×\94פנ×\99×\94 ואין לו היסטוריית עריכות קודמות.
 פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים.
 
 '''אזהרה!'''
@@ -2857,7 +2857,7 @@ $1',
 אנא ודאו שאין [[Special:DoubleRedirects|הפניות כפולות]] או [[Special:BrokenRedirects|שבורות]].
 אתם אחראים לוודא שכל הקישורים ימשיכו להצביע למקום שאליו הם אמורים להצביע.
 
-ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×¨×\99ק, ×\90×\95 ×©×\94×\95×\90 ×\94פנ×\99×\94, ואין לו היסטוריית עריכות קודמות.
+ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×\94×\95×\90 ×\94פנ×\99×\94 ואין לו היסטוריית עריכות קודמות.
 פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים.
 
 '''אזהרה!'''
@@ -3212,6 +3212,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' => 'מידע',
@@ -3220,6 +3221,10 @@ $1',
 'pageinfo-protect-cascading' => 'מופעלת הגנה מדורגת מכאן',
 'pageinfo-protect-cascading-yes' => 'כן',
 'pageinfo-protect-cascading-from' => 'דף זה מוגן בגלל הגנה מדורגת על',
+'pageinfo-category-info' => 'מידע על הקטגוריה',
+'pageinfo-category-pages' => 'מספר הדפים',
+'pageinfo-category-subcats' => 'מספר קטגוריות המשנה',
+'pageinfo-category-files' => 'מספר הקבצים',
 
 # Skin names
 'skinname-standard' => 'קלאסי',
@@ -3303,10 +3308,16 @@ $1',
 'sp-newimages-showfrom' => 'הצגת קבצים חדשים החל מ־$2, $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds-abbrev' => '{{PLURAL:$1|שנייה|$1 שניות}}',
+'minutes-abbrev' => "{{PLURAL:$1|דקה|$1 דק'}}",
+'hours-abbrev' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
+'days-abbrev' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
 'seconds' => '{{PLURAL:$1|שנייה|$1 שניות}}',
 'minutes' => '{{PLURAL:$1|דקה|$1 דקות}}',
 'hours' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
 'days' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
+'months' => '{{PLURAL:$1|חודש|חודשיים|$1 חודשים}}',
+'years' => '{{PLURAL:$1|שנה|שנתיים|$1 שנים}}',
 'ago' => 'לפני $1',
 'just-now' => 'לפני זמן קצר',
 
@@ -4124,6 +4135,10 @@ $5
 'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
 'logentry-newusers-autocreate' => 'חשבון המשתמש $1 נוצר אוטומטית',
 'newuserlog-byemail' => 'הסיסמה נשלחה בדוא"ל',
+'logentry-rights-rights' => '$1 שינה את ההרשאות של $3 מ$4 ל$5',
+'logentry-rights-rights-legacy' => '$1 שינה את ההרשאות של $3',
+'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
+'rightsnone' => '(כלום)',
 
 # Feedback
 'feedback-bugornote' => 'אם אתם מוכנים לתאר בעיה טכנית בפרטים, אנא [$1 דווחו על באג].
@@ -4177,6 +4192,7 @@ $5
 'api-error-ok-but-empty' => 'שגיאה פנימית: אין תשובה מהשרת.',
 'api-error-overwrite' => 'לא מותרת החלפת קובץ קיים.',
 'api-error-stashfailed' => 'שגיאה פנימית: השרת נכשל באחסון הקובץ הזמני.',
+'api-error-publishfailed' => 'שגיאה פנימית: השרת נכשל בפרסום הקובץ הזמני.',
 'api-error-timeout' => 'השרת לא השיב בזמן המצופה.',
 'api-error-unclassified' => 'אירעה שגיאה בלתי ידועה.',
 'api-error-unknown-code' => 'שגיאה בלתי ידועה: "$1".',
index 25a34bb..b607859 100644 (file)
@@ -313,7 +313,7 @@ $messages = array(
 'newwindow' => '(नई विंडो में खुलता है)',
 'cancel' => 'रद्द करें',
 'moredotdotdot' => 'और...',
-'mypage' => 'मà¥\87रा à¤ªà¥\83षà¥\8dठ',
+'mypage' => 'पृष्ठ',
 'mytalk' => 'वार्ता',
 'anontalk' => 'इस आइ॰पी के लिये वार्ता',
 'navigation' => 'भ्रमण',
@@ -335,7 +335,7 @@ $messages = array(
 'vector-action-move' => 'स्थानांतरण करें',
 'vector-action-protect' => 'सुरक्षित करें',
 'vector-action-undelete' => 'हटाना वापस लें',
-'vector-action-unprotect' => 'सà¥\81रà¤\95à¥\8dषा à¤¹à¤\9fाà¤\8fà¤\81',
+'vector-action-unprotect' => 'सà¥\81रà¤\95à¥\8dषा à¤¬à¤¦à¤²à¥\87à¤\82',
 'vector-simplesearch-preference' => 'संवर्धित खोज सुझाव सक्षम करें। (केवल वॅक्टर स्किन हेतु)',
 'vector-view-create' => 'बनाएँ',
 'vector-view-edit' => 'सम्पादन',
@@ -350,7 +350,7 @@ $messages = array(
 'errorpagetitle' => 'त्रुटि',
 'returnto' => '$1 को लौटें।',
 'tagline' => '{{SITENAME}} से',
-'help' => 'सहायता',
+'help' => 'मदद',
 'search' => 'खोज',
 'searchbutton' => 'खोजें',
 'go' => 'जाएँ',
@@ -542,6 +542,8 @@ $1',
 'cannotdelete' => '"$1" पृष्ठ या फ़ाइल को हटाया नहीं जा सकता।
 शायद किसी और ने इसे पहले ही हटा दिया हो।',
 'cannotdelete-title' => '"$1" पृष्ठ को हटाया नहीं जा सकता',
+'delete-hook-aborted' => 'हुक द्वारा हटाना बीच में ही छोड़ा गया।
+इसने कोई कारण नहीं बताया।',
 'badtitle' => 'खराब शीर्षक',
 'badtitletext' => 'आपके द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जुड़ा हुआ अंतर-भाषीय या अंतर-विकि शीर्षक है।
 इसमें एक या एक से अधिक ऐसे कॅरेक्टर हो सकते हैं जो शीर्षक में प्रयोग नहीं किये जा सकते।',
@@ -556,10 +558,11 @@ $1',
 'actionthrottled' => 'कार्य समाप्त कर दिया गया है',
 'actionthrottledtext' => 'स्पैम की रोकथाम के लिये, यह क्रिया इतने कम समय में एक सीमा से अधिक बार करने से मनाई है, और आप इस सीमा को पार कर चुके हैं।
 कृपया कुछ समय बाद पुन: यत्न करें।',
-'protectedpagetext' => 'यह पृष्ठ संपादनों से सुरक्षित किया हुआ है।',
+'protectedpagetext' => 'यह à¤ªà¥\83षà¥\8dठ à¤¸à¤\82पादनà¥\8bà¤\82 à¤\8fवà¤\82 à¤\85नà¥\8dय à¤\95ारà¥\8dयà¥\8bà¤\82 à¤¸à¥\87 à¤¸à¥\81रà¤\95à¥\8dषित à¤\95िया à¤¹à¥\81à¤\86 à¤¹à¥\88।',
 'viewsourcetext' => 'आप इस पृष्ठ का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:',
 'viewyourtext' => "आप इस पृष्ठ में ''अपने सम्पादन'' का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:",
-'protectedinterface' => 'यह पृष्ठ सॉफ्टवेयर का इंटरफ़ेस पाठ देता है, और इसे गलत प्रयोग से बचाने के लिये सुरक्षित कर दिया गया है।',
+'protectedinterface' => 'यह पृष्ठ इस विकी के सॉफ़्टवेयर का इंटरफ़ेस पाठ देता है, और इसे गलत प्रयोग से बचाने के लिये सुरक्षित कर दिया गया है।
+सभी विकियों के लिए अनुवाद जोड़ने या बदलने के लिए कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] का प्रयोग करें।',
 'editinginterface' => "'''चेतावनी:''' आप एक ऐसे पृष्ठ को बदल रहे हैं जो सॉफ़्टवेयर का इंटरफ़ेस पाठ प्रदान करता है।
 इस पृष्ठ को बदलने से अन्य सदस्यों को प्रदर्शित इंटरफ़ेस की शक्लोसूरत में बदलाव आएगा। अनुवादों के लिए कृपया [//translatewiki.net/wiki/Main_Page?setlang=hi translatewiki.net] का प्रयोग करें, यह मीडियाविकि की क्षेत्रीयकरण परियोजना है।",
 'sqlhidden' => '(छुपाई हुई SQL पृच्छा)',
@@ -585,6 +588,9 @@ $2',
 
 आप बेनामी हो के {{SITENAME}} का प्रयोग जारी रख सकते हैं, या उसी या किसी और सदस्य के तौर पर <span class='plainlinks'>[$1 फिर से सत्रारंभ]</span> कर सकते हैं।
 ध्यान दें कि जब तक आप अपनी ब्राउज़र कैशे खाली नहीं करते हैं, कुछ पृष्ठ अब भी ऐसे दिख सकते हैं जैसे कि आपका सत्र अभी भी चल रहा हो।",
+'welcomeuser' => 'आपका स्वागत है, $1!',
+'welcomecreation-msg' => 'आपका खाता बना दिया गया है।
+अपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] बदलना ना भूलियेगा।',
 'yourname' => 'सदस्यनाम:',
 'yourpassword' => 'कूटशब्द:',
 'yourpasswordagain' => 'कूटशब्द दुबारा लिखें:',
@@ -740,6 +746,7 @@ $2
 'changeemail-oldemail' => 'वर्तमान ई-मेल पता:',
 'changeemail-newemail' => 'नया ई-मेल पता:',
 'changeemail-none' => '(कोई नहीं)',
+'changeemail-password' => 'आपका {{SITENAME}} पासवर्ड:',
 'changeemail-submit' => 'ई-मेल बदलें',
 'changeemail-cancel' => 'रद्द करें',
 
@@ -839,7 +846,7 @@ $2
 या इस पृष्ठ को [{{fullurl:{{FULLPAGENAME}}|action=edit}} सम्पादित] कर सकते हैं</span>।',
 'noarticletext-nopermission' => 'फ़िलहाल इस पृष्ठ पर कोई सामग्री नहीं है।
 आप अन्य पृष्ठों में [[Special:Search/{{PAGENAME}}|इस शीर्षक की खोज]] कर सकते हैं,
-या <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित लॉग खोज सकते हैं]</span>।',
+या <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित लॉग खोज सकते हैं]</span>, परन्तु आपको यह पृष्ठ बनाने की अनुमति नहीं है।',
 'userpage-userdoesnotexist' => 'सदस्य खाता "$1" पंजीकृत नहीं है।
 कृपया जाँच लें कि आप यह पृष्ठ संपादित अथवा निर्मित करना चाहते हैं या नहीं।',
 'userpage-userdoesnotexist-view' => 'सदस्य "$1" पंजीकृत नहीं है।',
@@ -849,7 +856,6 @@ $2
 * '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबाते समय ''Shift'' (शिफ़्ट) दबा के रखें, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबाएँ (मैक पर ''⌘-R'')
 * '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबाएँ (मैक पर ''⌘-Shift-R'')
 * '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाकर ''Refresh'' (रिफ़्रेश) करें या ''Ctrl-F5'' (कंट्रोल-F5) दबाएँ
-* '''कांक्वरर:''' ''Reload'' (रीलोड) या \"F5\" दबाएँ
 * '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → वरीयताएँ) में कैश साफ़ करें",
 'usercssyoucanpreview' => "'''टिप''': संजोने से पहले अपनी नई सी॰एस॰एस को जाँचने के लिये \"{{int:showpreview}}\" बटन का प्रयोग करें।",
 'userjsyoucanpreview' => "'''टिप''': संजोने से पहले अपनी नई जावास्क्रिप्ट को जाँचने के लिये \"{{int:showpreview}}\" बटन का प्रयोग करें।",
@@ -867,7 +873,7 @@ $2
 'note' => "'''सूचना:'''",
 'previewnote' => "'''याद रखें, यह केवल एक झलक है।'''
 आपके बदलाव अभी तक संजोये नहीं गए हैं!",
-'continue-editing' => 'सà¤\82पादन à¤\9cारà¥\80 à¤°à¤\96à¥\87à¤\82',
+'continue-editing' => 'सà¤\82पादन à¤\95à¥\8dषà¥\87तà¥\8dर à¤\95à¥\8b à¤\9cाà¤\8fà¤\81',
 'previewconflict' => 'यह झलक ऊपरी पाठ सम्पादन क्षेत्र में हुए बदलाव दिखाती है, और यदि आप अभी संजोते हैं तो यही पाठ संजोया जाएगा।',
 'session_fail_preview' => "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''
 कृपया पुन: यत्न करें।
@@ -953,6 +959,7 @@ $2
 'defaultmessagetext' => 'संदेश का डिफ़ॉल्ट पाठ',
 
 # Content models
+'content-model-wikitext' => 'विकिटेक्स्ट',
 'content-model-javascript' => 'जावास्क्रिप्ट',
 
 # Parser/template warnings
@@ -1102,9 +1109,10 @@ $1",
 'revdelete-concurrent-change' => '$2, $1 वाले मद को बदलते समय त्रुटि आई: प्रतीत होता है कि आपके द्वारा बदलने के दौरान किसी और ने इसमें बदलाव कर दिए हैं।
 कृपया लॉग देख लें।',
 'revdelete-only-restricted' => '$2, $1 की तिथि के आइटम को छुपाने में त्रुटि: आप अन्य दृश्यता विकल्पों को चुने बिना प्रबंधकों की दृष्टि से आइटमों को छुपा नहीं सकते।',
-'revdelete-reason-dropdown' => '*मिटाने के आम कारण
+'revdelete-reason-dropdown' => '*हटाने के आम कारण
 ** सर्वाधिकार (कॉपीराइट) उल्लंघन
-** अनुपयुक्त निजी जानकारी
+** अनुपयुक्त टिप्पणी या निजी जानकारी
+** अनुपयुक्त सदस्यनाम
 ** मानहानिकारक जानकारी',
 'revdelete-otherreason' => 'अन्य/अतिरिक्त कारण:',
 'revdelete-reasonotherlist' => 'अन्य कारण',
@@ -1461,12 +1469,13 @@ HTML टैग की जाँच करें।',
 'right-sendemail' => 'अन्य सदस्यों को ई-मेल भेजें',
 'right-passwordreset' => 'कूटशब्द रीसेट ई-मेल देखें',
 
+# Special:Log/newusers
+'newuserlogpage' => 'सदस्य खाता निर्माण लॉग',
+'newuserlogpagetext' => 'यह सदस्य खातों के निर्माण का लॉग है।',
+
 # User rights log
 'rightslog' => 'सदस्य अधिकार सूची',
 'rightslogtext' => 'यह सदस्य अधिकारों में हुए बदलावों की सूची है।',
-'rightslogentry' => '$1 की समूह सदस्यता $2 से $3 को बदली',
-'rightslogentry-autopromote' => 'स्वचालित रूप से $2 से $3 को पदोन्नत हुआ था',
-'rightsnone' => '(कोई नहीं)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'इस पृष्ठ को पढ़ने',
@@ -1525,7 +1534,7 @@ HTML टैग की जाँच करें।',
 'rcshowhidepatr' => 'जाँचे हुए सम्पादन $1',
 'rcshowhidemine' => 'मेरे बदलाव $1',
 'rclinks' => 'पिछले $2 दिनों में हुए $1 बदलाव दिखाएँ<br />$3',
-'diff' => 'फ़रà¥\8dà¤\95',
+'diff' => 'à¤\85à¤\82तर',
 'hist' => 'इतिहास',
 'hide' => 'छिपाएँ',
 'show' => 'दिखाएँ',
@@ -1940,8 +1949,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 
 'disambiguations' => 'बहुविकल्पी पृष्ठों से जुड़ते पृष्ठ',
 'disambiguationspage' => 'Template:बहुविकल्पी',
-'disambiguations-text' => "निम्नांकित पृष्ठ '''बहुविकल्पी पृष्ठों''' से जुड़ते हैं।
-à¤\87नà¥\8dहà¥\87à¤\82 à¤\89पयà¥\81à¤\95à¥\8dत à¤µà¤¿à¤·à¤¯ à¤¸à¥\87 à¤\9cà¥\81à¥\9cा होना चाहिए।<br />
+'disambiguations-text' => "निम्नांकित पृष्ठ कम-से-कम एक '''बहुविकल्पी पृष्ठ''' से जुड़ते हैं।
+सà¤\82भवतà¤\83 à¤\87नà¥\8dहà¥\87à¤\82 à¤\89पयà¥\81à¤\95à¥\8dत à¤ªà¥\83षà¥\8dठ à¤¸à¥\87 à¤\9cà¥\81ड़ा होना चाहिए।<br />
 यदि कोई पृष्ठ ऐसे साँचे का प्रयोग करता है जो [[MediaWiki:Disambiguationspage]] से जुड़ा हुआ है, तो उसे बहुविकल्पी पृष्ठ माना जाता है।",
 
 'doubleredirects' => 'दुगुने पुनर्निर्देश',
@@ -1997,6 +2006,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'mostlinkedtemplates' => 'सर्वाधिक से जुड़े हुए साँचे',
 'mostcategories' => 'सर्वाधिक श्रेणियों वाले पृष्ठ',
 'mostimages' => 'सर्वाधिक से जुड़ी हुई फ़ाइलें',
+'mostinterwikis' => 'सर्वाधिक अंतरविकी कड़ियों वाले पृष्ठ',
 'mostrevisions' => 'सर्वाधिक अवतरणित पृष्ठ',
 'prefixindex' => 'उपसर्ग अनुसार पृष्ठ',
 'prefixindex-namespace' => 'उपसर्ग वाले सभी पृष्ठ ($1 नामस्थान)',
@@ -2072,6 +2082,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'allpages-bad-ns' => '{{SITENAME}} में "$1" नामस्थान नहीं है।',
 'allpages-hide-redirects' => 'पुनर्निर्देश छुपाएँ',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'आप इस पृष्ठ का कैश किया हुआ अवतरण देख रहे हैं, जो $1 पुराना हो सकता है।',
+'cachedspecial-viewing-cached-ts' => 'आप इस पृष्ठ का कैश किया हुआ अवतरण देख रहे हैं, जो कि संभवतः वर्तमान अवस्था से भिन्न हो।',
+'cachedspecial-refresh-now' => 'नवीनतम देखें।',
+
 # Special:Categories
 'categories' => 'श्रेणियाँ',
 'categoriespagetext' => 'निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणियों}} में पृष्ठ या मीडिया है।
@@ -2093,7 +2108,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'linksearch-ok' => 'खोजें',
 'linksearch-text' => '"*.wikipedia.org" जैसे वाईल्ड-कार्ड्स प्रयोग किये जा सकते हैं।
 कम-से-कम ".org" जैसे किसी top-level डोमेन की आवश्यकता है।<br />
-स्वीकार्य प्रोटोकॉल: <code>$1</code> (इनमें से कोई भी अपनी खोज में न जोड़ें)',
+स्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: <code>$1</code> (यदि कोई प्रोटोकॉल ना दिया जाए तो http:// का प्रयोग किया जाता है)',
 'linksearch-line' => '$2 में से $1 जुडा हुआ हैं',
 'linksearch-error' => 'वाईल्डकार्ड्स होस्टनाम के सिर्फ शुरू में आ सकते हैं।',
 
@@ -2112,10 +2127,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'activeusers-hidesysops' => 'प्रबंधक छुपाएँ',
 'activeusers-noresult' => 'कोई सदस्य नहीं मिले।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'सदस्य खाता निर्माण लॉग',
-'newuserlogpagetext' => 'यह सदस्य खातों के निर्माण का लॉग है।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'सदस्य समूह अधिकार',
 'listgrouprights-summary' => 'नीचे इसे विकि के लिए परिभाषित सदस्य समूहों की सूची है, साथ में हर समूह से जुड़े अधिकार भी वर्णित हैं।
@@ -2142,8 +2153,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'emailuser-title-target' => 'इस {{GENDER:$1|सदस्य|सदस्या}} को ई-मेल करें।',
 'emailuser-title-notarget' => 'सदस्य को ई-मेल करें',
 'emailpage' => 'सदस्य को ई-मेल करें',
-'emailpagetext' => 'नीचे दिए पर्चे को जरिए आप इस सदस्य को ई-मेल भेज सकते हैं।
-à¤\86पनà¥\87 à¤\9cà¥\8b à¤ªà¤¤à¤¾ [[Special:Preferences|à¤\85पनà¥\80 à¤¸à¤¦à¤¸à¥\8dय à¤µà¤°à¥\80यताà¤\93à¤\82]] में दिया था वह इस ई-मेल के "भेजने वाले" के तौर पर आएगा, अतः प्राप्तकर्ता आपको सीधे जवाब दे सकेंगे।',
+'emailpagetext' => 'नीचे दिए पर्चे को जरिए आप इस {{GENDER:$1|सदस्य}} को ई-मेल भेज सकते हैं।
+à¤\86पनà¥\87 à¤\9cà¥\8b à¤ªà¤¤à¤¾ [[Special:Preferences|à¤\85पनà¥\80 à¤ªà¤¸à¤\82द]] में दिया था वह इस ई-मेल के "भेजने वाले" के तौर पर आएगा, अतः प्राप्तकर्ता आपको सीधे जवाब दे सकेंगे।',
 'usermailererror' => 'मेल ऑब्जेक्ट ने त्रुटि दी:',
 'defemailsubject' => '{{SITENAME}} ई-मेल "$1" सदस्य से',
 'usermaildisabled' => 'सदस्य ई-मेल अक्षम किया गया',
@@ -2181,10 +2192,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'watchnologin' => 'लॉग इन नहीं किया है',
 'watchnologintext' => 'ध्यानसूची में बदलाव के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है।',
 'addwatch' => 'ध्यानसूची में जोड़ें',
-'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ का समावेश कर दिया गया है।
-भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे तथा [[Special:RecentChanges|हाल में हुए बदलावों की सूची]] में यह पृष्ठ बोल्ड दिखेगा ताकि आप आसानी से इसका ध्यान रख सकें।
-
-अगर आपको इस पृष्ठ को अपनी ध्यानसूची से निकालना हो तो "ध्यान हटायें" पर क्लिक करें।',
+'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ जोड़ दिया गया है।
+भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।',
 'removewatch' => 'ध्यानसूची से हटाएँ',
 'removedwatchtext' => '"[[:$1]]" नामक पृष्ठ को आपकी [[Special:Watchlist|ध्यानसूची]] से हटा दिया गया है।',
 'watch' => 'ध्यान रखें',
@@ -2213,15 +2222,22 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 '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 को {{gender:$2|$2}} ने $PAGEEDITDATE को हटा दिया है, देखें $3।',
+'enotif_body_intro_created' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को बनाया है, वर्तमान अवतरण के लिए $3 देखें।',
+'enotif_body_intro_moved' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को स्थानांतरित किया है, वर्तमान अवतरण के लिए $3 देखें।',
+'enotif_body_intro_restored' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को पुनर्स्थापित किया है, वर्तमान अवतरण के लिए $3 देखें।',
+'enotif_body_intro_changed' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को परिवर्तित किया है, वर्तमान अवतरण के लिए $3 देखें।',
 'enotif_lastvisited' => 'आपकी आखिरी भेंट के बाद हुए बदलाव देखने के लिये $1 देखें।',
 'enotif_lastdiff' => 'इस बदलाव को देखने के लिये $1 देखें।',
 'enotif_anon_editor' => 'अनामक सदस्य $1',
 'enotif_body' => 'प्रिय $WATCHINGUSERNAME जी,
 
-
-{{SITENAME}} का $PAGETITLE पृष्ठ $PAGEEDITDATE को $PAGEEDITOR द्वारा $CHANGEDORCREATED गया, कृपया ताज़े अवतरण के लिए $PAGETITLE_URL देखें।
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 सम्पादन सारांश: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2246,6 +2262,8 @@ $UNWATCHURL
 
 राय देने या अधिक सहायता पाने के लिए:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाया',
+'changed' => 'परिवर्तित किया',
 
 # Delete
 'deletepage' => 'पृष्ठ हटाएँ',
@@ -2285,6 +2303,8 @@ $UNWATCHURL
 'rollback' => 'संपादन वापिस लें',
 'rollback_short' => 'वापिस लें',
 'rollbacklink' => 'वापिस लें',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|सम्पादन}} वापिस लें',
+'rollbacklinkcount-morethan' => '$1 से अधिक {{PLURAL:$1|सम्पादन}} वापिस लें',
 'rollbackfailed' => 'वापिस लेना असफल रहा',
 'cantrollback' => 'पुराने अवतरण को पूर्ववत नहीं कर सकते हैं;
 इस पृष्ठ का अन्तिम योगदानकर्ता इस लेख का एकमात्र लेखक है।',
@@ -2379,8 +2399,7 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 लेखागार समय-समय पर साफ किये जाते हैं।',
 'undelete-fieldset-title' => 'अवतरण पुरानी स्थिति पर लाएँ',
 'undeleteextrahelp' => "पृष्ठ का संपूर्ण इतिहास वापस लाने के लिए सभी बक्सों से सही का निशान हटा दें और '''''{{int:undeletebtn}}''''' पर क्लिक करें।
-चुनिंदा इतिहास को वापस लाने के लिए, उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ, और '''''{{int:undeletebtn}}''''' पर क्लिक करें।
-'''''पूर्ववत करें''''' पर चटका लगाने से टिप्पणी कोष्ठक और सभी बक्से खाली कर दिए जाएँगे।",
+चुनिंदा इतिहास को वापस लाने के लिए उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ और '''''{{int:undeletebtn}}''''' पर क्लिक करें।",
 'undeleterevisions' => '$1 {{PLURAL:$1|अवतरण}} लेखागार में हैं',
 'undeletehistory' => 'यदि आप पृष्ठ को पुनर्स्थापित करते हैं तो सभी अवतरण इतिहास में पुनर्स्थापित हो जायेंगे।
 हटाने के बाद यदि एक नया पृष्ठ उसी नाम से बनाया गया है तो पुनर्स्थापित अवतरण पिछले इतिहास में दर्शित होंगे।',
@@ -2402,8 +2421,8 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 'undeletedrevisions' => '{{PLURAL:$1|एक रूपान्तर वापस लाया गया|$1 रूपान्तर वापस लाये गये}} है',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 अवतरण|$1 अवतरण}} और {{PLURAL:$2|1 फ़ाईल|$2 फ़ाइलें}} पुनर्स्थापित कर दियें',
 'undeletedfiles' => '{{PLURAL:$1|1 फ़ाईल|$1 फ़ाईलें}} पुनर्स्थापित',
-'cannotundelete' => 'पुनर्स्थापित नहीं कर सकें;
-किसी और ने पहले ही पुनर्स्थापित कर दिया हों।',
+'cannotundelete' => 'पुनर्स्थापित नहीं कर सके:
+$1',
 'undeletedpage' => "'''$1 को पुनर्स्थापित कर दिया गया है'''
 
 हाल में हटाये गये तथा पुनर्स्थापित किये गए पन्नों की जानकारी के लिये [[Special:Log/delete|हटाने की लॉग]] देखें।",
@@ -2444,7 +2463,7 @@ $1',
 'month' => 'इस महिनेसे (और पुरानें):',
 'year' => 'इस सालसे (और पुराने):',
 
-'sp-contributions-newbies' => 'सिर्फ़ नये सदस्योंका योगदान दर्शायें',
+'sp-contributions-newbies' => 'सिर्फ़ नये सदस्यों के योगदान दर्शायें',
 'sp-contributions-newbies-sub' => 'नये सदस्योंके लिये',
 'sp-contributions-newbies-title' => 'नए सदस्यों द्वारा योगदान',
 'sp-contributions-blocklog' => 'ब्लॉक सूची',
@@ -2518,8 +2537,8 @@ $1',
 'ipb-confirm' => 'अवरोधण की पुष्टि करें',
 'badipaddress' => 'अमान्य आईपी पता।',
 'blockipsuccesssub' => 'अवरोधन सफल ।(संपादन करने से रोक दिया गया है)',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] à¤\95à¥\8b à¤¬à¤¾à¤§à¥\8dय किया जा चुका है।<br />
-बाधà¥\8dयà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¤®à¥\80à¤\95à¥\8dषा à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|IP à¤¬à¤¾à¤§à¥\8dय à¤¸à¥\82à¤\9aà¥\80]] देखें।',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] à¤\95à¥\8b à¤¬à¥\8dलà¥\89à¤\95 किया जा चुका है।<br />
+बà¥\8dलà¥\89à¤\95à¥\8bà¤\82 à¤\95à¥\80 à¤¸à¤®à¥\80à¤\95à¥\8dषा à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|बà¥\8dलà¥\89à¤\95 à¤²à¥\89à¤\97]] देखें।',
 'ipb-blockingself' => 'आप खुद को अवरोधित कर रहे हैं! क्या आप वाकई ऐसा करना चाहते हैं?',
 'ipb-edit-dropdown' => 'ब्लॉक कारण संपादित करें',
 'ipb-unblock-addr' => '$1 को अनब्लॉक करें',
@@ -2571,9 +2590,9 @@ $1 को बाध्य करने का कारण है: "$2"',
 यह दबाया गया लॉग सन्दर्भ के लिए उपलब्ध कया गया है:',
 'blocklogentry' => '"[[$1]]" को $2 $3 तक बदलाव करने से रोक दिया गया है।',
 'reblock-logentry' => '[[$1]] का अवरोध जमाव बदला गया, मियाद अब $2 $3 पर खत्म होगी',
-'blocklogtext' => 'यह à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\8b à¤¬à¤¾à¤§à¥\8dय à¤\8fवà¤\82 à¤\85बाधà¥\8dय à¤\95रनà¥\87 à¤\95à¥\87 à¤\95à¥\8dरियाà¤\95लापà¥\8bà¤\82 à¤\95ा à¤\85भिलà¥\87à¤\96 है।
-स्वत: बाधित होने वाले IP पते इस सूची में उपलब्ध नहीं है।
-वरà¥\8dतà¥\8dतमान à¤®à¥\87à¤\82 à¤\95à¥\8dरियाशà¥\80ल à¤ªà¥\8dरतिबà¤\82धà¥\8bà¤\82 à¤\94र à¤¬à¤¾à¤§à¥\8dयà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|IP à¤¬à¤¾à¤§à¤¿à¤¤ à¤¸à¥\82à¤\9aà¥\80]] देखें।',
+'blocklogtext' => 'यह à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\8b à¤¬à¥\8dलà¥\89à¤\95 à¤\8fवà¤\82 à¤\85नबà¥\8dलà¥\89à¤\95 à¤\95रनà¥\87 à¤\95à¥\87 à¤\95ारà¥\8dयà¥\8bà¤\82 à¤\95ा à¤²à¥\89à¤\97 है।
+स्वत बाधित होने वाले IP पते इस सूची में उपलब्ध नहीं है।
+वरà¥\8dतमान à¤®à¥\87à¤\82 à¤\95à¥\8dरियाशà¥\80ल à¤ªà¥\8dरतिबà¤\82धà¥\8bà¤\82 à¤\94र à¤¬à¥\8dलà¥\89à¤\95à¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|बà¥\8dलà¥\89à¤\95 à¤²à¥\89à¤\97]] देखें।',
 'unblocklogentry' => '$1 अनवरोधित',
 'block-log-flags-anononly' => 'केवल अनाम सदस्य',
 'block-log-flags-nocreate' => 'खाता निर्माण पर रोक',
@@ -2727,7 +2746,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 'move-leave-redirect' => 'एक पुनर्निर्देशन पीछे छोड़ते जाएँ',
 'protectedpagemovewarning' => "'''चेतावनी:''' यह पृष्ठ तालाबंद है अतः केवल वही सदस्य इनका स्थानांतरण कर सकते हैं जो प्रबंधक हों।
 निम्न् तलिका मे ताजा सदस्यो कि जानकारी दि गयि है:",
-'semiprotectedpagemovewarning' => "'''ध्यान दें:''' इस पृष्ठ को सुरक्षित कर दिया गया है ताकि केवल पंजीकृत सदस्य ही इसे स्थानांतरित कर पाएँ।",
+'semiprotectedpagemovewarning' => "'''सूचना:''' यह पृष्ठ सुरक्षित कर दिया गया है और इसे केवल पंजीकृत सदस्य ही स्थानांतरित कर सकते हैं।
+नवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:",
 'move-over-sharedrepo' => '== फ़ाइल मौजूद है ==
 [[:$1]] एक साझे भंडार पर मौजूद है। इस नाम पर स्थानांतरण से नई फ़ाइल साझा फ़ाइल को ओवरराइड करेगी।',
 'file-exists-sharedrepo' => 'फ़ाइल रेपो साझा मौजूद',
@@ -2824,6 +2844,9 @@ $1 को बाध्य करने का कारण है: "$2"',
 'import-invalid-interwiki' => 'इस विकि से आयात नहीं हो सकता है।',
 'import-error-edit' => 'पृष्ठ " $1 " आयातित नहीं किया जासकता है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।',
 'import-error-create' => 'पृष्ठ " $1 " आयातित नहीं है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।',
+'import-error-interwiki' => 'पृष्ठ "$1" आयात नहीं किया गया है क्योंकि इसका नाम अंतरविकी कड़ियाँ बनाने के लिए आरक्षित है।',
+'import-error-special' => 'पृष्ठ "$1" आयात नहीं किया गया है क्योंकि यह एक ऐसे विशेष नामस्थान के अंतर्गत आता है जिसमें पृष्ठ नहीं बनाए जा सकते हैं।',
+'import-error-invalid' => 'पृष्ठ "$1" आयात नहीं किया गया है क्योंकि इसका नाम अमान्य है।',
 
 # Import log
 'importlogpage' => 'आयात सूची',
@@ -2869,13 +2892,13 @@ $1 को बाध्य करने का कारण है: "$2"',
 'tooltip-n-randompage' => 'किसी एक लेख पर जाएँ',
 'tooltip-n-help' => 'पता लगाने का स्थान',
 'tooltip-t-whatlinkshere' => 'यहाँ का हवाला देने वाले सभी विकि पन्नों की सूची',
-'tooltip-t-recentchangeslinked' => 'यहाà¤\81 à¤\9cà¥\81डà¥\87 à¤¹à¥\81à¤\8f à¤¸à¤­à¥\80 à¤ªà¤¨à¥\8dनà¥\8bà¤\82में हुए हाल के बदलाव',
+'tooltip-t-recentchangeslinked' => 'यहाà¤\81 à¤\9cà¥\81ड़à¥\87 à¤¹à¥\81à¤\8f à¤¸à¤­à¥\80 à¤ªà¤¨à¥\8dनà¥\8bà¤\82 में हुए हाल के बदलाव',
 'tooltip-feed-rss' => 'इस पृष्ठ की आरएसएस फ़ीड',
 'tooltip-feed-atom' => 'इस पृष्ठ की अणु फ़ीड',
 'tooltip-t-contributions' => 'इस सदस्यके योगदानकी सूची देखियें',
 'tooltip-t-emailuser' => 'इस सदस्य को इमेल भेजें',
 'tooltip-t-upload' => 'संचिका चढ़ाएँ',
-'tooltip-t-specialpages' => 'सभà¥\80 à¤\96ास à¤ªà¤¨à¥\8dनों की सूची',
+'tooltip-t-specialpages' => 'सभà¥\80 à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठों की सूची',
 'tooltip-t-print' => 'इस पृष्ठका छपानेलायक अवतरण',
 'tooltip-t-permalink' => 'पृष्ठ के इस संस्करण की स्थायी कड़ी',
 'tooltip-ca-nstab-main' => 'सामग्री वाला पृष्ठ देखें',
@@ -2938,11 +2961,26 @@ $1 को बाध्य करने का कारण है: "$2"',
 
 # Info page
 'pageinfo-title' => '"$1" के लिये जानकारी',
-'pageinfo-header-edits' => 'बदलने के लिये',
+'pageinfo-not-current' => 'क्षमा करें, पुराने अवतरणों के लिए यह जानकारी प्रदान करना संभव नहीं है।',
+'pageinfo-header-basic' => 'मूल जानकारी',
+'pageinfo-header-edits' => 'सम्पादन इतिहास',
+'pageinfo-header-restrictions' => 'पृष्ठ सुरक्षा',
+'pageinfo-header-properties' => 'पृष्ठ जानकारी',
+'pageinfo-display-title' => 'प्रदर्शित शीर्षक',
+'pageinfo-default-sort' => 'डिफ़ॉल्ट सॉर्ट की',
+'pageinfo-length' => 'पृष्ठ आकार (बाइट्स में)',
+'pageinfo-article-id' => 'पृष्ठ आइ॰डी',
+'pageinfo-language' => 'पृष्ठ सामग्री भाषा',
 'pageinfo-views' => 'दर्शाव की संख्या',
-'pageinfo-watchers' => 'पर नजर रखने वालों की संख्या',
-'pageinfo-edits' => 'संपादन की संख्या',
-'pageinfo-authors' => 'अलग लेखकों की संख्या',
+'pageinfo-watchers' => 'पृष्ठ पर नज़र रखने वालों की संख्या',
+'pageinfo-redirects-name' => 'इस पृष्ठ को पुनर्निर्देश',
+'pageinfo-subpages-name' => 'इस पृष्ठ के उप-पृष्ठ',
+'pageinfo-firstuser' => 'पृष्ठ निर्माता',
+'pageinfo-firsttime' => 'पृष्ठ निर्माण तिथि',
+'pageinfo-lastuser' => 'नवीनतम सम्पादक',
+'pageinfo-lasttime' => 'नवीनतम सम्पादन तिथि',
+'pageinfo-edits' => 'संपादन की कुल संख्या',
+'pageinfo-authors' => 'लेखकों की संख्या',
 'pageinfo-recent-edits' => 'हाल में हुए सम्पादनों की संख्या (पिछ्ले $1 में)',
 'pageinfo-magic-words' => 'जादुई {{PLURAL:$1|शब्द}} ($1)',
 'pageinfo-hidden-categories' => 'छुपी {{PLURAL:$1|श्रेणी|श्रेणियाँ}} ($1)',
@@ -2950,8 +2988,13 @@ $1 को बाध्य करने का कारण है: "$2"',
 'pageinfo-toolboxlink' => 'इस पृष्ठ पर जानकारी',
 'pageinfo-redirectsto' => 'पुनर्निर्देशन लक्ष्य',
 'pageinfo-redirectsto-info' => 'जानकारी',
+'pageinfo-contentpage' => 'सामग्री पृष्ठों में गिना जाता है',
 'pageinfo-contentpage-yes' => 'हाँ',
 'pageinfo-protect-cascading-yes' => 'हाँ',
+'pageinfo-category-info' => 'श्रेणी जानकारी',
+'pageinfo-category-pages' => 'पृष्ठ संख्या',
+'pageinfo-category-subcats' => 'उपश्रेणियों की संख्या',
+'pageinfo-category-files' => 'फ़ाइलों की संख्या',
 
 # Patrolling
 'markaspatrolleddiff' => 'देख लिया ऐसा मार्क करें',
@@ -3023,7 +3066,9 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minute|$1 minutes}}',
 'hours' => '{{PLURAL:$1|$1 hour|$1 hours}}',
 'days' => '{{PLURAL:$1|$1 day|$1 days}}',
+'months' => '{{PLURAL:$1|महीना|महीने}}',
 'ago' => '$1 पहले',
+'just-now' => 'अभी-अभी',
 
 # Bad image list
 'bad_image_list' => 'प्रारूप इस प्रकार है:
@@ -3034,7 +3079,7 @@ $1',
 
 # Metadata
 'metadata' => 'मेटाडाटा',
-'metadata-help' => 'इस फ़ाइल में बढ़ाई हुई जानकारी हैं, हो सकता है कि यह फ़ाइल बनाने में इस्तेमाल किये गए स्कैनर अथवा कैमेरा से यह प्राप्त हुई हैं। अगर यह फ़ाइल बदलदी गई हैं तो यह जानकारी नई फ़ाईलसे मेल नहीं खाने की आशंका हैं ।',
+'metadata-help' => 'इस फ़ाइल में बढ़ाई हुई जानकारी हैं, हो सकता है कि यह फ़ाइल बनाने में इस्तेमाल किये गए स्कैनर अथवा कैमेरा से यह प्राप्त हुई हैं। अगर यह फ़ाइल बदलदी गई है तो यह जानकारी नई फ़ाइल से मेल नहीं खाने की आशंका है।',
 'metadata-expand' => 'विस्तृत जानकारियां दिखाएं',
 'metadata-collapse' => 'विस्तृत जानकारियां छिपाएं',
 'metadata-fields' => 'जब मेटाडाटा तालिका को लघुरूप किया जाएगा तो इस सन्देश में सूचीबद्ध इएक्सआयएफ मेटाडाटा जानकारियां छवि प्रदर्शित होते समय सम्मिलित की जाएंगी।
@@ -3697,7 +3742,7 @@ $5
 * <span class="mw-specialpagerestricted">प्रतिबंधित विशेष पृष्ठ।</span>',
 'specialpages-group-maintenance' => 'अनुरक्षण रिपोर्ट',
 'specialpages-group-other' => 'अन्य विशेष पृष्ठ',
-'specialpages-group-login' => 'सतà¥\8dर à¤ªà¥\8dरारमà¥\8dभ / à¤¹à¤¸à¥\8dताà¤\95à¥\8dषर à¤\95रें',
+'specialpages-group-login' => 'सतà¥\8dर à¤\86रमà¥\8dभ / à¤\96ाता à¤\96à¥\8bलें',
 'specialpages-group-changes' => 'हाल ही में हुए परिवर्तन एवं अभिलेख',
 'specialpages-group-media' => 'मीडिया रिपोर्ट एवं अपलोड',
 'specialpages-group-users' => 'सदस्य एवं अधिकार',
@@ -3713,14 +3758,14 @@ $5
 'intentionallyblankpage' => 'यह पृष्ठ जानबूझ कर खाली छोड़ा गया है।',
 
 # External image whitelist
-'external_image_whitelist' => 'इस लाइन बिल्कुल के रूप में यह #Leave है<pre>
- #Put नियमित अभिव्यक्ति टुकड़े (बस हिस्सा है कि के बीच चला जाता है / /) के नीचे
- # à¤¯à¥\87 à¤¬à¤¾à¤¹à¤°à¥\80 (hotlinked) à¤\9bवियà¥\8bà¤\82 à¤\95à¥\87 à¤¯à¥\82à¤\86रà¤\8fल à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤®à¤¿à¤²à¤¾à¤¨ à¤\95िया à¤\9cाà¤\8fà¤\97ा
- # कि मैच उन छवियों के रूप में प्रदर्शित किया जाएगा, अन्यथा केवल छवि के लिए एक कड़ी दिखाया जाएगा
- #Lines # साथ शुरुआत टिप्पणी के रूप में इलाज कर रहे हैं
+'external_image_whitelist' => ' #यह लाइन जैसी है वैसी ही छोड़ दें<pre>
+ #नीचे रेगुलर एक्सप्रेशन के टुकड़े लिखें(बस वही हिस्सा जो // के बीच में आता है)
+ #à¤\87न à¤\8fà¤\95à¥\8dसपà¥\8dरà¥\87शन à¤\95ा à¤¬à¤¾à¤¹à¤°à¥\80 (hotlinked) à¤\9bवियà¥\8bà¤\82 à¤\95à¥\87 à¤¯à¥\82॰à¤\86र॰à¤\8fल à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤®à¤¿à¤²à¤¾à¤¨ à¤\95िया à¤\9cाà¤\8fà¤\97ा
+ #जो छवियाँ मिलान करेंगी, उन्हें प्रदर्शित किया जाएगा, अन्यथा केवल छवि की कड़ी दिखायी जाएगी
+ # # से शुरू होने वाली लाइनें टिप्पणी मानी जाती हैं
  # इस केस-असंवेदी है
 
- #Put सब regex टुकड़े इस रेखा से ऊपर। वास्तव में यह है के रूप में इस लाइन छोड़ दो</pre>',
+ #सब रेगुलर एक्सप्रेशन टुकड़े इस लाइन से ऊपर रखें। यह लाइन जैसी है वैसी ही छोड़ दें</pre>',
 
 # Special:Tags
 'tags' => 'वैध बदलाव चिप्पियाँ',
@@ -3798,11 +3843,15 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ने $4 से पुनार्निर्देश हटाकर $3 पर पुनर्निर्देश छोड़े बिना $3 को $4 पर स्थानांतरित किया',
 'logentry-patrol-patrol' => '$1 ने $3 पृष्ठ के $4 अवतरण को देखा हुआ चिन्हित किया',
 'logentry-patrol-patrol-auto' => '$1 ने $3 पृष्ठ के $4 अवतरण को स्वचालित रूप से देखा हुआ चिन्हित किया',
-'logentry-newusers-newusers' => '$1 created उपयोगकर्ता के खाता',
-'logentry-newusers-create' => '$1 created उपयोगकर्ता के खाता',
-'logentry-newusers-create2' => '$1 created a user account $3',
+'logentry-newusers-newusers' => 'सदस्य खाता $1 बनाया गया',
+'logentry-newusers-create' => 'सदस्य खाता $1 बनाया गया',
+'logentry-newusers-create2' => 'सदस्य खाता $3 $1 द्वारा बनाया गया था',
 'logentry-newusers-autocreate' => 'खाते $1 स्वचालित रूप से बनाया गया',
 'newuserlog-byemail' => 'कूटशब्द इ-मेल द्वारा भेजा गया हैं',
+'logentry-rights-rights' => '$1 ने $3 के सदस्य समूह $4 से बदलकर $5 किये',
+'logentry-rights-rights-legacy' => '$1 ने $3 के सदस्य समूह बदले',
+'logentry-rights-autopromote' => '$1 के सदस्य समूह स्वतः $4 से बदलकर $5 किये गए',
+'rightsnone' => '(कोई नहीं)',
 
 # Feedback
 'feedback-bugornote' => 'यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।
@@ -3822,6 +3871,7 @@ $5
 
 # Search suggestions
 'searchsuggest-search' => 'खोज',
+'searchsuggest-containing' => '...से युक्त',
 
 # API errors
 'api-error-badaccess-groups' => 'आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.',
@@ -3839,7 +3889,7 @@ $5
 'api-error-file-too-large' => 'प्रस्तुत फ़ाइल बहुत बड़ी थी।',
 'api-error-filename-tooshort' => 'फ़ाइल का नाम बहुत छोटा है।',
 'api-error-filetype-banned' => 'इस प्रकार की फ़ाइल पर प्रतिबंध लगा दिया है।',
-'api-error-filetype-banned-type' => '$1 à¥\9eाà¤\87ल {{PLURAL:$4|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारà¥\8bà¤\82}} à¤\95à¥\80 à¤\85नà¥\81मति à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88। à¥\9eाइल प्रकार {{PLURAL:$3|जिसकी|जिनकी}} अनुमति है: $2।',
+'api-error-filetype-banned-type' => '$1 à¤«à¤¼à¤¾à¤\87ल {{PLURAL:$4|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारà¥\8bà¤\82}} à¤\95à¥\80 à¤\85नà¥\81मति à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88। à¤«à¤¼ाइल प्रकार {{PLURAL:$3|जिसकी|जिनकी}} अनुमति है: $2।',
 'api-error-filetype-missing' => 'फाईल की एक्सटेंशन लापता है.',
 'api-error-hookaborted' => 'आपके द्वारा प्रयासरत संशोधन विस्तार हूक द्वारा निरस्त किया गया।',
 'api-error-http' => 'आंतरिक त्रुटि: सर्वर से कनेक्ट करने में असमर्थ।',
index d327dd8..1f38e0a 100644 (file)
@@ -1338,15 +1338,13 @@ Iske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.',
 'right-sendemail' => 'Duusra sadasya ke lage e-mail bhejo',
 'right-passwordreset' => 'Password ke badle waala e-mail ke dekho',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Sadasya ke banae waala log',
+'newuserlogpagetext' => 'Ii sadasya ke banae waala log hai.',
+
 # User rights log
 'rightslog' => 'Sadasya adhikar suchi',
 'rightslogtext' => 'Ii sadasya ke adhikar ke badlao ke suchi hai.',
-'rightslogentry' => '$1 ke group ke membership ke $2 se $3 badal dia hai',
-'rightslogentry-autopromote' => 'ke apne se $2 se $3 ke promotion dewa gais',
-'logentry-rights-rights' => '$1 $3 ke group ke membership ke $4 se badal ke $5 kar dia hae',
-'logentry-rights-rights-legacy' => '$1 $3 ke group membership ke badal dia hae',
-'logentry-rights-autopromote' => '$1 ke apne se $2 se $3 ke promotion dewa gais',
-'rightsnone' => '(koi nai hai)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ii panna ke parrho',
@@ -1988,10 +1986,6 @@ Support karaa gais protocol: <code>$1</code> (defaults to http:// if no protocol
 'activeusers-hidesysops' => 'Administrator log ke lukao',
 'activeusers-noresult' => 'koi sadasya ke pawa nai gais hai.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Sadasya ke banae waala log',
-'newuserlogpagetext' => 'Ii sadasya ke banae waala log hai.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Sadasya  ke group adhikar',
 'listgrouprights-summary' => 'Niche likha hai ek suchi hai groups ke jon ki ii wiki me defined hai, aapan  associated access rights ke saathe
@@ -2131,6 +2125,8 @@ $UNWATCHURL
 
 Aapan bichar de ke khatir aur aage ke sahaeta:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'banae dewa gais hai',
+'changed' => 'badal dewa gais hai',
 
 # Delete
 'deletepage' => 'Pana ke delete karo',
@@ -3244,6 +3240,10 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 'revdelete-restricted' => 'sysops pe llabu restrictions',
 'revdelete-unrestricted' => 'sysops se hatawa gae rukawat',
 'newuserlog-byemail' => 'password ke e-mail se bheja gais hai',
+'logentry-rights-rights' => '$1 $3 ke group ke membership ke $4 se badal ke $5 kar dia hae',
+'logentry-rights-rights-legacy' => '$1 $3 ke group membership ke badal dia hae',
+'logentry-rights-autopromote' => '$1 ke apne se $2 se $3 ke promotion dewa gais',
+'rightsnone' => '(koi nai hai)',
 
 # Search suggestions
 'searchsuggest-search' => 'Khojo',
index 61e6bb6..63c8abb 100644 (file)
@@ -1218,9 +1218,11 @@ Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'right-read' => 'Basahan ang panid',
 'right-edit' => 'Ilisan ang panid',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Naga-usar nga ginhimo log',
+
 # User rights log
 'rightslog' => 'Karapatan sang naga-usar log',
-'rightsnone' => '(wala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'islan ini nga pahina',
@@ -1337,9 +1339,6 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'linksearch' => 'Eksternal na mga tabid',
 'linksearch-ok' => 'Pangita-a',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Naga-usar nga ginhimo log',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupo',
 'listgrouprights-members' => '(lista sang mga membro)',
@@ -1644,5 +1643,6 @@ Ang iban ay pagataguon sang default.
 # New logging system
 'revdelete-restricted' => 'ginapatuman nga pagbawal sa mga administrador',
 'revdelete-unrestricted' => 'ginkakas nga pagbawal sa mga administrador',
+'rightsnone' => '(wala)',
 
 );
index dfa3bb4..dfa3649 100644 (file)
@@ -495,7 +495,7 @@ $messages = array(
 'permalink' => 'Trajna poveznica',
 'print' => 'Ispiši',
 'view' => 'Vidi',
-'edit' => 'Uredi',
+'edit' => 'uredi',
 'create' => 'Započni',
 'editthispage' => 'Uredi ovu stranicu',
 'create-this-page' => 'Započni ovu stranicu',
@@ -1590,15 +1590,13 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'right-sendemail' => 'Slanje e-maila drugim korisnicima',
 'right-passwordreset' => 'Vidi poruku e-pošte o ponovnom postavljanju lozinke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Evidencija novih suradnika',
+'newuserlogpagetext' => 'Ispod je popis nedavno otvorenih suradničkih imena.',
+
 # User rights log
 'rightslog' => 'Evidencija suradničkih prava',
 'rightslogtext' => 'Ovo je evidencija promjena suradničkih prava.',
-'rightslogentry' => 'promijenjena suradnička prava za $1 iz $2 u $3',
-'rightslogentry-autopromote' => 'je automatski unaprijeđen s $2 na $3',
-'logentry-rights-rights' => '$1 promijeni suradnička prava računa $3 iz $4 u $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe suradničkog računa $3',
-'logentry-rights-autopromote' => 'Suradničkom računu $1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5',
-'rightsnone' => '(suradnik)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -2224,10 +2222,6 @@ Podržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http://
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Niti jedan suradnik nije nađen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Evidencija novih suradnika',
-'newuserlogpagetext' => 'Ispod je popis nedavno otvorenih suradničkih imena.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava suradničkih skupina',
 'listgrouprights-summary' => 'Ovo je popis suradničkih skupina određenih na ovoj wiki, s njihovim pripadajućim pravima.
@@ -2365,6 +2359,8 @@ $UNWATCHURL
 
 Za povratne informacije i pomoć posjetite:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'stvorio',
+'changed' => 'promijenio',
 
 # Delete
 'deletepage' => 'Izbriši stranicu',
@@ -3988,6 +3984,10 @@ Slike se na taj način prikazuju u punoj rezoluciji, a drugi tipovi datoteka se
 'logentry-newusers-create2' => '$1 je  {{GENDER:$2|otvorio|otvorila}} suradnički račun $3',
 'logentry-newusers-autocreate' => 'Suradnički račun $1 je automatski stvoren',
 'newuserlog-byemail' => 'lozinka poslana e-poštom',
+'logentry-rights-rights' => '$1 {{GENDER:$2|je promijenio|je promijenila}} suradnička prava računa $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe suradničkog računa $3',
+'logentry-rights-autopromote' => 'Suradničkom računu $1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5',
+'rightsnone' => '(suradnik)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite "bug"].
index aa7b179..e01379c 100644 (file)
@@ -286,6 +286,7 @@ $messages = array(
 'newwindow' => '(wočinja so w nowym woknje)',
 'cancel' => 'Přetorhnyć',
 'moredotdotdot' => 'Wjace…',
+'morenotlisted' => 'Dalše njepodate...',
 'mypage' => 'Strona',
 'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusijna strona tuteje IP.adresy',
@@ -648,6 +649,7 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori
 # E-mail sending
 'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()',
 'user-mail-no-addy' => 'Je so spytało e-mejl bjez e-mejloweje adresy słać.',
+'user-mail-no-body' => 'Je so spytało, e-mejl bjez teksta abo z překrótkim tekstom pósłać',
 
 # Change password dialog
 'resetpass' => 'Hesło změnić',
@@ -1416,15 +1418,13 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'right-sendemail' => 'Druhim wužiwarjam e-mejl pósłać',
 'right-passwordreset' => 'E-mejlki za wróćostajenje hesłow sej wobhladać',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Protokol nowych wužiwarjow',
+'newuserlogpagetext' => 'To je protokol wutworjenja nowych wužiwarskich kontow.',
+
 # User rights log
 'rightslog' => 'Protokol zrjadowanja wužiwarskich prawow',
 'rightslogtext' => 'To je protokol změnow wužiwarskich prawow.',
-'rightslogentry' => 'změni skupinske čłonstwo za $1 z $2 do $3',
-'rightslogentry-autopromote' => 'je so awtomatisce wot $2 do $3 změnił',
-'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',
-'rightsnone' => '(ničo)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'tutu stronu čitać',
@@ -2061,10 +2061,6 @@ Znajmjeńša hłowna domena je trěbna, na přikład "*.org".<br />
 'activeusers-hidesysops' => 'Administratorow schować',
 'activeusers-noresult' => 'Žani wužiwarjo namakani.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Protokol nowych wužiwarjow',
-'newuserlogpagetext' => 'To je protokol wutworjenja nowych wužiwarskich kontow.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prawa wužiwarskeje skupiny',
 'listgrouprights-summary' => 'Slěduje lisćina wužiwarskich skupinow na tutej wikiju z jich wotpowědnymi přistupnymi prawami. Tu móžeš [[{{MediaWiki:Listgrouprights-helppage}}|dalše informacije]] wo jednotliwych prawach namakać.',
@@ -2201,6 +2197,8 @@ $UNWATCHURL
 
 Wotmołwy a dalša pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'wutworjena',
+'changed' => 'změnjena',
 
 # Delete
 'deletepage' => 'Stronu zhašeć',
@@ -2265,6 +2263,8 @@ Hlej [[Special:ProtectedPages|lisćinu škitanych stronow]] za lisćinu tuchwilu
 'prot_1movedto2' => 'je [[$1]] pod hesło [[$2]] přesunył',
 'protect-badnamespace-title' => 'Nješkitajomny mjenowy rum',
 'protect-badnamespace-text' => 'Strony w tutym mjenowym rumje njehodźa so škitać.',
+'protect-norestrictiontypes-text' => 'Tuta strona njeda so škitać, dokelž žane wobmjezowanja k dispoziciji njesteja.',
+'protect-norestrictiontypes-title' => 'Nješkitajomna strona',
 'protect-legend' => 'Škit wobkrućić',
 'protectcomment' => 'Přičina:',
 'protectexpiry' => 'Čas škita:',
@@ -2277,9 +2277,9 @@ Hlej [[Special:ProtectedPages|lisćinu škitanych stronow]] za lisćinu tuchwilu
 'protect-locked-access' => "Nimaš trěbne prawa, zo by škit strony změnił. Tu widźiš aktualne škitne nastajenja za stronu'''„$1“:'''",
 'protect-cascadeon' => 'Tuta strona je tuchwilu škitana, dokelž je w {{PLURAL:$1|slědowacej stronje|slědowacych stronach}} zapřijata, {{PLURAL:$1|kotraž je|kotrež su}} přez kaskadowu opciju {{PLURAL:$1|škitana|škitane}}. Móžeš škitowy status strony změnić, to wšak wliw na kaskadowy škit nima.',
 'protect-default' => 'Wšěch wužiwarjow dowolić',
-'protect-fallback' => 'Prawo "$1" trěbne.',
-'protect-level-autoconfirmed' => 'Nowych a njeregistrowanych wužiwarjow blokować',
-'protect-level-sysop' => 'jenož administratorojo',
+'protect-fallback' => 'Jenož wužiwarjow z prawom "$1" dowolić',
+'protect-level-autoconfirmed' => 'Jenož awtomatisce wobkrućenych wužiwarjow dowolić',
+'protect-level-sysop' => 'Jenož administratorow dowolić',
 'protect-summary-cascade' => 'kaskadowacy',
 'protect-expiring' => 'spadnje $1 (UTC)',
 'protect-expiring-local' => 'płaćiwy hač do $1',
@@ -2893,6 +2893,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapřijata předłoha|Zapřijatej předłoze|Zapřijate předłohi|Zapřijate předłohi}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Strona zapřijata|Stronje zapřijatej|Strony zapřijate}}  do ($1)',
 'pageinfo-toolboxlink' => 'Informacije wo stronje',
 'pageinfo-redirectsto' => 'Sposrědkuje k',
 'pageinfo-redirectsto-info' => 'Info',
@@ -2901,6 +2902,10 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-protect-cascading' => 'Kaskadowy škit wottud',
 'pageinfo-protect-cascading-yes' => 'Haj',
 'pageinfo-protect-cascading-from' => 'Kaskadowy škit wot',
+'pageinfo-category-info' => 'Kategorijowe informacije',
+'pageinfo-category-pages' => 'Ličba rěkow',
+'pageinfo-category-subcats' => 'Ličba podkategorijow',
+'pageinfo-category-files' => 'Ličba datajow',
 
 # Skin names
 'skinname-standard' => 'Klasiski',
@@ -2987,6 +2992,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 mjeńšinu|$1 mjeńšinomaj|$1 mjeńšinami|$1 mjeńšinami}}',
 'hours' => '{{PLURAL:$1|$1 hodźinu|$1 hodźinomaj|$1 hodźinami|$1 hodźinami}}',
 'days' => '{{PLURAL:$1|$1 dnjom|$1 dnjomaj|$1 dnjemi|$1 dnjemi}}',
+'months' => '{{PLURAL:$1|$1 měsacom|$1 měsacomaj|$1 měsacami}}',
+'years' => '{{PLURAL:$1|$1 lětom|$1 lětomaj|$1 lětami}}',
 'ago' => 'před $1',
 'just-now' => 'runje',
 
@@ -3734,6 +3741,10 @@ Wobrazy so połnym rozeznaću pokazuja, druhe datajowe typy so ze zwjazanym prog
 'logentry-newusers-create2' => '$1 załoži wužiwarske konto $3',
 'logentry-newusers-autocreate' => 'Konto $1 je so awtomatisce załožiło',
 'newuserlog-byemail' => 'Hesło z e-mejlku pósłane',
+'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',
+'rightsnone' => '(ničo)',
 
 # Feedback
 'feedback-bugornote' => 'Jeli sy zwólniwy, techniski problem nadrobnje wopisać, [$1 zdźěl prošu zmylk].
index 2bf229b..8c180d1 100644 (file)
@@ -932,6 +932,10 @@ Si ou mete li, n ap itilize li pou nou ka nonmen ou pou kontribisyon ou yo.',
 
 'grouppage-sysop' => '{{ns:project}}:Administratè',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jounal pou kreyasyon kont itilizatè yo',
+'newuserlogpagetext' => 'Men jounal, istorik kreyasyon kont itilizatè yo.',
+
 # User rights log
 'rightslog' => 'Jounal modifikasyon estati itilizatè yo',
 
@@ -1093,10 +1097,6 @@ Gade tou [[Special:WantedCategories|kategori moun mande]].',
 # Special:LinkSearch
 'linksearch' => 'Lyen andeyò',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jounal pou kreyasyon kont itilizatè yo',
-'newuserlogpagetext' => 'Men jounal, istorik kreyasyon kont itilizatè yo.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis manm yo)',
 
index bfda311..ecbcb8a 100644 (file)
@@ -1287,7 +1287,7 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.',
 'editundo' => 'visszavonás',
 'diff-multi' => '({{PLURAL:$2|egy|$2}} szerkesztő {{PLURAL:$1|egy|$1}} közbeeső változata nincs mutatva)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva, amit $2 szerkesztő módosított)',
-'difference-missing-revision' => 'A(z) "{{PAGENAME}}" nevű oldal #$1 változata nem létezik.
+'difference-missing-revision' => 'A(z) "{{PAGENAME}}" nevű oldal #$1 $2 változata nem létezik.
 
 Ezt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.',
 
@@ -1589,15 +1589,13 @@ A műveletet nem lehet visszavonni.',
 'right-sendemail' => 'e-mail küldése más felhasználóknak',
 'right-passwordreset' => 'Jelszó visszaállítási emailek megtekintése',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Új szerkesztők naplója',
+'newuserlogpagetext' => 'Ez a napló az újonnan regisztrált szerkesztők listáját tartalmazza.',
+
 # User rights log
 'rightslog' => 'Szerkesztői jogosultságok naplója',
 'rightslogtext' => 'Ez a rendszernapló a felhasználó jogosultságok változásait mutatja.',
-'rightslogentry' => 'megváltoztatta $1 szerkesztő felhasználó jogait (régi: $2; új: $3)',
-'rightslogentry-autopromote' => 'automatikusan $2 helyett $3 jogokat kapott',
-'logentry-rights-rights' => '$1 megváltoztatta $3 csoport tagságát erről: $4 erre: $5',
-'logentry-rights-rights-legacy' => '$1 megváltoztatta $3 csoport tagságát',
-'logentry-rights-autopromote' => '$1 automatikusan előléptetve erről: $4 erre: $5',
-'rightsnone' => '(semmi)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lap olvasása',
@@ -2218,7 +2216,7 @@ Lásd még a [[Special:WantedCategories|keresett kategóriák]] listáját.',
 'linksearch-ok' => 'keresés',
 'linksearch-text' => 'Helyettesítő karaktereket is lehet használni, például "*.wikipedia.org".
 Legalább egy felső szintű tartománynak lennie kell, például "*.org"<br />
-Támogatott protokollok: <code>$1</code> (http:// az alapértelmezett, ha nincs protokoll megadva).',
+Támogatott {{PLURAL:$2|protokoll|protokollok}}: <code>$1</code> (http:// az alapértelmezett, ha nincs protokoll megadva).',
 'linksearch-line' => '$1 hivatkozva innen: $2',
 'linksearch-error' => 'Helyettesítő karakterek csak a cím elején szerepelhetnek.',
 
@@ -2237,10 +2235,6 @@ Támogatott protokollok: <code>$1</code> (http:// az alapértelmezett, ha nincs
 'activeusers-hidesysops' => 'Adminisztrátorok elrejtése',
 'activeusers-noresult' => 'Nem található ilyen szerkesztő.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Új szerkesztők naplója',
-'newuserlogpagetext' => 'Ez a napló az újonnan regisztrált szerkesztők listáját tartalmazza.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Szerkesztői csoportok jogai',
 'listgrouprights-summary' => 'Lenn láthatóak a wikiben létező szerkesztői csoportok, valamint az azokhoz tartozó jogok.
@@ -2374,6 +2368,8 @@ $UNWATCHURL címet
 
 Visszajelzés és további segítség:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'létrehozta',
+'changed' => 'megváltoztatta',
 
 # Delete
 'deletepage' => 'Lap törlése',
@@ -2460,8 +2456,8 @@ be van kapcsolva a kaszkád védelem.
 Megváltoztathatod ezen lap védelmi szintjét, de az nem lesz hatással a kaszkád védelemre.',
 'protect-default' => 'Minden szerkesztő számára engedélyezett',
 'protect-fallback' => '"$1" engedély szükséges hozzá',
-'protect-level-autoconfirmed' => 'Nem és frissen regisztrált szerkesztők blokkolása',
-'protect-level-sysop' => 'Csak adminisztrátorok',
+'protect-level-autoconfirmed' => 'Csak automatikusan ellenőrzött szerkesztőknek engedélyezett (nem vagy frissen regisztráltaknak nem)',
+'protect-level-sysop' => 'Csak adminisztrátoroknak engedélyezett',
 'protect-summary-cascade' => 'kaszkád védelem',
 'protect-expiring' => 'lejár: $1 (UTC)',
 'protect-expiring-local' => 'lejárat: $1',
@@ -3133,6 +3129,9 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-contentpage' => 'Tartalmi lapnak számít',
 'pageinfo-contentpage-yes' => 'Igen',
 'pageinfo-protect-cascading-yes' => 'Igen',
+'pageinfo-category-pages' => 'Lapok száma',
+'pageinfo-category-subcats' => 'Alkategóriák száma',
+'pageinfo-category-files' => 'Fájlok száma',
 
 # Skin names
 'skinname-standard' => 'Klasszikus',
@@ -3219,6 +3218,8 @@ A futtatása során kárt tehet a számítógépedben.",
 'minutes' => '{{PLURAL:$1|egy|$1}} perccel',
 'hours' => '{{PLURAL:$1|egy|$1}} órával',
 'days' => '{{PLURAL:$1|egy|$1}} nappal',
+'months' => '{{PLURAL:$1|$1 hónap|$1 hónap}}',
+'years' => '{{PLURAL:$1|$1 év|$1 év}}',
 'ago' => '$1 ezelőtt',
 'just-now' => 'épp most',
 
@@ -3827,6 +3828,7 @@ minden egyes sor egy figyelt lap címe. Ha kész vagy, kattints a lista alatt ta
 'version-license' => 'Licenc',
 'version-poweredby-credits' => "Ez a wiki '''[//www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mások',
+'version-credits-summary' => 'Szeretnénk elismerni a következő személyek hozzájárulását a [[Special:Version|MediaWiki]] szoftverhez.',
 'version-license-info' => 'A MediaWiki szabad szoftver, terjeszthető és / vagy módosítható a GNU General Public License alatt, amit a Free Software Foundation közzétett; vagy a 2-es verziójú licenc, vagy (az Ön választása alapján) bármely későbbi verzió szerint. 
 
 A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉLKÜL, anélkül, hogy PIACKÉPES vagy HASZNÁLHATÓ LENNE EGY ADOTT CÉLRA. Lásd a GNU General Public License-t a további részletekért. 
@@ -3970,6 +3972,10 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'logentry-newusers-create2' => '$1 létrehozta $3 felhasználói fiókját',
 'logentry-newusers-autocreate' => '$1 fiók automatikusan létrehozva',
 'newuserlog-byemail' => 'a jelszót kiküldtük a megadott e-mail címre',
+'logentry-rights-rights' => '$1 megváltoztatta $3 csoport tagságát erről: $4 erre: $5',
+'logentry-rights-rights-legacy' => '$1 megváltoztatta $3 csoport tagságát',
+'logentry-rights-autopromote' => '$1 automatikusan előléptetve erről: $4 erre: $5',
+'rightsnone' => '(semmi)',
 
 # Feedback
 'feedback-bugornote' => 'Ha kész technikai problémát részletesen leírni, akkor kérjük [$1 jelents egy hibát]. Egyébként használd az alábbi űrlapot. A hozzászólásod a „[$3 $2]” laphoz kerül felvételre, a szerkesztő neveddel és böngésződ típusával együtt.',
index 6ff11ee..adfda36 100644 (file)
@@ -1348,11 +1348,13 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'right-upload_by_url' => 'Բեռնել նիշքեր ինտերնետային հասցեից',
 'right-delete' => 'Էջերի ջնջում',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
+'newuserlogpagetext' => 'Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.',
+
 # User rights log
 'rightslog' => 'Մասնակցի իրավունքների տեղեկամատյան',
 'rightslogtext' => 'Սա մասնակիցների իրավունքների փոփոխությունների տեղեկամատյանն է։',
-'rightslogentry' => '$1 մասնակցի անդամակցությունը փոխվել է $2-ից $3',
-'rightsnone' => '(ոչ մի)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'խմբագրել այս էջը',
@@ -1737,10 +1739,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers' => 'Ակտիվ մասնակիցների ցանկ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
-'newuserlogpagetext' => 'Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(անդամների ցանկ)',
 
@@ -1834,6 +1832,8 @@ $NEWPAGE
 
 Հետադարձ կապ և օգնություն՝
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ստեղծված է',
+'changed' => 'փոփոխված է',
 
 # Delete
 'deletepage' => 'Ջնջել էջը',
@@ -2728,6 +2728,7 @@ $3
 'logentry-newusers-create' => '$1 մասնակիցը ստեղծեց նոր հաշիվ',
 'logentry-newusers-create2' => '$1 Ստեղծեց նոր հաշիվ $3',
 'newuserlog-byemail' => 'Գաղտնաբառն ուղարկված է էլ․ փոստով',
+'rightsnone' => '(ոչ մի)',
 
 # Feedback
 'feedback-subject' => 'Թեմա.',
index 85c0855..cb21211 100644 (file)
@@ -1471,15 +1471,13 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'right-sendemail' => 'Inviar e-mail a altere usatores',
 'right-passwordreset' => 'Vider le e-mails pro reinitialisar le contrasigno',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de creation de usatores',
+'newuserlogpagetext' => 'Isto es un registro de creation de usatores.',
+
 # User rights log
 'rightslog' => 'Registro de derectos de usator',
 'rightslogtext' => 'Isto es un registro de cambios in derectos de usator.',
-'rightslogentry' => 'cambiava le gruppos del quales $1 es membro de $2 a $3',
-'rightslogentry-autopromote' => 'ha essite automaticamente promovite de $2 a $3',
-'logentry-rights-rights' => '$1 cambiava le appertinentia a gruppos pro $3 de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 cambiava le appertinentia a gruppos pro $3',
-'logentry-rights-autopromote' => '$1 ha essite automaticamente promovite de $4 a $5',
-'rightsnone' => '(nulle)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leger iste pagina',
@@ -2138,10 +2136,6 @@ Protocollos supportate: <code>$1</code> (http:// es assumite si nulle protocollo
 'activeusers-hidesysops' => 'Celar administratores',
 'activeusers-noresult' => 'Nulle usator trovate.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de creation de usatores',
-'newuserlogpagetext' => 'Isto es un registro de creation de usatores.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Derectos del gruppos de usatores',
 'listgrouprights-summary' => 'Lo sequente es un lista de gruppos de usatores definite in iste wiki, con lor derectos de accesso associate.
@@ -2275,6 +2269,8 @@ $UNWATCHURL
 
 Feedback e ulterior assistentia:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'create',
+'changed' => 'modificate',
 
 # Delete
 'deletepage' => 'Deler pagina',
@@ -3891,6 +3887,10 @@ Le imagines se monstra in plen resolution, le altere typos de file se executa di
 'logentry-newusers-create2' => 'Le conto de usator $3 ha essite create per $1',
 'logentry-newusers-autocreate' => 'Le conto $1 ha essite create automaticamente',
 'newuserlog-byemail' => 'contrasigno inviate per e-mail',
+'logentry-rights-rights' => '$1 cambiava le appertinentia a gruppos pro $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 cambiava le appertinentia a gruppos pro $3',
+'logentry-rights-autopromote' => '$1 ha essite automaticamente promovite de $4 a $5',
+'rightsnone' => '(nulle)',
 
 # Feedback
 'feedback-bugornote' => 'Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].
index b38146f..c3df096 100644 (file)
@@ -440,7 +440,7 @@ $messages = array(
 'may' => 'Mei',
 'jun' => 'Jun',
 'jul' => 'Jul',
-'aug' => 'Agu',
+'aug' => 'Ags',
 'sep' => 'Sep',
 'oct' => 'Okt',
 'nov' => 'Nov',
@@ -1616,15 +1616,13 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'right-sendemail' => 'Mengirim surel ke pengguna lain',
 'right-passwordreset' => 'Lihat surel pengaturulangan kata sandi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pengguna baru',
+'newuserlogpagetext' => 'Di bawah ini adalah log pendaftaran pengguna baru',
+
 # User rights log
 'rightslog' => 'Log perubahan hak akses',
 'rightslogtext' => 'Di bawah ini adalah log perubahan terhadap hak-hak pengguna.',
-'rightslogentry' => 'mengganti keanggotaan kelompok untuk $1 dari $2 menjadi $3',
-'rightslogentry-autopromote' => 'secara otomatis dipromosikan dari $2 ke $3',
-'logentry-rights-rights' => '$1 mengubah keanggotaan grup $3 dari $4 menjadi $5',
-'logentry-rights-rights-legacy' => '$1 mengubah keanggotaan grup $3',
-'logentry-rights-autopromote' => '$1 secara otomatis dipromosikan dari $4 menjadi $5',
-'rightsnone' => '(tidak ada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'membaca halaman ini',
@@ -2231,9 +2229,9 @@ Lihat pula [[Special:WantedCategories|kategori yang diinginkan]].',
 'linksearch-pat' => 'Pola pencarian:',
 'linksearch-ns' => 'Ruang nama:',
 'linksearch-ok' => 'Cari',
-'linksearch-text' => 'Kartu liar seperti "*.wikipedia.org" dapat digunakan.
+'linksearch-text' => 'Tanda bintang seperti "*.wikipedia.org" dapat digunakan.
 Perlu sedikitnya satu domain tingkat atas, misalnya "*.org".<br />
-Protokol yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)',
+{{PLURAL:$2|Protokol|Protokol}} yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)',
 'linksearch-line' => '$1 memiliki pranala dari $2',
 'linksearch-error' => "''Wildcards'' hanya dapat digunakan di bagian awal dari nama host.",
 
@@ -2252,10 +2250,6 @@ Protokol yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak
 'activeusers-hidesysops' => 'Sembunyikan pengurus',
 'activeusers-noresult' => 'Pengguna tidak ditemukan.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pengguna baru',
-'newuserlogpagetext' => 'Di bawah ini adalah log pendaftaran pengguna baru',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Daftar kelompok pengguna',
 'listgrouprights-summary' => 'Berikut adalah daftar kelompok pengguna yang terdapat di wiki ini, dengan daftar hak akses mereka masing-masing. Informasi lebih lanjut mengenai hak masing-masing dapat ditemukan di [[{{MediaWiki:Listgrouprights-helppage}}|halaman bantuan hak pengguna]].',
@@ -2393,6 +2387,8 @@ $UNWATCHURL
 
 Umpan balik dan bantuan lebih lanjut:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dibuat',
+'changed' => 'diubah',
 
 # Delete
 'deletepage' => 'Hapus halaman',
@@ -2564,7 +2560,7 @@ $1',
 'namespace' => 'Ruang nama:',
 'invert' => 'Balikkan pilihan',
 'tooltip-invert' => 'Centang kotak ini untuk menyembunyikan perubahan halaman dalam ruang nama yang dipilih (dan ruang nama terkait jika dicentang)',
-'namespace_association' => 'Ruangnamo takaik',
+'namespace_association' => 'Ruangnama terkait',
 'tooltip-namespace_association' => 'Centang halaman ini untuk menyertakan ruang nama pembicaraan atau subjek yang terkait dengan ruang nama terpilih',
 'blanknamespace' => '(Utama)',
 
@@ -3994,6 +3990,10 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'logentry-newusers-create2' => '$1 membuat akun pengguna $3',
 'logentry-newusers-autocreate' => 'Akun $1 dibuat secara otomatis',
 'newuserlog-byemail' => 'kata sandi dikirim melalui surel',
+'logentry-rights-rights' => '$1 mengubah keanggotaan grup $3 dari $4 menjadi $5',
+'logentry-rights-rights-legacy' => '$1 mengubah keanggotaan grup $3',
+'logentry-rights-autopromote' => '$1 secara otomatis dipromosikan dari $4 menjadi $5',
+'rightsnone' => '(tidak ada)',
 
 # Feedback
 'feedback-bugornote' => 'Jika Anda sudah siap untuk mendeskripsikan masalah teknis secara rinci silakan [$1 melaporkan bug].
index e0235b8..12b6a35 100644 (file)
@@ -715,9 +715,11 @@ Tui adresse de e-mail ne es revelat quande altri usatores contacter vu.',
 'grouppage-bureaucrat' => '{{ns:project}}:Burócrates',
 'grouppage-suppress' => '{{ns:project}}:Vigilatores',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Diarium de creation de usator',
+
 # User rights log
 'rightslog' => 'Diarium de jures de usator',
-'rightsnone' => '(null)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'redacter ti págine',
@@ -967,9 +969,6 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 'linksearch-ns' => 'Spacie de nómine:',
 'linksearch-line' => '$1 es ligat de $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Diarium de creation de usator',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(liste de membres)',
 
@@ -1010,6 +1009,8 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 'watching' => 'Vigilant...',
 'unwatching' => 'Desvigilant...',
 
+'created' => 'creat',
+
 # Delete
 'deletepage' => 'Deleter págine',
 'delete-legend' => 'Deleter',
@@ -1412,4 +1413,7 @@ Vu posse anc [[Special:EditWatchlist|usar li redactor uniform]].',
 'tags-edit' => 'redacter',
 'tags-hitcount' => '$1 {{PLURAL:$1|change|changes}}',
 
+# New logging system
+'rightsnone' => '(null)',
+
 );
index 193b6d7..05ea9a4 100644 (file)
@@ -857,9 +857,11 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 'right-bigdelete' => 'Kàcha ihü nwéré ákíkó mbu dí ógólógó',
 'right-undelete' => 'Ágbakashia ótù ihü',
 
+# Special:Log/newusers
+'newuserlogpage' => "Ndétu nchétá ihe ọ'bànifé kèrè",
+
 # User rights log
 'rightslog' => "Ndetu échìchè íwú ọ'bànifé",
-'rightsnone' => '(efù)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'guwa ihüá',
@@ -1106,9 +1108,6 @@ Ubwa, o na ga [[$2]].',
 'activeusers-hidesysops' => 'Zonari ndi íshí',
 'activeusers-noresult' => "Ọ hügị ọ'bànifé.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Ndétu nchétá ihe ọ'bànifé kèrè",
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ọtú',
 'listgrouprights-rights' => 'Nkwènyé',
@@ -1148,6 +1147,8 @@ Ihe gi gbanwe na ógè gi bya nà ihüá na ihü okwu ya gi di ndétu ngáhù, n
 
 'enotif_impersonal_salutation' => "ọ'bànifé {{SITENAME}}",
 'enotif_anon_editor' => "ọ'bànifé ézíghị ihu $1",
+'created' => 'kèrè',
+'changed' => 'gbanwere',
 
 # Delete
 'deletepage' => 'Kàchafu ihü',
@@ -1752,6 +1753,7 @@ Nke ozor gí zonari na áká onwe ha.
 
 # New logging system
 'revdelete-content-hid' => 'ihe zọ̀nàri',
+'rightsnone' => '(efù)',
 
 # Feedback
 'feedback-message' => 'Ozi:',
index 93ccb1a..0fdee86 100644 (file)
@@ -1216,7 +1216,7 @@ Ngem saanto a mabalinen nga ipasubli.',
 'youremail' => 'E-surat:',
 'username' => 'Nagan ti agar-aramat:',
 'uid' => 'ID ti agar-aramat:',
-'prefs-memberingroups' => 'Kameng iti {{PLURAL:$1|a bunggoy| a bungbunggoy}}:',
+'prefs-memberingroups' => 'Kameng {{PLURAL:$1|ti grupo|dagiti grupo}}:',
 'prefs-registration' => 'Oras a nagrehistro:',
 'yourrealname' => 'Pudno a nagan:',
 'yourlanguage' => 'Pagsasao:',
@@ -1368,15 +1368,13 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-sendemail' => 'Agpatulod ti e-surat kadagiti sabali nga agar-aramat',
 'right-passwordreset' => 'Kitaen dagiti e-surat ti naipasubli a kontrasenias',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Listaan dagiti naaramid nga agar-aramat',
+'newuserlogpagetext' => 'Listaan dagiti panakaramid ti agar-aramat.',
+
 # User rights log
 'rightslog' => 'Listaan dagiti karbengan ti agar-aramat',
 'rightslogtext' => 'Listaan daytoy kadagiti sinukatan a karbengan ti agar-aramat.',
-'rightslogentry' => 'sinukatan ti panagkameng iti bunggoy ti $1 manipud $2 iti $3',
-'rightslogentry-autopromote' => 'naautomatiko a naipangato a naggapo iti $2 idiay $3',
-'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',
-'rightsnone' => '(awan)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaen datoy a panid',
@@ -2001,9 +1999,9 @@ Kitaen met [[Special:WantedCategories|dagiti makidkiddaw a kategoria]].',
 'linksearch-pat' => 'Alagad ti panagbiruk:',
 'linksearch-ns' => 'Nagan ti lugar:',
 'linksearch-ok' => 'Biruken',
-'linksearch-text' => 'Ti naataap a tarheta a kas "*.wikipedia.org" ket mabalin nga usaren.
+'linksearch-text' => 'Ti naataap a tarheta a kas ti "*.wikipedia.org" ket mabalin nga usaren.
 Masapul ti kangatuan a pagturayan, a kaspagarigan "*.org".<br />
-Dagiti nasuportaran a protokol: <code>$1</code> (naipakasigud ti http:// no awan ti protokol a nainaganan).',
+{PLURAL:$2|Ti protokol|Dagiti protokol}} a nasuportaran: <code>$1</code> (naipakasigud ti http:// no awan ti protokol a nainaganan).',
 'linksearch-line' => 'Ti $1 ket nakasilpo idiay $2',
 'linksearch-error' => 'Ti naatap a tarheta ket agparang laeng iti pinagrugi ti nagan ti agsangaili.',
 
@@ -2022,10 +2020,6 @@ Dagiti nasuportaran a protokol: <code>$1</code> (naipakasigud ti http:// no awan
 'activeusers-hidesysops' => 'Ilemmeng dagiti administrador',
 'activeusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Listaan dagiti naaramid nga agar-aramat',
-'newuserlogpagetext' => 'Listaan dagiti panakaramid ti agar-aramat.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dagiti karbengan ti bunggoy 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.
@@ -2160,6 +2154,8 @@ $UNWATCHURL
 
 Ti makunkunam ken no masapulmo pay ti tulong:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'naaramid',
+'changed' => 'nasukatan',
 
 # Delete
 'deletepage' => 'Ikkaten ti panid',
@@ -3731,6 +3727,10 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'logentry-newusers-create2' => 'Nagpartuat ni ti $3 a pakabilangan ti agar-aramat babaen ni $1',
 'logentry-newusers-autocreate' => 'Ti pakabilangan ni $1 ket automatiko a napartuat',
 'newuserlog-byemail' => 'naipatulod ti kontrasenias ti e-surat',
+'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',
+'rightsnone' => '(awan)',
 
 # Feedback
 'feedback-bugornote' => 'No agsagana kan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti kiteb].
index f7ce2a7..fad44dd 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Amire80
+ * @author Andrijko Z.
  * @author Reedy
  * @author Sapral Mikail
  * @author Tagir
@@ -631,9 +632,11 @@ $messages = array(
 'right-move' => 'ОагIувний цIи хувца',
 'right-movefile' => 'Паьлий цIи хувца',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дакъалаьцархоший дIаязбeнна таптар',
+
 # User rights log
 'rightslog' => 'Дакъалаьцархочунна бокъона тептар',
-'rightsnone' => '(а)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Укх оагIуви дешам',
@@ -790,9 +793,6 @@ $messages = array(
 'linksearch-ok' => 'Лаха',
 'linksearch-line' => '$1 тIа Iинк $2 юкъера',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дакъалаьцархоший дIаязбeнна таптар',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(тоабий дагарче)',
 
@@ -871,7 +871,7 @@ $messages = array(
 'blanknamespace' => '(Корта)',
 
 # Contributions
-'contributions' => 'Дакъалаьцархочунна къахьегам',
+'contributions' => '{{GENDER:$1|Дакъалаьцархочунна}} къахьегам',
 'contributions-title' => '$1 дакъалаьцархочунна къахьегам',
 'mycontris' => 'Са къахьегам',
 'contribsub2' => '$1 ($2) баь болх',
@@ -1180,4 +1180,7 @@ $messages = array(
 'htmlform-reset' => 'Хувцамаш юхадаккха',
 'htmlform-selectorother-other' => 'Кхыдола',
 
+# New logging system
+'rightsnone' => '(а)',
+
 );
index ff6866c..505fa76 100644 (file)
@@ -787,9 +787,11 @@ Ol mustas ne havar plu kam $1 {{PLURAL:$1|litero|literi}}.',
 'right-browsearchive' => 'Serchar pagini efacita',
 'right-rollback' => 'Rapide retrorular la redakti da la lasta uzanto qua redaktis specigita pagino',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uzanto-kreo-registro',
+
 # User rights log
 'rightslog' => 'Uzanto-yuri-registraro',
-'rightsnone' => '(nula)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lektar ca pagino',
@@ -1029,9 +1031,6 @@ Volutez kontrolar <strong>[[:$1]]</strong> se vu ne esas certa pri chanjar olu.
 # Special:ActiveUsers
 'activeusers-noresult' => 'Nula uzanto trovesis.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uzanto-kreo-registro',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupo',
 'listgrouprights-members' => '(listo di membri)',
@@ -1548,6 +1547,9 @@ Vu darfos adjuntar kauso en la rezumo.',
 'htmlform-reset' => 'Desfacar chanji',
 'htmlform-selectorother-other' => 'Altra',
 
+# New logging system
+'rightsnone' => '(nula)',
+
 # Search suggestions
 'searchsuggest-search' => 'Serchez',
 'searchsuggest-containing' => 'quan kontenas...',
index 3eb74dc..a5dcde3 100644 (file)
@@ -461,12 +461,13 @@ Of margir notendur eru að reyna að skoða þessa síðu.
 Vinsamlegast bíddu í smástund áður en þú reynir að sækja þessa síðu aftur.
 
 $1',
+'pool-timeout' => 'Of löng bið efttir lás',
 'pool-queuefull' => 'Vefþjónninn er yfirhlaðinn í augnablikinu.',
 'pool-errorunknown' => 'Óþekkt villa',
 
 # 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' => 'Um {{SITENAME}}',
-'aboutpage' => 'Project:Um',
+'aboutpage' => 'Project:Um verkefnið',
 'copyright' => 'Efni má nota samkvæmt $1.',
 'copyrightpage' => '{{ns:project}}:Höfundarréttur',
 'currentevents' => 'Potturinn',
@@ -593,6 +594,8 @@ Gjörðu svo vel og tilkynntu atvikið til [[Special:ListUsers/sysop|stjórnanda
 'cannotdelete' => 'Ekki var hægt að eyða síðunni "$1".
 Líklegt er að einhver annar hafi gert það.',
 'cannotdelete-title' => 'Gat ekki eytt síðunni $1',
+'delete-hook-aborted' => 'Eyðing síðu stöðvuð af viðbótarkrók (extension hook).
+Engin skýring gefin.',
 'badtitle' => 'Slæmur titill',
 'badtitletext' => 'Umbeðin síðutitill er ógildur.',
 'perfcached' => 'Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar. Allt að {{PLURAL:$1|ein niðurstaða er aðgengileg|$1 niðurstöður eru aðgengilegar}} í skyndiminninu.',
@@ -605,7 +608,7 @@ Spurn: $2',
 'viewsource-title' => 'Skoða efni $1',
 'actionthrottled' => 'Aðgerðin kafnaði',
 'actionthrottledtext' => 'Til þess að verjast ruslpósti, er ekki hægt að framkvæma þessa aðgerð of oft, og þú hefur farið fram yfir þau takmörk. Gjörðu svo vel og reyndu aftur eftir nokkrar mínútur.',
-'protectedpagetext' => 'Þessari síðu hefur verið læst til að koma í veg fyrir breytingar.',
+'protectedpagetext' => 'Þessari síðu hefur verið læst til að koma í veg fyrir breytingar eða aðrar aðgerðir.',
 'viewsourcetext' => 'Þú getur skoðað og afritað kóða þessarar síðu:',
 'viewyourtext' => "Þú getur skoðað og afritað kóða '''breytinganna þinna''' yfir á þessa síðu:",
 'protectedinterface' => 'Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og er læst til að koma í veg fyrir misnotkun.
@@ -799,6 +802,7 @@ Tímabundið lykilorð: $2',
 'changeemail-oldemail' => 'Núverandi netfang:',
 'changeemail-newemail' => 'Nýtt netfang:',
 'changeemail-none' => '(ekkert)',
+'changeemail-password' => '{{SITENAME}} lykilorðið þitt:',
 'changeemail-submit' => 'Breyta netfangi',
 'changeemail-cancel' => 'Hætta við',
 
@@ -991,6 +995,8 @@ Eyðingarskrá og flutningaskrá fyrir þessa síðu eru útvegaðar hér til þ
 'moveddeleted-notice' => 'Þessari síðu hefur verið eytt.
 Eyðingaskrá og flutningaskrá síðunnar eru gefnar fyrir neðan til tilvísunar.',
 'log-fulllog' => 'Skoða alla aðgerðarskránna',
+'edit-hook-aborted' => 'Breyting síðu stöðvuð af viðbótarkrók (extension hook).
+Engin skýring gefin.',
 'edit-gone-missing' => 'Gat ekki uppfært síðu.
 Svo virðist sem henni hafi verið eytt.',
 'edit-conflict' => 'Breytingaárekstur.',
@@ -998,6 +1004,9 @@ Svo virðist sem henni hafi verið eytt.',
 'edit-already-exists' => 'Gat ekki skapað nýja síðu.
 Hún er nú þegar til.',
 'defaultmessagetext' => 'Sjálfgefinn skilaboða texti',
+'content-failed-to-parse' => 'Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3',
+'invalid-content-data' => 'Ógild efnisgögn.',
+'content-not-allowed-here' => '„$1“ efni er ekki leyfilegt á síðunni [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'wiki-texti',
@@ -1325,9 +1334,9 @@ Ekki er hægt að taka þessa breytingu til baka.',
 'prefs-emailconfirm-label' => 'Staðfesting netfangs:',
 'prefs-textboxsize' => 'Stærð breytingarglugga',
 'youremail' => 'Netfang:',
-'username' => 'Notandanafn:',
-'uid' => 'Raðnúmer:',
-'prefs-memberingroups' => 'Meðlimur {{PLURAL:$1|hóps|hópa}}:',
+'username' => '{{Gender:$1|Notandanafn}}:',
+'uid' => 'Raðnúmer {{GENDER:$1|notanda}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Meðlimur}} {{PLURAL:$1|hóps|hópa}}:',
 'prefs-registration' => 'Nýskráningartími:',
 'yourrealname' => 'Fullt nafn:',
 'yourlanguage' => 'Viðmótstungumál:',
@@ -1477,12 +1486,13 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'right-sendemail' => 'Senda tölvupóst til annara notenda',
 'right-passwordreset' => 'Skoða tölvupósta um endurstillingu lykilorðs',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Skrá yfir nýja notendur',
+'newuserlogpagetext' => 'Þetta er skrá yfir nýskráða notendur.',
+
 # User rights log
 'rightslog' => 'Réttindaskrá notenda',
 'rightslogtext' => 'Þetta er skrá yfir breytingar á réttindum notenda.',
-'rightslogentry' => 'breytti réttindum $1 frá $2 í $3',
-'rightslogentry-autopromote' => 'fékk sjálfvirkt aukin réttindi frá $2 til $3',
-'rightsnone' => '(engin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lesa þessa síðu',
@@ -1945,6 +1955,7 @@ Hún er tilvísun á [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bæt|bæti}}',
 'ncategories' => '$1 {{PLURAL:$1|flokkur|flokkar}}',
+'ninterwikis' => '$1 {{PLURAL:$1|tungumálatengill|tungumálatenglar}}',
 'nlinks' => '$1 {{PLURAL:$1|tengill|tenglar}}',
 'nmembers' => '$1 {{PLURAL:$1|meðlimur|meðlimir}}',
 'nrevisions' => '$1 {{PLURAL:$1|breyting|breytingar}}',
@@ -1973,6 +1984,7 @@ Hún er tilvísun á [[$2]].',
 'mostlinkedtemplates' => 'Mest ítengdu snið',
 'mostcategories' => 'Mest flokkaðar greinar',
 'mostimages' => 'Mest ítengdu skrárnar',
+'mostinterwikis' => 'Síður með flestm tungumálatenglum',
 'mostrevisions' => 'Síður eftir fjölda breytinga',
 'prefixindex' => 'Allar síður með forskeyti',
 'prefixindex-namespace' => 'Allar síður með forskeyti ($1 nafnrými)',
@@ -2048,6 +2060,7 @@ Vinsamlegast athugið að aðrar vefsíður gætu tengt beint í skrár héðan,
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => 'Þú ert að skoða útgáfu síðunnar úr skyndiminni, sem getur verið allt að $1 gömul.',
+'cachedspecial-viewing-cached-ts' => 'Þetta er útgáfa þessarar síðu úr skyndiminni og sem endurspeglar ekki endilega núverandi ástand.',
 'cachedspecial-refresh-now' => 'Skoða síðustu',
 
 # Special:Categories
@@ -2069,9 +2082,9 @@ Sjá einnig [[Special:WantedCategories|eftirsótta flokka]].',
 'linksearch-pat' => 'Leitarmynstur:',
 'linksearch-ns' => 'Nafnrými:',
 'linksearch-ok' => 'Leita',
-'linksearch-text' => 'Algildistafir eins og "*.wikipedia.org" eru leyfðir.<br />
-Stafurinn þarf í minnsta kosti að innihalda rótarlén, eins og "*.org"
-Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitina)',
+'linksearch-text' => 'Algildisleit eins og "*.wikipedia.org" er leyfð.<br />
+Leitin þarf að minnsta kosti að innihalda rótarlén, eins og "*.org"
+{{PLURAL:$2|Studd samskiptaregla|Studdar samskiptareglur}}: <code>$1</code> (http:// sjálfgefið ef engin regla er valin).',
 'linksearch-line' => 'Tengt er í $1 á síðunni $2',
 'linksearch-error' => 'Algildistafir mega engöngu birtast í upphafi vefslóðarinnar.',
 
@@ -2090,10 +2103,6 @@ Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitin
 'activeusers-hidesysops' => 'Fela möppudýr',
 'activeusers-noresult' => 'Enginn notandi fannst.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Skrá yfir nýja notendur',
-'newuserlogpagetext' => 'Þetta er skrá yfir nýskráða notendur.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Notandahópréttindi',
 'listgrouprights-summary' => 'Hér er listi yfir notendahópa á þessum wiki, með þeirra réttindum. 
@@ -2117,9 +2126,11 @@ Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitin
 'mailnologin' => 'Ekkert netfang til að senda á',
 'mailnologintext' => 'Þú verður að vera [[Special:UserLogin|innskráð(ur)]] auk þess að hafa gilt netfang í [[Special:Preferences|stillingunum]] þínum til að senda tölvupóst til annara notenda.',
 'emailuser' => 'Senda þessum notanda tölvupóst',
+'emailuser-title-target' => 'Sendu þessum {{GENDER:$1|notanda}} tölvupóst',
+'emailuser-title-notarget' => 'Senda tölvupóst',
 'emailpage' => 'Senda tölvupóst',
-'emailpagetext' => 'Hafi notandi tilgreint netfang í stillingunum sínum er hægt að senda póst til hans hér.
-Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]] birtist í "Frá:" hluta tölvupóstsins, svo að viðtakandi þess geti svarað beint til þín.',
+'emailpagetext' => 'Hafi notandinn tilgreint netfang í stillingunum sínum er hægt að senda póst til {{GENDER:$1|hans|hennar|hans}} hér.
+Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]] birtist í "Frá:" hluta tölvupóstsins, svo að viðtakandi hans geti svarað beint til þín.',
 'usermailererror' => 'Póst hlutur skilaði villu:',
 'defemailsubject' => '{{SITENAME}} skilaboð frá notandanum "$1"',
 'usermaildisabled' => 'Netfang notenda er óvirkt',
@@ -2157,8 +2168,8 @@ Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]
 'watchnologin' => 'Óinnskráð(ur)',
 'watchnologintext' => 'Þú verður að vera [[Special:UserLogin|innskáð(ur)]] til að geta breytt vaktlistanum.',
 'addwatch' => 'Bæta á vaktlistann',
-'addedwatchtext' => "Síðunni „[[:$1]]“ hefur verið bætt á [[Special:Watchlist|Vaktlistann]] þinn.
-Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og síðan mun vera '''feitletruð''' í [[Special:RecentChanges|Nýlegum breytingum]] svo auðveldara sé að finna hana.",
+'addedwatchtext' => 'Síðunni „[[:$1]]“ hefur verið bætt á [[Special:Watchlist|vaktlistann]] þinn.
+Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar.',
 'removewatch' => 'Fjarlægja af vaktlistanum',
 'removedwatchtext' => 'Síðan „[[:$1]]“ hefur verið fjarlægð af [[Special:Watchlist|vaktlistanum þínum]].',
 'watch' => 'Vakta',
@@ -2184,6 +2195,7 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'unwatching' => 'Afvakta...',
 'watcherrortext' => 'Villa kom upp við breytingu á stillingum vaktlistans fyrir "$1".',
 
+'enotif_mailer' => '{{SITENAME}} tilkynningasendill',
 'enotif_reset' => 'Merkja allar síður sem skoðaðar',
 'enotif_impersonal_salutation' => '{{SITENAME}}notandi',
 'enotif_subject_deleted' => '$1 á {{SITENAME}} hefur verið eytt af {{gender:$2|$2}}',
@@ -2227,6 +2239,8 @@ Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, smel
 Til þess að hætta að fylgjast með „$PAGETITLE”, smelltu á:
 
 $UNWATCHURL',
+'created' => 'búin til',
+'changed' => 'breytt',
 
 # Delete
 'deletepage' => 'Eyða',
@@ -2297,6 +2311,8 @@ Sjáðu [[Special:ProtectedPages|Verndunarskrá]] fyrir núverandi lista yfir ve
 'prot_1movedto2' => '[[$1]] færð á [[$2]]',
 'protect-badnamespace-title' => 'Óverndanlegt nafnrými',
 'protect-badnamespace-text' => 'Síður í þessu nafnrými geta ekki verið verndaðar.',
+'protect-norestrictiontypes-text' => 'Ekki er hægt að vernda síðuna þar sem skilgreind verndunarstig eru ekki til staðar.',
+'protect-norestrictiontypes-title' => 'Óverndanleg síða',
 'protect-legend' => 'Verndunarstaðfesting',
 'protectcomment' => 'Ástæða:',
 'protectexpiry' => 'Rennur út:',
@@ -2381,7 +2397,8 @@ Innihald greinarinnar er einungis aðgengilegt möppudýrum.',
 'undeletedrevisions' => '$1 {{PLURAL:$1|breyting endurvakin|breytingar endurvaktar}}',
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|breyting|breytingar}} og $2 {{PLURAL:$2|skrá|skrár}} endurvaktar',
 'undeletedfiles' => '{{PLURAL:$1|Ein skrá endurvakin|$1 skrár endurvaktar}}',
-'cannotundelete' => 'Ekki var hægt að afturkalla síðuna. (Líklega hefur einhver gert það á undan þér.)',
+'cannotundelete' => 'Ekki var hægt að afturkalla eyðingu.
+$1',
 'undeletedpage' => "'''$1 var endurvakin'''
 
 Skoðaðu [[Special:Log/delete|eyðingaskrána]] til að skoða eyðingar og endurvakningar.",
@@ -2604,6 +2621,7 @@ Vinsamlegast hafðu samband við internetþjónustuaðilann þinn eða netstjór
 Mundu að [[Special:UnlockDB|opna hann aftur]] þegar þú hefur lokið viðgerðum.',
 'unlockdbsuccesstext' => 'Gagnagrunnurinn hefur verið opnaður.',
 'databasenotlocked' => 'Gagnagrunnurinn er ekki læstur.',
+'lockedbyandtime' => '(af {{GENDER:$1|$1}} kl. $3, $2)',
 
 # Move page
 'move-page' => 'Færa $1',
@@ -3681,11 +3699,12 @@ Tæknilegir örðugleikar eru á þessari síðu.',
 'logentry-move-move_redir-noredirect' => '$1 færði $3 á $4 yfir tilvísun, án þess að skilja eftir tilvísun',
 'logentry-patrol-patrol' => '$1 merkti útgáfu $3 frá $4 sem yfirfarna',
 'logentry-patrol-patrol-auto' => '$1 merkti sjálfvirkt útgáfu $3 frá $4 sem yfirfarna',
-'logentry-newusers-newusers' => '$1 stofnaði notanda aðgang',
-'logentry-newusers-create' => '$1 stofnaði notanda aðgang',
-'logentry-newusers-create2' => '$1 stofnaði aðganginn $3',
+'logentry-newusers-newusers' => 'Notandaaðgangurinn $1 var stofnaður',
+'logentry-newusers-create' => 'Notandaaðgangurinn $1 var stofnaður',
+'logentry-newusers-create2' => '$1 stofnaði notandaaðganginn $3',
 'logentry-newusers-autocreate' => 'Aðgangurinn $1 var stofnaður sjálfvirkt',
 'newuserlog-byemail' => 'lykilorð sent með tölvupósti',
+'rightsnone' => '(engin)',
 
 # Feedback
 'feedback-bugornote' => 'Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu villu].
index df8afc8..2bf0f30 100644 (file)
@@ -405,6 +405,7 @@ $messages = array(
 'newwindow' => '(si apre in una nuova finestra)',
 'cancel' => 'Annulla',
 'moredotdotdot' => 'Altro...',
+'morenotlisted' => 'Altro...',
 'mypage' => 'Pagina',
 'mytalk' => 'discussioni',
 'anontalk' => 'Discussioni per questo IP',
@@ -650,7 +651,7 @@ Query: $2',
 'viewsourcetext' => 'È possibile visualizzare e copiare il codice sorgente di questa pagina:',
 'viewyourtext' => "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
 'protectedinterface' => "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.
-Per aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki,",
+Per aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
 'editinginterface' => "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.
 Per aggiungere o modificare le traduzioni valide su tutti i wiki, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
 'sqlhidden' => '(la query SQL è stata nascosta)',
@@ -771,6 +772,7 @@ Riprovare più tardi.',
 # E-mail sending
 'php-mail-error-unknown' => 'Errore sconosciuto nella funzione PHP mail()',
 'user-mail-no-addy' => 'Hai cercato di inviare una e-mail senza un indirizzo.',
+'user-mail-no-body' => 'Tentato di inviare una e-mail con un testo vuoto o estremamente breve.',
 
 # Change password dialog
 'resetpass' => 'Cambia la password',
@@ -866,7 +868,7 @@ Password temporanea: $2',
 'showpreview' => 'Visualizza anteprima',
 'showlivepreview' => "Funzione ''Live preview''",
 'showdiff' => 'Mostra cambiamenti',
-'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato l'indirizzo IP.",
+'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato il tuo indirizzo IP.",
 'anonpreviewwarning' => "''Non è stato eseguito il login. Salvando la pagina, il proprio indirizzo IP sarà registrato nella cronologia.''",
 'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
 'missingcommenttext' => 'Inserire un commento qui sotto.',
@@ -1538,15 +1540,13 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'right-sendemail' => 'Invia e-mail ad altri utenti',
 'right-passwordreset' => 'Vede i messaggi di reimpostazione della password',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nuovi utenti',
+'newuserlogpagetext' => 'Di seguito sono elencate le utenze di nuova creazione.',
+
 # User rights log
 'rightslog' => 'Diritti degli utenti',
 'rightslogtext' => 'Di seguito sono elencate le modifiche ai diritti assegnati agli utenti.',
-'rightslogentry' => "ha modificato l'appartenenza di $1 dal gruppo $2 al gruppo $3",
-'rightslogentry-autopromote' => 'è stato/a automaticamente promosso/a da $2 a $3',
-'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',
-'rightsnone' => '(nessuno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leggere questa pagina',
@@ -2181,10 +2181,6 @@ Vedi anche le [[Special:WantedCategories|categorie richieste]].',
 'activeusers-hidesysops' => 'Nascondi gli amministratori',
 'activeusers-noresult' => 'Nessun utente risponde ai criteri impostati.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nuovi utenti',
-'newuserlogpagetext' => 'Di seguito sono elencate le utenze di nuova creazione.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diritti del gruppo utente',
 'listgrouprights-summary' => "Di seguito sono elencati i gruppi utente definiti per questo sito, con i diritti d'accesso loro associati.
@@ -2319,6 +2315,8 @@ $UNWATCHURL
 
 Per commentare e ricevere aiuto:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creata',
+'changed' => 'modificata',
 
 # Delete
 'deletepage' => 'Cancella pagina',
@@ -2383,6 +2381,8 @@ Vedi la [[Special:ProtectedPages|lista delle pagine protette]] per l'elenco dell
 'prot_1movedto2' => 'ha spostato [[$1]] a [[$2]]',
 'protect-badnamespace-title' => 'Namespace non suscettibile di protezione',
 'protect-badnamespace-text' => 'Le pagine di questo namespace non possono essere protette.',
+'protect-norestrictiontypes-text' => 'Questa pagina non può essere protetta poiché non vi è alcun tipo di restrizione disponibile.',
+'protect-norestrictiontypes-title' => 'Pagina non proteggibile',
 'protect-legend' => 'Conferma la protezione',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Scadenza:',
@@ -2397,9 +2397,9 @@ Le impostazioni correnti per la pagina sono '''$1''':",
 Le impostazioni correnti per la pagina sono '''$1''':",
 'protect-cascadeon' => 'Al momento questa pagina è bloccata perché viene inclusa {{PLURAL:$1|nella pagina indicata di seguito, per la quale|nelle pagine indicate di seguito, per le quali}} è attiva la protezione ricorsiva. È possibile modificare il livello di protezione individuale della pagina, ma le impostazioni derivanti dalla protezione ricorsiva non saranno modificate.',
 'protect-default' => 'Autorizza tutti gli utenti',
-'protect-fallback' => 'È richiesto il permesso "$1"',
-'protect-level-autoconfirmed' => 'Blocca gli utenti nuovi e i non registrati',
-'protect-level-sysop' => 'Solo amministratori',
+'protect-fallback' => 'Consentito solo agli utenti con permesso "$1"',
+'protect-level-autoconfirmed' => 'Consentito solo agli utenti "autoconfermati"',
+'protect-level-sysop' => 'Consentito solo agli amministratori',
 'protect-summary-cascade' => 'ricorsiva',
 'protect-expiring' => 'scadenza: $1 (UTC)',
 'protect-expiring-local' => 'scade il $1',
@@ -2689,7 +2689,7 @@ Ricordare di [[Special:UnlockDB|rimuovere il blocco]] dopo aver terminato le ope
 'move-page-legend' => 'Spostamento di pagina',
 'movepagetext' => "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. La pagina attuale diverrà automaticamente un redirect al nuovo titolo. Puoi aggiornare automaticamente i redirect che puntano al titolo originale. Puoi decidere di non farlo, ma ricordati di verificare che lo spostamento non abbia creato [[Special:DoubleRedirects|doppi redirect]] o [[Special:BrokenRedirects|redirect errati]]. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta.
 
-Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia vuota o costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.
+Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.
 
 '''ATTENZIONE:'''
 Un cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.",
@@ -3043,7 +3043,8 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-recent-authors' => 'Numero di autori diversi recenti',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria nascosta|Categorie nascoste}} ($1)',
-'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}}  ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Template incluso}} in ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagina inclusa}} in ($1)',
 'pageinfo-toolboxlink' => 'Informazioni sulla pagina',
 'pageinfo-redirectsto' => 'Reindirizza a',
 'pageinfo-redirectsto-info' => 'info',
@@ -3052,6 +3053,10 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-protect-cascading' => 'Protezione ricorsiva da qui',
 'pageinfo-protect-cascading-yes' => 'Sì',
 'pageinfo-protect-cascading-from' => 'Protezione ricorsiva ereditata da',
+'pageinfo-category-info' => 'Informazioni sulla categoria',
+'pageinfo-category-pages' => 'Numero di pagine',
+'pageinfo-category-subcats' => 'Numero di sottocategorie',
+'pageinfo-category-files' => 'Numero di file',
 
 # Patrolling
 'markaspatrolleddiff' => 'Segna la modifica come verificata',
@@ -3131,6 +3136,8 @@ $1',
 'minutes' => '{{PLURAL:$1|un minuto|$1 minuti}}',
 'hours' => "{{PLURAL:$1|un'ora|$1 ore}}",
 'days' => '{{PLURAL:$1|un giorno|$1 giorni}}',
+'months' => '{{PLURAL:$1|$1 mese|$1 mesi}}',
+'years' => '{{PLURAL:$1|$1 anno|$1 anni}}',
 'ago' => '$1 fa',
 'just-now' => 'proprio ora',
 
@@ -3899,6 +3906,10 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'logentry-newusers-create2' => "L'utenza $3 è stata creata da $1",
 'logentry-newusers-autocreate' => "L'utenza $1 è stata creata automaticamente",
 'newuserlog-byemail' => 'password inviata via mail',
+'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',
+'rightsnone' => '(nessuno)',
 
 # Feedback
 'feedback-bugornote' => 'Se si è in grado di descrivere il problema tecnico riscontrato in maniera precisa, [$1 segnalate il bug]. In alternativa, si può usare il modulo semplificato sottostante. Il commento inserito sarà aggiunto alla pagina "[$3 $2]", insieme al proprio nome utente e al browser in uso.',
@@ -3951,6 +3962,7 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'api-error-ok-but-empty' => 'Errore interno: nessuna risposta dal server.',
 'api-error-overwrite' => 'Sovrascrivere un file esistente non è consentito.',
 'api-error-stashfailed' => 'Errore interno: il server non è riuscito a memorizzare il documento temporaneo.',
+'api-error-publishfailed' => 'Errore interno: il server non è riuscito a pubblicare il documento temporaneo.',
 'api-error-timeout' => 'Il server non ha risposto entro il tempo previsto.',
 'api-error-unclassified' => 'Si è verificato un errore sconosciuto.',
 'api-error-unknown-code' => 'Errore sconosciuto: "$1"',
index 911c7f7..2b525a9 100644 (file)
@@ -496,6 +496,7 @@ $messages = array(
 'newwindow' => '(新しいウィンドウで開きます)',
 'cancel' => '中止',
 'moredotdotdot' => '続き...',
+'morenotlisted' => 'その他...',
 'mypage' => 'ページ',
 'mytalk' => 'トーク',
 'anontalk' => 'このIPアドレスのトーク',
@@ -532,7 +533,7 @@ $messages = array(
 'navigation-heading' => '案内メニュー',
 'errorpagetitle' => 'エラー',
 'returnto' => '$1 に戻る。',
-'tagline' => '提供{{SITENAME}}',
+'tagline' => '提供{{SITENAME}}',
 'help' => 'ヘルプ',
 'search' => '検索',
 'searchbutton' => '検索',
@@ -646,7 +647,7 @@ $1',
 'thisisdeleted' => '$1を閲覧または復元しますか?',
 'viewdeleted' => '$1を閲覧しますか?',
 'restorelink' => '{{PLURAL:$1|削除された$1編集}}',
-'feedlinks' => 'フィード',
+'feedlinks' => 'フィード:',
 'feed-invalid' => 'フィード形式の指定が正しくありません。',
 'feed-unavailable' => 'フィードの配信は利用できません',
 'site-rss-feed' => '$1のRSSフィード',
@@ -711,7 +712,7 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'missingarticle-diff' => '(差分: $1, $2)',
 'readonly_lag' => 'データベースはスレーブのデータベースサーバーがマスターに同期するまで自動的にロックされています',
 'internalerror' => '内部エラー',
-'internalerror_info' => '内部エラー$1',
+'internalerror_info' => '内部エラー$1',
 'fileappenderrorread' => '追加中に、「$1」を読み取れませんでした。',
 'fileappenderror' => '「$1」を「$2」に追加できませんでした。',
 'filecopyerror' => 'ファイル「$1」を「$2」に複製できませんでした。',
@@ -719,9 +720,9 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'filedeleteerror' => 'ファイル「$1」を削除できませんでした。',
 'directorycreateerror' => 'ディレクトリ「$1」を作成できませんでした。',
 'filenotfound' => 'ファイル「$1」が見つかりませんでした。',
-'fileexistserror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\81¸ã\81®æ\9b¸ã\81\8dè¾¼ã\81¿ã\81«å¤±æ\95\97ï¼\9aファイルが存在します。',
+'fileexistserror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\81«æ\9b¸ã\81\8dè¾¼ã\82\81ã\81¾ã\81\9bã\82\93ã\81§ã\81\97ã\81\9fファイルが存在します。',
 'unexpected' => '予期しない値「$1」=「$2」です。',
-'formerror' => 'エラーフォームを送信できませんでした。',
+'formerror' => 'エラーフォームを送信できませんでした。',
 'badarticleerror' => 'このページでは要求された操作を行えません。',
 'cannotdelete' => 'ページまたはファイル「$1」を削除できませんでした。
 他の人が既に削除した可能性があります。',
@@ -744,8 +745,8 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'actionthrottledtext' => '短時間にこの操作を大量に行ったため、スパム対策として設定されている制限を超えました。
 少し時間をおいてからもう一度操作してください。',
 'protectedpagetext' => 'このページは編集や他の操作ができないように保護されています。',
-'viewsourcetext' => 'このページのソースの閲覧やコピーができます',
-'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます",
+'viewsourcetext' => 'このページのソースの閲覧やコピーができます:',
+'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます:",
 'protectedinterface' => 'このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。
 すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。',
 'editinginterface' => "'''警告:''' ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。
@@ -769,9 +770,9 @@ $2',
 'exception-nologin-text' => 'このページまたは操作には、このウィキへのログインが必要です。',
 
 # Virus scanner
-'virus-badscanner' => "環境設定が不適合です:不明なウイルス検知ソフトウェア:''$1''",
+'virus-badscanner' => "環境設定が不適合です: 不明なウイルス対策ソフトウェア: ''$1''",
 'virus-scanfailed' => 'スキャンに失敗しました(コード $1)',
-'virus-unknownscanner' => '不明なウイルス対策',
+'virus-unknownscanner' => '不明なウイルス対策ソフトウェア:',
 
 # Login and logout pages
 'logouttext' => "'''ログアウトしました。'''
@@ -804,7 +805,7 @@ $2',
 'gotaccountlink' => 'ログインしてください',
 'userlogin-resetlink' => 'ログイン情報をお忘れですか?',
 'createaccountmail' => 'メールで送信',
-'createaccountreason' => '理由',
+'createaccountreason' => '理由:',
 'badretype' => '入力したパスワードが一致しません。',
 'userexists' => '入力された利用者名は既に使用されています。
 他の名前を選んでください。',
@@ -855,7 +856,7 @@ Cookieを有効にしていることを確認して、このページを再読
 メールに記載された手順に従って、このアカウントの所有者であることの確認が取れると、このアカウント宛のメールを受け取れるようになります。',
 'throttled-mailpassword' => '新しいパスワードは過去 {{PLURAL:$1|$1 時間}}に送信済みです。
 悪用防止のため、パスワードの再発行は {{PLURAL:$1|$1 時間}}に 1 回のみです。',
-'mailerror' => 'ã\83¡ã\83¼ã\83«ã\81®é\80\81信中ã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a$1',
+'mailerror' => 'ã\83¡ã\83¼ã\83«ã\82\92é\80\81ä¿¡ã\81\99ã\82\8bé\9a\9bã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9f$1',
 'acct_creation_throttle_hit' => 'あなたと同じ IP アドレスでこのウィキに訪れた人が、最近 24 時間で {{PLURAL:$1|$1 アカウント}}を作成しており、これはこの期間で作成が許可されている最大数です。
 そのため、現在この IP アドレスではアカウントをこれ以上作成できません。',
 'emailauthenticated' => 'メールアドレスは$2 $3に認証済みです。',
@@ -885,6 +886,7 @@ Cookieを有効にしていることを確認して、このページを再読
 # E-mail sending
 'php-mail-error-unknown' => 'PHPのmail()関数での不明なエラーです。',
 'user-mail-no-addy' => 'メールアドレスなしでメールを送信しようとしました。',
+'user-mail-no-body' => '本文が空、またはあまりにも短いメールは送信できません。',
 
 # Change password dialog
 'resetpass' => 'パスワードの変更',
@@ -940,8 +942,8 @@ $2
 この申請が他の誰かによるものの場合、あるいはあなたが自分の元のパスワードを
 覚えていて、変更したくない場合は、このメッセージを無視して
 以前のパスワードを使い続けることができます。',
-'passwordreset-emailelement' => '利用者名$1
-仮パスワード$2',
+'passwordreset-emailelement' => '利用者名$1
+仮パスワード$2',
 'passwordreset-emailsent' => '確認メールをお送りしました。',
 'passwordreset-emailsent-capture' => '下記の内容の、確認メールをお送りしました。',
 'passwordreset-emailerror-capture' => '以下の内容の確認メールを生成しましたが、利用者への送信に失敗しました: $1',
@@ -966,7 +968,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' => 'ここにマークアップを無効にするテキストを入力します',
@@ -1063,7 +1065,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 このページの作成/編集が適切かご確認ください。',
 'userpage-userdoesnotexist-view' => '利用者アカウント「$1」は登録されていません。',
 'blocked-notice-logextract' => 'この利用者は現在ブロックされています。
-参考のために最新のブロック記録を以下に表示します:',
+参考のために最新のブロック記録項目を以下に表示します:',
 'clearyourcache' => "'''注意:''' 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
 * '''Firefox / Safari:''' ''Shift'' を押しながら ''再読み込み'' をクリックするか、''Ctrl-F5'' または ''Ctrl-R'' を押してください (Mac では ''&#x2318;-R'')
 * '''Google Chrome:''' ''Ctrl-Shift-R'' を押してください (Mac では ''&#x2318;-Shift-R'')
@@ -1265,7 +1267,7 @@ $3が示した理由:''$2''",
 内容を閲覧できます。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
 'rev-deleted-no-diff' => "どちらかの版が'''削除されているため'''、差分表示できません。
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
-'rev-suppressed-no-diff' => "指定された差分は'''削除された'''版を含んでいるため、閲覧できません。",
+'rev-suppressed-no-diff' => "どちらかの版が'''削除されているため'''、差分表示できません。",
 'rev-deleted-unhide-diff' => "この差分の一方の版は'''削除されています'''。
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。
 このまま[$1 この差分を閲覧]できます。",
@@ -1286,14 +1288,14 @@ $3が示した理由:''$2''",
 'revdelete-nologid-title' => '無効な記録項目',
 'revdelete-nologid-text' => 'この操作の対象となる記録項目を指定していないか、または指定した項目が存在しません。',
 'revdelete-no-file' => '指定されたファイルは存在しません。',
-'revdelete-show-file-confirm' => '本当にファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を閲覧しますか?',
+'revdelete-show-file-confirm' => 'ファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を本当に閲覧しますか?',
 'revdelete-show-file-submit' => 'はい',
 'revdelete-selected' => "'''[[:$1]] の{{PLURAL:$2|選択された版}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|選択された記録項目}}:'''",
 'revdelete-text' => "'''削除された版や記録項目は引き続きページの履歴や記録に表示されますが、一般利用者はその内容の一部を取得できなくなります。'''
 追加の制限がかけられない限り、{{SITENAME}}の他の管理者は同じインターフェイスを使って非表示の内容の取得や復元ができます。",
 'revdelete-confirm' => 'この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。',
-'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです
+'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
 * 名誉毀損の恐れのある記述
 * 非公開個人情報
 *: ''自宅の住所、電話番号、社会保障番号など''",
@@ -1309,7 +1311,7 @@ $3が示した理由:''$2''",
 'revdelete-radio-unset' => 'いいえ',
 'revdelete-suppress' => '他の利用者と同様に管理者からもデータを隠す',
 'revdelete-unsuppress' => '復元版に対する制限を除去',
-'revdelete-log' => '理由',
+'revdelete-log' => '理由:',
 'revdelete-submit' => '選択された{{PLURAL:$1|版}}に適用',
 'revdelete-success' => "'''版の閲覧レベルを更新しました。'''",
 'revdelete-failure' => "'''版の閲覧レベルを更新できませんでした:'''
@@ -1322,26 +1324,26 @@ $1",
 'revdel-restore-visible' => '閲覧できる版',
 'pagehist' => 'ページの履歴',
 'deletedhist' => '削除された履歴',
-'revdelete-hide-current' => '$1$2の項目の非表示に失敗しましたこれは最新版であるため。
+'revdelete-hide-current' => '$1$2の項目の非表示に失敗しましたこれは最新版であるため。
 非表示にはできません。',
-'revdelete-show-no-access' => '$1$2の項目の表示に失敗しましたこの項目には「制限付き」の印が付いています。
+'revdelete-show-no-access' => '$1$2の項目の表示に失敗しましたこの項目には「制限付き」の印が付いています。
 アクセス権限がありません。',
-'revdelete-modify-no-access' => '$1$2の項目の修正に失敗しましたこの項目には「制限付き」の印が付いています。
+'revdelete-modify-no-access' => '$1$2の項目の修正に失敗しましたこの項目には「制限付き」の印が付いています。
 アクセス権限がありません。',
 'revdelete-modify-missing' => '版 ID $1 の項目の変更に失敗しました: データベース内にありません!',
 'revdelete-no-change' => "'''警告:''' $1$2の項目には要求された閲覧レベルが既に設定されています。",
-'revdelete-concurrent-change' => '$1$2の項目の変更に失敗しましたあなたが変更しようとしている間に、他の誰かが変更したようです。
+'revdelete-concurrent-change' => '$1$2の項目の変更に失敗しましたあなたが変更しようとしている間に、他の誰かが変更したようです。
 記録を確認してください。',
-'revdelete-only-restricted' => '$1$2の項目の版指定削除に失敗しました他の閲覧レベルの選択肢のうちどれかをさらに選択しなければ、管理者から項目を秘匿できません。',
+'revdelete-only-restricted' => '$1$2の項目の版指定削除に失敗しました他の閲覧レベルの選択肢のうちどれかをさらに選択しなければ、管理者から項目を秘匿できません。',
 'revdelete-reason-dropdown' => '*よくある削除理由
 ** 著作権侵害
 ** 不適切なコメントや個人情報の開示
 ** 不適切な利用者名
 ** 名誉毀損のおそれ',
-'revdelete-otherreason' => '他の、または追加の理由',
+'revdelete-otherreason' => '他の、または追加の理由:',
 'revdelete-reasonotherlist' => 'その他の理由',
 'revdelete-edit-reasonlist' => '削除理由を編集',
-'revdelete-offender' => '指定版の投稿者',
+'revdelete-offender' => '指定版の投稿者:',
 
 # Suppression log
 'suppressionlog' => '秘匿記録',
@@ -1705,15 +1707,13 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-sendemail' => '他の利用者にメールを送信',
 'right-passwordreset' => 'パスワード再設定メールを閲覧',
 
+# Special:Log/newusers
+'newuserlogpage' => 'アカウント作成記録',
+'newuserlogpagetext' => '以下はアカウント作成の記録です。',
+
 # User rights log
 'rightslog' => '利用者権限変更記録',
 'rightslogtext' => '以下は利用者権限の変更記録です。',
-'rightslogentry' => '$1 の所属グループを $2 から $3 に変更しました',
-'rightslogentry-autopromote' => '$2 から $3 に自動的に昇格しました',
-'logentry-rights-rights' => '$1 が $3 の所属グループを $4 から $5 に変更しました',
-'logentry-rights-rights-legacy' => '$1 が $3 の所属グループを変更しました',
-'logentry-rights-autopromote' => '$1 が $4 から $5 に自動的に昇格しました',
-'rightsnone' => '(なし)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'このページの閲覧',
@@ -1815,12 +1815,13 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 
 参考のため、このページの削除と移動の記録を以下に示します:",
 'uploadtext' => "ファイルをアップロードするには、以下のフォームを使用してください。
+
 以前にアップロードされたファイルの表示と検索には[[Special:FileList|{{int:listfiles}}]]を使用してください。(再) アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。
 
 ページにファイルを入れるには、以下の書式のリンクを使用してください:
-* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>''' とすると、ファイルが完全なままで使用されます
+* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>''' とすると、ファイルが完全なままで使用されます
 * '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code>''' とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。
-* '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>''' とすると、ファイルを表示せずにそのファイルに直接リンクします",
+* '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>''' とすると、ファイルを表示せずにそのファイルに直接リンクします",
 'upload-permitted' => '許可されているファイル形式: $1。',
 'upload-preferred' => '推奨されているファイル形式: $1。',
 'upload-prohibited' => '禁止されているファイル形式: $1。',
@@ -1915,7 +1916,7 @@ file_uploadsの設定を確認してください。',
 'sourceurl' => 'アップロード元の URL:',
 'destfilename' => '登録するファイル名:',
 'upload-maxfilesize' => 'ファイルの最大サイズ: $1',
-'upload-description' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®èª¬æ\98\8e',
+'upload-description' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®è§£èª¬',
 'upload-options' => 'アップロードのオプション',
 'watchthisupload' => 'このファイルをウォッチ',
 'filewasdeleted' => 'この名前のファイルは一度アップロードされ、その後削除されています。
@@ -2043,7 +2044,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization をご覧ください
 'http-invalid-url' => '無効なURL:$1',
 'http-invalid-scheme' => 'スキーム「$1」の URL には未対応です。',
 'http-request-error' => '不明なエラーによりHTTPリクエストに失敗しました。',
-'http-read-error' => 'HTTP読み込みエラー。',
+'http-read-error' => 'HTTP読ã\81¿è¾¼ã\81¿ã\82¨ã\83©ã\83¼ã\81§ã\81\99ã\80\82',
 'http-timed-out' => 'HTTP要求がタイムアウトしました。',
 'http-curl-error' => 'URLからの取得に失敗しました: $1',
 'http-host-unreachable' => 'URLに到達できません。',
@@ -2127,7 +2128,7 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 'filerevert' => '$1を差し戻す',
 'filerevert-legend' => 'ファイルを差し戻す',
 'filerevert-intro' => "ファイル'''[[Media:$1|$1]]'''を[$4 $2$3版]に差し戻そうとしています。",
-'filerevert-comment' => '理由',
+'filerevert-comment' => '理由:',
 'filerevert-defaultcomment' => '$1$2の版へ差し戻し',
 'filerevert-submit' => '差し戻す',
 'filerevert-success' => "'''[[Media:$1|$1]]'''は[$4 $2$3の版]に差し戻されました。",
@@ -2138,13 +2139,13 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 'filedelete-legend' => 'ファイルの削除',
 'filedelete-intro' => "'''[[Media:$1|$1]]'''をすべての履歴とともに削除しようとしています。",
 'filedelete-intro-old' => "'''[[Media:$1|$1]]'''の[$4 $2$3の版]を削除しようとしています。",
-'filedelete-comment' => '理由',
+'filedelete-comment' => '理由:',
 'filedelete-submit' => '削除',
 'filedelete-success' => "'''$1''' は削除されました。",
 'filedelete-success-old' => "'''[[Media:$1|$1]]'''の$2$3の版は削除されています。",
 'filedelete-nofile' => "'''$1'''は存在しません。",
 'filedelete-nofile-old' => "指定された属性を持つ'''$1'''の古い版は存在しません。",
-'filedelete-otherreason' => '他の、または追加の理由',
+'filedelete-otherreason' => '他の、または追加の理由:',
 'filedelete-reason-otherlist' => 'その他の理由',
 'filedelete-reason-dropdown' => '*よくある削除理由
 ** 著作権侵害
@@ -2263,7 +2264,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'mostinterwikis' => 'ウィキ間リンクの多いページ',
 'mostrevisions' => '版の多いページ',
 'prefixindex' => '先頭が同じ全ページ',
-'prefixindex-namespace' => '先頭が同じ全ページ($1名前空間)',
+'prefixindex-namespace' => '先頭が同じ全ページ ($1名前空間)',
 'shortpages' => '短いページ',
 'longpages' => '長いページ',
 'deadendpages' => '行き止まりページ',
@@ -2282,7 +2283,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'usereditcount' => '$1 {{PLURAL:$1|回編集}}',
 'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
 'newpages' => '新しいページ',
-'newpages-username' => '利用者名',
+'newpages-username' => '利用者名:',
 'ancientpages' => '最古のページ',
 'move' => '移動',
 'movethispage' => 'このページを移動',
@@ -2381,10 +2382,6 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'activeusers-hidesysops' => '管理者を隠す',
 'activeusers-noresult' => '利用者が見つかりませんでした。',
 
-# Special:Log/newusers
-'newuserlogpage' => 'アカウント作成記録',
-'newuserlogpagetext' => '以下はアカウント作成の記録です。',
-
 # Special:ListGroupRights
 'listgrouprights' => '利用者グループの権限',
 'listgrouprights-summary' => '以下は、このウィキに登録されている利用者グループと、それぞれに割り当てられている権限の一覧です。
@@ -2463,7 +2460,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'notanarticle' => '記事ではありません',
 'notvisiblerev' => '別の利用者による最終版は削除されました',
 'watchnochange' => 'ウォッチリストに登録しているページで、指定期間内に編集されたものはありません。',
-'watchlist-details' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています(トークページを除く)。',
+'watchlist-details' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています (トークページを除く)。',
 'wlheader-enotif' => '* メール通知が有効になっています',
 'wlheader-showupdated' => "* 最終訪問以降に変更されたページは、'''太字'''で表示されます",
 'watchmethod-recent' => '最近の更新内のウォッチされているページを確認中',
@@ -2521,6 +2518,8 @@ $UNWATCHURL
 
 ご意見、お問い合わせ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '作成',
+'changed' => '変更',
 
 # Delete
 'deletepage' => 'ページを削除',
@@ -2542,8 +2541,8 @@ $UNWATCHURL
 'dellogpagetext' => '以下は最近の削除と復元の一覧です。',
 'deletionlog' => '削除記録',
 'reverted' => '以前の版への差し戻し',
-'deletecomment' => '理由',
-'deleteotherreason' => '他の、または追加の理由',
+'deletecomment' => '理由:',
+'deleteotherreason' => '他の、または追加の理由:',
 'deletereasonotherlist' => 'その他の理由',
 'deletereason-dropdown' => '*よくある削除理由
 ** 投稿者依頼
@@ -2594,35 +2593,37 @@ $2による直前の版へ変更されました。',
 'prot_1movedto2' => '[[$1]] を [[$2]] へ移動',
 'protect-badnamespace-title' => '保護不可能な名前空間',
 'protect-badnamespace-text' => 'この名前空間のページは保護できません。',
+'protect-norestrictiontypes-title' => '保護できないページ',
 'protect-legend' => '保護の確認',
-'protectcomment' => '理由',
-'protectexpiry' => '有効期限',
+'protectcomment' => '理由:',
+'protectexpiry' => '有効期限:',
 'protect_expiry_invalid' => '有効期間が正しくありません。',
 'protect_expiry_old' => '有効期限が過去の時刻です。',
 'protect-unchain-permissions' => '追加保護オプションをロック解除',
 'protect-text' => "ページ「'''$1'''」に対する保護レベルの表示と操作ができます。",
 'protect-locked-blocked' => "ブロックされている間は、保護レベルを変更できません。
-ページ「'''$1'''」の現在の状態は以下の通りです",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-locked-dblock' => "データベースのロックが有効なため、保護レベルを変更できません。
-ページ「'''$1'''」の現在の状態は以下の通りです",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-locked-access' => "アカウントに、ページの保護レベルを変更する権限がありません。
-ページ「'''$1'''」の現在の状態は以下の通りです",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-cascadeon' => 'このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、保護されています。
 このページの保護レベルを変更できますが、カスケード保護には影響しません。',
 'protect-default' => 'すべての利用者を許可',
-'protect-fallback' => '「$1」権限が必要',
-'protect-level-autoconfirmed' => '新規利用者と匿名利用者を禁止',
-'protect-level-sysop' => '管理者のみ',
+'protect-fallback' => '「$1」権限を持つ利用者のみに許可',
+'protect-level-autoconfirmed' => '自動承認された利用者のみに許可',
+'protect-level-sysop' => '管理者のみに許可',
+'protect-summary-desc' => '[$1=$2] ($3)',
 'protect-summary-cascade' => 'カスケード',
 'protect-expiring' => '$1(UTC)で自動的に解除',
 'protect-expiring-local' => '期限 $1',
 'protect-expiry-indefinite' => '無期限',
-'protect-cascade' => 'このページに読み込まれているページを保護する(カスケード保護)',
+'protect-cascade' => 'このページに読み込まれているページを保護する (カスケード保護)',
 'protect-cantedit' => 'このページの編集権限がないため、保護レベルを変更できません。',
-'protect-othertime' => 'その他の期間',
+'protect-othertime' => 'その他の期間:',
 'protect-othertime-op' => 'その他の期間',
 'protect-existing-expiry' => '現在の保護期限: $2 $3',
-'protect-otherreason' => '他の、または追加の理由',
+'protect-otherreason' => '他の、または追加の理由:',
 'protect-otherreason-op' => 'その他の理由',
 'protect-dropdown' => '*よくある保護理由
 ** 度重なる荒らし
@@ -2666,7 +2667,7 @@ $2による直前の版へ変更されました。',
 'undeletehistorynoadmin' => 'このページは削除されています。
 削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
 管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
-'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版',
+'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版:',
 'undeleterevision-missing' => '無効または存在しない版です。
 間違ったリンクをたどったか、この版は既に復元されたか、もしくは保存版から除去された可能性があります。',
 'undelete-nodiff' => 'これより前の版はありません。',
@@ -2700,7 +2701,7 @@ $1',
 'undelete-error-long' => 'ファイルの復元中にエラーが発生しました:
 
 $1',
-'undelete-show-file-confirm' => '$2$3の版からファイル「<nowiki>$1</nowiki>」の削除版を本当に表示しますか?',
+'undelete-show-file-confirm' => 'ファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を本当に閲覧しますか?',
 'undelete-show-file-submit' => 'はい',
 
 # Namespace form on various pages
@@ -2731,9 +2732,9 @@ $1',
 'sp-contributions-talk' => 'トーク',
 'sp-contributions-userrights' => '利用者権限の管理',
 'sp-contributions-blocked-notice' => 'この利用者は現在ブロックされています。
-参考のために最新のブロック記録項目を以下に表示します',
+参考のために最新のブロック記録項目を以下に表示します:',
 'sp-contributions-blocked-notice-anon' => 'このIPアドレスは現在ブロックされています。
-参考のために最近のブロック記録項目を以下に表示します',
+参考のために最近のブロック記録項目を以下に表示します:',
 'sp-contributions-search' => '投稿の検索',
 'sp-contributions-username' => 'IPアドレスまたは利用者名:',
 'sp-contributions-toponly' => '最新版の編集のみを表示',
@@ -2742,10 +2743,10 @@ $1',
 # What links here
 'whatlinkshere' => 'リンク元',
 'whatlinkshere-title' => '「$1」へリンクしているページ',
-'whatlinkshere-page' => 'ページ',
-'linkshere' => "以下のページが、'''[[:$1]]'''にリンクしています",
+'whatlinkshere-page' => 'ページ:',
+'linkshere' => "以下のページが、'''[[:$1]]'''にリンクしています:",
 'nolinkshere' => "'''[[:$1]]'''にリンクしているページはありません。",
-'nolinkshere-ns' => "選択された名前空間中で、'''[[:$1]]'''にリンクしているページはありません。",
+'nolinkshere-ns' => "指定した名前空間内に、'''[[:$1]]'''にリンクしているページはありません。",
 'isredirect' => '転送ページ',
 'istemplate' => '参照読み込み',
 'isimage' => 'ファイルへのリンク',
@@ -2769,8 +2770,8 @@ $1',
 このような措置は、荒らしからの防御の目的のみに行われるべきで、また[[{{MediaWiki:Policy-url}}|方針]]に沿ったものであるべきです。
 以下にブロックの理由を具体的に書いてください (例えば、荒らされたページへの言及など)。',
 'ipadressorusername' => 'IPアドレスまたは利用者名:',
-'ipbexpiry' => '有効期限',
-'ipbreason' => '理由',
+'ipbexpiry' => '有効期限:',
+'ipbreason' => '理由:',
 'ipbreasonotherlist' => 'その他の理由',
 'ipbreason-dropdown' => '*よくあるブロック理由
 ** 虚偽情報の挿入
@@ -2785,13 +2786,13 @@ $1',
 'ipbemailban' => 'メール送信を禁止',
 'ipbenableautoblock' => 'この利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロック',
 'ipbsubmit' => 'この利用者をブロック',
-'ipbother' => 'その他の期間',
+'ipbother' => 'その他の期間:',
 'ipboptions' => '2時間:2 hours,1日:1 day,3日:3 days,1週間:1 week,2週間:2 weeks,1か月:1 month,3か月:3 months,6か月:6 months,1年:1 year,無期限:infinite',
 'ipbotheroption' => 'その他',
-'ipbotherreason' => '他の、または追加の理由',
+'ipbotherreason' => '他の、または追加の理由:',
 'ipbhidename' => '利用者名を編集履歴や各種一覧から秘匿する',
 'ipbwatchuser' => 'この利用者の利用者ページとトークページをウォッチ',
-'ipb-disableusertalk' => 'ã\83\96ã\83­ã\83\83ã\82¯ä¸­ã\81®ã\81\93ã\81®å\88©ç\94¨è\80\85è\87ªèº«ã\81«ã\82\88ã\82\8bã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ç·¨é\9b\86を禁止',
+'ipb-disableusertalk' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81\8cã\83\96ã\83­ã\83\83ã\82¯ä¸­ã\81«è\87ªèº«ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8bã\81\93ã\81¨を禁止',
 'ipb-change-block' => 'これらの設定で、利用者を再びブロック',
 'ipb-confirm' => 'ブロックの確認',
 'badipaddress' => '無効なIPアドレス',
@@ -2845,11 +2846,11 @@ $1',
 $1 のブロックの理由は「''$2''」です。",
 'blocklogpage' => 'ブロック記録',
 'blocklog-showlog' => 'この利用者は以前にブロックされたことがあります。
-参考のため、ブロックの記録を以下に示します:',
+参考のため、ブロック記録を以下に示します:',
 'blocklog-showsuppresslog' => 'この利用者は以前にブロックされ、隠されたことがあります。
-参考のため、秘匿記録を以下に示します',
-'blocklogentry' => 'が [[$1]] を$2ブロックしました。ブロックの詳細$3',
-'reblock-logentry' => 'が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細$3',
+参考のため、秘匿記録を以下に示します:',
+'blocklogentry' => 'が [[$1]] を$2ブロックしました。ブロックの詳細$3',
+'reblock-logentry' => 'が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細$3',
 'blocklogtext' => 'このページは利用者のブロックと解除の記録です。
 自動的にブロックされたIPアドレスは表示されていません。
 現時点で有効なブロックは[[Special:BlockList|ブロックの一覧]]をご覧ください。',
@@ -2869,8 +2870,8 @@ $1 のブロックの理由は「''$2''」です。",
 'ipb-needreblock' => '$1 は既にブロックされています。設定を変更しますか?',
 'ipb-otherblocks-header' => 'その他の{{PLURAL:$1|ブロック}}',
 'unblock-hideuser' => '利用者名が隠されているため、この利用者のブロックを解除できません。',
-'ipb_cant_unblock' => 'エラー:ブロック ID $1 はありません。ブロックが既に解除されている可能性があります。',
-'ipb_blocked_as_range' => 'エラーIPアドレス$1は直接ブロックされておらず、ブロック解除できませんでした。
+'ipb_cant_unblock' => 'エラー: ブロック ID $1 が見つかりません。ブロックが既に解除されている可能性があります。',
+'ipb_blocked_as_range' => 'エラーIPアドレス$1は直接ブロックされておらず、ブロック解除できませんでした。
 ただし、$2の範囲でブロックされており、こちらのブロックは別途解除できます。',
 'ip_range_invalid' => 'IP範囲が無効です。',
 'ip_range_toolarge' => '/$1より広範囲の範囲ブロックは許可されていません。',
@@ -2917,11 +2918,11 @@ $1 のブロックの理由は「''$2''」です。",
 'move-page-legend' => 'ページの移動',
 'movepagetext' => "下のフォームを使用すると、ページ名を変更でき、そのページの履歴も変更先に移動できます。
 移動元のページは移動先への転送ページになります。
-移動元のページへのリダイレクトを自動的に修正できます。
-[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
+移動元のページへの転送ページを自動的に修正できます。
+[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
 リンクを正しく維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
+移動先が既に存在する場合は、そのページが転送ページであり、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''注意!'''
 よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期しない結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。",
@@ -2930,7 +2931,7 @@ $1 のブロックの理由は「''$2''」です。",
 自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
 つながるべき場所にリンクがつながるよう維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空または転送ページで、かつ過去の版を持たない場合を除いて移動'''できません'''。
+移動先が既に存在する場合は、そのページが転送ページであり、かつ過去の版を持たない場合を除いて移動'''できません'''。
 つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''警告!'''
@@ -2947,7 +2948,7 @@ $1 のブロックの理由は「''$2''」です。",
 'movenologintext' => 'ページを移動するためには、登録利用者でありかつ、[[Special:UserLogin|ログイン]]している必要があります。',
 'movenotallowed' => 'ページを移動する権限がありません。',
 'movenotallowedfile' => 'ファイルを移動する権限がありません。',
-'cant-move-user-page' => '利用者ページを移動させる権限がありません(下位ページ内は除く)。',
+'cant-move-user-page' => '利用者ページを移動させる権限がありません (下位ページ内を除く)。',
 'cant-move-to-user-page' => '利用者下位ページ以外の利用者ページに、ページを移動させる権限がありません。',
 'newtitle' => '新しいページ名:',
 'move-watch' => '移動元と移動先ページをウォッチ',
@@ -3289,7 +3290,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'pageinfo-recent-authors' => '最近の投稿者数',
 'pageinfo-magic-words' => 'マジック {{PLURAL:$1|ワード}} ($1)',
 'pageinfo-hidden-categories' => '隠し{{PLURAL:$1|カテゴリ}} ($1)',
-'pageinfo-templates' => '参照読み込みされている{{PLURAL:$1|テンプレート}} ($1)',
+'pageinfo-templates' => 'このページが参照読み込みしている{{PLURAL:$1|テンプレート}} ($1)',
+'pageinfo-transclusions' => 'このページを参照読み込みしている{{PLURAL:$1|ページ}} ($1)',
 'pageinfo-toolboxlink' => 'ページ情報',
 'pageinfo-redirectsto' => '転送先',
 'pageinfo-redirectsto-info' => '情報',
@@ -3298,6 +3300,10 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'pageinfo-protect-cascading' => 'カスケード保護されている',
 'pageinfo-protect-cascading-yes' => 'はい',
 'pageinfo-protect-cascading-from' => 'カスケード保護の起点',
+'pageinfo-category-info' => 'カテゴリ情報',
+'pageinfo-category-pages' => 'ページ数',
+'pageinfo-category-subcats' => '下位カテゴリ数',
+'pageinfo-category-files' => 'ファイル数',
 
 # Skin names
 'skinname-standard' => 'クラシック',
@@ -3319,8 +3325,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'rcpatroldisabledtext' => '最近の更新の巡回機能は現在無効になっています。',
 'markedaspatrollederror' => '巡回済みにできません',
 'markedaspatrollederrortext' => '巡回済みにするには、版を指定する必要があります。',
-'markedaspatrollederror-noautopatrol' => '自分の編集を巡回済みにする権限がありません。',
-'markedaspatrollednotify' => '$1 ã\81¸ã\81®ã\81\93ã\81®å¤\89æ\9b´ã\81¯å·¡å\9b\9eæ¸\88ã\81¿ã\81«ã\81ªã\82\8aました。',
+'markedaspatrollederror-noautopatrol' => 'あなたには自分の編集を巡回済みにする権限がありません。',
+'markedaspatrollednotify' => '$1 ã\81¸ã\81®ã\81\93ã\81®å¤\89æ\9b´ã\82\92å·¡å\9b\9eæ¸\88ã\81¿ã\81«ã\81\97ました。',
 'markedaspatrollederrornotify' => '巡回済みにするのに失敗しました。',
 
 # Patrol log
@@ -3391,6 +3397,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 分}}',
 'hours' => '{{PLURAL:$1|$1 時間}}',
 'days' => '{{PLURAL:$1|$1 日}}',
+'months' => '{{PLURAL:$1|$1 か月}}',
+'years' => '{{PLURAL:$1|$1 年}}',
 'ago' => '$1前',
 'just-now' => 'ちょうど今',
 
@@ -3611,7 +3619,7 @@ Variants for Chinese language
 'exif-credit' => '帰属/提供者',
 'exif-source' => 'ソース',
 'exif-editstatus' => '画像の編集上の状態',
-'exif-urgency' => '緊急',
+'exif-urgency' => '緊急',
 'exif-fixtureidentifier' => 'フィクスチャ名',
 'exif-locationdest' => '映っている場所',
 'exif-locationdestcode' => '映っている場所のコード',
@@ -4237,7 +4245,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 'dberr-again' => '数分間待った後、もう一度読み込んでください。',
 'dberr-info' => '(データベースサーバー $1 に接続できませんでした)',
 'dberr-usegoogle' => '元に戻るまで、Googleを利用して検索できます。',
-'dberr-outofdate' => 'それらが収集した内容は古い可能性があることに注意してください。',
+'dberr-outofdate' => '収集された内容は古い可能性があることに注意してください。',
 'dberr-cachederror' => 'これは要求されたページをキャッシュした複製であり、古くなっている可能性があります。',
 
 # HTML forms
@@ -4287,6 +4295,10 @@ MediaWikiは、有用であることを期待して配布されていますが
 'logentry-newusers-create2' => '利用者アカウント $3 が $1 により作成されました',
 'logentry-newusers-autocreate' => '利用者アカウント $1 が自動的に作成されました',
 'newuserlog-byemail' => 'パスワードをメールで送信しました',
+'logentry-rights-rights' => '$1 が $3 の所属グループを $4 から $5 に変更しました',
+'logentry-rights-rights-legacy' => '$1 が $3 の所属グループを変更しました',
+'logentry-rights-autopromote' => '$1 が $4 から $5 に自動的に昇格しました',
+'rightsnone' => '(なし)',
 
 # Feedback
 'feedback-bugornote' => '技術的な問題の詳細を説明する準備ができている場合は、[$1 バグ報告]をお願いします。
@@ -4296,9 +4308,9 @@ MediaWikiは、有用であることを期待して配布されていますが
 'feedback-cancel' => 'キャンセル',
 'feedback-submit' => 'フィードバックを送信',
 'feedback-adding' => 'ページへのフィードバックの追加...',
-'feedback-error1' => 'エラー:APIから認識されない結果が返ってきました',
-'feedback-error2' => 'エラー編集に失敗しました',
-'feedback-error3' => 'エラー:APIからの応答がありません',
+'feedback-error1' => 'エラー: 認識できない結果を API が返しました',
+'feedback-error2' => 'エラー編集に失敗しました',
+'feedback-error3' => 'エラー: API からの応答がありません',
 'feedback-thanks' => 'ありがとうございます。フィードバックを「[$2 $1]」のページに投稿しました。',
 'feedback-close' => '完了',
 'feedback-bugcheck' => 'Great! [$1 既出のバグ]に既に含まれていないかご確認ください。',
@@ -4310,7 +4322,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 
 # API errors
 'api-error-badaccess-groups' => 'このウィキへのファイルのアップロードが許可されていません。',
-'api-error-badtoken' => '内部エラートークンが正しくありません。',
+'api-error-badtoken' => '内部エラートークンが正しくありません。',
 'api-error-copyuploaddisabled' => 'URLによるアップロードはこのサーバーでは無効になっています。',
 'api-error-duplicate' => '当ウェブサイト上には、既に同じ内容の{{PLURAL:$1|[$2 他のファイル]が|[$2 他のファイルがいくつか]}}存在しています。',
 'api-error-duplicate-archive' => 'サイト上に同じ内容の{{PLURAL:$1|[$2 別のファイル]が|[$2 他のファイルがいくつか]}}既にありましたが、{{PLURAL:$1|それは|それらは}}削除されました。',
@@ -4318,7 +4330,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 'api-error-duplicate-popup-title' => '重複した{{PLURAL:$1|ファイル|ファイル群}}です。',
 'api-error-empty-file' => '送信されたファイルは空でした。',
 'api-error-emptypage' => '内容がないページの新規作成は許可されていません。',
-'api-error-fetchfileerror' => '内部エラー:ファイルの取得中に問題が発生しました。',
+'api-error-fetchfileerror' => '内部エラー: ファイルを取得する際に問題が発生しました。',
 'api-error-fileexists-forbidden' => '「$1」という名前のファイルは存在しており、上書きはできません。',
 'api-error-fileexists-shared-forbidden' => '「$1」という名前のファイルは共有ファイルリポジトリに存在しており、上書きはできません。',
 'api-error-file-too-large' => '送信されたファイルは大きすぎます。',
@@ -4327,23 +4339,23 @@ MediaWikiは、有用であることを期待して配布されていますが
 'api-error-filetype-banned-type' => '$1{{PLURAL:$4|は許可されていないファイル形式です}}。許可されている{{PLURAL:$3|ファイル形式}}は$2です。',
 'api-error-filetype-missing' => 'ファイルに拡張子がありません。',
 'api-error-hookaborted' => '拡張機能のフックによって、修正が中断されました。',
-'api-error-http' => '内部エラー:サービスへの接続で問題が発生しました。',
+'api-error-http' => '内部エラー: サーバーに接続できませんでした。',
 'api-error-illegal-filename' => 'ファイル名が許可されていません。',
-'api-error-internal-error' => '内部エラーウィキ上でアップロードを処理する際に問題が発生しました。',
-'api-error-invalid-file-key' => '内部エラー一時格納場所にファイルが見つかりませんでした。',
-'api-error-missingparam' => '内部エラーリクエストのパラメーターが足りません。',
-'api-error-missingresult' => '内部エラー:複製に成功したか判断できませんでした。',
+'api-error-internal-error' => '内部エラーウィキ上でアップロードを処理する際に問題が発生しました。',
+'api-error-invalid-file-key' => '内部エラー一時格納場所にファイルが見つかりませんでした。',
+'api-error-missingparam' => '内部エラーリクエストのパラメーターが足りません。',
+'api-error-missingresult' => '内部エラー: 複製に成功したかどうか判断できませんでした。',
 'api-error-mustbeloggedin' => 'ファイルをアップロードするにはログインする必要があります。',
-'api-error-mustbeposted' => '内部エラー:リクエストはHTTP POSTである必要があります。',
+'api-error-mustbeposted' => '内部エラー: リクエストは HTTP の POST メソッドである必要があります。',
 'api-error-noimageinfo' => 'アップロードには成功しましたが、サーバーはファイルに関する情報を返しませんでした。',
-'api-error-nomodule' => '内部エラーアップロードを処理するモジュールが設定されていません。',
-'api-error-ok-but-empty' => '内部エラーサーバーからの応答がありません。',
+'api-error-nomodule' => '内部エラーアップロードを処理するモジュールが設定されていません。',
+'api-error-ok-but-empty' => '内部エラーサーバーからの応答がありません。',
 'api-error-overwrite' => '既存のファイルへの上書きは許可されていません。',
-'api-error-stashfailed' => '内部エラーサーバーは一時ファイルを格納できませんでした。',
+'api-error-stashfailed' => '内部エラーサーバーは一時ファイルを格納できませんでした。',
 'api-error-timeout' => 'サーバーが決められた時間内に応答しませんでした。',
 'api-error-unclassified' => '不明なエラーが発生しました。',
 'api-error-unknown-code' => '不明なエラー:「$1」',
-'api-error-unknown-error' => '内部エラー:ファイルのアップロードの途中で問題が発生しました。',
+'api-error-unknown-error' => '内部エラー: ファイルをアップロードする際に問題が発生しました。',
 'api-error-unknown-warning' => '不明な警告:「$1」',
 'api-error-unknownerror' => '不明なエラー:「$1」',
 'api-error-uploaddisabled' => 'このウィキではアップロードは無効になっています。',
index 4253e16..637df82 100644 (file)
@@ -735,6 +735,9 @@ Chrai priifix yu kwieri wid ''all:'' fi saach aal kantent (inkluudn taak piej, t
 
 'grouppage-sysop' => '{{ns:project}}:Adminischrieta',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yuuza krieshan lag',
+
 # User rights log
 'rightslog' => 'Yuuza raits lag',
 
@@ -825,9 +828,6 @@ Piej pahn [[Special:Watchlist|yu wachlis]] dem '''buol'''.",
 # Special:LinkSearch
 'linksearch' => 'Extoernal lingk',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yuuza krieshan lag',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis a memba)',
 
index 575d864..331f912 100644 (file)
@@ -454,6 +454,10 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 
 'grouppage-sysop' => '{{ns:project}}:Administråtorer',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brugeråprettelseslog',
+'newuserlogpagetext' => "Dett'er en log åver de senest åprettede brugere.",
+
 # User rights log
 'rightslog' => 'Rettigheds-logbåĝ',
 
@@ -605,10 +609,6 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 'linksearch-line' => '$2 linker til $1',
 'linksearch-error' => "Wildkårter må ken benyttes i'n stårt åf håstnavnet.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brugeråprettelseslog',
-'newuserlogpagetext' => "Dett'er en log åver de senest åprettede brugere.",
-
 # E-mail user
 'emailuser' => 'E-mail til denne bruger',
 
index 97d1fb0..b37c7a0 100644 (file)
@@ -416,7 +416,7 @@ Ora ana alesané.",
 'actionthrottled' => 'Tindakan diwatesi',
 'actionthrottledtext' => 'Minangka sawijining pepesthèn anti-spam, panjenengan diwatesi nglakoni tindhakan iki sing cacahé kakèhan ing wektu cendhak.
 Mangga dicoba manèh ing sawetara menit.',
-'protectedpagetext' => 'Kaca iki dikunci supaya ora disunting.',
+'protectedpagetext' => 'Kaca iki wis digembok supaya ora bisa disunting lan diapa-apakaké.',
 'viewsourcetext' => 'Panjenengan bisa mirsani utawa nulad sumber kaca iki:',
 'viewyourtext' => "Sampéyan bisa ndelok lan nyalin sumber '''suntingan Sampéyan''' nèng kaca iki:",
 'protectedinterface' => 'Kaca iki isiné tèks antarmuka sing dienggo software lan wis dikunci kanggo menghindari kasalahan.',
@@ -451,6 +451,7 @@ Pangurus sing ngopèni kuwi ngawedharaké: "$3".',
 Sampéyan bisa nganggo {{SITENAME}} sacara anonim, utawa bisa <span class='plainlinks'>[$1 mlebu log manèh]</span> kanthi jeneng panganggo sing padha utawa beda.
 
 Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih nèng njero log, kuwi bisa ilang yèn Sampéyan ngresiki ''cache'' pramban Sampéyan.",
+'welcomeuser' => 'Sugeng Rawuh, $1!',
 'yourname' => 'Asma pangangeman',
 'yourpassword' => 'Tembung sandhi:',
 'yourpasswordagain' => 'Balènana tembung sandhi',
@@ -1279,12 +1280,13 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'right-sendemail' => 'Ngirim layang listrik (e-mail) menyang panganggo liya',
 'right-passwordreset' => 'Delok layang èlèktronik panyetèlulangan tembung sandhi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log panganggo anyar',
+'newuserlogpagetext' => 'Ing ngisor iki kapacak log pandaftaran panganggo anyar.',
+
 # User rights log
 'rightslog' => 'Log pangowahan hak aksès',
 'rightslogtext' => 'Ing ngisor iki kapacak log pangowahan marang hak-hak panganggo.',
-'rightslogentry' => 'ngganti kaanggotan kelompok kanggo $1 saka $2 dadi $3',
-'rightslogentry-autopromote' => 'otomatis ditawakaké saka $2 nèng $3',
-'rightsnone' => '(ora ana)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'maca kaca iki',
@@ -1899,10 +1901,6 @@ Deleng uga [[Special:WantedCategories|kategori sing diperlokaké]].',
 'activeusers-hidesysops' => 'Delikna pangurus',
 'activeusers-noresult' => 'Panganggo ora ditemokaké.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log panganggo anyar',
-'newuserlogpagetext' => 'Ing ngisor iki kapacak log pandaftaran panganggo anyar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hak-hak grup panganggo',
 'listgrouprights-summary' => 'Ing ngisor iki kapacak dhaftar grup panganggo sing didéfinisi ing wiki iki, kanthi hak-hak aksès gandhèngané.
@@ -2021,6 +2019,8 @@ Kanggo ngowahi préferènsi ing daftar pangawasan panjenengan, mangga mirsani
 
 Umpan balik lan pitulung sabanjuré:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kadamel',
+'changed' => 'kaubah',
 
 # Delete
 'deletepage' => 'Busak kaca',
@@ -3479,6 +3479,7 @@ Gambar dituduhaké mawa résolusi kebak lan tipe liyané berkas bakal dibuka lan
 'logentry-newusers-create2' => 'Akun panganggo $3 digawé déning $1',
 'logentry-newusers-autocreate' => 'Akun $1 digawé otomatis',
 'newuserlog-byemail' => 'tembung sandhi wis dikirim liwat e-mail',
+'rightsnone' => '(ora ana)',
 
 # Feedback
 'feedback-bugornote' => 'Yèn Sampéyan siap njelasaké masalah tèhnis kanthi rinci mangga [$1 laporaké bug].
index 8f805a4..4f673ff 100644 (file)
@@ -303,6 +303,7 @@ $messages = array(
 'newwindow' => '(ახალ ფანჯარაში)',
 'cancel' => 'გაუქმება',
 'moredotdotdot' => 'ვრცლად...',
+'morenotlisted' => 'მეტი არ არის ნაჩვენები...',
 'mypage' => 'გვერდი',
 'mytalk' => 'განხილვა',
 'anontalk' => 'ამ IP-ს განხილვა',
@@ -1486,15 +1487,13 @@ $1",
 'right-sendemail' => 'გაგუგზავნე ელექტრონული ფოსტა სხვა მომხმარებლებს',
 'right-passwordreset' => 'ელ.ფოსტის ნახვა პაროლის შეცვლით',
 
+# Special:Log/newusers
+'newuserlogpage' => 'მომხმარებლის რეგისტრაციის ჟურნალი',
+'newuserlogpagetext' => 'ბოლო დროს დარეგისტრირებულ მომხმარებელთა სია',
+
 # User rights log
 'rightslog' => 'მომხმარებლის უფლებების ჟურნალი',
 'rightslogtext' => 'მომხმარებელთა უფლებების ცვლილებათა ჟურბალი',
-'rightslogentry' => 'შესწორდა მომხმარებლის ჯგუფები $1  $2-დან  $3-ზე',
-'rightslogentry-autopromote' => 'ავტომატურად იქნა გადაყვანილი $2–დან $3–ში',
-'logentry-rights-rights' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის $4-დან $5-ზე',
-'logentry-rights-rights-legacy' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის',
-'logentry-rights-autopromote' => '$1 ავტომატურად იქნა გადაყვანილი $4–დან $5–ში',
-'rightsnone' => '(არცერთი)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ამ გვერდის კითხვა',
@@ -2133,10 +2132,6 @@ $1',
 'activeusers-hidesysops' => 'ადმინისტრატორების დამალვა',
 'activeusers-noresult' => 'მომხმარებლები არ არიან ნაპოვნი.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'მომხმარებლის რეგისტრაციის ჟურნალი',
-'newuserlogpagetext' => 'ბოლო დროს დარეგისტრირებულ მომხმარებელთა სია',
-
 # Special:ListGroupRights
 'listgrouprights' => 'მომხმარებელთა ჯგუფების უფლებები',
 'listgrouprights-summary' => 'ქვემოთ წარმოდგენილია ამ ვიკიში გარკვეულ ჯგუფთა სია და მათი უფლებები.
@@ -2275,6 +2270,8 @@ $UNWATCHURL
 
 დამატებითი ინფორმაცია
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'შექმნილია',
+'changed' => 'შეცვლილი',
 
 # Delete
 'deletepage' => 'გვერდის წაშლა',
@@ -2360,7 +2357,7 @@ $UNWATCHURL
 'protect-cascadeon' => 'ეს გვერდი ამჟამად დაცულია, ვინაიდან იგი ნაწილია ამ {{PLURAL:$1|გვერდის, რომელსაც|გვერდების, რომელთაც}} კასკადური დაცვა აქვს ჩართული.
 თქვენ შეგიძლიათ ამ გვერდის დაცვის დონე შეცვალოთ, თუმცა ეს კასკადურ დაცვაზე გავლენას არ იქონიებს.',
 'protect-default' => 'ყველა მომხმარებელი',
-'protect-fallback' => 'á\83¡á\83\90á\83­á\83\98á\83 á\83\9dá\83\90 â\80\9e$1-á\83\98á\83¡â\80\9c á\83£á\83¤á\83\9aá\83\94á\83\91á\83\90',
+'protect-fallback' => 'á\83®á\83\94á\83\9aá\83\9bá\83\98á\83¡á\83\90á\83¬á\83\95á\83\93á\83\9dá\83\9bá\83\98á\83\90 á\83\9bá\83®á\83\9dá\83\9aá\83\9dá\83\93 â\80\9e$1-á\83\98á\83¡â\80\9c á\83£á\83¤á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83¥á\83\9dá\83\9cá\83\94 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\94á\83\91á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡',
 'protect-level-autoconfirmed' => 'ახალი და არარეგისტრირებული მომხმარებლებისაგან დაცვა',
 'protect-level-sysop' => 'მხოლოდ ადმინისტრატორები',
 'protect-summary-cascade' => 'იერარქიული',
@@ -2959,8 +2956,8 @@ $1',
 
 # Spam protection
 'spamprotectiontitle' => 'სპამ-ფილტრი',
-'spamprotectiontext' => 'á\83\92á\83\95á\83\94á\83 á\83\93á\83\98, á\83 á\83\9dá\83\9bá\83\9aá\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90á\83¡á\83\90á\83ª á\83ªá\83\93á\83\98á\83\9aá\83\9dá\83\91á\83\97 á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98á\83\90 á\83¡á\83\9eá\83\90á\83\9b\83¤á\83\9aá\83\98ტრით.
\83¡á\83\90á\83\95á\83\90á\83 á\83\90á\83£á\83\93á\83\9dá\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\9bá\83\98á\83\94á\83  á\83©ამატებული ვებ-გვერდის მისამართი შავ სიაშია.',
+'spamprotectiontext' => 'á\83\98á\83\9cá\83¢á\83\94á\83 á\83\9cá\83\94á\83¢-á\83 á\83\94á\83¡á\83£á\83 á\83¡á\83\98, á\83 á\83\9dá\83\9bá\83\9aá\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90á\83¡á\83\90á\83ª á\83ªá\83\93á\83\98á\83\9aá\83\9dá\83\91á\83\97, á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98á\83\90 á\83¡á\83\9eá\83\90á\83\9b\83¤á\83\98á\83\9aტრით.
\83¡á\83\90á\83\95á\83\90á\83 á\83\90á\83£á\83\93á\83\9dá\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\9bá\83\98á\83\94á\83  á\83\93ამატებული ვებ-გვერდის მისამართი შავ სიაშია.',
 'spamprotectionmatch' => 'მომდევნო ტექსტი იყო სპამ-ფილტრის ჩართვის მიზეზი: $1',
 'spambot_username' => 'სპამის გასუფთავება',
 'spam_reverting' => 'დაბრუნება ბოლო ვერსიასთან, რომელიც არ შეიცავს ბმულს $1-თან',
@@ -3929,6 +3926,10 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'logentry-newusers-create2' => 'მომხმარებლის ანგარიში $3 შექმნა მომხმარებელმა $1',
 'logentry-newusers-autocreate' => 'ავტომატურად შეიქმნა მომხმარებლის ანგარიში $1',
 'newuserlog-byemail' => 'პაროლი ელ-ფოსტითაა გამოგზავნილი',
+'logentry-rights-rights' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის $4-დან $5-ზე',
+'logentry-rights-rights-legacy' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის',
+'logentry-rights-autopromote' => '$1 ავტომატურად იქნა გადაყვანილი $4–დან $5–ში',
+'rightsnone' => '(არცერთი)',
 
 # Feedback
 'feedback-bugornote' => 'თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].
index c171b37..cbbb01f 100644 (file)
@@ -1014,11 +1014,13 @@ Barlıq mag'lıwmat tu'rin (sonın' ishinde sa'wbet betlerdi, shablonlardı h.t.
 'right-userrights-interwiki' => "Basqa wikilerdegi paydalanıwshının' huquqların o'zgertiw",
 'right-siteadmin' => "Mag'lıwmatlar bazasın qulıplaw ha'm qulıplawın o'shiriw",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Paydalanıwshılardı esapqa alıw jurnalı',
+'newuserlogpagetext' => 'Bul paydalanıwshılardı esapqa alıw jurnalı',
+
 # User rights log
 'rightslog' => 'Paydalanıwshı huquqları jurnalı',
 'rightslogtext' => "Bul paydalanıwshı huquqların o'zgertiw jurnalı.",
-'rightslogentry' => "$1 paydalanıwshısının' ag'za bolg'an toparları $2 degennen $3 degenge o'zgertti",
-'rightsnone' => '(hesh qanday)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bul betti oqıw',
@@ -1365,10 +1367,6 @@ Ja'nede [[Special:WantedCategories|kerekli kategoriyalardı]] qarap ko'rin'.",
 'listusers-submit' => "Ko'rset",
 'listusers-noresult' => 'Paydalanıwshı tabılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Paydalanıwshılardı esapqa alıw jurnalı',
-'newuserlogpagetext' => 'Bul paydalanıwshılardı esapqa alıw jurnalı',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Paydalanıwshılar toparı huqıqları',
 'listgrouprights-group' => 'Topar',
@@ -1430,6 +1428,8 @@ Eger siz bul betti baqlaw dizimin'izden o'shirmekshi bolsan'ız bettin' joqarg'
 'enotif_lastvisited' => "Son'g'ı kirwin'izden beri bolg'an o'zgerisler ushın $1 degendi ko'rin'iz.",
 'enotif_lastdiff' => "Usı o'zgeris ushın $1 degendi ko'rin'iz.",
 'enotif_anon_editor' => 'anonim paydalanıwshı $1',
+'created' => "jaratılg'an",
+'changed' => "o'zgertilgen",
 
 # Delete
 'deletepage' => "Betti o'shir",
@@ -1943,5 +1943,6 @@ Bul tastıyıqlaw kodının' pitetug'ın waqtı: $4.",
 'revdelete-restricted' => "administratorlarg'a qollanılg'an sheklewler",
 'revdelete-unrestricted' => "administratorlardan alıp taslang'an sheklewler",
 'newuserlog-byemail' => 'parol e-mail arqalı jiberildi',
+'rightsnone' => '(hesh qanday)',
 
 );
index 46d927b..a3f2e0c 100644 (file)
@@ -1297,12 +1297,13 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'right-sendemail' => 'Ceggaɛ tirawt i iseqdacen nniḍen',
 'right-passwordreset' => 'Ẓeṛ tira n uwennez n awalen uɛaddi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Aɣmis n isnulfan n  imiḍanen n imseqdacen',
+'newuserlogpagetext' => 'Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.',
+
 # User rights log
 'rightslog' => 'Aɣmis n yizerfan n wemseqdac',
 'rightslogtext' => 'Wagi d aɣmis n yibeddlen n yizerfan n wemseqdac',
-'rightslogentry' => 'Yettubeddel izerfan n wemseqdac $1 seg $2 ar $3',
-'rightslogentry-autopromote' => 'yesnerna s uwurman seg $2 ar $3',
-'rightsnone' => '(ulaḥedd)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ɣaṛ asebter agi',
@@ -1930,10 +1931,6 @@ Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
 'activeusers-hidesysops' => 'Ffer inedbalen',
 'activeusers-noresult' => 'Ur yufi aseqdac.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Aɣmis n isnulfan n  imiḍanen n imseqdacen',
-'newuserlogpagetext' => 'Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Izerfan n igrawen n iseqdacen',
 'listgrouprights-summary' => 'Asebter agi yesɛa yiwen umuɣ n igrawen i sengelen deg wiki agi dɣa izerfan n wadduf i qqenen.
@@ -2065,6 +2062,8 @@ $UNWATCHURL
 
 Tuɣalin d tadhelt :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yettwaxleq',
+'changed' => 'yettubeddel',
 
 # Delete
 'deletepage' => 'Mḥu asebter',
@@ -3004,6 +3003,9 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 # Special:Tags
 'tag-filter' => 'Astay n [[Special:Tags|ticraḍ]] :',
 
+# New logging system
+'rightsnone' => '(ulaḥedd)',
+
 # Feedback
 'feedback-subject' => 'Asentel :',
 'feedback-message' => 'Izen :',
index 0e46a18..7071b00 100644 (file)
@@ -975,6 +975,9 @@ $1",
 
 'grouppage-sysop' => '{{ns:project}}:Тхьэмадэхэр',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ',
+
 # User rights log
 'rightslog' => 'Хэтым пӀалъэ иӀэхэм я тхылъ',
 
@@ -1071,9 +1074,6 @@ $1",
 # Special:LinkSearch
 'linksearch' => 'КІуэцІ техьэпІэхэр',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(гупым и тхылъ)',
 
index d4b30c0..6bb3162 100644 (file)
@@ -141,6 +141,7 @@ $messages = array(
 'index-category' => 'نو انڈیکس صفحات',
 'noindex-category' => 'نو انڈیکس صفحات',
 'broken-file-category' => 'نس پھت صفحات',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'about' => 'تعارف',
 'article' => 'صفحۂ مشمول',
@@ -269,6 +270,7 @@ $1',
 [[Special:Version|version page]]',
 
 'ok' => 'ٹھیک شیر',
+'pagetitle' => '$1 - {{SITENAME}}',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => '‘‘$1’’ نقل کاردو',
 'youhavenewmessages' => 'تہ بچے ای $1 شیر۔ ($2)',
@@ -276,6 +278,7 @@ $1',
 'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـراری فـرق',
 'youhavenewmessagesmulti' => 'ء$1 تہ بچے نوغ نوغ پیغامات شینی',
 'editsection' => 'ترمیم',
+'editsection-brackets' => '[$1]',
 'editold' => 'ترمیم',
 'viewsourceold' => 'مآخذو لوڑے',
 'editlink' => 'تدوین کورے',
@@ -293,6 +296,8 @@ $1',
 'site-atom-feed' => '$1 اٹوم فیڈ',
 'page-rss-feed' => '$1 آر ایس ایس فیڈ',
 'page-atom-feed' => '$1 آٹوم فیڈ',
+'feed-atom' => 'اٹوم',
+'feed-rss' => 'آر ایس ایس',
 'red-link-title' => '
 $1 (صفحہ موجود نیکی)',
 
@@ -592,17 +597,23 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'history-show-deleted' => 'صرفی حذف شدہ',
 'histfirst' => 'قدیم ترین',
 'histlast' => 'تازہ ترین',
+'historyempty' => '(خالی)',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 تا $2',
 
 # Revision deletion
 'rev-delundel' => 'پشاوے/کھوشتاوے',
+'rev-showdeleted' => 'پشاوے',
 'revdelete-radio-set' => 'Yes/دی',
+'revdelete-radio-unset' => 'نو',
 'revdel-restore' => 'ظاہریتو تبدیل کورے',
 'revdel-restore-deleted' => 'حذف شدہ رویژنز',
 'revdel-restore-visible' => 'ویزیبل رویژنز',
 
+# History merging
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
+
 # Merge log
 'revertmerge' => 'غیر ضم',
 
@@ -669,6 +680,7 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'username' => 'ممبارو نم',
 'uid' => 'ممبارو لمبار:',
 'prefs-memberingroups' => '{{PLURAL:$1|گروہ|گروہاں}} رُکن:',
+'prefs-registration-date-time' => '$1',
 'yourrealname' => '* اصلی نم',
 'yournick' => 'دسخط',
 'badsig' => "ناقص خام دسخط.
@@ -689,9 +701,11 @@ HTML tags لوڑے.',",
 'right-upload' => 'فائل انځاوے',
 'right-delete' => 'صفحان ضائع کورے',
 
+# Special:Log/newusers
+'newuserlogpage' => 'نوشتۂ آمد صارف',
+
 # User rights log
 'rightslog' => 'یوزروت مختص شدہ حقوق',
-'rightsnone' => '(نو)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ھیہ صفحا ایڈیٹنگ کورے',
@@ -839,9 +853,6 @@ HTML tags لوڑے.',",
 'linksearch-ok' => 'Search/تلاش',
 'linksearch-line' => '$1 مربوط شیر $2 ری',
 
-# Special:Log/newusers
-'newuserlogpage' => 'نوشتۂ آمد صارف',
-
 # Special:ListGroupRights
 'listgrouprights-members' => 'ممبارانن فھرست',
 
@@ -1131,6 +1142,9 @@ HTML tags لوڑے.',",
 # Special:ComparePages
 'compare-page1' => 'صفحہ 1',
 
+# New logging system
+'rightsnone' => '(نو)',
+
 # Feedback
 'feedback-message' => 'پیغام',
 
index 90ae02b..f63ef54 100644 (file)
@@ -905,11 +905,12 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-delete' => 'Pelu bıestere',
 'right-undelete' => 'Esterıtena na pele peyser bıcê',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Qeydê karberiê newey',
+
 # User rights log
 'rightslog' => 'Qeydê hequnê karberi',
 'rightslogtext' => 'No jü qeydê vurnaisê hequnê karberio.',
-'rightslogentry' => 'selahiyetê $1i $2 ra vurniya be $3i',
-'rightsnone' => '(qet jü)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'na pele bıwane',
@@ -989,7 +990,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'watchthisupload' => 'Na dosya de şêr ke',
 
 'license' => 'Lisans:',
-'license-header' => 'Lisanskerdene',
+'license-header' => 'Lisansdais',
 
 # Special:ListFiles
 'imgfile' => 'dosya',
@@ -1007,7 +1008,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'filehist' => 'Tarixê dosya',
 'filehist-help' => "Serba diyaena viartê dosya tarixê ke qısımê tarix/zeman'i derê inu bıteqne.",
 'filehist-deleteall' => 'Pêrune bıestere',
-'filehist-deleteone' => 'bıestere',
+'filehist-deleteone' => 'bestere',
 'filehist-revert' => 'raçarne',
 'filehist-current' => 'nıkaên',
 'filehist-datetime' => 'Tarix/Dem',
@@ -1038,7 +1039,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'filedelete' => 'Bıestere $1',
 'filedelete-legend' => 'Dosya bıestere',
 'filedelete-comment' => 'Sebeb:',
-'filedelete-submit' => 'Bıestere',
+'filedelete-submit' => 'Bestere',
 'filedelete-otherreason' => 'Sebebo bin/ilaweki:',
 'filedelete-reason-otherlist' => 'Sebebo bin',
 'filedelete-edit-reasonlist' => 'Sebebunê esterıtene bıvurne',
@@ -1062,7 +1063,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'disambiguationspage' => 'Template:vuriyaisê maney',
 
 'brokenredirects-edit' => 'bıvurne',
-'brokenredirects-delete' => 'bıestere',
+'brokenredirects-delete' => 'bestere',
 
 'withoutinterwiki-legend' => 'Verbend',
 'withoutinterwiki-submit' => 'Bıasne',
@@ -1127,9 +1128,6 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 # Special:ActiveUsers
 'activeusers' => 'Lista karberunê fealu',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Qeydê karberiê newey',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Kome',
 'listgrouprights-rights' => 'Heqi',
@@ -1167,9 +1165,11 @@ Nara dıme, vurnaisê na pele u pela hurênaisê dawa alaqedare ita bena lista,
 'watching' => 'Şêr ke…',
 'unwatching' => 'Şêr meke…',
 
+'changed' => 'vuriya',
+
 # Delete
 'deletepage' => 'Pele bıestere',
-'delete-legend' => 'Bıestere',
+'delete-legend' => 'Bestere',
 'confirmdeletetext' => 'Tı hawo kena ke jü pele be tarixê dae pêro bıne ra bıesterê.
 Eke ferqê neticê na kerdene de bena u no kar be gorê [[{{MediaWiki:Policy-url}}|qeydunê esterıtene]] beno, wa gurêy tesdiq ke.',
 'actioncomplete' => 'Kar bi temam',
@@ -1603,4 +1603,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'compare-page1' => 'Pele 1',
 'compare-page2' => 'Pele 2',
 
+# New logging system
+'rightsnone' => '(qet jü)',
+
 );
index 0c3ef92..edc0a10 100644 (file)
@@ -1303,11 +1303,13 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 'right-userrights-interwiki' => 'باسقا ۇىيكىيلەردەگى قاتىسۋشىلاردىڭ قۇقىقتارىن وڭدەۋ',
 'right-siteadmin' => 'دەرەكقوردى قۇلىپتاۋ جانە قۇلىپتاۋىن ٴوشىرۋ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'تىركەلۋ جۋرنالى',
+'newuserlogpagetext' => 'بۇل قاتىسۋشى تىركەلگى جاساۋ جۋرنالى',
+
 # User rights log
 'rightslog' => 'قاتىسۋشى قۇقىقتارى جۋرنالى',
 'rightslogtext' => 'بۇل قاتىسۋشى قۇقىقتارىن وزگەرتۋ جۋرنالى.',
-'rightslogentry' => '$1 كىرگەن توپتارىن $2 دەگەننەن $3 دەگەنگە وزگەرتتى',
-'rightsnone' => '(ەشقانداي)',
 
 # Recent changes
 'nchanges' => '$1 وزگەرىس',
@@ -1682,10 +1684,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'كورسەت',
 'listusers-noresult' => 'قاتىسۋشى تابىلعان جوق.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'تىركەلۋ جۋرنالى',
-'newuserlogpagetext' => 'بۇل قاتىسۋشى تىركەلگى جاساۋ جۋرنالى',
-
 # Special:ListGroupRights
 'listgrouprights' => 'قاتىسۋشى توبى قۇقىقتارى',
 'listgrouprights-summary' => 'كەلەسى تىزىمدە بۇل ۋىيكىيدە تاعايىندالعان قاتىسۋشى قۇقىقتارى (بايلانىستى قاتىناۋ قۇقىقتارىمەن بىرگە) كورسەتىلەدى.
@@ -1777,6 +1775,8 @@ $NEWPAGE
 
 سىن-پىكىر بەرۋ جانە بىلايعى جاردەم الۋ ٴۇشىن:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'باستادى',
+'changed' => 'وزگەرتتى',
 
 # Delete
 'deletepage' => 'بەتتى جويۋ',
@@ -2896,5 +2896,6 @@ $5
 # New logging system
 'revdelete-restricted' => 'اكىمشىلەرگە تىيىمدار قولدادى',
 'revdelete-unrestricted' => 'اكىمشىلەردەن تىيىمداردى الاستادى',
+'rightsnone' => '(ەشقانداي)',
 
 );
index f89af4e..b015c83 100644 (file)
@@ -1491,11 +1491,13 @@ $3 келтірілген себебі: ''$2''",
 'right-userrights-interwiki' => 'Басқа үикилердегі қатысушылардың құқықтарын өңдеу',
 'right-siteadmin' => 'Дерекқорды құлыптау және құлыптауын өшіру',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Тіркелу журналы',
+'newuserlogpagetext' => 'Бұл қатысушы тіркелгі жасау журналы',
+
 # User rights log
 'rightslog' => 'Қатысушы құқықтары журналы',
 'rightslogtext' => 'Бұл қатысушы құқықтарын өзгерту журналы.',
-'rightslogentry' => '$1 кірген топтарын $2 дегеннен $3 дегенге өзгертті',
-'rightsnone' => '(ешқандай)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Осы бетті оқу',
@@ -1916,10 +1918,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Көрсет',
 'listusers-noresult' => 'Қатысушы табылған жоқ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Тіркелу журналы',
-'newuserlogpagetext' => 'Бұл қатысушы тіркелгі жасау журналы',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Қатысушы тобы құқықтары',
 'listgrouprights-summary' => 'Келесі тізімде бұл уикиде тағайындалған қатысушы құқықтары (байланысты қатынау құқықтарымен бірге) көрсетіледі.
@@ -2014,6 +2012,8 @@ $NEWPAGE
 
 Сын-пікір беру және былайғы жәрдем алу үшін:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'бастады',
+'changed' => 'өзгертті',
 
 # Delete
 'deletepage' => 'Бетті жою',
@@ -3181,6 +3181,7 @@ $5
 'logentry-newusers-create2' => '$1 $3 деген аккаунт тіркеді',
 'logentry-newusers-autocreate' => '$1 аккаунты автоматты түрде тіркелді',
 'newuserlog-byemail' => 'Құпия сөз e-mail арқылы жіберілді',
+'rightsnone' => '(ешқандай)',
 
 # Search suggestions
 'searchsuggest-search' => 'Іздеу',
index 52cc6e8..d1c1562 100644 (file)
@@ -1266,11 +1266,13 @@ Eger bunı jetistirwdi tañdasañız, bul tüzetwiñizdiñ awtorlığın anıqta
 'right-userrights-interwiki' => 'Basqa üïkïlerdegi qatıswşılardıñ quqıqtarın öñdew',
 'right-siteadmin' => 'Derekqordı qulıptaw jäne qulıptawın öşirw',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Tirkelw jwrnalı',
+'newuserlogpagetext' => 'Bul qatıswşı tirkelgi jasaw jwrnalı',
+
 # User rights log
 'rightslog' => 'Qatıswşı quqıqtarı jwrnalı',
 'rightslogtext' => 'Bul qatıswşı quqıqtarın özgertw jwrnalı.',
-'rightslogentry' => '$1 kirgen toptarın $2 degennen $3 degenge özgertti',
-'rightsnone' => '(eşqandaý)',
 
 # Recent changes
 'nchanges' => '$1 özgeris',
@@ -1645,10 +1647,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Körset',
 'listusers-noresult' => 'Qatıswşı tabılğan joq.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Tirkelw jwrnalı',
-'newuserlogpagetext' => 'Bul qatıswşı tirkelgi jasaw jwrnalı',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Qatıswşı tobı quqıqtarı',
 'listgrouprights-summary' => 'Kelesi tizimde bul wïkïde tağaýındalğan qatıswşı quqıqtarı (baýlanıstı qatınaw quqıqtarımen birge) körsetiledi.
@@ -1740,6 +1738,8 @@ Baqılaw tizimiñizdiñ baptawlırın özgertw üşin, mında kelip-ketiñiz:
 
 Sın-pikir berw jäne bılaýğı järdem alw üşin:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'bastadı',
+'changed' => 'özgertti',
 
 # Delete
 'deletepage' => 'Betti joyw',
@@ -2855,5 +2855,6 @@ Swretter tolıq ajıratılımdığımen körsetiledi, basqa faýl türlerine qat
 # New logging system
 'revdelete-restricted' => 'äkimşilerge tïımdar qoldadı',
 'revdelete-unrestricted' => 'äkimşilerden tïımdardı alastadı',
+'rightsnone' => '(eşqandaý)',
 
 );
index 44b881c..d33d200 100644 (file)
@@ -1557,15 +1557,13 @@ $1",
 'right-sendemail' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើដទៃ',
 'right-passwordreset' => 'មើលអ៊ីមែលសំរាប់កំណត់ពាក្យសំងាត់ឡើងវិញ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'កំណត់ហេតុនៃការបង្កើតគណនី',
+'newuserlogpagetext' => 'នេះជាកំណត់ហេតុនៃការបង្កើតអ្នកប្រើប្រាស់។',
+
 # User rights log
 'rightslog' => 'កំណត់ហេតុនៃការប្តូរសិទ្ធិអ្នកប្រើប្រាស់',
 'rightslogtext' => 'នេះ​ជា​កំណត់ហេតុនៃបំលាស់ប្ដូរចំពោះកាប្ដូរក្រុមសមាជិកភាព​របស់​អ្នកប្រើប្រាស់។',
-'rightslogentry' => 'បានប្ដូរក្រុមសមាជិកភាពសម្រាប់ $1 ពី $2 ទៅ $3',
-'rightslogentry-autopromote' => 'ត្រូវបានតំលើងតំណែងដោយស្វ័យប្រវត្តិពី $2 ទៅជា $3',
-'logentry-rights-rights' => '$1 បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3 ពី $4 ទៅជា $5',
-'logentry-rights-rights-legacy' => '$1បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3',
-'logentry-rights-autopromote' => '$1 ត្រូវបានតំលើងសមាជិកភាពពី $4 ជា $5',
-'rightsnone' => '(ទទេ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'អានទំព័រនេះ',
@@ -2175,10 +2173,6 @@ $1',
 'activeusers-hidesysops' => 'លាក់អ្នកអភិបាល',
 'activeusers-noresult' => 'អ្នកប្រើប្រាស់​រកមិនឃើញ​។​',
 
-# Special:Log/newusers
-'newuserlogpage' => 'កំណត់ហេតុនៃការបង្កើតគណនី',
-'newuserlogpagetext' => 'នេះជាកំណត់ហេតុនៃការបង្កើតអ្នកប្រើប្រាស់។',
-
 # Special:ListGroupRights
 'listgrouprights' => 'សិទ្ធិនិងក្រុមអ្នកប្រើប្រាស់',
 'listgrouprights-summary' => 'ខាងក្រោមនេះជាបញ្ជីរាយឈ្មោះក្រុមអ្នកប្រើប្រាស់ដែលបានកំណត់ជាមួយនឹងសិទ្ធិរបស់គេនៅលើវិគីនេះ។ មាន[[{{MediaWiki:Listgrouprights-helppage}}|ព័ត៌មានបន្ថែម]] អំពីសិទ្ធិផ្ទាល់ខ្លួន។',
@@ -2309,6 +2303,8 @@ $UNWATCHURL
 
 មតិ​យោបល់​និងជំនួយបន្ថែម ៖
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'បានបង្កើត',
+'changed' => 'បានផ្លាស់ប្តូរ',
 
 # Delete
 'deletepage' => 'លុបទំព័រចោល',
@@ -3649,6 +3645,10 @@ $5
 'logentry-newusers-create2' => ' $3 បានបង្កើតគណនីអ្នកប្រើប្រាស់ $1',
 'logentry-newusers-autocreate' => 'គណនី $1 ត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិ',
 'newuserlog-byemail' => 'ពាក្យសំងាត់ត្រូវបានផ្ញើតាមអ៊ីមែល',
+'logentry-rights-rights' => '$1 បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3 ពី $4 ទៅជា $5',
+'logentry-rights-rights-legacy' => '$1បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3',
+'logentry-rights-autopromote' => '$1 ត្រូវបានតំលើងសមាជិកភាពពី $4 ជា $5',
+'rightsnone' => '(ទទេ)',
 
 # Feedback
 'feedback-subject' => 'កម្មវត្ថុ ៖',
index 472a1ff..b50820f 100644 (file)
@@ -1026,12 +1026,12 @@ $2',
 'right-sendemail' => 'ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇಮೇಲ್ ಕಳುಹಿಸಿ',
 'right-passwordreset' => 'ಪಾಸ್ವರ್ಡ್ ಮತ್ತೆ ಜೋಡಿಸಲ್ಪಟ್ಟ  ಇಮೇಲ್ ಗಳನ್ನು ವೀಕ್ಷಿಸಿ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ಸದಸ್ಯತ್ವ ಸೃಷ್ಟಿಗಳ ದಾಖಲೆ',
+
 # User rights log
 'rightslog' => 'ಸದಸ್ಯರ ಹಕ್ಕುಗಳ ದಾಖಲೆಗಳು',
 'rightslogtext' => 'ಇದು ಬಳಕೆದಾರ ಹಕ್ಕುಗಳ ಬದಲಾವಣೆಗಳ ದಾಖಲೆ.',
-'rightslogentry' => '$1 ಅವರ ಗುಂಪು ಸದಸ್ಯತ್ವವನ್ನು $2 ಇಂದ $3 ಗೆ ಬದಲಾಯಿಸಲಾಯಿತು',
-'rightslogentry-autopromote' => 'ಸ್ವಯಂಚಾಲಿತವಾಗಿ $2 ರಿಂದ $3 ಬಡ್ತಿ ನೀಡಲಾಯಿತು',
-'rightsnone' => '(ಯಾವೂ ಇಲ್ಲ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ಈ ಪುಟವನ್ನು ಓದಿ',
@@ -1426,9 +1426,6 @@ $2',
 'activeusers' => 'ಸಕ್ರಿಯ ಸದಸ್ಯರ ಪಟ್ಟಿ',
 'activeusers-noresult' => 'ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ಸದಸ್ಯತ್ವ ಸೃಷ್ಟಿಗಳ ದಾಖಲೆ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ಬಳಕೆದಾರ ಗುಂಪು ಹಕ್ಕುಗಳು',
 'listgrouprights-summary' => 'ಈ ವಿಕಿಯಲ್ಲಿ ಪ್ರಚಲಿತವಾಗಿರುವ ಬಳಕೆದಾರ ಗುಂಪುಗಳು ಮತ್ತು ಆ ಗುಂಪುಗಳಿಗೆ ಅನ್ವಯಿಸುವ ಹಕ್ಕುಗಳು ಈ ಕೆಳಗಿನಂತಿದೆ.',
@@ -1490,6 +1487,8 @@ $2',
 'enotif_impersonal_salutation' => '{{SITENAME}} ಸದಸ್ಯ',
 'enotif_lastvisited' => 'ನಿಮ್ಮ ಕಳೆದ ಭೇಟಿಯ ನಂತರದ ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳಿಗೆ $1 ನೋಡಿ.',
 'enotif_anon_editor' => 'ಅನಾಮಧೇಯ ಸದಸ್ಯ $1',
+'created' => 'ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ',
+'changed' => 'ಬದಲಾಯಿಸಲಾಗಿದೆ',
 
 # Delete
 'deletepage' => 'ಪುಟವನ್ನು ಅಳಿಸಿ',
@@ -2178,6 +2177,7 @@ $5
 # New logging system
 'revdelete-restricted' => 'ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು',
 'revdelete-unrestricted' => 'ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು',
+'rightsnone' => '(ಯಾವೂ ಇಲ್ಲ)',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|ಕ್ಷಣ|ಕ್ಷಣಗಳು}}',
index 33be108..b6d30c2 100644 (file)
@@ -26,6 +26,7 @@
  * @author Kaganer
  * @author Klutzy
  * @author Kwj2772
+ * @author LFM
  * @author Mintz0223
  * @author Pi.C.Noizecehx
  * @author PuzzletChung
@@ -477,6 +478,7 @@ $messages = array(
 'newwindow' => '(새 창으로 열림)',
 'cancel' => '취소',
 'moredotdotdot' => '더 보기...',
+'morenotlisted' => '목록에 없는 항목 더 보기...',
 'mypage' => '문서',
 'mytalk' => '토론',
 'anontalk' => '익명 사용자 토론',
@@ -807,10 +809,10 @@ $2',
 철자가 맞는지 확인하세요.',
 'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
 'login-userblocked' => '이 사용자는 차단되었습니다. 로그인할 수 없습니다.',
-'wrongpassword' => '입력한 비밀번호가 다릅니다.
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ ì£¼세요.',
+'wrongpassword' => '입력한 비밀번호가 잘못되었습니다.
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'wrongpasswordempty' => '비밀번호를 입력하지 않았습니다.
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ ì£¼세요.',
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'passwordtooshort' => '비밀번호는 $1 문자 이상이어야 합니다.',
 'password-name-match' => '비밀번호는 사용자 이름과 반드시 달라야 합니다.',
 'password-login-forbidden' => '이 사용자 이름과 비밀번호는 사용할 수 없습니다.',
@@ -861,6 +863,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'PHP의 mail() 함수에서 알 수 없는 오류가 발생했습니다.',
 'user-mail-no-addy' => '받는이의 이메일 주소가 없으면 이메일을 보낼 수 없습니다.',
+'user-mail-no-body' => '비어 있거나 지나치게 짧은 본문으로 이메일을 보내려고 했습니다.',
 
 # Change password dialog
 'resetpass' => '비밀번호 바꾸기',
@@ -957,7 +960,7 @@ $2
 'showlivepreview' => '실시간 미리 보기',
 'showdiff' => '차이 보기',
 'anoneditwarning' => "'''경고''': 로그인하고 있지 않습니다.
-당신의 IP 주소가 문서 역사에 남게 됩니다.",
+IP 주소가 문서 역사에 남게 됩니다.",
 'anonpreviewwarning' => "'''로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
 'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다.
 이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
@@ -1133,9 +1136,9 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'edit-gone-missing' => '문서를 저장하지 못했습니다.
 문서가 삭제된 것 같습니다.',
 'edit-conflict' => '편집 충돌.',
-'edit-no-change' => '문ì\84\9cì\97\90 ì\95\84무ë\9f° ë³\80í\99\94ê°\80 ì\97\86기 ë\95\8c문ì\97\90 ë\8b¹ì\8b ì\9d\98 편집은 무시되었습니다.',
+'edit-no-change' => '문ì\84\9cì\97\90 ì\96´ë\96 í\95\9c ë°\94ë\80\9cë\8f\84 ì\97\86기 ë\95\8c문ì\97\90 편집은 무시되었습니다.',
 'edit-already-exists' => '새 문서를 만들 수 없습니다.
-그 문서는 이미 존재합니다.',
+문서가 이미 존재합니다.',
 'defaultmessagetext' => '기본 메세지 내용',
 'content-failed-to-parse' => '$1 모델에 대한 $2 내용을 구문 분석하는 데 실패했습니다: $3',
 'invalid-content-data' => '잘못된 내용 데이터입니다',
@@ -1421,7 +1424,7 @@ $1",
 'powersearch-field' => '찾기',
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두 선택',
-'powersearch-togglenone' => '모두 선택하지 않음',
+'powersearch-togglenone' => '음',
 'search-external' => '바깥 찾기',
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
@@ -1496,7 +1499,7 @@ $1",
 'timezoneregion-arctic' => '북극',
 'timezoneregion-asia' => '아시아',
 'timezoneregion-atlantic' => '대서양',
-'timezoneregion-australia' => '오스트레일리아',
+'timezoneregion-australia' => '호주',
 'timezoneregion-europe' => '유럽',
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
@@ -1539,7 +1542,7 @@ HTML 태그를 확인하세요.',
 실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
 'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
 'prefs-help-email-others' => '자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
-이 경우에도 당신의 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
+이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
 'prefs-help-email-required' => '이메일 주소가 필요합니다.',
 'prefs-info' => '기본 정보',
 'prefs-i18n' => '언어 설정',
@@ -1668,15 +1671,13 @@ HTML 태그를 확인하세요.',
 'right-sendemail' => '다른 사용자에게 이메일 보내기',
 'right-passwordreset' => '비밀번호 재설정 이메일을 보기',
 
+# Special:Log/newusers
+'newuserlogpage' => '사용자 등록 기록',
+'newuserlogpagetext' => '사용자 등록 기록입니다.',
+
 # User rights log
 'rightslog' => '사용자 권한 기록',
 'rightslogtext' => '사용자 권한 조정 기록입니다.',
-'rightslogentry' => '사용자가 $1의 권한을 $2에서 $3으로 바꾸었습니다',
-'rightslogentry-autopromote' => '사용자의 권한이 자동적으로 $2에서 $3으로 바뀌었습니다.',
-'logentry-rights-rights' => '$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 바꾸었습니다.',
-'logentry-rights-rights-legacy' => '$1 사용자가 $3 사용자의 권한을 바꾸었습니다.',
-'logentry-rights-autopromote' => '$1 사용자의 권한이 자동적으로 $4에서 $5으로 바뀌었습니다.',
-'rightsnone' => '(없음)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '이 문서를 읽기',
@@ -1980,7 +1981,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'invalid-chunk-offset' => '청크 오프셋이 잘못되었습니다.',
 
 # img_auth script messages
-'img-auth-accessdenied' => '접근 거부됨',
+'img-auth-accessdenied' => '접근 거부됨',
 'img-auth-nopathinfo' => 'PATH_INFO를 잃었습니다.
 서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.
 이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.
@@ -2340,10 +2341,6 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'activeusers-hidesysops' => '관리자를 숨기기',
 'activeusers-noresult' => '사용자가 없습니다.',
 
-# Special:Log/newusers
-'newuserlogpage' => '사용자 등록 기록',
-'newuserlogpagetext' => '사용자 등록 기록입니다.',
-
 # Special:ListGroupRights
 'listgrouprights' => '사용자 권한 목록',
 'listgrouprights-summary' => '다음은 이 위키에서 설정된 사용자 권한 그룹의 목록입니다.
@@ -2479,6 +2476,8 @@ $UNWATCHURL
 
 도움을 얻거나 피드백 하기:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '만들었',
+'changed' => '바꾸었',
 
 # Delete
 'deletepage' => '문서 삭제하기',
@@ -2551,6 +2550,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] 문서를 [[$2]] 문서로 이동함',
 'protect-badnamespace-title' => '보호할 수 없는 이름공간',
 'protect-badnamespace-text' => '이 이름공간에 있는 문서는 보호할 수 없습니다.',
+'protect-norestrictiontypes-text' => '이 문서는 제한 유형을 사용할 수 없음으로 보호할 수 없습니다.',
+'protect-norestrictiontypes-title' => '보호할 수 없는 문서',
 'protect-legend' => '보호 확인',
 'protectcomment' => '이유:',
 'protectexpiry' => '보호 기간:',
@@ -2567,9 +2568,9 @@ $UNWATCHURL
 'protect-cascadeon' => '다음 {{PLURAL:$1|문서}}에 연쇄적 보호가 작동하고 있어 그 문서에 속한 이 문서도 현재 보호됩니다.
 사용자는 이 문서의 보호 설정을 바꾸실 수 있지만 연쇄적 보호에는 영향을 주지 않습니다.',
 'protect-default' => '모든 사용자에게 허용',
-'protect-fallback' => '"$1" 권한 필요',
-'protect-level-autoconfirmed' => '등록된 사용자만 가능',
-'protect-level-sysop' => '관리자만 가능',
+'protect-fallback' => '"$1" 권한의 사용자만 허용',
+'protect-level-autoconfirmed' => '자동 인증된 사용자만 허용',
+'protect-level-sysop' => '관리자만 허용',
 'protect-summary-cascade' => '연쇄적',
 'protect-expiring' => '$1 (UTC)에 만료',
 'protect-expiring-local' => '$1에 해제',
@@ -2878,7 +2879,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
 넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
-참고ë¡\9c ì\83\88 ì \9c목ì\9c¼ë¡\9c ë\90\9c ë¬¸ì\84\9cê°\80 ì\9d´ë¯¸ ì\9e\88ì\9d\84 ë\95\8c, ë¹\84ì\96´ ì\9e\88ê±°ë\82\98 ë\84\98겨주기 ë¬¸ì\84\9cì\9d´ê³  ë¬¸ì\84\9c ì\97­ì\82¬ê°\80 ì\97\86ì\9d\84 ë\95\8cì\97\90ë§\8c ì\9d´ë\8f\99í\95\98ë©° ê·¸ë \87ì§\80 ì\95\8aì\9d\84 ê²½ì\9a°ì\97\90ë\8a\94 ì\9d´ë\8f\99í\95\98ì§\80 '''ì\95\8aì\8aµë\8b\88ë\8b¤'''.
+참고로 새 제목으로 된 문서가 이미 있을 때, 넘겨주기 문서이고 문서 역사가 없을 때에만 이동하며 그렇지 않을 경우에는 이동하지 '''않습니다'''.
 실수로 문서를 옮겼을 때 되돌릴 수는 있지만 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
@@ -3158,15 +3159,15 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Stylesheets
 'common.css' => '/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
-'standard.css' => '/* 이 CSS 설정은 모든 스탠다드 스킨에 적용됩니다 */',
-'nostalgia.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ë\85¸ì\8a¤í\85\94ì§\80ì\95\84 ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'cologneblue.css' => '/* 이 CSS 설정은 모든 쾰른 블루 스킨에 적용됩니다 */',
-'monobook.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ëª¨ë\85¸ë¶\81 ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'myskin.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ë§\88ì\9d´ì\8a¤í\82¨ ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'chick.css' => '/* 이 CSS 설정은 모든 치크 스킨에 적용됩니다 */',
-'simple.css' => '/* 이 CSS 설정은 모든 심플 스킨에 적용됩니다 */',
-'modern.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ëª¨ë\8d\98 ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'vector.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ë²¡í\84° ì\8a¤í\82¨ì\97\90 적용됩니다 */',
+'standard.css' => '/* 이 CSS 설정은 스탠다드 스킨을 사용하는 사용자에게 적용됩니다 */',
+'nostalgia.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ë\85¸ì\8a¤í\85\94ì§\80ì\95\84 ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'cologneblue.css' => '/* 이 CSS 설정은 쾰른 블루 스킨을 사용하는 사용자에게 적용됩니다 */',
+'monobook.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\85¸ë¶\81 ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'myskin.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ë§\88ì\9d´ì\8a¤í\82¨ ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'chick.css' => '/* 이 CSS 설정은 치크 스킨을 사용하는 사용자에게 적용됩니다 */',
+'simple.css' => '/* 이 CSS 설정은 심플 스킨을 사용하는 사용자에게 적용됩니다 */',
+'modern.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\8d\98 ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'vector.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ë²¡í\84° ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
 'print.css' => '/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */',
 'handheld.css' => '/* 이 CSS 설정은 $wgHandheldStyle에 설정한 스킨을 기반으로 한 휴대 기기에 적용됩니다 */',
 'noscript.css' => '/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */',
@@ -3248,6 +3249,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 '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' => '정보',
@@ -3256,6 +3258,10 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-protect-cascading' => '여기서의 연쇄적 보호',
 'pageinfo-protect-cascading-yes' => '예',
 'pageinfo-protect-cascading-from' => '연쇄적 보호한 기점',
+'pageinfo-category-info' => '분류 정보',
+'pageinfo-category-pages' => '문서 수',
+'pageinfo-category-subcats' => '하위 분류 수',
+'pageinfo-category-files' => '파일 개수',
 
 # Skin names
 'skinname-standard' => '클래식',
@@ -3339,10 +3345,12 @@ $1',
 'sp-newimages-showfrom' => '$1 $2부터 올라온 파일 목록 보기',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'seconds' => '$1초',
-'minutes' => '$1분',
-'hours' => '$1시간',
-'days' => '$1일',
+'seconds' => '{{PLURAL:$1|$1초}}',
+'minutes' => '{{PLURAL:$1|$1분}}',
+'hours' => '{{PLURAL:$1|$1시간}}',
+'days' => '{{PLURAL:$1|$1일}}',
+'months' => '{{PLURAL:$1|$1월}}',
+'years' => '{{PLURAL:$1|$1년}}',
 'ago' => '$1 전',
 'just-now' => '방금',
 
@@ -3535,7 +3543,7 @@ Variants for Chinese language
 'exif-lens' => '사용된 렌즈',
 'exif-serialnumber' => '카메라 일련 번호',
 'exif-cameraownername' => '카메라 소유자',
-'exif-label' => 'ë\9d¼ë²¨',
+'exif-label' => 'ë \88ì\9d´ë¸\94',
 'exif-datetimemetadata' => '메타데이터 최종 수정일',
 'exif-nickname' => '그림의 비공식적 이름',
 'exif-rating' => '평가 (5점 만점)',
@@ -3810,7 +3818,7 @@ Variants for Chinese language
 'confirmemail_success' => '이메일 주소가 인증되었습니다.
 이제 [[Special:UserLogin|로그인]]해서 위키를 사용하세요.',
 'confirmemail_loggedin' => '이메일 주소가 인증되었습니다.',
-'confirmemail_error' => '당신의 인증을 저장하는 도중 오류가 발생했습니다.',
+'confirmemail_error' => '인증을 저장하는 도중 오류가 발생했습니다.',
 'confirmemail_subject' => '{{SITENAME}} 이메일 주소 인증',
 'confirmemail_body' => '$1 IP 주소를 사용하는 사용자가
 {{SITENAME}}의 "$2" 계정에 이메일 인증 신청을 했습니다.
@@ -4119,10 +4127,14 @@ $5
 'logentry-newusers-create2' => '$1 사용자가 $3 사용자 계정을 만들었습니다.',
 'logentry-newusers-autocreate' => '$1 사용자 계정을 자동적으로 만들었습니다.',
 'newuserlog-byemail' => '이메일로 보낸 비밀번호',
+'logentry-rights-rights' => '$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 바꾸었습니다.',
+'logentry-rights-rights-legacy' => '$1 사용자가 $3 사용자의 권한을 바꾸었습니다.',
+'logentry-rights-autopromote' => '$1 사용자의 권한이 자동적으로 $4에서 $5으로 바뀌었습니다.',
+'rightsnone' => '(없음)',
 
 # Feedback
 'feedback-bugornote' => '기술적 문제를 구체적으로 설명할 준비가 되었다면 [$1 버그를 신고]해 주세요.
-아니면 아래에 쉬운 양식을 쓸 수 있습니다. 당신의 의견은 사용자 이름과 사용 중인 브라우저 정보와 함께 "[$3 $2]"에 남겨질 것입니다.',
+아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 "[$3 $2]"에 남겨질 것입니다.',
 'feedback-subject' => '제목:',
 'feedback-message' => '내용:',
 'feedback-cancel' => '취소',
@@ -4131,7 +4143,7 @@ $5
 'feedback-error1' => '오류: API 실행 결과를 인식할 수 없음',
 'feedback-error2' => '오류: 편집 실패',
 'feedback-error3' => '오류: API가 응답하지 않음',
-'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 당신의 의견을 남겼습니다.',
+'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 의견을 남겼습니다.',
 'feedback-close' => '완료',
 'feedback-bugcheck' => '감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.',
 'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
@@ -4172,6 +4184,7 @@ $5
 'api-error-ok-but-empty' => '내부 오류: 서버에서 응답이 없습니다.',
 'api-error-overwrite' => '이미 있는 파일을 덮어쓸 수 없습니다.',
 'api-error-stashfailed' => '내부 오류: 서버가 임시 파일을 저장하지 못했습니다.',
+'api-error-publishfailed' => '내부 오류: 서버가 임시 파일을 게시하지 못했습니다.',
 'api-error-timeout' => '서버가 제 시간 내에 응답하지 않았습니다.',
 'api-error-unclassified' => '알 수 없는 오류가 발생했습니다.',
 'api-error-unknown-code' => '알 수 없는 오류: "$1".',
index 833cdf9..6dd4651 100644 (file)
@@ -385,6 +385,9 @@ $messages = array(
 
 'grouppage-sysop' => '{{ns:project}}:Веськöтлiссез',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Уджкерисьö гижöтчан журнал',
+
 # User rights log
 'rightslog' => 'Уджкерисьлö позяннэз сьöртi журнал',
 
@@ -489,9 +492,6 @@ $messages = array(
 # Special:LinkSearch
 'linksearch' => 'Вики сайöдз ыстöттэз',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Уджкерисьö гижöтчан журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(уджкериссезлöн нимлёдз)',
 
index 4433a56..37955af 100644 (file)
@@ -1303,15 +1303,13 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'right-sendemail' => 'Башха къошулуучулагъа электрон почта джиберирге',
 'right-passwordreset' => "пароль тюрлениуле бла e-mail'леге къарау",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Къошулуучуланы регистрацияларыны журналы',
+'newuserlogpagetext' => 'Кёб болмай регистрация этген къошулуучуланы тизмеси.',
+
 # User rights log
 'rightslog' => 'Къошулуучуну хакъларыны журналы',
 'rightslogtext' => 'Бу къошулуучуну хакъларыны тюрлениуюню журналыды',
-'rightslogentry' => '$1-ни къауумлада членлиги $2-ден $3-ге тюрленнгенди',
-'rightslogentry-autopromote' => '$2 къауумдан автомат халда $3 къауумгъа кёчюрюлдю',
-'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа кёчюрдю',
-'logentry-rights-rights-legacy' => '$1 къошулуучу, $3 къушулуучуну къауумлада членлигин тюрлендирди',
-'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа кёчюрюлдю',
-'rightsnone' => '(джокъ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бу бетни окъуу',
@@ -1893,10 +1891,6 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'activeusers-hidesysops' => 'Администраторланы джашыр',
 'activeusers-noresult' => 'Къошлуучу табылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Къошулуучуланы регистрацияларыны журналы',
-'newuserlogpagetext' => 'Кёб болмай регистрация этген къошулуучуланы тизмеси.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Къошулуучуланы къауумуну хакълары',
 'listgrouprights-summary' => 'Тюбюндеги бу викиде танылгъан къошулуучу къауумланы эмда аланы хакъларыны тизмеси.
@@ -2019,6 +2013,8 @@ $UNWATCHURL
 
 Болушлукъ эм теджеуле ючюн:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'къуралды',
+'changed' => 'тюрленди',
 
 # Delete
 'deletepage' => 'Бетни кетер',
@@ -3525,6 +3521,10 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'logentry-newusers-create2' => '$1, $3 тергеу джазыуну къурады',
 'logentry-newusers-autocreate' => '$1 тергеу джазыу автомат халда къуралды',
 'newuserlog-byemail' => 'пароль электрон почта бла джиберилгенди',
+'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа кёчюрдю',
+'logentry-rights-rights-legacy' => '$1 къошулуучу, $3 къушулуучуну къауумлада членлигин тюрлендирди',
+'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа кёчюрюлдю',
+'rightsnone' => '(джокъ)',
 
 # Feedback
 'feedback-subject' => 'Тема:',
index ff5e3f7..1daf7bf 100644 (file)
@@ -243,7 +243,7 @@ $messages = array(
 'tog-externaleditor' => 'Nemm jedes Mol en extern Editor-Projramm (Doför bruchs de extra Enstellunge op Dingem Kompjutor. Dat es jet för Fachlück. Doh kanns De [//www.mediawiki.org/wiki/Manual:External_editors mieh drövver lässe])',
 'tog-externaldiff' => 'Nemm jedes Mol en extern Diff-Projramm (Doför bruchs de extra Enstellunge op Dingem Kompjutor. Dat es jet för Fachlück. Doh kanns De [//www.mediawiki.org/wiki/Manual:External_editors mieh drövver lässe])',
 'tog-showjumplinks' => '„Jangk-noh“-Links usjevve, die bei em „Zojang ohne Barrikad“ helfe dun',
-'tog-uselivepreview' => 'Dun de „Lebendije Vör-Aansich“ zeije (em Usprobierstadium, un bruch Java_Skripp)',
+'tog-uselivepreview' => 'Dun de „Lebendije Vör-Aansich“ zeije (bruch Java_Skripp)',
 'tog-forceeditsummary' => 'Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht',
 'tog-watchlisthideown' => 'Dun ming eije Änderunge <strong>nit</strong> en minger Oppassliss aanzeije',
 'tog-watchlisthidebots' => 'Dun jedes Mol dä Bots ehr Änderunge <strong>nit</strong> en minger Oppassliss zeije',
@@ -1623,15 +1623,13 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'right-sendemail' => '<i lang="en">e-mail</i> aan ander Metmaacher schecke',
 'right-passwordreset' => 'De <i lang="en">e-mails</i> vum Paßwoot neu Säze aanloore',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboch för neu Metmaachere',
+'newuserlogpagetext' => 'He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.',
+
 # User rights log
 'rightslog' => 'Logboch för Änderunge aan Metmaacher-Räächde',
 'rightslogtext' => 'Hee sin de Änderunge an Metmaacher ehre Räächde opjeliss. Op de Sigge üvver Metmaacher, Wiki-Köbesse, Bürrokrade, Stewards, un esu, kanns De nohlese, wat domet es.',
-'rightslogentry' => 'hät däm Metmaacher „$1“ sing Räächde vun „$2“ op „$3“ ömjestallt.',
-'rightslogentry-autopromote' => 'wood automattesch vun $2 zohm $3 jemaat.',
-'logentry-rights-rights' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.',
-'logentry-rights-rights-legacy' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.',
-'logentry-rights-autopromote' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.',
-'rightsnone' => '(nix)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'di Sigg ze lesse',
@@ -2335,10 +2333,6 @@ De Brauserprotokolle, di mer beim Söke aanjäjovve kann, sin: <code>$1</code>,
 'activeusers-hidesysops' => 'De Wiki_Köbesse fott lohße',
 'activeusers-noresult' => 'Kein Metmaacher jefonge.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboch för neu Metmaachere',
-'newuserlogpagetext' => 'He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Metmaacher-Jruppe-Rääschte',
 'listgrouprights-summary' => 'Hee kütt de Liss met dä Medmaacher-Jruppe, di dat Wiki hee kennt, un denne ier Rääschte.
@@ -2486,6 +2480,8 @@ $UNWATCHURL
 
 Do kanns hee noh Hölp luure:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'neu aanjelaht',
+'changed' => 'jeändert',
 
 # Delete
 'deletepage' => 'Schmieß die Sigg jetz fott',
@@ -4181,6 +4177,10 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.',
 'logentry-newusers-create2' => 'Dä $1 hät dä $3 als ene neue Metmaacher aanjelaat.',
 'logentry-newusers-autocreate' => 'Dä $1 wood automattesch als Metmaacher aanjelaat.',
 'newuserlog-byemail' => 'dat Passwood wood med de e-mail loßjescheck',
+'logentry-rights-rights' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.',
+'logentry-rights-rights-legacy' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.',
+'logentry-rights-autopromote' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.',
+'rightsnone' => '(nix)',
 
 # Feedback
 'feedback-bugornote' => 'Wann de em Bejreff bes, övver e täschesch Probleem ze schrieve, bes esu jood un donn dat als en [$1 Fählermäldong].
index 4085e3d..89bc6c9 100644 (file)
@@ -134,7 +134,7 @@ $messages = array(
 'tog-externaleditor' => 'Edîtorekî derve bike "standard" (ji yên bi ezmûn re, tercîhên taybet di komputerê de hewce ne)',
 'tog-externaldiff' => 'Birnemijekî derve biguherîne "standard" (ji yên bi ezmûn re, tercîhên taybet di komputerê de hewce ne)',
 'tog-showjumplinks' => 'Girêdanên "Here-berve" qebûlbike',
-'tog-uselivepreview' => 'Pêşdîtinê "zindî" bikarbîne (JavaScript pêwîst e) (ceribandinî)',
+'tog-uselivepreview' => 'Pêşdîtina "zindî" bi kar bîne (JavaScript pêwîst e) (ceribandinî)',
 'tog-forceeditsummary' => 'Hinga kurteyeke vala hate tomarkirin min agahdar bike',
 'tog-watchlisthideown' => 'Guherandinên min ji lîsteya şopandinê veşêre',
 'tog-watchlisthidebots' => "Guherandinên bot'an ji lîsteya şopandinê veşêre",
@@ -1001,11 +1001,12 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'right-userrights' => 'Hemû mafên bikarhêner biguherîne',
 'right-sendemail' => 'Ji bikarhênerên di re e-name bişîne',
 
+# Special:Log/newusers
+'newuserlogpage' => 'çêkirina hesabê nû',
+
 # User rights log
 'rightslog' => 'guhertina mafê bikarhêneriyê',
 'rightslogtext' => 'Ev guhertineke ji bo mafên bikarhêneriyê ye.',
-'rightslogentry' => 'grûpa bikarhêneran ji bo $1 ji $2 guherande $3',
-'rightsnone' => '(tune)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'vê rûpelê bixwîne',
@@ -1353,9 +1354,6 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 'activeusers-hidesysops' => 'Rêveberan veşêre',
 'activeusers-noresult' => 'Tu bikarhêner nehate dîtin.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'çêkirina hesabê nû',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mafên koma bikarhêner',
 'listgrouprights-group' => 'Kom',
@@ -1444,6 +1442,8 @@ Heke tu dixwazî lîsteya xwe ya şopandinê biguherînî, li
 
 Paşagahîdan û alîkaraya din:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'hate afirandin',
+'changed' => 'hate guhertin',
 
 # Delete
 'deletepage' => 'Rûpelê jê bibe',
@@ -2142,6 +2142,7 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'logentry-newusers-newusers' => '$1 hesabekî bikarhêneriyê çêkir',
 'logentry-newusers-create' => '$1 hesabekî bikarhêneriyê çêkir',
 'newuserlog-byemail' => 'şîfre bi e-nameyê hate şandin',
+'rightsnone' => '(tune)',
 
 # Feedback
 'feedback-subject' => 'Mijar:',
index 49e5d42..8a78f9c 100644 (file)
@@ -762,6 +762,9 @@ Nyns yw disqwedhys agas trigva ebost pan wrella devnydhyoryon erel kestava dhywg
 'right-upload' => 'Ughcarga restrennow',
 'right-delete' => 'Dilea folennow',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Covnoten formya acontow devnydhyer',
+
 # User rights log
 'rightslog' => 'Covnoten wiryow an devnydhyer',
 
@@ -954,9 +957,6 @@ Yma'n descrifans war y [$2 folen dhescrifans] disqwedhys a-woles.",
 # Special:ListUsers
 'listusers-submit' => 'Disqwedhes',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Covnoten formya acontow devnydhyer',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(rol esely)',
 
index fdbf8a4..a955942 100644 (file)
@@ -188,13 +188,13 @@ $messages = array(
 'vector-action-undelete' => 'Калыбына келтирүү',
 'vector-action-unprotect' => 'Коргоону өзгөртүү',
 'vector-simplesearch-preference' => 'Жөнөкөйлөнгөн издөө сабын күйгүзүү («Вектор» темасы гана)',
-'vector-view-create' => 'Ð\96аÑ\80аÑ\82Ñ\83Ñ\83',
+'vector-view-create' => 'Ð\91аÑ\88Ñ\82а',
 'vector-view-edit' => 'Оңдоо',
 'vector-view-history' => 'Тарыхын кароо',
 'vector-view-view' => 'Окуу',
 'vector-view-viewsource' => 'Кайнарын кароо',
 'actions' => 'Аракеттер',
-'namespaces' => 'Аталыш топтому',
+'namespaces' => 'Аталыштар мейкиндиги',
 'variants' => 'Варианттар',
 
 'navigation-heading' => 'Навигация менюсу',
@@ -207,14 +207,14 @@ $messages = array(
 'go' => 'Өтүү',
 'searcharticle' => 'Алга',
 'history' => 'Барактын тарыхы',
-'history_short' => 'Тарых',
+'history_short' => 'Тарыхы',
 'updatedmarker' => 'менин акыркы келүүмдөн кийин жаңыртылган',
 'printableversion' => 'Басма үлгүсү',
 'permalink' => 'Туруктуу шилтеме',
 'print' => 'Басып чыгаруу',
 'view' => 'Кароо',
 'edit' => 'Оңдоо',
-'create' => 'Ð\96аÑ\80аÑ\82Ñ\83Ñ\83',
+'create' => 'Ð\91аÑ\88Ñ\82а',
 'editthispage' => 'Бул баракты оңдоо',
 'create-this-page' => 'Бул баракты түзүү',
 'delete' => 'Өчүрүү',
@@ -273,12 +273,12 @@ $1',
 'disclaimerpage' => 'Project:Жоопкерчиликтен баш тартуу',
 'edithelp' => 'Өзгөртүү боюнча жардам',
 'edithelppage' => 'Help:Редакторлоо',
-'helppage' => 'Help:Мазмун',
+'helppage' => 'Help:Мазмуну',
 'mainpage' => 'Башбарак',
 'mainpage-description' => 'Башбарак',
 'policy-url' => 'Project:Эрежелер',
-'portal' => 'Ð\9aоомдоÑ\88Ñ\82Ñ\83к порталы',
-'portal-url' => 'Project:Ð\9aоомдоÑ\88Ñ\82Ñ\83к порталы',
+'portal' => 'Ð\96амааÑ\82 порталы',
+'portal-url' => 'Project:Ð\96амааÑ\82 порталы',
 'privacy' => 'Жашырындуулук саясаты',
 'privacypage' => 'Project:Жашырындуулук саясаты',
 
@@ -300,9 +300,9 @@ $1',
 'editold' => 'оңдоо',
 'viewsourceold' => 'баштапкы кодун көрүү',
 'editlink' => 'оңдоо',
-'viewsourcelink' => 'Ð\91айкоо',
+'viewsourcelink' => 'Ð\9aайнаÑ\80дÑ\8b ÐºÐ°Ñ\80а',
 'editsectionhint' => '$1 бөлүмүн оңдоо',
-'toc' => 'Мазмун',
+'toc' => 'Мазмуну',
 'showtoc' => 'көрсөтүү',
 'hidetoc' => 'жашыруу',
 'collapsible-collapse' => 'Түрүү',
@@ -694,7 +694,7 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'searchprofile-project-tooltip' => '$1 -де издөө',
 'searchprofile-images-tooltip' => 'Файлдарды издөө',
 'searchprofile-everything-tooltip' => 'Баардык барактардан (талкуу барактарды кошо) издөө',
-'searchprofile-advanced-tooltip' => 'Белгиленген аталыш топтомдорунан издөө',
+'searchprofile-advanced-tooltip' => 'Белгиленген аталыш мейкиндиктеринде издөө',
 'search-result-size' => '$1 ({{PLURAL:$2|1 сөз|$2 сөз}})',
 'search-result-category-size' => '{{PLURAL:$1|1 мүчө|$1 мүчө}} ({{PLURAL:$2|1 көмөк категория|$2 көмөк категория}}, {{PLURAL:$3|1 файл|$3 файл}})',
 'search-result-score' => 'Релеванттуулук: $1%',
@@ -872,8 +872,8 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'right-suppressionlog' => 'Жеке журналдарды көрүү',
 'right-userrights' => 'Бүт катышуучулардын укуктарын оңдоо',
 
-# User rights log
-'rightsnone' => '(жок)',
+# Special:Log/newusers
+'newuserlogpage' => 'Катышуучулардын каттоо журналы',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бул баракты окуу',
@@ -908,7 +908,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'rcshowhidemine' => 'Оңдоолорумду $1',
 'rclinks' => 'Соңку $2 күндө жасалган акыркы $1 өзгөртүүлөрдү көрсөтүү<br />$3',
 'diff' => 'айырма',
-'hist' => 'тарых',
+'hist' => 'тарыхы',
 'hide' => 'Жашыруу',
 'show' => 'Көрсөтүү',
 'minoreditletter' => 'м',
@@ -921,7 +921,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 # Recent changes linked
 'recentchangeslinked' => 'Тиешелүү өзгөрүүлөр',
 'recentchangeslinked-feed' => 'Тиешелүү өзгөрүүлөр',
-'recentchangeslinked-toolbox' => 'ТиеÑ\88елүү өзгөрүүлөр',
+'recentchangeslinked-toolbox' => 'Ð\91айланÑ\8bÑ\88Ñ\82Ñ\83Ñ\83 өзгөрүүлөр',
 'recentchangeslinked-title' => '"$1" үчүн тийиштүү өзгөртүүлөр',
 'recentchangeslinked-noresult' => 'Берилген мөөнөттө шилтемеленген барактарда өзгөртүү жок.',
 'recentchangeslinked-summary' => 'Бул көрсөтүлгөн (же көрсөтүлгөн категорияга кирген) барактан шилтемеленген барактардагы жакын арада жасалган өзгөрүүлөрдүн тизмеси.
@@ -1105,9 +1105,6 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'activeusers-hidesysops' => 'Администраторлорду жашыруу',
 'activeusers-noresult' => 'Катышуучулар табылган жок.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Катышуучулардын каттоо журналы',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Топ',
 'listgrouprights-rights' => 'Укуктар',
@@ -1136,6 +1133,9 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'wlshowlast' => 'Соңку $1 саат $2 күн $3 көрсөтүү.',
 'watchlist-options' => 'Көзөмөл тизменин ырастоолору',
 
+'created' => 'түзүлдү',
+'changed' => 'өзгөртүлдү',
+
 # Delete
 'deletepage' => 'Баракты өчүрүү',
 'confirm' => 'Аныктоо',
@@ -1241,7 +1241,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'blocklink' => 'бөгөттө',
 'unblocklink' => 'бөгөттөн чыгар',
 'change-blocklink' => 'бөгөттү өзгөрт',
-'contribslink' => 'салым',
+'contribslink' => 'салымдары',
 'emaillink' => 'кат жиберүү',
 'blocklogpage' => 'Тосмолоолордун журналы',
 'blocklogentry' => '[[$1]] тосмолонду, тосмолоо мөөнөтү: $2 $3',
@@ -1356,7 +1356,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'tooltip-pt-mycontris' => 'Салымдарыңыздын тизмеси',
 'tooltip-pt-login' => 'Сизге системада катталууга сунуш кылынат, бирок милдеттүү эмес',
 'tooltip-pt-logout' => 'Иш сеансын аяктоо',
-'tooltip-ca-talk' => 'Барактын мазмуну боюнча талкуулоо',
+'tooltip-ca-talk' => 'Барактын мазмунун талкуулоо',
 'tooltip-ca-edit' => 'Сиз бул баракты оңдой аласыз. Кичи пейилдикке, сактоодон мурда алдын ала көрсөтүү баскычын колдонуңуз.',
 'tooltip-ca-addsection' => 'Жаңы бөлүмдү жаратуу',
 'tooltip-ca-viewsource' => 'Бул барак корголгон.
@@ -1752,6 +1752,7 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'logentry-newusers-create2' => '$1 эсеп жазуусун жаратты',
 'logentry-newusers-autocreate' => 'Автоматтуу түрдө $1 эсеп жазуусу жаратылды',
 'newuserlog-byemail' => 'сырсөз эл. почта аркылуу жөнөтүлдү',
+'rightsnone' => '(жок)',
 
 # Feedback
 'feedback-subject' => 'Тема:',
index 3a5f9f2..a5f9dd7 100644 (file)
@@ -1036,10 +1036,13 @@ Si vis id dare, opera tua tibi ascribentur.',
 'right-userrights-interwiki' => 'Potestates usorum aliis in vicis recensere',
 'right-siteadmin' => 'Basem datorum obstruere vel deobstruere',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Index rationum novarum creatarum',
+'newuserlogpagetext' => 'Hic est index rationum novarum creatarum.',
+
 # User rights log
 'rightslog' => 'Index mutationum iuribus usorum',
 'rightslogtext' => 'Haec est index mutationum iuribus usorum.',
-'rightsnone' => '(nullus)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'hanc paginam legere',
@@ -1418,10 +1421,6 @@ Vide etiam [[Special:WantedCategories|categorias desideratas]].',
 'activeusers-hidesysops' => 'Celare magistratus',
 'activeusers-noresult' => 'Nullus usor inventus.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Index rationum novarum creatarum',
-'newuserlogpagetext' => 'Hic est index rationum novarum creatarum.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gregum usorum potestates',
 'listgrouprights-group' => 'Grex',
@@ -1519,6 +1518,8 @@ To change your watchlist settings, visit
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creata',
+'changed' => 'mutata',
 
 # Delete
 'deletepage' => 'Delere paginam',
@@ -1582,9 +1583,9 @@ ad emendationem proximam ab $2.',
 Ecce protectiones paginae '''$1''':",
 'protect-cascadeon' => 'Hanc paginam, in {{PLURAL:$1|pagina seriatim protecta|paginis seriatim protectis}} inclusam, potes deprotegere; manebit autem protectio serialis.',
 'protect-default' => 'Usoribus omnibus licet',
-'protect-fallback' => 'Postulat permissum "$1"',
-'protect-level-autoconfirmed' => 'Tironibus et conventu carentibus non licet',
-'protect-level-sysop' => 'Magistratus soli',
+'protect-fallback' => 'Sinere solum usores permissu "$1"',
+'protect-level-autoconfirmed' => 'Sinere solum usores adfirmati automaticale',
+'protect-level-sysop' => 'Sinere solum magistratus',
 'protect-summary-cascade' => 'defluens',
 'protect-expiring' => 'exit $1 (UTC)',
 'protect-expiry-indefinite' => 'infinita',
@@ -2374,6 +2375,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'logentry-newusers-create2' => 'Ratio usoris $3 creata est ab usore $1',
 'logentry-newusers-autocreate' => 'Ratio $1 automatice creata est',
 'newuserlog-byemail' => 'tessera missa litteris electronicis',
+'rightsnone' => '(nullus)',
 
 # Search suggestions
 'searchsuggest-search' => 'Quaerere',
index a3ec90d..3b6c0df 100644 (file)
@@ -749,6 +749,9 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de
 'right-minoredit' => 'Marcar trocamientos como "chiquiticos"',
 'right-delete' => 'Efassar hojas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de creación de usuarios',
+
 # User rights log
 'rightslog' => 'Trocamientos de profil de usuario',
 
@@ -882,9 +885,6 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 'linksearch' => 'Linkes eksternos',
 'linksearch-line' => 'Atamiento para $1 en la ója $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de creación de usuarios',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ver los miembros de este grupo)',
 
index efe017d..314f328 100644 (file)
@@ -314,6 +314,7 @@ $messages = array(
 'newwindow' => '(geet an enger neier Fënster op)',
 'cancel' => 'Zréck',
 'moredotdotdot' => 'Méi …',
+'morenotlisted' => 'Méi, déi hei net stinn...',
 'mypage' => 'Säit',
 'mytalk' => 'Diskussioun',
 'anontalk' => 'Diskussioun fir dës IP Adress',
@@ -1458,13 +1459,13 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'right-sendemail' => 'Anere Benotzer E-Maile schécken',
 'right-passwordreset' => 'Maile vum Zrécksetze vum Passwuert weisen',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logbuch vun den neien Umeldungen',
+'newuserlogpagetext' => "Dëst ass d'Lescht vun de Benotzernimm déi ugeluecht goufen.",
+
 # User rights log
 'rightslog' => 'Logbuch vun de Benotzerrechter',
 'rightslogtext' => "Dëst ass d'Lëscht vun den Ännerunge vu Benotzerrechter.",
-'rightslogentry' => "huet d'Benotzerrechter vum $1 vun $2 op $3 geännert.",
-'rightslogentry-autopromote' => 'gouf automatesch aus dem Grupp $2 an de Grupp $3 gesat',
-'logentry-rights-autopromote' => "De Benotzer $1 huet d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
-'rightsnone' => '(keen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dës Säit ze liesen',
@@ -2088,10 +2089,6 @@ Et muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. ".org".<br />
 'activeusers-hidesysops' => 'Administrateure verstoppen',
 'activeusers-noresult' => 'Keng Benotzer fonnt.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logbuch vun den neien Umeldungen',
-'newuserlogpagetext' => "Dëst ass d'Lescht vun de Benotzernimm déi ugeluecht goufen.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechter vun de Benotzergruppen',
 'listgrouprights-summary' => 'Dëst ass eng Lëscht vun den op dëser Wiki definéierte Benotzergruppen an den domat verbonnene Rechter.
@@ -2229,6 +2226,8 @@ $UNWATCHURL
 
 Reaktiounen a méi Hëllef:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'gemaach',
+'changed' => 'geännert',
 
 # Delete
 'deletepage' => 'Säit läschen',
@@ -2299,6 +2298,7 @@ Kuckt d'[[Special:ProtectedPages|Lëscht vun de gespaarte Säite]] fir eng Lësc
 'prot_1movedto2' => '[[$1]] gouf op [[$2]] geréckelt',
 'protect-badnamespace-title' => 'Nummraum deen net gespaart ka ginn',
 'protect-badnamespace-text' => 'Säiten an dësem Nummraum kënnen net gespaart ginn.',
+'protect-norestrictiontypes-title' => 'Säit kann net gespaart ginn',
 'protect-legend' => "Confirméiert d'Protectioun",
 'protectcomment' => 'Grond:',
 'protectexpiry' => 'Dauer vun der Spär:',
@@ -2314,9 +2314,9 @@ Hei sinn déi aktuell Astellungen fir d'Säit '''$1''':",
 Hei sinn déi aktuell Astellunge fir d'Säit '''$1''':",
 'protect-cascadeon' => "Dës Säit ass elo gespaart well si an déi folgend {{PLURAL:$1|Säit|Säiten}} agebonn ass déi duerch eng Kaskadespär gespaart {{PLURAL:$1|ass|sinn}}. De Protectiounsniveau ka fir dës Säit geännert ginn, dat huet awer keen Afloss op d'Kaskadespär.",
 'protect-default' => 'All Benotzer erlaben',
-'protect-fallback' => 'Eng "$1"-Autorisatioun gëtt gebraucht.',
-'protect-level-autoconfirmed' => 'Spär fir nei an net ugemellte Benotzer',
-'protect-level-sysop' => 'Nëmmen Administrateuren',
+'protect-fallback' => 'Nëmme Benotzer mat enger "$1"-Autorisatioun erlaben.',
+'protect-level-autoconfirmed' => 'Nëmmen automatesch ugemellte Benotzer erlaben',
+'protect-level-sysop' => 'Nëmmen Administrateuren erlaben',
 'protect-summary-cascade' => 'Protectioun a Kaskaden',
 'protect-expiring' => 'bis $1 (UTC)',
 'protect-expiring-local' => 'bis $1',
@@ -2957,6 +2957,10 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'pageinfo-protect-cascading' => 'Säite mat Kaskadespär vun hei aus',
 'pageinfo-protect-cascading-yes' => 'Jo',
 'pageinfo-protect-cascading-from' => 'Säite mat Kaskadespär vu(n)',
+'pageinfo-category-info' => "Informatiounen iwwer d'Kategorie",
+'pageinfo-category-pages' => 'Zuel vun de Säiten',
+'pageinfo-category-subcats' => 'Zuel vun den Ënnerkategorien',
+'pageinfo-category-files' => 'Zuel vun de Fichieren',
 
 # Skin names
 'skinname-standard' => 'Klassesch',
@@ -3042,6 +3046,8 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'minutes' => '{{PLURAL:$1|enger Minutt|$1 Minutten}}',
 'hours' => '{{PLURAL:$1|enger Stonn|$1 Stonnen}}',
 'days' => '{{PLURAL:$1|engem Dag|$1 Deeg}}',
+'months' => '{{PLURAL:$1|ee Mount|$1 Méint}}',
+'years' => '{{PLURAL:$1|ee Joer|$1 Joer}}',
 'ago' => 'viru(n) $1',
 'just-now' => 'grad elo',
 
@@ -3771,6 +3777,8 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'logentry-newusers-create2' => 'De Benotzerkont $3 gouf vum $1 ugeluecht',
 'logentry-newusers-autocreate' => 'De Benotzerkont $1 gouf automatesch ugeluecht',
 'newuserlog-byemail' => "d'Passwuert gouf per E-Mail geschéckt",
+'logentry-rights-autopromote' => "De Benotzer $1 huet d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
+'rightsnone' => '(keen)',
 
 # Feedback
 'feedback-bugornote' => 'Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].
index b6980d7..4863025 100644 (file)
@@ -689,9 +689,11 @@ $messages = array(
 'right-browsearchive' => 'Алуднавай ччинар жугъурун',
 'right-undelete' => 'Алуднавай ччинар туькIуьр хъувун',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Уртахар регистрация авунин журнал',
+
 # User rights log
 'rightslog' => 'Эхтияр Ишлемишчидин дафтlар',
-'rightsnone' => '(садни)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'И ччин кIелун',
@@ -918,9 +920,6 @@ $messages = array(
 'listusers-noresult' => 'Иштиракчияр жагъуриз хьанвач',
 'listusers-blocked' => '(блокарнава)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Уртахар регистрация авунин журнал',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'КIеретI',
 'listgrouprights-members' => '(уьзвийрин сиягь)',
@@ -952,6 +951,9 @@ $messages = array(
 'watching' => 'Килигун...',
 'unwatching' => 'Амма клигнай',
 
+'created' => 'туькIуьрнава',
+'changed' => 'дегишнава',
+
 # Delete
 'deletepage' => 'Къакъудун хъувун',
 'confirm' => 'Тестикьун',
@@ -1321,6 +1323,9 @@ Cиягьда авай анжах (* лишандихъ галаз эгечIза
 # Special:ComparePages
 'compare-page1' => 'Чар 1',
 
+# New logging system
+'rightsnone' => '(садни)',
+
 # Feedback
 'feedback-subject' => 'Тема:',
 'feedback-message' => 'Чар:',
index 6fe00d0..4e0d64b 100644 (file)
@@ -687,6 +687,8 @@ Si tu vole sutrae la paje de tu lista de pajes oservada en la futur, clica a \"n
 'watching' => 'Oserva...',
 'unwatching' => 'No oserva...',
 
+'created' => 'Creada',
+
 # Delete
 'deletepage' => 'Sutrae la paje',
 'confirm' => 'Aproba',
index fbd815f..d0be172 100644 (file)
@@ -899,6 +899,9 @@ W'owandikira by'onoonya bw'osoosawo akagambo ''all:'', okunoonya kubuna Wikipedi
 
 'grouppage-sysop' => '{{ns:project}}:Abateesiteesi',
 
+# Special:Log/newusers
+'newuserlogpage' => "Olukalala olw'ebifudeyo mu kukolawo akawunti empya",
+
 # User rights log
 'rightslog' => "Olukalala lw'ebifudeyo ku by'endukusa za bamemba",
 
@@ -1016,9 +1019,6 @@ W'owandikira by'onoonya bw'osoosawo akagambo ''all:'', okunoonya kubuna Wikipedi
 'linksearch-ns' => 'Kuŋaanyizo:',
 'linksearch-ok' => 'Noonya',
 
-# Special:Log/newusers
-'newuserlogpage' => "Olukalala olw'ebifudeyo mu kukolawo akawunti empya",
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lukalala lwa bamemba)',
 
index 8585ae7..0ecdb96 100644 (file)
@@ -1406,12 +1406,13 @@ Deze informatie is zichbaar veur angere gebroekers.',
 'right-sendemail' => 'Versjik e-mail aan anger gebroekers',
 'right-passwordreset' => 'Bekiek e-mails van ópnuuj ingestèldje wachwäörd',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logbook nuuj gebroekers',
+'newuserlogpagetext' => 'Hiej ónger saton de nuuj ingesjreve gebroekers.',
+
 # User rights log
 'rightslog' => 'Gebroekersrechtelogbook',
 'rightslogtext' => 'Hiej onger staon de wieziginge in gebroekersrechte.',
-'rightslogentry' => 'wiezigde de gebroekersrechte veur $1 van $2 nao $3',
-'rightslogentry-autopromote' => 'is autematis gepromoveerdj vanne groep "$2" nao de groep "$3"',
-'rightsnone' => '(gein)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dees pagina te bekieke',
@@ -2036,10 +2037,6 @@ Haet mèndestes e toepleveldomein, wie beveurbeildj "*.org".<br />
 'activeusers-hidesysops' => 'Verberg admins',
 'activeusers-noresult' => 'Gein gebroekers gevónje.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logbook nuuj gebroekers',
-'newuserlogpagetext' => 'Hiej ónger saton de nuuj ingesjreve gebroekers.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechte van gebroekersgróppe',
 'listgrouprights-summary' => 'Op dees pazjena sjtaon de gebroekersgróppe in deze wiki besjreve, mit zien biebehurende rechte.
@@ -2161,6 +2158,8 @@ $UNWATCHURL
 
 Commentaar en wiejer assistentie:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aangemaak',
+'changed' => 'verangerd',
 
 # Delete
 'deletepage' => 'Pagina ewegsjaffe',
@@ -3649,6 +3648,7 @@ Aafbeildinge waere in häör vollejige resolutie getoeandj. Anger bestandjstypes
 'logentry-newusers-create2' => "$1 haet 'ne gebroeker $3 aangemaak",
 'logentry-newusers-autocreate' => 'De gebroeker $1 is autematis aangemaak',
 'newuserlog-byemail' => 'wachwaord is versjik per e-mail',
+'rightsnone' => '(gein)',
 
 # Feedback
 'feedback-bugornote' => 'Es se zewied bös óm e technisch perbleem in détail te besjrieve, [$1 rapperteer \'ne bug]. 
index 18a6cd8..6442f4a 100644 (file)
@@ -651,6 +651,9 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 
 'grouppage-sysop' => '{{ns:project}}:Amministratoî',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nêuvi utenti',
+
 # User rights log
 'rightslog' => "Diritti d'ûtente",
 
@@ -864,9 +867,6 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'listusers-submit' => 'Fanni vedde',
 'listusers-noresult' => 'Utente non trovöo.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nêuvi utenti',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Elenco di membri)',
 
@@ -905,6 +905,7 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'unwatching' => 'Scassâ da-i osservæ speçiâli',
 
 'enotif_anon_editor' => 'ûtente anònnimo $1',
+'changed' => 'cangiâ',
 
 # Delete
 'deletepage' => 'Scassa a paggina',
index a76dd63..eaf2125 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Andrijko Z.
  * @author Erdemaslancan
  * @author Ohpuu
  * @author Warbola
@@ -372,6 +373,9 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 
 'grouppage-sysop' => '{{ns:project}}:Administrātord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kȭlbatijizt lūomiz log',
+
 # User rights log
 'rightslog' => 'Kȭlbatijiz õigõmt log',
 
@@ -488,9 +492,6 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'linksearch' => 'Uļļizt siḑīmõd',
 'linksearch-line' => '$1 um sidtõd līedst $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kȭlbatijizt lūomiz log',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(nõtkõmd nimkēra)',
 
@@ -560,7 +561,7 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'blanknamespace' => '(Kēratõkst)',
 
 # Contributions
-'contributions' => 'Kȭlbatijiz kubsõtīe',
+'contributions' => '{{GENDER:$1|Kȭlbatijiz}} kubsõtīe',
 'contributions-title' => 'Kȭlbatijiz $1 kubsõtīe',
 'mycontris' => 'Min kubsõtīed',
 'contribsub2' => 'Kȭlbatiji $1 ($2) pierāst',
index 9a48f44..bc88182 100644 (file)
@@ -723,9 +723,11 @@ Pröa a giuntagh denanz a la tò ricerca ''all:'' per cercà in tücc i namespac
 'right-edit' => 'Edita pàgini',
 'right-createaccount' => 'Crea cünt de dovratt bej-e növ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rrgister di druvat növ',
+
 # User rights log
 'rightslog' => 'Dirit di druvat',
-'rightslogentry' => "l'ha mudifegaa $1 dal grüp $2 al grüp $3",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'mudifega quela pagina chì',
@@ -939,9 +941,6 @@ La descrizión sura la sua [$2 pagina de descrizión del file] l'è mustrada ch
 # Special:ActiveUsers
 'activeusers-from' => 'Fàm vedè i dupradur a partì da:',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rrgister di druvat növ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dirit del grüp di druvat',
 'listgrouprights-members' => '(Lista di member)',
@@ -996,6 +995,7 @@ Per mudifegà l\'impustazión de la lista di paginn che te tegn d\'ögg, varda
 
 Per fà di cumünicazion de servizzi e per cercà jüt:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'changed' => 'cambiaa',
 
 # Delete
 'deletepage' => 'Scancela la pagina',
index 9332ea9..d63187d 100644 (file)
@@ -413,6 +413,9 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 
 'group-sysop-member' => 'Moyángeli',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Zuluná ya bokeli bwa konti ya mosáleli',
+
 # User rights log
 'rightslog' => 'Zuluná ya makokí ma basáleli',
 
@@ -523,9 +526,6 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 # Special:Categories
 'categories' => 'Ndéngé',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Zuluná ya bokeli bwa konti ya mosáleli',
-
 # E-mail user
 'emailuser' => 'Kotíndela yě mɛ́lɛ',
 'defemailsubject' => '{{SITENAME}} mokánda',
@@ -551,6 +551,8 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'watching' => 'Kolanda...',
 'unwatching' => 'Kolanda tɛ́...',
 
+'created' => 'ekomákí',
+
 # Delete
 'deletepage' => 'Kolímwisa lonkásá loye',
 'dellogpage' => 'zuluná ya bolímwisi',
index 75de322..7e9dcd7 100644 (file)
@@ -535,6 +535,10 @@ $messages = array(
 # User rights
 'editinguser' => 'ຜູ້ໃຊ້ <b>$1</b> ພວມດັດແກ້ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ບັນທຶກການສ້າງບັນຊີຜູ້ໃຊ້',
+'newuserlogpagetext' => 'ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່',
+
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ການປ່ຽນແປງ|ການປ່ຽນແປງ}}',
 'recentchanges' => 'ການດັດແກ້ຫຼ້າສຸດ',
@@ -683,10 +687,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListUsers
 'listusers-submit' => 'ສະແດງ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ບັນທຶກການສ້າງບັນຊີຜູ້ໃຊ້',
-'newuserlogpagetext' => 'ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່',
-
 # E-mail user
 'emailuser' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້ນີ້',
 'emailpage' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້',
@@ -722,6 +722,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'unwatching' => 'ພວມເຊົາຕິດຕາມ...',
 
 'enotif_lastvisited' => 'ເບິ່ງ $1 ເພື່ອ ທຸກໆການປ່ຽນແປງ ຕັ້ງແຕ່ເທື່ອສຸດທ້າຍ ທີ່ ທ່ານເຂົ້າຫາ.',
+'created' => 'ສ້າງແລ້ວ',
+'changed' => 'ປ່ຽນແລ້ວ',
 
 # Delete
 'confirm' => 'ຢືນຢັນ',
index 44fcc3d..6f66906 100644 (file)
@@ -504,7 +504,6 @@ Informasi: (bye) = petuho a nca selt,
 
 # User rights log
 'rightslog' => 'Desu di petuhoni kwa sebelu',
-'rightsnone' => '(ni)',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|petuho|petuho}}',
@@ -734,6 +733,8 @@ A sa afi kulobala di zwa mukoloko di kentezi, tampi \"ngambu kentezi\".",
 'unwatching' => 'Dikentezi...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} sebelu',
+'created' => 'hlolini',
+'changed' => 'petuhoni',
 
 # Delete
 'deletepage' => 'Afi kulobala petulo',
@@ -1078,4 +1079,7 @@ Xete ling'ki kwa lina sa konsidisize desepo. Petulo dimedi inlinenikusize.",
 # Special:SpecialPages
 'specialpages' => 'Petulo zwenti',
 
+# New logging system
+'rightsnone' => '(ni)',
+
 );
index b647ee4..7bdd6f2 100644 (file)
@@ -1445,15 +1445,13 @@ teisės",
 'right-sendemail' => 'Siųsti el. laišką kitiems naudotojams',
 'right-passwordreset' => 'Peržiūrėti slaptažodžio pakeitimo e-mail laiškus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Prisiregistravę naudotojai',
+'newuserlogpagetext' => 'Tai naudotojų kūrimo sąrašas.',
+
 # User rights log
 'rightslog' => 'Naudotojų teisių pakeitimai',
 'rightslogtext' => 'Pateikiamas naudotojų teisių pakeitimų sąrašas.',
-'rightslogentry' => 'pakeista $1 grupės narystė iš $2 į $3',
-'rightslogentry-autopromote' => 'buvo automatiškai paaukštintas iš $2 į $3',
-'logentry-rights-rights' => '$1 pakeista narystė grupėje $3 iš $4 į $5',
-'logentry-rights-rights-legacy' => '$1 pakeista narystė grupėje $3',
-'logentry-rights-autopromote' => '$1 buvo automatiškai pervestas iš $4 į $5',
-'rightsnone' => '(jokių)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaityti šį puslapį',
@@ -2065,10 +2063,6 @@ Palaikomi protokolai: <code>$1</code> (nei vieno iš jų nenurodykite paieškoje
 'activeusers-hidesysops' => 'Slėpti administratorius',
 'activeusers-noresult' => 'Nerasta jokių naudotojų.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Prisiregistravę naudotojai',
-'newuserlogpagetext' => 'Tai naudotojų kūrimo sąrašas.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Naudotojų grupių teisės',
 'listgrouprights-summary' => 'Žemiau pateiktas naudotojų grupių, apibrėžtų šioje wiki, ir su jomis susijusių teisių sąrašas.
@@ -2197,6 +2191,8 @@ $UNWATCHURL
 
 Atsiliepimai ir pagalba:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'sukurė',
+'changed' => 'pakeitė',
 
 # Delete
 'deletepage' => 'Trinti puslapį',
@@ -3770,6 +3766,10 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 'logentry-newusers-create2' => '$1 sukūrė naudotojo paskyrą $3',
 'logentry-newusers-autocreate' => 'Paskyra $1 buvo sukurta automatiškai',
 'newuserlog-byemail' => 'slaptažodis nusiųstas elektroniniu paštu',
+'logentry-rights-rights' => '$1 pakeista narystė grupėje $3 iš $4 į $5',
+'logentry-rights-rights-legacy' => '$1 pakeista narystė grupėje $3',
+'logentry-rights-autopromote' => '$1 buvo automatiškai pervestas iš $4 į $5',
+'rightsnone' => '(jokių)',
 
 # Feedback
 'feedback-bugornote' => 'Jei jūs esate pasirengę aprašyti techninę problemą išsamiau, [$1 praneškite apie programinę klaidą].
index b400758..d51483a 100644 (file)
@@ -453,9 +453,11 @@ n = nasvareigs lobuojums.',
 'right-upload_by_url' => 'Īsyuteit failu nu URL adresa',
 'right-delete' => 'Iztreit puslopys',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jaunūs lītuotuoju registrs',
+
 # User rights log
 'rightslog' => 'Lītuotuoju tīseibu registrs',
-'rightsnone' => '(navā)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaiteit itū puslopu',
@@ -589,9 +591,6 @@ Lopys, kas ir tovā [[Special:Watchlist|puorraugamūs rokstu sarokstā]] ir '''r
 # Special:ListUsers
 'listusers-submit' => 'Paruodeit',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jaunūs lītuotuoju registrs',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(dalinīku saroksts)',
 'listgrouprights-addgroup' => 'Dalikt {{PLURAL:$2|grupu|grupys}}: $1',
@@ -902,4 +901,7 @@ Puorejī lauki, piec nūklusiejuma, byus nūglobuoti.
 # Special:SpecialPages
 'specialpages' => 'Specialuos puslopys',
 
+# New logging system
+'rightsnone' => '(navā)',
+
 );
index b2201be..57e4127 100644 (file)
@@ -945,6 +945,10 @@ Hmangtuten e-lehkha an thawn chein i e-chenhmun hrilh an ni chuang lo vang.',
 'right-hideuser' => 'Hmangtu hming dangbet rawh, vantlang laka thupin',
 'right-unblockself' => 'Mahnia dalna inphelh',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Hmangtu siamna chanchin-ziak',
+'newuserlogpagetext' => 'Hei hi hmangtu siangchan siam chhinchhiahna a ni.',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'he phêk hi chhiar rawh',
 'action-edit' => 'phek siamṭhat',
@@ -1353,10 +1357,6 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'activeusers-hidesysops' => 'Roreltu thupna',
 'activeusers-noresult' => 'Hmangtu awm lo.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Hmangtu siamna chanchin-ziak',
-'newuserlogpagetext' => 'Hei hi hmangtu siangchan siam chhinchhiahna a ni.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hmangtu pawl dikna-chanvote',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Dikna-chanvo phalsak</span>
@@ -1419,6 +1419,8 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'enotif_lastvisited' => 'I tlawh hnuhnùn ber hnu lama tihdanglam zawng zawng en i duh chuan $1 en rawh.',
 'enotif_lastdiff' => 'Hë tihdanglamna hi en tùrin $1 thlír rawh.',
 'enotif_anon_editor' => 'hmangtu hriat loh $1',
+'created' => 'siam a ni ta',
+'changed' => 'tihdanglam a ni ta',
 
 # Delete
 'deletepage' => 'Hë phêk hi paih rawh',
index 53b866f..51f38b6 100644 (file)
@@ -1183,11 +1183,13 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'right-sendemail' => 'Sūtīt e-pastu citiem lietotājiem',
 'right-passwordreset' => 'Apskatīt paroles atiestatīšanas e-pasta ziņojumus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jauno lietotāju reģistrs',
+'newuserlogpagetext' => 'Jauno lietotājvārdu reģistrs.',
+
 # User rights log
 'rightslog' => 'Lietotāju tiesību reģistrs',
 'rightslogtext' => 'Šis ir lietotāju tiesību izmaiņu reģistrs.',
-'rightslogentry' => 'izmainīja $1 grupas no $2 uz $3',
-'rightsnone' => '(nav)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lasīt šo lapu',
@@ -1733,10 +1735,6 @@ Skatīt arī [[Special:WantedCategories|''sarkanās'' kategorijas]].",
 'activeusers-hidesysops' => 'Paslēpt administratorus',
 'activeusers-noresult' => 'Neviens lietotājs nav atrasts.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jauno lietotāju reģistrs',
-'newuserlogpagetext' => 'Jauno lietotājvārdu reģistrs.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Lietotāju grupu tiesības',
 'listgrouprights-summary' => 'Šis ir šajā wiki definēto lietotāju grupu uskaitījums, kopā ar tām atbilstošajām piekļuves tiesībām.
@@ -1851,6 +1849,8 @@ $UNWATCHURL
 
 Papildinformācija:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'izveidoja',
+'changed' => 'izmainīja',
 
 # Delete
 'deletepage' => 'Dzēst lapu',
@@ -3114,6 +3114,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'logentry-newusers-create2' => 'Lietotāja kontu $3 izveidoja $1',
 'logentry-newusers-autocreate' => 'Konts $1 tika izveidots automātiski',
 'newuserlog-byemail' => 'parole nosūtīta pa e-pastu',
+'rightsnone' => '(nav)',
 
 # Feedback
 'feedback-subject' => 'Temats:',
index 2fda83a..407a06e 100644 (file)
@@ -1242,9 +1242,12 @@ $1",
 'right-override-export-depth' => '出有五層深之頁',
 'right-sendemail' => '擬書傳予他簿',
 
+# Special:Log/newusers
+'newuserlogpage' => '誌簿',
+'newuserlogpagetext' => '此為誌簿之記也',
+
 # User rights log
 'rightslog' => '職權志',
-'rightsnone' => '(凡)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '閱此頁',
@@ -1747,10 +1750,6 @@ $1',
 'activeusers-hidesysops' => '藏有秩',
 'activeusers-noresult' => '無簿矣。',
 
-# Special:Log/newusers
-'newuserlogpage' => '誌簿',
-'newuserlogpagetext' => '此為誌簿之記也',
-
 # Special:ListGroupRights
 'listgrouprights' => '權任一覽',
 'listgrouprights-summary' => '此所列述,諸職所司也,各有異同。欲知其詳,請閱[[{{MediaWiki:Listgrouprights-helppage}}|此文]]。',
@@ -1857,6 +1856,8 @@ $NEWPAGE
 欲刪之頁,惠訪$UNWATCHURL
 
 饋助之,惠訪{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '撰',
+'changed' => '易',
 
 # Delete
 'deletepage' => '刪頁',
@@ -2830,5 +2831,6 @@ MediaWiki乃為用之發,無擔之責也;亦無售目之默擔也。參GNU
 'revdelete-restricted' => '應限至有秩',
 'revdelete-unrestricted' => '除限自有秩',
 'newuserlog-byemail' => '號發自電郵',
+'rightsnone' => '(凡)',
 
 );
index 4c12a97..2e7155e 100644 (file)
@@ -401,9 +401,11 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o
 # Rights
 'right-delete' => 'Am sayfape jili',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ağani maxmareş kʼayitʼepe',
+
 # User rights log
 'rightslog' => 'Maxmareş hakʼişi kʼayitʼepe',
-'rightsnone' => '(Va ren)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "am sayfa ik'itxi",
@@ -503,9 +505,6 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o
 # Special:LinkSearch
 'linksearch' => 'Galeni kʼontaktʼepe',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ağani maxmareş kʼayitʼepe',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(makʼaturepeşi listʼe)',
 
@@ -777,4 +776,7 @@ Ukʼaçxe na mulunan kʼontʼaktʼepe istʼisna oqʼopinot kʼabuli ixvenen. Mes
 # Special:SpecialPages
 'specialpages' => 'Doxmeli butʼkʼape',
 
+# New logging system
+'rightsnone' => '(Va ren)',
+
 );
index 182df56..78181c1 100644 (file)
@@ -1279,12 +1279,13 @@ $3 द्वारा देल कारण अछि ''$2''",
 'right-sendemail' => 'ई-पत्र दोसर प्रयोक्ता लोकनिकेँ पठाउ',
 'right-passwordreset' => 'कूटशब्द पुनर्निर्धारण ई-पत्र देखू',
 
+# Special:Log/newusers
+'newuserlogpage' => 'प्रयोक्ता रचना वृत्तलेख',
+'newuserlogpagetext' => 'ई प्रयोक्ता निर्माणक वृत्तलेख अछि।',
+
 # User rights log
 'rightslog' => 'प्रयोक्ता अधिकार वृत्तलेख',
 'rightslogtext' => 'ई प्रयोक्ता अधिकार परिवर्तन सभक वृतलेख छी।',
-'rightslogentry' => 'वर्गक सदस्यता बदलल गेल $1 लेल $2 सँ $3',
-'rightslogentry-autopromote' => 'स्वयंचालित रूपमे $2 सँ $3 मे पदोन्नत भेल',
-'rightsnone' => '(कोनो नै)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ई पन्ना पढ़ू',
@@ -1867,10 +1868,6 @@ $1',
 'activeusers-hidesysops' => 'संचालक नुकाउ',
 'activeusers-noresult' => 'कोनो प्रयोक्ता नै भेटल',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोक्ता रचना वृत्तलेख',
-'newuserlogpagetext' => 'ई प्रयोक्ता निर्माणक वृत्तलेख अछि।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोक्ता संवर्ग अधिकार',
 'listgrouprights-summary' => 'ई सभ प्रयोक्ता संवर्गक एकटा सूची अछि जे ऐ विकीपरपरिभाषित अछि ओकर संसर्गित प्रवेश अधिकारक संग।
@@ -1997,6 +1994,8 @@ $UNWATCHURL
 
 अपन अनुभव बतेबा वा कोनो सहायता लेल:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाएल गेल',
+'changed' => 'बदलल गेल',
 
 # Delete
 'deletepage' => 'पन्ना मेटाउ',
@@ -3529,6 +3528,7 @@ $5
 'logentry-newusers-create2' => '$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3',
 'logentry-newusers-autocreate' => 'खाता $1 छल {{लिंग:$2|बनाएल}} स्वतः',
 'newuserlog-byemail' => 'कूटशब्द ई-पत्र द्वारा पठाएल गेल',
+'rightsnone' => '(कोनो नै)',
 
 # API errors
 'api-error-badaccess-groups' => 'अहि विकी सें अहां कोनो प्रारूप लोड नहि क सकब.',
index af6732c..5730312 100644 (file)
@@ -1141,12 +1141,12 @@ Aja kuatir, alamat imele Rika ora ditidokna dong pangganggo sejen ngontak Rika.'
 'right-override-export-depth' => "Ekspor kaca sisan karo kaca sing kagandheng gutul lapisan (''depth'') kaping 5",
 'right-sendemail' => 'Ngirim imel maring panganggo liyane',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log panganggo anyar',
+
 # User rights log
 'rightslog' => 'Log pangowahan hak akses panganggo',
 'rightslogtext' => 'Kiye log pangowahan maring hak-hak panganggo.',
-'rightslogentry' => 'Ngganti kaanggotaan kelompok nggo $1 sekang $2 dadi $3',
-'rightslogentry-autopromote' => 'otomatis dipromosikna sekang $2 dadi $3',
-'rightsnone' => '(ora ana)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'maca kaca kiye',
@@ -1450,9 +1450,6 @@ Rika teyeng mbatesi tampilan kanthi milih jinis log, jeneng panganggo (sensitif
 # Special:LinkSearch
 'linksearch-line' => '$1 duwe pranala sekang  $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log panganggo anyar',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(daftar anggota)',
 
@@ -1812,4 +1809,7 @@ Sing liyane bakal diumpetna sacara ''default''.
 # Special:Tags
 'tag-filter' => 'Filter [[Special:Tags|Tag]]:',
 
+# New logging system
+'rightsnone' => '(ora ana)',
+
 );
index c830dda..bf1105e 100644 (file)
@@ -1225,11 +1225,13 @@ $3 макссь туфталсь - ''$2''",
 'right-userrights-interwiki' => 'Петнемс тиихнень видекснон иля викить лопасонза',
 'right-siteadmin' => 'Пякстамс эди панжемс датабазать',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Тиинь ушедоманзон лувомасна',
+'newuserlogpagetext' => 'Тя тиинь ушедоманзон лувомасна.',
+
 # User rights log
 'rightslog' => 'Тиить видексонза лувомась',
 'rightslogtext' => 'Тиить видексонзон полафнемасна лувомась.',
-'rightslogentry' => '$1-нь полгац полафтсь $2-ста $3-с',
-'rightsnone' => '(аш)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'тя лопать морафтома',
@@ -1670,10 +1672,6 @@ $3 макссь туфталсь - ''$2''",
 'listusers-submit' => 'Няфтемс',
 'listusers-noresult' => 'Тиихть исть мув.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Тиинь ушедоманзон лувомасна',
-'newuserlogpagetext' => 'Тя тиинь ушедоманзон лувомасна.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Тиихнень полгаснон видексонза',
 'listgrouprights-summary' => 'Тяса тиихнень полгасна конатне сувсихть тя Викис синь сувама видексснон мархта.
@@ -1780,6 +1778,8 @@ $UNWATCHURL
 
 Азома мекпяли ди иля лезкс:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'тиф',
+'changed' => 'полафтсь',
 
 # Delete
 'deletepage' => 'Нардамс лопать',
@@ -2888,5 +2888,6 @@ $5
 'revdelete-restricted' => 'нолдаф тевс кардафксне системонь вятиксненди',
 'revdelete-unrestricted' => 'системонь вятиксненди кардафксне валхтфт',
 'newuserlog-byemail' => 'сувама валце кучф электрононь сёрмаса',
+'rightsnone' => '(аш)',
 
 );
index 77c6854..7b5450e 100644 (file)
@@ -349,7 +349,7 @@ $messages = array(
 'newwindow' => '(sokafy anaty takila hafa)',
 'cancel' => 'Aoka ihany',
 'moredotdotdot' => 'Tohiny...',
-'mypage' => 'Pejiko',
+'mypage' => 'Pejy',
 'mytalk' => 'Dinika',
 'anontalk' => "Resaka ho an'io adiresy IP io",
 'navigation' => 'Fikarohana',
@@ -588,11 +588,15 @@ fangatahana : $2",
 'actionthrottled' => 'Tao voafetra',
 'actionthrottledtext' => "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.
 Andramo indray afaka minitra vitsivitsy.",
-'protectedpagetext' => 'Voaaro mba tsy hisy hanova ity pejy ity.',
+'protectedpagetext' => 'Narovana mba tsy hisiana fanovana na tao hafa ity pejy ity.',
 'viewsourcetext' => "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity :",
 'viewyourtext' => "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
-'protectedinterface' => "Manome lahatsoratra ho an'ny rindrankajy ity pejy ity ary voaaro izy ity mba tsy hisy hanararaotra",
-'editinginterface' => "'''Tandremo :''' manova pejy ampiasan'ny lôjisialy wiki ianao. Mety hita ny mpikambana sàsany izy io. Rehefa tia mandika teny ianao, jereo ny volavola MediaWiki ho an'ny internationalisation ny hafatra [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
+'protectedinterface' => "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
+'editinginterface' => "'''Tandremo''' : Manova pejy ampiasaina amin'ny famoahana ny hafatray ny rindrankajy ianao io.
+
+Hisy fiantraikany amin'ny fisehon'ny tranonkala amin'ny mpampiasa rehetra eto amin'ity wiki ity ny fanovana.
+
+Raha hanampy dikanteny izay tokony hihatra amin'ny wiki rehetra, ampiaao ny tranonkala [//translatewiki.net/ translatewiki.net translatewiki.net], ny tetikasa fandikana an'i MediaWiki.",
 'sqlhidden' => '(nafenina ny requête SQL)',
 'cascadeprotected' => 'Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana "en cascade" :
 
@@ -1120,9 +1124,10 @@ Tsy azo jerenao io.",
 'revdelete-concurrent-change' => "Tsi-fetezana teo am-panovana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : ny satany dia voaovan' olon-kafa tamin'ianao nanova azy.
 Jereo ny laogy.",
 'revdelete-only-restricted' => "Tsi-fetezana teo am-panitrihana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : tsy azonao fafana ireo zavatra ireo amin'ny mpandrindra raha tsy misafidy famafana.",
-'revdelete-reason-dropdown' => '* Antom-pamafana matetika miasa
-** Tsi-fanajana ny Copyright
-** Fampahalalana tsy tokony apetraka eo',
+'revdelete-reason-dropdown' => "* Antom-pamafana matetika :
+** Tsifanajakan ny zom-pamrona;
+** Famoahan-kevitra na fampahalalana ho ann'ny olon-tokana tsy tokony haseho;
+** Fampahalalana mety mifototra amin'ny lainga.",
 'revdelete-otherreason' => 'Antony hafa / antony miampy :',
 'revdelete-reasonotherlist' => 'Antony hafa',
 'revdelete-edit-reasonlist' => "Hanova ny anton'ny famafàna",
@@ -1326,9 +1331,9 @@ Fenoy araka ny datin'ny solosainan'ny mpitsidika",
 'prefs-emailconfirm-label' => 'Famarinana ny imailaka :',
 'prefs-textboxsize' => "Hangezan'ny varavarankely fanovana",
 'youremail' => 'Imailaka:',
-'username' => 'Solonanarana:',
-'uid' => "Laharan'ny mpikambana:",
-'prefs-memberingroups' => "mpikamban'ny gropy{{PLURAL:}} $1 :",
+'username' => '{{GENDER:$1}}Anaram-pikambana :',
+'uid' => '{{GENDER:$1}}mpikambana :',
+'prefs-memberingroups' => "mpikambana{{GENDER:$2}} ao amin'ny vondrona{{PLURAL:$1}} :",
 'prefs-registration' => 'Daty fidirana :',
 'yourrealname' => 'Tena anarana marina:',
 'yourlanguage' => 'Tenim-pirenena:',
@@ -1476,15 +1481,13 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'right-sendemail' => "Mandefa imailaka any amin'ny mpikambana hafa",
 'right-passwordreset' => 'Hijery ny imailaka famerenana ny tenimiafina',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Tatitr’asan’ny fanokafana kaontim-pikambana',
+'newuserlogpagetext' => "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
+
 # User rights log
 'rightslog' => 'Tatitr’asa momban’ny fanovana satam-pikambana',
 'rightslogtext' => "Ity ny laogy momban'ny fanovana ny zom-pikambana.",
-'rightslogentry' => "nanova ny fahefan'ny mpikambana « $1 », avy amin'ny $2 izy lasa $3",
-'rightslogentry-autopromote' => '$2 navadika $3 ho azy',
-'logentry-rights-rights' => "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5",
-'logentry-rights-rights-legacy' => "$1 nanova ny vonodrom-pikambana isian'i $3",
-'logentry-rights-autopromote' => 'Lasa $5 ho azy i $1 izay $4 taloha',
-'rightsnone' => '(tsy misy)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'mamaky ity pejy ity',
@@ -1721,7 +1724,7 @@ Raha mbola misy foana ilay  olana, manorata any amin'ny [[Special:ListUsers/syso
 'backend-fail-readonly' => 'Amin\'izao fotoana dia famakiana ihany ny fitahirizana terminal an\'i "$1". "\'\'$2\'\'" no antony nomena',
 'backend-fail-connect' => 'Tsy afaka mifandray amin\'ny terminal fitahirizana "$1".',
 'backend-fail-internal' => 'Hadisoana tsy fantatra tao anatin\'ny terminal fitahirizana "$1".',
-'backend-fail-usable' => "Tsy afaka manoratra ilay rakitra $1 noho ny tsifiampian'ny zo na noho ny petra-drakitra tsy misy.",
+'backend-fail-usable' => 'Tsy afaka nanoratra ny rakitra "$1" nohon\'ny zo tsy ampy na ny tsy fisian\'ny petra-drakitra.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Tsy afaka miantso ilay banky angona laogy ho an\'ny terminal fitahirizana "$1".',
@@ -1795,8 +1798,7 @@ ity wiki ity dia no-regler-na ho sarababem-bahoaka.",
 
 # Special:ListFiles
 'listfiles-summary' => "Ahitana ny rakitra rehetra nampidirina ity pejy manokana ity.
-Napetraka eny amin'ny voalohandohany ny rakitra vao nampidirina.
-Tsindrio eo amin'ny lohan-tsanganana raha hanova ny laharam-pisehoana.",
+Rehefa sivanin'ny mpikambana iray izy ity, ny rakitra izay ahitana santiôna vaovao indrindra izay nalefan'io mpikamana io no aseho.",
 'listfiles_search_for' => 'Hitady anarana media :',
 'imgfile' => 'rakitra',
 'listfiles' => "Lisitran'ny rakitra",
@@ -1917,7 +1919,7 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
 'statistics-users-active-desc' => "Mpikambana nanao zavatra teto tanatin'ny $1 andro{{PLURAL:}}.",
 'statistics-mostpopular' => 'Pejy voatsidika',
 
-'disambiguations' => 'pejina homonimia',
+'disambiguations' => 'Pejy misy rohy amina pejy fanalana ny fisalasalana',
 'disambiguationspage' => 'Template:homonimia',
 
 'doubleredirects' => 'Fihodinana roa',
@@ -2082,10 +2084,6 @@ Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'activeusers-hidesysops' => 'Asitriho ny mpandrindra',
 'activeusers-noresult' => 'Tsy nahitana mpikambana.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Tatitr’asan’ny fanokafana kaontim-pikambana',
-'newuserlogpagetext' => "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Fahefan'ny vondrom-pikambana",
 'listgrouprights-group' => 'Vondrona/Gropy',
@@ -2186,29 +2184,35 @@ Aoriana, raha irinao ny hanaisotra azy ao amin'ny pejy arahanao maso, dia tsindr
 'enotif_lastvisited' => "Jereo eto $1 ny niova rehetra hatramin'ny fitsidihanao farany.",
 'enotif_lastdiff' => 'Jereo $1 mba ahitana ireo fanovana ireo.',
 'enotif_anon_editor' => 'mpikambana tsy nisoratra anarana $1',
-'enotif_body' => '$WATCHINGUSERNAME,
+'enotif_body' => 'Tompoko $WATCHINGUSERNAME,
 
-$CHANGEDORCREATED $PAGEEDITOR tamin\'ny $PAGEEDITDATE ny pejy $PAGETITLE tao amin\'ny sehatra {{SITENAME}}. Jereo eto $PAGETITLE_URL ny votoatiny ankehitriny.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+Ambangovangon\'ny mpikambana nanova : $PAGESUMMARY $PAGEMINOREDIT
 
-Fanazavana tsotsotra: $PAGESUMMARY $PAGEMINOREDIT
+Ifandraisana amin\'io mpikambana io :
+mailaka : $PAGEEDITOR_EMAIL
+wiki : $PAGEEDITOR_WIKI
 
-Fifandraisana amin\'ny nanova ny pejy:
-imailaka: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+Tsy hisy fampandrenesana hafa raha misy mpikambana manova aorian\'ny nandefasana ity mailaka ity, raha tsy hoe mitsidika ilay pejy ianao. Azonao atao koa ny mamerina ho aotra ny flag fampandrenesana ho an\'ny pejy rehetra ao amin\'ny lisitry ny pejy arahanao.
 
-Tsy handefasana fampahafantarana intsony aloha ianao momba io pejy io na dia misy manova aza izy mandra-pitsidikao azy.
-Azonao atao koa ny manajanona ny fampahafantarana anao aloha na misy manova aza ny pejy iray ao amin\'ny lisitry ny pejy arahinao maso.
-
-             Ny fitaovana fampahafantarana eto amin\'ny {{SITENAME}}
+             Ny rafitr\'i {{SITENAME}} mampandre anao.
 
 --
-Raha hanova ny fandehan\'ny momba ny lisitry ny pejy arahi-maso, jereo
+Rehefa hanova ny parametatra mikasika ny fampandrenesana amin\'ny alalan\'ny mailaka, tsidiho
+{{canonicalurl:{{#special:Preferences}}}}
+
+
+Rehefa tia hanova ny parametatray ny lisitry ny pejy arahanao, tsidiho
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Hevitrao sy fanampiana:
+Rehefa tsy hanaraka ilay pejy intsony ianao dia tsidiho
+$UNWATCHURL
+
+Verindrohy ary fanampiana:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'voaforona',
+'changed' => 'voaova',
 
 # Delete
 'deletepage' => 'Hamafa ny pejy',
@@ -3304,5 +3308,9 @@ Aseho amin'ny tena habeny ny sary aseho, ny hafa dia alefa miaraka amin'ny rindr
 'logentry-newusers-create2' => "Noforonin'i $1 ny kaomtim-pikambana $3",
 'logentry-newusers-autocreate' => 'Noforonina ho azy ny kaontim-pikambana $&',
 'newuserlog-byemail' => "tenimiafina nalefa tamin'ny imailaka",
+'logentry-rights-rights' => "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5",
+'logentry-rights-rights-legacy' => "$1 nanova ny vonodrom-pikambana isian'i $3",
+'logentry-rights-autopromote' => 'Lasa $5 ho azy i $1 izay $4 taloha',
+'rightsnone' => '(tsy misy)',
 
 );
index 53b0097..17588be 100644 (file)
@@ -591,6 +591,9 @@ $messages = array(
 'grouppage-bot' => '{{ns:project}}:Бот-влак',
 'grouppage-sysop' => '{{ns:project}}:Сайтвиктарыше-влак',
 
+# Special:Log/newusers
+'newuserlogpage' => 'У пайдаланыше регистрацийым эртарыме журнал',
+
 # User rights log
 'rightslog' => 'Пайдаланышын кертыж нерген журнал',
 
@@ -763,9 +766,6 @@ $messages = array(
 'activeusers-hidebots' => 'Бот-влакым шылташ',
 'activeusers-hidesysops' => 'Сайтвиктарыше-влакым шылташ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'У пайдаланыше регистрацийым эртарыме журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(тӱшкаште улшо-влак)',
 
index 980f951..23a0feb 100644 (file)
@@ -232,7 +232,7 @@ $messages = array(
 'viewhelppage' => 'Caliak laman bantuan',
 'categorypage' => 'Caliak laman kategori',
 'viewtalkpage' => 'Caliak laman ota',
-'otherlanguages' => 'Dalam baso lain',
+'otherlanguages' => 'Dalam bahaso lain',
 'redirectedfrom' => '(Dialiahkan dari $1)',
 'redirectpagesub' => 'Laman pengalihan',
 'lastmodifiedat' => 'Laman ko taakia diubah pado $2, $1.',
@@ -390,8 +390,8 @@ Indak ado keterangan.',
 'protectedpagetext' => 'Laman ko alah dikunci untuak manghindari panyuntiangan.',
 'viewsourcetext' => 'Sanak dapek malihek atau manyalin sumber laman iko:',
 'viewyourtext' => 'Sanak bisa mancaliak dan mangopi sumber untuak "editan sanak" ka halaman iko',
-'protectedinterface' => 'Laman iko barisi teks antarmuko untuak digunoan oleh parangkaik lunak di wiki iko sajo, dan alah dikunci untuak manghindari kasalahan. 
-Untuak manambah atau mangubah tarjemahan di sadonyo wiki, tolong digunoan [//translatewiki.net/ translatewiki.net], yaitu proyek lokalisasi dari MediaWiki.',
+'protectedinterface' => 'Laman iko baisi teks antarmuko untuak digunoan dek parangkaik lunak di wiki iko sajo, dan alah dikunci untuak maindaan kasalahan. 
+Untuak manambah atau maubah tajamahan di sadonyo wiki, harap gunoan [//translatewiki.net/ translatewiki.net], yaitu proyek palokalan MediaWiki.',
 'editinginterface' => "'''Paringatan:''' Sanak manyuntiang laman nan digunoan untuak manyadiokan teks antarmuko untuak parangkaik lunak.
 Parubahan teks ko akan mampangaruhi tampilan pado antarmuko pangguno untuak pangguno lain.
 Untuak tarjamahan, harap gunokan [//translatewiki.net/wiki/Main_Page?setlang=id translatewiki.net], proyek palokalan MediaWiki.",
@@ -668,8 +668,8 @@ Subbagian iko mungkin dipindahan atau dihapuih katiko Sanak mambukanyo.',
 Kato sandi untuak akun baharu iko dapek diubah di laman ''[[Special:ChangePassword|pangubahan kato sandi]]'' satalah masuak log.",
 'newarticle' => '(Baru)',
 'newarticletext' => "Laman nan awak cari alun ado.
-Untuak mambuek laman tu, mulailah dengan menulis dalam kotak di bawah (lihek [[{{MediaWiki:Helppage}}|laman bantuan]] untuak maklumat lanjut).
-Jiko awak indak sangajo sampai ka laman ko, klik tombol '''back''' pado penjelajah web awak.",
+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.''",
@@ -678,9 +678,9 @@ Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancarian untuak judul laman
 'noarticletext-nopermission' => 'Kini ko indak ado teks dalam laman iko.
 
 Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancahari untuak judul laman iko]] di laman lain, atau <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancahari log takaik] </span>, tapi Sanak indak punyo izin untuak mambuek laman iko.',
-'missing-revision' => 'Revisi $1 di halaman ko nan banamo "{{PAGENAME}}" indak ado.
+'missing-revision' => 'Revisi $1 di laman nan banamo "{{PAGENAME}}" ko indak ado.
 
-Hal iko biasonyo disababkan dek pranala sajarah nan alah kadaluarsa ka halaman ko nan alah dihapuih.
+Hal iko biasonyo disababkan dek pranala sijarah nan alah kadaluarsa ka laman nan alah dihapuih.
 Rinciannyo dapek dicaliak di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log panghapuihan].',
 'userpage-userdoesnotexist' => 'Akun pangguno "<nowiki>$1</nowiki>" indak tadafta.',
 'userpage-userdoesnotexist-view' => 'Pangguno "$1" indak tadafta.',
@@ -738,10 +738,10 @@ Alah tadapek sabuah solusi agar Sanak dapek manyuntiang laman jo aman: karakter
 Sanak manyuntiang revisi lama suatu laman.
 Jikok Sanak manyimpannyo, parubahan-parubahan nan dibuek sajak revisi iko akan hilang.'''",
 'yourdiff' => 'Pambedoan',
-'copyrightwarning' => "Untuak diingek bahwa apo nan disumbang kapado {{SITENAME}} dianggap lah dilapeh di bawah $2 (lihek $1 untuak lengkapnyo).
-Jiko awak indak ingin apo nan ditulis tu disuntiang dan disebarkan, jan dikirim tulisan tu ka siko.<br />
-Awak juo mesti bajanji bahwa itu adolah hasil karya awak surang, atau disalin dari sumber milik basamo atau sumber bebas lainnyo.
-'''Jan dikirim karya punyo hak cipta tanpa izin!'''",
+'copyrightwarning' => "Untuak diingek bahaso apo nan disumbang kapado {{SITENAME}} dianggap lah dilapeh di bawah $2 (caliak $1 untuak langkoknyo).
+Jikok awak indak ingin apo nan ditulih tu disuntiang dan disebaran, jan dikirim tulisan tu ka siko.<br />
+Awak musti bajanji juo bahaso iko adolah asia karya awak surang, atau disalin dari sumber miliak basamo atau sumber bebas lainnyo.
+'''Jan dikirim karya bahak cipta nan indak baizin!'''",
 'copyrightwarning2' => "Parhatikan bahawa sadoalah kontribusi terhadap {{SITENAME}} dapek disuntiang, diubah, atau dihapuih oleh panyumbang lainnyo. Jikok Sanak indak ingin tulisan Sanak disuntiang urang lain, jan kiriman ka siko.<br />Sanak jua bajanji bahawa iko adolah hasil karyo Sanak surang, atau disalin dari sumber miliak umum atau sumber bebas nan lain (liek $1 untuak informasi labiah lanjuik). '''JAN KIRIMAN KARYO NAN DILINDUNGI HAK CIPTA TANPA IJIN!'''",
 'longpageerror' => "'''KASALAHAN: Teks nan Sanak kiriman sagadang {{PLURAL:$1|kilobita|$1 kilobita}}, nan barati labiah gadang dari jumlah maksimum {{PLURAL:$2|kilobita|$2 kilobita}}. Teks indak dapek disimpan.'''",
 'readonlywarning' => "'''PARINGATAN: Basis data sadang dikunci karano pamaliharaan, sahinggo saat iko Sanak indak dapek manyimpan hasil suntiangan Sanak.
@@ -823,7 +823,7 @@ Tolong cek pabandiangan di bawah untuak mayakinkan bahwa bana itu nan Sanak ingi
 'undo-summary' => 'Mambatalan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])',
 
 # History pages
-'viewpagelogs' => 'Lihek log untuak laman ko',
+'viewpagelogs' => 'Caliak log untuak laman ko',
 'currentrev-asof' => 'Revisi terkini pado $1',
 'revisionasof' => 'Pabaikkan per $1',
 'revision-info' => 'Revisi sajak $1 dek $2',
@@ -832,9 +832,9 @@ Tolong cek pabandiangan di bawah untuak mayakinkan bahwa bana itu nan Sanak ingi
 'currentrevisionlink' => 'Revisi terkini',
 'cur' => 'kini',
 'last' => 'sabalun',
-'histlegend' => "Membandingkan pilihan: Tandoi dari revisi yang ingin dibandingkan dengan memilih kotak radionyo dan tekan tombol ''Bandingkan revisi pilihan''.<br />
-Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''' = perbedaan jo revisi sabalunnyo, '''{{int:k}}''' = suntingan ketek, '''{{int:b}}''' = suntingan bot.",
-'history-fieldset-title' => 'Telusuri riwayat',
+'histlegend' => "Membandingkan pilihan: Tandoi antaro duo versi nan ingin dibandingan dangan mamilih kotak radionyo, dan takan tombol ''Bandiangan versi tapiliah''.<br />
+Legend: '''({{int:kini}})''' = perbedaan jo versi taakhia, '''({{int:dulu}})''' = pabedoan jo versi sabalunnyo, '''{{int:k}}''' = suntiangan ketek, '''{{int:b}}''' = suntiangan bot.",
+'history-fieldset-title' => 'Talusuri riwayaik',
 'history-show-deleted' => 'Hanyo nan dihapuih',
 'histfirst' => 'Nan lamo',
 'histlast' => 'Nan baru',
@@ -854,7 +854,7 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 # Diffs
 'history-title' => 'Riwayaik pabaiakkan dari "$1"',
 'lineno' => 'Barih $1:',
-'compareselectedversions' => 'Bandingkan revisi pilihan',
+'compareselectedversions' => 'Bandiangan versi tapiliah',
 'editundo' => 'batalan',
 'diff-multi' => '({{PLURAL:$1|ciek |$1 revisi antaro}} oleh {{PLURAL:$2|ciek|$2 pangguno}} indak ditampilkan)',
 
@@ -903,7 +903,7 @@ Cubo awali permintaan awak tu jo ''all:'' untuak mancari sado kandungan (tamasua
 'powersearch' => 'Pencarian lanjut',
 'powersearch-legend' => 'Pencarian lanjut',
 'powersearch-ns' => 'Mancari di ruangnamo:',
-'powersearch-redir' => 'Senarai pengalihan',
+'powersearch-redir' => 'Dafta pangaliahan',
 'powersearch-field' => 'Mancari',
 
 # Preferences page
@@ -922,6 +922,9 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 
 'grouppage-sysop' => '{{ns:project}}:Pengurus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pangguno baru',
+
 # User rights log
 'rightslog' => 'Log parubahan hak akses',
 
@@ -949,7 +952,7 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 'rcshowhidemine' => '$1 suntingan denai',
 'rclinks' => 'Tampilkan $1 parubahan baru dalam $2 hari terakhir<br />$3',
 'diff' => 'bedo',
-'hist' => 'sajarah',
+'hist' => 'sijarah',
 'hide' => 'Suruakkan',
 'show' => 'Tampilkan',
 'minoreditletter' => 'k',
@@ -1040,9 +1043,6 @@ Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
 'linksearch' => 'Pranala lua',
 'linksearch-line' => '$1 tapauik dari $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pangguno baru',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(senarai anggota)',
 
@@ -1074,7 +1074,7 @@ Pastikan awak mainginkannyo, dan awak lah tahu sagalo akibatnyo dan sasuai jo [[
 'actioncomplete' => 'Proses selesai',
 'actionfailed' => 'Aksi gagal',
 'deletedtext' => '"$1" lah dihapuih.
-Lihek $2 untuak rekam jejak laman yang lah dihapuih.',
+Caliak $2 untuak rakam jajak laman nan lah dihapuih.',
 'dellogpage' => 'Log penghapusan',
 'deletecomment' => 'Alasan:',
 'deleteotherreason' => 'Alasan lain/tambahan:',
@@ -1107,6 +1107,9 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'restriction-type' => 'Perlindungan:',
 'restriction-level' => 'Tingkek larangan:',
 
+# Restrictions (nouns)
+'restriction-move' => 'Pindahan',
+
 # Undelete
 'undeletelink' => 'caliak/cegakkan',
 'undeleteviewlink' => 'caliak',
@@ -1117,13 +1120,13 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'blanknamespace' => '(Utamo)',
 
 # Contributions
-'contributions' => '{{GENDER:$1|User}} kontribusi',
+'contributions' => 'Kontribusi {{GENDER:$1|pangguno}}',
 'contributions-title' => 'Jariah pangguno untuak $1',
 'mycontris' => 'Jariah denai',
 'contribsub2' => 'Untuak $1 ($2)',
 'uctop' => '(atas)',
-'month' => 'Sejak bulan (dan sabalunnyo):',
-'year' => 'Sejak tahun (dan sabalunnyo):',
+'month' => 'Sajak bulan (dan sabalunnyo):',
+'year' => 'Sajak taun (dan sabalunnyo):',
 
 'sp-contributions-newbies' => 'Tampilkan jariah pangguno baru',
 'sp-contributions-blocklog' => 'log pambalokiran',
@@ -1133,7 +1136,7 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'sp-contributions-talk' => 'kecek',
 'sp-contributions-search' => 'Cari jariah',
 'sp-contributions-username' => 'Alamat IP atau namo pangguno:',
-'sp-contributions-toponly' => 'Hanyo manampilkan suntiang nan tarakhir',
+'sp-contributions-toponly' => 'Hanyo manampilan suntiangan nan taakhia',
 'sp-contributions-submit' => 'Cari',
 
 # What links here
@@ -1216,7 +1219,7 @@ Dalam kasus tu, apobilo diinginkan, awak dapek mamindahkan atau manggabuangkan l
 'tooltip-ca-edit' => 'Sanak dapek manyuntiang laman iko. Silakan gunokan tombol pratonton sabalun manyimpan',
 'tooltip-ca-addsection' => 'Mulai bagian baru',
 'tooltip-ca-viewsource' => 'Laman ko dilinduangi.
-Sanak hanyo buliah lihek sumbernyo sajo',
+Sanak hanyo buliah caliak sumbernyo sajo',
 'tooltip-ca-history' => 'Pabaiakkan sabalunnyo dari laman ko',
 'tooltip-ca-protect' => 'Lindungi laman ko',
 'tooltip-ca-delete' => 'Hapuih laman iko',
@@ -1238,7 +1241,7 @@ Sanak hanyo buliah lihek sumbernyo sajo',
 'tooltip-t-recentchangeslinked' => 'Parubahan baru halaman nan bakaik jo laman ko',
 'tooltip-feed-rss' => 'Umpan RSS untuak laman ko',
 'tooltip-feed-atom' => 'Umpan Atom untuak laman ko',
-'tooltip-t-contributions' => 'Lihek senarai jariah pangguno ko',
+'tooltip-t-contributions' => 'Caliak dafta jariah pangguno ko',
 'tooltip-t-emailuser' => 'Kirimkan e-mail ka pangguno ko',
 'tooltip-t-upload' => 'Muek berkas',
 'tooltip-t-specialpages' => 'Daftar dari kasado laman istimewa',
@@ -1247,16 +1250,16 @@ Sanak hanyo buliah lihek sumbernyo sajo',
 'tooltip-ca-nstab-main' => 'Caliak isi laman',
 'tooltip-ca-nstab-user' => 'Caliak laman pangguno',
 'tooltip-ca-nstab-special' => 'Iko adolah laman istimewa, awak indak buliah manyuntiangnyo',
-'tooltip-ca-nstab-project' => 'Lihek laman proyek',
+'tooltip-ca-nstab-project' => 'Caliak laman proyek',
 'tooltip-ca-nstab-image' => 'Caliak laman berkas',
-'tooltip-ca-nstab-template' => 'Lihek templat',
+'tooltip-ca-nstab-template' => 'Caliak templat',
 'tooltip-ca-nstab-help' => 'Caliak laman bantuan',
-'tooltip-ca-nstab-category' => 'Lihek laman kategori',
+'tooltip-ca-nstab-category' => 'Caliak laman kategori',
 'tooltip-minoredit' => 'Tandoi iko sabagai suntingan ketek',
 'tooltip-save' => 'Simpan yang awak ubah ko',
 'tooltip-preview' => 'Pratonton parubahan, harap gunokan iko sabalun disimpan',
 'tooltip-diff' => 'Caliak parubahan nan alah awak buek tu',
-'tooltip-compareselectedversions' => 'Lihek parbedaan antaro duo revisi pilihan laman ko',
+'tooltip-compareselectedversions' => 'Caliak pabedoan antaro duo revisi pilihan laman ko',
 'tooltip-watch' => 'Tambahkan laman ko ka senarai pantauan awak',
 'tooltip-recreate' => 'Buek baliak laman walaupun sabananyo pernah dihapuih',
 'tooltip-upload' => 'Mulai mamuek',
@@ -1308,7 +1311,7 @@ Nan lainnyo akan tasuruak sacaro default.
 
 # External editor support
 'edit-externally' => 'Suntiang berkas ko dengan aplikasi lua',
-'edit-externally-help' => '(Lihek [//www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuak maklumat lanjutnyo)',
+'edit-externally-help' => '(Caliak [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] untuak informasi lanjuiknyo)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'semua',
index c1bb820..6e1d506 100644 (file)
@@ -379,7 +379,7 @@ $messages = array(
 'tog-externaleditor' => 'По основно користи надворешен уредувач (само за стручњаци, потребно е посебно нагодување на сметачот. [//www.mediawiki.org/wiki/Manual:External_editors?uselang=mk Повеќе информации.])',
 'tog-externaldiff' => 'По основно користи надворешен програм за споредување верзии (само за стручњаци, потребно е специјално нагодување на сметачот. [//www.mediawiki.org/wiki/Manual:External_editors?uselang=mk Повеќе информации.])',
 'tog-showjumplinks' => 'Овозможи врски на пристапност „скокни на“',
-'tog-uselivepreview' => 'Користи преглед во живо (JavaScript, експериментално)',
+'tog-uselivepreview' => 'Користи преглед во живо (бара JavaScript) (експериментално)',
 'tog-forceeditsummary' => 'Извести ме кога нема опис на промените',
 'tog-watchlisthideown' => 'Скриј мои уредувања од списокот на набљудувања',
 'tog-watchlisthidebots' => 'Скриј ботовски уредувања од списокот на набљудувања',
@@ -482,6 +482,7 @@ $messages = array(
 'newwindow' => '(се отвора во нов прозорец)',
 'cancel' => 'Откажи',
 'moredotdotdot' => 'Повеќе...',
+'morenotlisted' => 'Повеќе (вон списокот)...',
 'mypage' => 'Страница',
 'mytalk' => 'Разговор',
 'anontalk' => 'Разговор за оваа IP-адреса',
@@ -597,7 +598,7 @@ $1',
 'policy-url' => 'Project:Начела',
 'portal' => 'Портал',
 'portal-url' => 'Project:Портал на заедницата',
-'privacy' => 'Ð\97аÑ\88Ñ\82иÑ\82а Ð½Ð° Ð¿Ñ\80иваÑ\82ноÑ\81Ñ\82а',
+'privacy' => 'Ð\97аÑ\88Ñ\82иÑ\82а Ð½Ð° Ð»Ð¸Ñ\87ниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и',
 'privacypage' => 'Project:Заштита на личните податоци',
 
 'badaccess' => 'Немате овластување',
@@ -868,6 +869,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'Непозната грешка во функцијата mail() на PHP',
 'user-mail-no-addy' => 'Се обидовте да испратите порака без да внесете адреса',
+'user-mail-no-body' => 'Се обидовте да испратите писмо кое е празно или со неразумно куса содржина.',
 
 # Change password dialog
 'resetpass' => 'Промена на лозинка',
@@ -1231,12 +1233,12 @@ $2
 'rev-deleted-text-unhide' => "Оваа ревизија на страницата е '''избришана'''.
 Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].
 Сепак можете [$1 да ја погледнете оваа ревизија] ако сакате да продолжите.",
-'rev-suppressed-text-unhide' => "Оваа ревизија на страница е '''скриена'''.
+'rev-suppressed-text-unhide' => "Оваа ревизија на страница е '''притаена'''.
 Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на прикривања].
 Сепак можете да ја [$1 погледнете оваа ревизија] ако сакате да продолжите.",
 'rev-deleted-text-view' => "Оваа ревизија на страницата е '''избришана'''.
 Можете да ја погледнете; повеќе подробности ќе најдете во [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
-'rev-suppressed-text-view' => "Оваа ревизија на страницата е '''скриена'''.
+'rev-suppressed-text-view' => "Оваа ревизија на страницата е '''притаена'''.
 Можете да ја погледнете; повеќе подробности ќе најдете во [{{fullurl:Special:Log/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].",
 'rev-deleted-no-diff' => "Не може да ја погледнете оваа разлика бидејќи една од ревизиите била '''избришана'''.
 Може да најдете повеќе подробности во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
@@ -1244,12 +1246,12 @@ $2
 'rev-deleted-unhide-diff' => "Една од ревизиите на оваа разлика е '''избришана'''.
 Повеќе подробности ќе најдете во [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].
 Сепак можете [$1 да ја видите оваа разлика] ако сакате да продолжите.",
-'rev-suppressed-unhide-diff' => "Една од ревизиите на оваа разлика е '''скриена'''.
+'rev-suppressed-unhide-diff' => "Една од ревизиите на оваа разлика е '''притаена'''.
 Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].
 Можете да [$1 ја видите оваа разлика] ако сакате да продолжите.",
 'rev-deleted-diff-view' => "Една од ревизиите на оваа разлика е '''избришана'''.
 Можете да ја погледате оваа разлика; подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришење].",
-'rev-suppressed-diff-view' => "Една од ревизиите на оваа разлика е '''скриена'''.
+'rev-suppressed-diff-view' => "Една од ревизиите на оваа разлика е '''притаена'''.
 Можете да ја погледате оваа разлика; подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].",
 'rev-delundel' => 'прикажи/скриј',
 'rev-showdeleted' => 'прикажи',
@@ -1281,7 +1283,7 @@ $2
 'revdelete-radio-same' => '(не менувај)',
 'revdelete-radio-set' => 'Да',
 'revdelete-radio-unset' => 'Не',
-'revdelete-suppress' => 'СкÑ\80иј податоци и од администраторите',
+'revdelete-suppress' => 'Ð\9fÑ\80иÑ\82аÑ\98Ñ\83вај податоци и од администраторите',
 'revdelete-unsuppress' => 'Отстрани ограничувања на обновени ревизии',
 'revdelete-log' => 'Причина:',
 'revdelete-submit' => 'Примени на одбрани {{PLURAL:$1|ревизија|ревизии}}',
@@ -1670,15 +1672,13 @@ $1",
 'right-sendemail' => 'Испраќање на е-пошта до други корисници',
 'right-passwordreset' => 'Преглед на пораки по е-пошта за промена на лозинка',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дневник на регистрирања на корисници',
+'newuserlogpagetext' => 'Ова е дневник на регистрирани корисници.',
+
 # User rights log
 'rightslog' => 'Дневник на менувања на кориснички права',
 'rightslogtext' => 'Ова е дневник на промени на кориснички права.',
-'rightslogentry' => 'Променето членство во група за $1 од $2 во $3',
-'rightslogentry-autopromote' => 'е автоматски унапреден од $2 во $3',
-'logentry-rights-rights' => '$1 го смени групното членство за $3 од $4 во $5',
-'logentry-rights-rights-legacy' => '$1 го смени групното членство за $3',
-'logentry-rights-autopromote' => '$1 е автоматски унапреден од $4 во $5',
-'rightsnone' => '(нема)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'читање на оваа страница',
@@ -2339,10 +2339,6 @@ $1',
 'activeusers-hidesysops' => 'Скриј администратори',
 'activeusers-noresult' => 'Нема пронајдено корисници.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник на регистрирања на корисници',
-'newuserlogpagetext' => 'Ова е дневник на регистрирани корисници.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права на кориснички групи',
 'listgrouprights-summary' => 'Следи список на кориснички групи утврдени на ова вики, заедно со нивните придружни права на пристап.
@@ -2480,6 +2476,8 @@ $UNWATCHURL
 
 Ваши мислења, прашања и повеќе помош:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'создадена',
+'changed' => 'изменета',
 
 # Delete
 'deletepage' => 'Избриши страница',
@@ -2551,6 +2549,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] преместена како [[$2]]',
 'protect-badnamespace-title' => 'Незаштитлив именски простор',
 'protect-badnamespace-text' => 'Страниците во овој именски простор не можат да се заштитуваат.',
+'protect-norestrictiontypes-text' => 'Страницава не може да се заштити бидејќи нема расположиви типови на ограничување.',
+'protect-norestrictiontypes-title' => 'Незаштитливи страници',
 'protect-legend' => 'Потврдете ја заштитата',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Истекува:',
@@ -2567,9 +2567,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'Оваа страница е моментално заштитена бидејќи е вклучена во {{PLURAL:$1|следнава страница, за која е|следниве страници, за кои се}} под каскадна заштита.
 Можете да го измените степенот на заштита, но тоа нема да влијае на каскадната заштита.',
 'protect-default' => 'Допуштено за сите корисници',
-'protect-fallback' => 'Ð\91аÑ\80аÑ\98 Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð¾Ð´ „$1“',
-'protect-level-autoconfirmed' => 'Ð\91локиÑ\80аÑ\98 Ð½Ð¾Ð²Ð¸ Ð¸ Ð½ÐµÑ\80егиÑ\81Ñ\82Ñ\80иÑ\80ани корисници',
-'protect-level-sysop' => 'Само администратори',
+'protect-fallback' => 'Ð\94опÑ\83Ñ\88Ñ\82аÑ\98 Ñ\81амо ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ñ\81о Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° „$1“',
+'protect-level-autoconfirmed' => 'Ð\94опÑ\83Ñ\88Ñ\82аÑ\98 Ñ\81амо Ð°Ð²Ñ\82опоÑ\82вÑ\80дени корисници',
+'protect-level-sysop' => 'Ð\94опÑ\83Ñ\88Ñ\82аÑ\98 Ñ\81амо администратори',
 'protect-summary-cascade' => 'каскада',
 'protect-expiring' => 'истекува на $1 (UTC)',
 'protect-expiring-local' => 'истекува $1',
@@ -2878,9 +2878,9 @@ $1',
 Ако не изберете автоматско подновување, проверете на [[Special:DoubleRedirects|двојни]] или [[Special:BrokenRedirects|прекинати пренасочувања]].
 На вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.
 
\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''Ð\9dÐ\95Ð\9cÐ\90''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80азна Ð¸Ð»Ð¸ Ð°ÐºÐ¾ е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.
\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''нема''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð½Ðµ е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.
 
-'''ПРЕДУПРЕДУВАЊЕ!'''
+'''Предупредување!'''
 Ова може да биде драстична и неочекувана промена за популарна страница;
 осигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
 'movepagetext-noredirectfixer' => "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.
@@ -3247,6 +3247,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' => 'инфо',
@@ -3255,6 +3256,10 @@ $1',
 'pageinfo-protect-cascading' => 'Каскадната заштита на страниците важи од тука',
 'pageinfo-protect-cascading-yes' => 'Да',
 'pageinfo-protect-cascading-from' => 'Страници со каскадна заштита од',
+'pageinfo-category-info' => 'Информации за категоријата',
+'pageinfo-category-pages' => 'Број на страници',
+'pageinfo-category-subcats' => 'Број на поткатегории',
+'pageinfo-category-files' => 'Број на податотеки',
 
 # Skin names
 'skinname-standard' => 'Класично',
@@ -3348,6 +3353,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 минута|$1 минути}}',
 'hours' => '{{PLURAL:$1|$1 час|$1 часа}}',
 'days' => '{{PLURAL:$1|$1 ден|$1 дена}}',
+'months' => '{{PLURAL:$1|$1 месец|$1 месеци}}',
+'years' => '{{PLURAL:$1|$1 година|$1 години}}',
 'ago' => 'пред $1',
 'just-now' => 'Штотуку',
 
@@ -4233,7 +4240,7 @@ $5
 '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-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',
@@ -4257,6 +4264,10 @@ $5
 'logentry-newusers-create2' => 'Направена е корисничката сметка $3; создавач: $1',
 'logentry-newusers-autocreate' => 'Сметката $1 е создадена автоматски',
 'newuserlog-byemail' => 'испратена лозинка по е-пошта',
+'logentry-rights-rights' => '$1 го смени групното членство за $3 од $4 во $5',
+'logentry-rights-rights-legacy' => '$1 го смени групното членство за $3',
+'logentry-rights-autopromote' => '$1 е автоматски унапреден од $4 во $5',
+'rightsnone' => '(нема)',
 
 # Feedback
 'feedback-bugornote' => 'Ако сте спремни подробно да го опишете техничкиот проблем, тогаш [$1 пријавете грешка]. 
@@ -4309,7 +4320,8 @@ $5
 'api-error-nomodule' => 'Внатрешна грешка: нема зададено модул за подигање.',
 'api-error-ok-but-empty' => 'Внатрешна грешка: опслужувачот не одговара.',
 'api-error-overwrite' => 'Презапишувањето врз постоечки податотеки не е дозволено.',
-'api-error-stashfailed' => 'Внатрешна грешка: опслужувачот не успеа да ја складира привремената податотека.',
+'api-error-stashfailed' => 'Внатрешна грешка: Опслужувачот не успеа да ја складира привремената податотека.',
+'api-error-publishfailed' => 'Внатрешна грешка: Опслужувачот не успеа да ја објави привремената податотека.',
 'api-error-timeout' => 'Опслужувачот не одговори во очекуваното време.',
 'api-error-unclassified' => 'Се појави непозната грешка.',
 'api-error-unknown-code' => 'Непозната грешка: „$1“',
index 9f4e84a..a80943d 100644 (file)
@@ -365,7 +365,7 @@ $messages = array(
 'tog-externaleditor' => 'സ്വതേ ബാഹ്യ എഡിറ്റർ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [//www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])',
 'tog-externaldiff' => 'വ്യത്യാസം അറിയാൻ സ്വതേ ബാഹ്യ ഉപകരണങ്ങൾ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [//www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])',
 'tog-showjumplinks' => '"പോവുക" ഗമ്യത കണ്ണികൾ പ്രാപ്തമാക്കുക',
-'tog-uselivepreview' => 'തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (ജാവാസ്ക്രിപ്റ്റ്) (പരീക്ഷണാടിസ്ഥാനത്തിലുള്ളത്)',
+'tog-uselivepreview' => 'തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (ജാവാസ്ക്രിപ്റ്റ് ആവശ്യമാണ്) (പരീക്ഷണാടിസ്ഥാനം)',
 'tog-forceeditsummary' => 'തിരുത്തലുകളുടെ ചുരുക്കം നൽകിയില്ലെങ്കിൽ എന്നെ ഓർമ്മിപ്പിക്കുക',
 'tog-watchlisthideown' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് എന്റെ തിരുത്തലുകൾ മറയ്ക്കുക',
 'tog-watchlisthidebots' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് യന്ത്രങ്ങൾ വരുത്തിയ തിരുത്തലുകൾ മറയ്ക്കുക',
@@ -449,7 +449,7 @@ $messages = array(
 'category-empty' => "''ഈ വർഗ്ഗത്തിൽ താളുകളോ പ്രമാണങ്ങളോ ഇല്ല.''",
 'hidden-categories' => '{{PLURAL:$1|മറഞ്ഞിരിക്കുന്ന വർഗ്ഗം|മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങൾ}}',
 'hidden-category-category' => 'മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങൾ',
-'category-subcat-count' => '{{PLURAL:$2|ഈ വർഗ്ഗത്തിനു്‌ താഴെ നൽകിയിരിക്കുന്ന ഒരു ഉപവർഗ്ഗം മാത്രമാണുള്ളത്.|ഈ വർഗ്ഗത്തിനു്‌ $2 ഉപവർഗ്ഗങ്ങളുള്ളതിൽ {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}} താഴെ നൽകിയിരിക്കുന്നു.}}',
+'category-subcat-count' => '{{PLURAL:$2|ഈ വർഗ്ഗത്തിനു താഴെ നൽകിയിരിക്കുന്ന ഒരു ഉപവർഗ്ഗം മാത്രമാണുള്ളത്.|ഈ വർഗ്ഗത്തിന് ആകെ $2 ഉപവർഗ്ഗങ്ങൾ ഉള്ളതിൽ {{PLURAL:$1|ഒരു ഉപവർഗ്ഗം|$1 ഉപവർഗ്ഗങ്ങൾ}}, താഴെക്കൊടുത്തിരിക്കുന്നു.}}',
 'category-subcat-count-limited' => 'ഈ വർഗ്ഗത്തിനു താഴെ നൽകിയിരിക്കുന്ന {{PLURAL:$1|ഉപവർഗ്ഗമുണ്ട്|$1 ഉപവർഗ്ഗങ്ങളുണ്ട്}}.',
 'category-article-count' => '{{PLURAL:$2|ഈ വർഗ്ഗത്തിൽ താഴെ നൽകിയിരിക്കുന്ന ഒരു താൾ മാത്രമാണുള്ളത്.|ഈ വർഗ്ഗത്തിൽ $2 താളുകളുള്ളതിൽ {{PLURAL:$1|ഒരു താൾ|$1 എണ്ണം}} താഴെ നൽകിയിരിക്കുന്നു.}}',
 'category-article-count-limited' => 'ഈ വർഗ്ഗത്തിൽ താഴെ നൽകിയിരിക്കുന്ന {{PLURAL:$1|ഒരു താൾ ഉണ്ട്|$1 താളുകൾ ഉണ്ട്}}.',
@@ -465,6 +465,7 @@ $messages = array(
 'newwindow' => '(പുതിയ ജാലകത്തിൽ തുറന്നു വരും)',
 'cancel' => 'റദ്ദാക്കുക',
 'moredotdotdot' => 'കൂടുതൽ...',
+'morenotlisted' => 'ബാക്കി പട്ടികയിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല...',
 'mypage' => 'താൾ',
 'mytalk' => 'സംവാദത്താൾ',
 'anontalk' => 'ഈ ഐ.പി.യുടെ സം‌വാദം താൾ',
@@ -831,6 +832,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്',
 'user-mail-no-addy' => 'ഇമെയിൽ വിലാസം ഇല്ലാതെയാണ് ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചത്',
+'user-mail-no-body' => 'ശൂന്യമായതോ അസാമാന്യമായി ചെറുതോ ആയ ഉള്ളടക്കമുള്ള ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചു.',
 
 # Change password dialog
 'resetpass' => 'രഹസ്യവാക്ക് മാറ്റുക',
@@ -1605,15 +1607,13 @@ $1",
 'right-sendemail' => 'മറ്റുപയോക്താക്കൾക്ക് ഇമെയിൽ അയയ്ക്കുക',
 'right-passwordreset' => 'രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കാനുള്ള ഇമെയിലുകൾ കാണുക',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ',
+'newuserlogpagetext' => 'പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.',
+
 # User rights log
 'rightslog' => 'ഉപയോക്തൃ അവകാശ രേഖ',
 'rightslogtext' => 'ഈ പ്രവർത്തനരേഖ ഉപയോക്തൃ അവകാശങ്ങൾക്കുണ്ടായ മാറ്റങ്ങളുടേതാണ്.',
-'rightslogentry' => '$1 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $2 എന്നതിൽ നിന്നു $3 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
-'rightslogentry-autopromote' => '$2 എന്നതിൽ നിന്ന് $3 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
-'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
-'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 മാറ്റിയിരിക്കുന്നു',
-'logentry-rights-autopromote' => '$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
-'rightsnone' => '(ഒന്നുമില്ല)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ഈ താൾ വായിക്കുക',
@@ -2250,10 +2250,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'activeusers-hidesysops' => 'കാര്യനിർവാഹകരെ മറയ്ക്കുക',
 'activeusers-noresult' => 'ഉപയോക്താക്കളില്ല',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ',
-'newuserlogpagetext' => 'പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ഉപയോക്തൃവിഭാഗത്തിന്റെ അവകാശങ്ങൾ',
 'listgrouprights-summary' => 'ഈ വിക്കിയിൽ നിർവ്വചിക്കപ്പെട്ടിരിക്കുന്ന ഉപയോക്തൃസംഘങ്ങളെയും, ആ സംഘങ്ങൾക്ക് പ്രാപ്തമായിട്ടുള്ള അവകാശങ്ങളേയും താഴെ കുറിച്ചിരിക്കുന്നു.
@@ -2353,7 +2349,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 '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_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 കാണുക.',
@@ -2390,6 +2386,8 @@ $UNWATCHURL
 
 അഭിപ്രായം അറിയിക്കാനും മറ്റു സഹായങ്ങൾക്കും:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'സൃഷ്ടിച്ചു',
+'changed' => 'മാറ്റിയിരിക്കുന്നു',
 
 # Delete
 'deletepage' => 'താൾ മായ്ക്കുക',
@@ -2455,6 +2453,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] എന്ന താളിന്റെ പേർ [[$2]] എന്നാക്കിയിരിക്കുന്നു',
 'protect-badnamespace-title' => 'സംരക്ഷിക്കാനാവാത്ത നാമമേഖല',
 'protect-badnamespace-text' => 'ഈ നാമമേഖലയിലെ താളുകൾ സംരക്ഷിക്കാനാവില്ല.',
+'protect-norestrictiontypes-text' => 'പരിധി നിർണ്ണയിക്കാനുള്ള വിധം ഇല്ലാത്തതിനാൽ ഈ താൾ സംരക്ഷിക്കാനാവില്ല.',
+'protect-norestrictiontypes-title' => 'സംരക്ഷിക്കാനാവാത്ത താൾ',
 'protect-legend' => 'സം‌രക്ഷണം സ്ഥിരീകരിക്കുക',
 'protectcomment' => 'കാരണം:',
 'protectexpiry' => 'സംരക്ഷണ കാലാവധി:',
@@ -2470,9 +2470,9 @@ $UNWATCHURL
 '''$1''' എന്ന താളിന്റെ നിലവിലുള്ള ക്രമീകരണങ്ങൾ ഇതാ:",
 'protect-cascadeon' => 'ഈ താൾ നിർഝരിതസംരക്ഷിതമായ (cascading protection) {{PLURAL:$1|ഒരു താളിൽ|പല താളുകളിൽ}} ഉൾപ്പെടുത്തപ്പെടുത്തപ്പെട്ടിരിക്കുന്നതിനാൽ ഇത് സംരക്ഷിത താളാണ്. എന്നാൽ താങ്കൾക്ക് ഈ താളിന്റെ സംരക്ഷണമാനം മാറ്റുവാൻ കഴിയും, അങ്ങനെ ചെയ്താൽ നിർഝരിതസംരക്ഷണത്തിനു മാറ്റം വരികയില്ല.',
 'protect-default' => 'എല്ലാ ഉപയോക്താക്കളെയും അനുവദിക്കുക',
-'protect-fallback' => '"$1" à´\85à´¨àµ\81വാദà´\82 à´\86വശàµ\8dയമാണàµ\8dâ\80\8c',
-'protect-level-autoconfirmed' => 'à´\85à´\82à´\97à´¤àµ\8dവമàµ\86à´\9fàµ\81à´\95àµ\8dà´\95ാതàµ\8dà´¤ à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´¤à´\9fà´¯àµ\81à´\95',
-'protect-level-sysop' => 'സിസàµ\8bà´ªàµ\8dà´ªàµ\81à´\95ൾ à´®à´¾à´¤àµ\8dà´°à´\82',
+'protect-fallback' => '"$1" à´\85à´¨àµ\81വാദമàµ\81à´³àµ\8dà´³ à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
+'protect-level-autoconfirmed' => 'à´¸àµ\8dഥിരàµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
+'protect-level-sysop' => 'സിസàµ\8bà´ªàµ\8dà´ªàµ\81à´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
 'protect-summary-cascade' => 'നിർഝരിതം',
 'protect-expiring' => 'കാലാവധി തീരുന്നത് - $1 (UTC)',
 'protect-expiring-local' => '$1-നു കാലഹരണപ്പെടുന്നു',
@@ -2765,8 +2765,7 @@ $1',
 # Move page
 'move-page' => '$1 മാറ്റുക',
 'move-page-legend' => 'താൾ മാറ്റുക',
-'movepagetext' => "താഴെയുള്ള ഫോം ഒരു താളിനെ പുനർനാമകരണം ചെയ്യാനുള്ളതാണ്.
-താളിന്റെ പഴയരൂപങ്ങളും ഈ മാറ്റത്തിന് വിധേയമാക്കപ്പെടും.
+'movepagetext' => "താഴെയുള്ള ഫോം ഒരു താളിനെ പുനർനാമകരണം ചെയ്യാനുള്ളതാണ്, താളിന്റെ നാൾവഴിയും അക്കൂടെ പുതിയ പേരിലേയ്ക്ക് മാറുന്നതാണ്.
 പഴയ തലക്കെട്ട്, പുതിയ തലക്കെട്ടുള്ള താളിലേക്കുള്ള ഒരു തിരിച്ചുവിടൽ താളായി മാറും.
 പഴയ തലക്കെട്ടിലേക്കുള്ള തിരിച്ചുവിടലുകൾ യന്ത്രങ്ങൾ ഉപയോഗിച്ച് താങ്കൾക്ക് ശരിയാക്കാവുന്നതാണ്.
 അങ്ങനെ വേണ്ട എന്നാണ് താങ്കളാഗ്രഹിക്കുന്നതെങ്കിൽ [[Special:DoubleRedirects|ഇരട്ട തിരിച്ചുവിടലുകളോ]], [[Special:BrokenRedirects|ഫലപ്രദമല്ലാത്ത തിരിച്ചുവിടലുകളോ]] ഉണ്ടാകുന്നുണ്ടോയെന്ന് ദയവായി പരിശോധിക്കുക.
@@ -3139,6 +3138,10 @@ $1',
 'pageinfo-protect-cascading' => 'സംരക്ഷണങ്ങൾ ഇവിടെ നിന്ന് നിർഝരിതപ്പെടുത്തുന്നു',
 'pageinfo-protect-cascading-yes' => 'അതെ',
 'pageinfo-protect-cascading-from' => 'സംരക്ഷണങ്ങൾ നിർഝരിതപ്പെടുത്തുന്നത്',
+'pageinfo-category-info' => 'വർഗ്ഗത്തിന്റെ വിവരങ്ങൾ',
+'pageinfo-category-pages' => 'താളുകളുടെ എണ്ണം',
+'pageinfo-category-subcats' => 'ഉപവർഗ്ഗങ്ങളുടെ എണ്ണം',
+'pageinfo-category-files' => 'പ്രമാണങ്ങളുടെ എണ്ണം',
 
 # Skin names
 'skinname-standard' => 'സാർവത്രികം',
@@ -3229,6 +3232,8 @@ $1',
 'minutes' => '{{PLURAL:$1|ഒരു മിനിറ്റ്|$1 മിനിറ്റ്}}',
 'hours' => '{{PLURAL:$1|ഒരു മണിക്കൂർ|$1 മണിക്കൂർ}}',
 'days' => '{{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}',
+'months' => '{{PLURAL:$1|ഒരു മാസം|$1 മാസം}}',
+'years' => '{{PLURAL:$1|ഒരു വർഷം|$1 വർഷം}}',
 'ago' => '$1 മുമ്പ്',
 'just-now' => 'ഇപ്പോൾ',
 
@@ -3984,6 +3989,10 @@ $5
 'logentry-newusers-create2' => '$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 സൃഷ്ടിച്ചിരിക്കുന്നു',
 'logentry-newusers-autocreate' => '$1 എന്ന അംഗത്വം സ്വയം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു',
 'newuserlog-byemail' => 'രഹസ്യവാക്ക് ഇ-മെയിൽ വഴി അയച്ചിരിക്കുന്നു',
+'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
+'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 മാറ്റിയിരിക്കുന്നു',
+'logentry-rights-autopromote' => '$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
+'rightsnone' => '(ഒന്നുമില്ല)',
 
 # Feedback
 'feedback-bugornote' => 'സാങ്കേതിക പ്രശ്നം എന്താണെന്ന് വിവരിച്ചെഴുതാൻ താങ്കൾ തയ്യാറാണെങ്കിൽ [$1 ബഗ് അറിയിക്കുക].
index 7a9fb5e..79cfce4 100644 (file)
@@ -1335,15 +1335,13 @@ $1 тэмдэгтээс богино байх ёстой.',
 'right-sendemail' => 'Бусад хэрэглэгчид руу и-мэйл явуулах',
 'right-passwordreset' => 'Цахим шуудангийн нууц үгийг сэргээн харах',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Хэрэглэгч үүсгэлтийн лог',
+'newuserlogpagetext' => 'Энэ нь хэрэглэгч үүсгэлтийн лог юм.',
+
 # User rights log
 'rightslog' => 'Хэрэглэгчдийн эрхийн лог',
 'rightslogtext' => 'Энэ бол хэрэглэгчдийн эрхэд учруулсан өөрчлөлтүүдийн лог юм.',
-'rightslogentry' => '$1-н бүлгийн гишүүнчлэлийг $2-с $3 болгож өөрчиллөө',
-'rightslogentry-autopromote' => '$2 -оос $3 -руу автоматаар шилжив',
-'logentry-rights-rights' => '$1 $3 дахь грүпийн гишүүнчлэлээ $4 ээс $5 руу шилжүүллээ',
-'logentry-rights-rights-legacy' => '$1 $3 дэхь грүпийн гишүүнчлэлээ сольсон',
-'logentry-rights-autopromote' => '$1 $4 аас $5 руу автоматаар дэвшигдлээ',
-'rightsnone' => '(байхгүй)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'энэ хуудсыг унших',
@@ -1972,10 +1970,6 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'activeusers-hidesysops' => 'Администраторуудыг нуух',
 'activeusers-noresult' => 'Хэрэглэгч олдсонгүй.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Хэрэглэгч үүсгэлтийн лог',
-'newuserlogpagetext' => 'Энэ нь хэрэглэгч үүсгэлтийн лог юм.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Хэрэглэгчийн бүлгийн эрхүүд',
 'listgrouprights-summary' => 'Дараах нь энэ вики дээрх хэрэглэгчийн бүлгүүд болон тэдгээрийн эрх, зөвшөөрлүүдийн жагсаалт юм.
@@ -2105,6 +2099,8 @@ $UNWATCHURL
 
 Санал сэтгэгдэл болон тулгарсан бэрхшээлээ :
 {{canonicalurl:{{MediaWiki:Helppage}}}} хаягаар орж бичнэ үү',
+'created' => 'үүсгэсэн',
+'changed' => 'өөрчлөгдсөн',
 
 # Delete
 'deletepage' => 'Хуудсыг устга',
@@ -3489,6 +3485,10 @@ $5
 'revdelete-restricted' => 'системийн операторуудад тавигдсан хязгаарлалтууд',
 'revdelete-unrestricted' => 'системийн операторуудаас авч хаясан хязгаарлалтууд',
 'newuserlog-byemail' => 'мэйлээр явуулсан нууц үг',
+'logentry-rights-rights' => '$1 $3 дахь грүпийн гишүүнчлэлээ $4 ээс $5 руу шилжүүллээ',
+'logentry-rights-rights-legacy' => '$1 $3 дэхь грүпийн гишүүнчлэлээ сольсон',
+'logentry-rights-autopromote' => '$1 $4 аас $5 руу автоматаар дэвшигдлээ',
+'rightsnone' => '(байхгүй)',
 
 # Feedback
 'feedback-cancel' => 'Болих',
index 053e4f8..a42c163 100644 (file)
@@ -43,6 +43,7 @@
  * @author कोल्हापुरी
  * @author प्रणव कुलकर्णी
  * @author शࣿरीहरि
+ * @author संतोष दहिवळ
  */
 
 $namespaceNames = array(
@@ -453,6 +454,7 @@ $messages = array(
 'newwindow' => '(नवीन खिडकीत उघडते.)',
 'cancel' => 'खोडा',
 'moredotdotdot' => 'अजून...',
+'morenotlisted' => 'आणखी यादीत नाही...',
 'mypage' => 'माझे पान',
 'mytalk' => 'माझ्या चर्चा',
 'anontalk' => 'या अंकपत्त्याचे चर्चा पान उघडा',
@@ -699,6 +701,9 @@ $2',
 'ns-specialprotected' => 'विशेष पाने संपादित करता येत नाहीत.',
 'titleprotected' => "या शीर्षकाचे पान सदस्य [[User:$1|$1]]ने निर्मीत करण्यापासून सुरक्षित केलेले आहे.
 ''$2'' हे कारण नमूद केलेले आहे.",
+'invalidtitle-knownnamespace' => '"$2" नामविश्वात "$3" हे अयोग्य शीर्षक',
+'exception-nologin' => 'प्रवेश केलेला नाही',
+'exception-nologin-text' => 'हे करण्यासाठी आपल्याला या विकिवर सदस्यनावाने प्रवेश करायला हवा.',
 
 # Virus scanner
 'virus-badscanner' => "चुकीचे कॉन्फिगरेशन: व्हायरस स्कॅनर अनोळखी: ''$1''",
@@ -710,12 +715,16 @@ $2',
 
 तुम्ही अनामिकपणे {{SITENAME}}चा उपयोग करत राहू शकता, किंवा त्याच अथवा वेगळ्या सदस्य नावाने <span class='plainlinks'>[$1  पुन्हा दाखल होऊ शकता]</span>.
 आपण स्वत:च्या न्याहाळकाची सय (cache) रिकामी करत नाही तो पर्यंत काही पाने आपण अजून दाखल आहात, असे नुसतेच दाखवत राहू शकतील.",
+'welcomeuser' => 'स्वागत, $1!',
+'welcomecreation-msg' => 'तुमचे खाते उघडण्यात आले आहे.
+आपल्या [[Special:Preferences|{{SITENAME}} पसंती]] बदलण्यास विसरू नका.',
 'yourname' => 'तुमचे नाव',
 'yourpassword' => 'तुमचा परवलीचा शब्द',
 'yourpasswordagain' => 'तुमचा परवलीचा शब्द पुन्हा लिहा',
 'remembermypassword' => 'माझा प्रवेश या संगणकावर लक्षात ठेवा (जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवसांसाठी}})',
 'securelogin-stick-https' => 'प्रवेशानंतर एचटीटीपीएसच्या संपर्कात रहा',
 'yourdomainname' => 'तुमचे क्षेत्र (डॉमेन) :',
+'password-change-forbidden' => 'तुम्ही या विकिवर तुमचा संकेतशब्द बदलू शकत नाही.',
 'externaldberror' => 'विदागार ’खातरजमा’ (प्रमाणितीकरण) त्रुटी होती अथवा तुम्हाला तुमचे बाह्य खाते अद्ययावत  करण्याची परवानगी नाही.',
 'login' => 'प्रवेश करा',
 'nav-login-createaccount' => 'सदस्य प्रवेश',
@@ -777,6 +786,7 @@ $2',
 'emailconfirmlink' => 'आपला ई-मेल पत्ता तपासून पहा.',
 'invalidemailaddress' => 'तुम्ही दिलेला ई-मेल पत्ता चुकीचा आहे, कारण तो योग्यप्रकारे लिहिलेला नाही. कृपया योग्यप्रकारे ई-मेल पत्ता लिहा अथवा ती जागा मोकळी सोडा.',
 'cannotchangeemail' => 'या विकीवर खात्याचा ईमेल बदलता येत नाही',
+'emaildisabled' => 'हे संकेतस्थळ विपत्र पाठवू शकत नाही.',
 'accountcreated' => 'खाते उघडले.',
 'accountcreatedtext' => '$1 चे सदस्यखाते उघडले.',
 'createaccount-title' => '{{SITENAME}} साठीची सदस्य नोंदणी',
@@ -848,6 +858,7 @@ $2',
 'changeemail-oldemail' => 'सध्याचा ईमेल पत्ता :',
 'changeemail-newemail' => 'नवा ईमेल पत्ता:',
 'changeemail-none' => '(दिलेला नाही)',
+'changeemail-password' => 'तुमचा {{SITENAME}} संकेतांक:',
 'changeemail-submit' => 'ईमेल बदला',
 'changeemail-cancel' => 'रद्द करा',
 
@@ -1021,6 +1032,12 @@ $2',
 'edit-already-exists' => 'नवीन पान तयार करता येऊ शकले नाही.
 या नावाचे पान आधीच अस्तित्वात आहे.',
 
+# Content models
+'content-model-wikitext' => 'विकिमजकूर',
+'content-model-text' => 'सामान्य मजकूर',
+'content-model-javascript' => 'जावास्क्रिप्ट',
+'content-model-css' => 'सीएसएस',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => '”’इशारा:”’ या पानावर खूप सारे खर्चिक पृथक्करण क्रिया कॉल्स आहेत.
 
@@ -1524,12 +1541,13 @@ $1",
 'right-sendemail' => 'इतर सदस्यांना विपत्रे पाठवा',
 'right-passwordreset' => 'परवलीचा शब्द (पासवर्ड) पुन:स्थापित केल्याची इ मेल पहा.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'नवीन सदस्यांची नोंद',
+'newuserlogpagetext' => 'ही नवीन सदस्यांची नोंद यादी आहे.',
+
 # User rights log
 'rightslog' => 'सदस्य आधिकार नोंद',
 'rightslogtext' => 'ही सदस्य अधिकारांमध्ये झालेल्या बदलांची यादी आहे.',
-'rightslogentry' => '$1 चे ग्रुप सदस्यत्व $2 पासून $3 ला बदलण्यात आलेले आहे',
-'rightslogentry-autopromote' => '$2 ते $3 आपोआप नियुक्ती झाली.',
-'rightsnone' => '(काहीही नाही)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'हे पान वाचा',
@@ -1746,6 +1764,7 @@ $1',
 'backend-fail-notsame' => ' $1 येथे यापेक्षा विभिन्न असलेली संचिका पूर्वीच विद्यमान आहे',
 'backend-fail-invalidpath' => '$1 हा वैध संग्राहक-पथ नाही.',
 'backend-fail-delete' => '$1 ही संचिका (फाईल) बनवता आली नाही.',
+'backend-fail-describe' => '"$1" या संचिकेसाठी आपण मेटाडाटा बदलू शकत नाही.',
 'backend-fail-alreadyexists' => '$1 ही संचिका अगोदरच अस्तित्वात आहे.',
 'backend-fail-store' => '$1 ही संचिका $2मधे साठवू शकत नाही.',
 'backend-fail-copy' => '"$1" संचिकेची "$2" ही प्रत करता आली नाही.',
@@ -1886,6 +1905,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'uploadnewversion-linktext' => 'या संचिकेची नवीन आवृत्ती चढवा',
 'shared-repo-from' => '$1 पासून',
 'shared-repo' => 'एक मुक्त कोश',
+'upload-disallowed-here' => 'या संचिकेवर आपण पुनर्लिखाण करु शकत नाही.',
 
 # File reversion
 'filerevert' => '$1 पूर्वपद',
@@ -1990,6 +2010,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|बाइट|बाइट}}',
 'ncategories' => '$1 {{PLURAL:$1|वर्ग|वर्ग}}',
+'ninterwikis' => '$1 {{PLURAL:$1|आंतरविकि|आंतरविकि दुवे}}',
 'nlinks' => '$1 {{PLURAL:$1|दुवा|दुवे}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्य|सदस्य}}',
 'nrevisions' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}',
@@ -2018,6 +2039,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mostlinkedtemplates' => 'सर्वाधिक जोडलेले साचे',
 'mostcategories' => 'सर्वाधिक वर्गीकृत पाने',
 'mostimages' => 'सर्वाधिक जोडलेली चित्रे',
+'mostinterwikis' => 'सर्वाधिक आंतरविकि दुवे असणारी पाने',
 'mostrevisions' => 'सर्वाधिक बदललेले लेख',
 'prefixindex' => 'उपसर्ग असणाऱ्या लेखांची यादी',
 'prefixindex-namespace' => '($1 नामविश्व) हा  उपसर्ग असणारी सर्व पाने',
@@ -2086,6 +2108,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'allpagesprefix' => 'पुढील शब्दाने सुरू होणारी पाने दाखवा:',
 'allpagesbadtitle' => 'दिलेले शीर्षक चुकीचे किंवा आंतरभाषीय किंवा आंतरविकि शब्दाने सुरू होणारे होते. त्यात एक किंवा अधिक शीर्षकात न वापरता येणारी अक्षरे असावीत.',
 'allpages-bad-ns' => '{{SITENAME}}मध्ये "$1" हे नामविश्व नाही.',
+'allpages-hide-redirects' => 'पुनर्निर्देशने लपवा',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'आखेरचे दृश्य',
@@ -2130,10 +2153,6 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'activeusers-hidesysops' => 'प्रचालक लपवा',
 'activeusers-noresult' => 'एकही सदस्य सापडला नाही.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'नवीन सदस्यांची नोंद',
-'newuserlogpagetext' => 'ही नवीन सदस्यांची नोंद यादी आहे.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'सदस्य गट अधिकार',
 'listgrouprights-summary' => 'खाली या विकिवर दिलेली सदस्य गटांची यादी त्यांच्या अधिकारांसकट दर्शविलेली आहे. प्रत्येकाच्या अधिकारांची अधिक माहिती [[{{MediaWiki:Listgrouprights-helppage}}|इथे]] दिलेली आहे.',
@@ -2156,6 +2175,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mailnologin' => 'पाठविण्याचा पत्ता नाही',
 'mailnologintext' => 'इतर सदस्यांना विपत्र(ई-मेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि  प्रमाणित (ई-मेल) पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमुद असणे आवश्यक आहे.',
 'emailuser' => 'या सदस्याला ई-मेल पाठवा',
+'emailuser-title-target' => '{{GENDER:$1|सदस्याला}} विपत्र पाठवा',
 'emailuser-title-notarget' => 'विपत्र (ईमेल) उपयोगकर्ता',
 'emailpage' => 'विपत्र (ईमेल) उपयोगकर्ता',
 'emailpagetext' => 'जर या सदस्याने प्रमाणित विपत्र (ईमेल)पत्ता तीच्या अथवा त्याच्या सदस्य पसंतीत नमुद केला असेल,तर खालील सारणी तुम्हाला एक(च) संदेश पाठवेल.तुम्ही तुमच्या [[Special:Preferences|सदस्य पसंतीत]] नमुद केलेला विपत्र पत्ता "कडून" पत्त्यात येईल म्हणजे  प्राप्तकरता आपल्याला उत्तर देऊ शकेल.',
@@ -2227,6 +2247,11 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 '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_lastvisited' => 'तुमच्या शेवटच्या भेटीनंतरचे बदल बघणयासाठी पहा - $1.',
 'enotif_lastdiff' => 'हा बदल पहाण्याकरिता $1 पहा.',
 'enotif_anon_editor' => 'अनामिक उपयोगकर्ता $1',
@@ -2256,6 +2281,8 @@ $UNWATCHURL
 
 पुढील साहाय्य आणि प्रतिक्रिया:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'तयार केले',
+'changed' => 'बदलले',
 
 # Delete
 'deletepage' => 'पान वगळा',
@@ -2293,6 +2320,8 @@ $UNWATCHURL
 'rollback' => 'बदल वेगात माघारी न्या',
 'rollback_short' => 'द्रुतमाघार',
 'rollbacklink' => 'द्रुतमाघार',
+'rollbacklinkcount' => 'उलटवा $1 {{PLURAL:$1|संपादन|संपादने}}',
+'rollbacklinkcount-morethan' => '$1 पेक्षा अधिक उलटवा {{PLURAL:$1|संपादन|संपादने}}',
 'rollbackfailed' => 'द्रूतमाघार फसली',
 'cantrollback' => 'जुन्या आवृत्तीकडे परतवता येत नाही; शेवटचा संपादक या पानाचा एकमात्र लेखक आहे.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]] [[Special:Contributions/$2|{{int:contribslink}}]])चे शेवटाचे [[:$1]]वे संपादन माघारी परतवता येत नाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादीत केले आहे.
@@ -2319,6 +2348,8 @@ $UNWATCHURL
 'prot_1movedto2' => '"[[$1]]" हे पान "[[$2]]" मथळ्याखाली स्थानांतरित केले.',
 'protect-badnamespace-title' => 'असुरक्षणीय नामविश्व',
 'protect-badnamespace-text' => 'या नामविश्वातील पाने सुरक्षीत करता येत नाहीत',
+'protect-norestrictiontypes-text' => 'हे पान सुरक्षित होऊ शकत नाही कारण कोणताही सुरक्षापातळी प्रकार उपलब्ध नाही.',
+'protect-norestrictiontypes-title' => 'सुरक्षापातळी नसलेले पान',
 'protect-legend' => 'सुरक्षापातळीतील बदल निर्धारित करा',
 'protectcomment' => 'कारण:',
 'protectexpiry' => 'संपण्याचा कालावधी:',
@@ -2928,10 +2959,26 @@ $1',
 'pageinfo-header-basic' => 'मूलभूत माहिती',
 'pageinfo-header-edits' => 'संपादने',
 'pageinfo-header-restrictions' => 'पान सुरक्षा',
+'pageinfo-header-properties' => 'पानाची माहिती',
+'pageinfo-display-title' => 'दृश्य शीर्षक',
+'pageinfo-length' => 'पानाचा आकार (बाइट्समध्ये)',
+'pageinfo-language' => 'पानाच्या मजकूराची भाषा',
 'pageinfo-views' => 'अभिप्रायांची संख्या',
 'pageinfo-watchers' => 'पाहणाऱ्यांची संख्या',
+'pageinfo-redirects-name' => 'या पानाकडील पुनर्निर्देशने',
+'pageinfo-firsttime' => 'पान निर्मितीचा दिनांक',
+'pageinfo-lastuser' => 'अलीकडील संपादक',
+'pageinfo-lasttime' => 'अलीकडिल संपादनाचा दिनांक',
 'pageinfo-edits' => 'संपादनांची संख्या',
 'pageinfo-authors' => 'वेगळ्या लेखकांची संख्या',
+'pageinfo-toolboxlink' => 'पानाची माहिती',
+'pageinfo-redirectsto-info' => 'माहिती',
+'pageinfo-contentpage-yes' => 'होय',
+'pageinfo-protect-cascading-yes' => 'होय',
+'pageinfo-category-info' => 'वर्ग माहिती',
+'pageinfo-category-pages' => 'पानांची संख्या',
+'pageinfo-category-subcats' => 'उपवर्गांची संख्या',
+'pageinfo-category-files' => 'संचिकांची संख्या',
 
 # Skin names
 'skinname-standard' => 'अभिजात',
@@ -2985,6 +3032,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 पिक्सेल, संचिका आकारमान: $3, एमआयएमई प्रकार: $4, $5 {{PLURAL:$5|पान|पाने}}',
 'file-nohires' => 'यापेक्षा मोठे चित्र उपलब्ध नाही.',
 'svg-long-desc' => 'SVG संचिका, साधारणपणे $1 × $2 pixels, संचिकेचा आकार: $3',
+'svg-long-error' => 'अयोग्य SVG प्रकारातील संचिका: $1',
 'show-big-image' => 'संपूर्ण रिजोल्यूशन',
 'show-big-image-preview' => 'या झलकेचा आकार: $1. पिक्सेल',
 'show-big-image-other' => 'इतर {{PLURAL:$2|resolution|resolutions}}: $1.',
@@ -3016,7 +3064,10 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 मिनिट|$1 मिनिट}}',
 'hours' => '{{PLURAL:$1|$1 तास|$1 तास}}',
 'days' => '{{PLURAL:$1|$1 दिवस|$1 दिवस}}',
+'months' => '{{PLURAL:$1|$1 महिना|$1 महिने}}',
+'years' => '{{PLURAL:$1|$1 वर्ष|$1 वर्षे}}',
 'ago' => '$1 पूर्वी',
+'just-now' => 'लगेच',
 
 # Bad image list
 'bad_image_list' => 'रूपरेषा खालीलप्रमाणे आहे:
@@ -3756,6 +3807,8 @@ $5
 'logentry-newusers-create2' => '$1  ने  सदस्य खाते $3  निर्मित केले  आहे.',
 'logentry-newusers-autocreate' => '$1  खाते स्वयमेव निर्मित झाले आहे.',
 'newuserlog-byemail' => 'परवलीचा शब्द ई-मेल मार्फत पाठविलेला आहे',
+'logentry-rights-rights-legacy' => '$1 ने $3 चे ग्रुप सदस्यत्व बदलले',
+'rightsnone' => '(काहीही नाही)',
 
 # Feedback
 'feedback-bugornote' => 'जर आपण तांत्रिक प्रश्न  विस्तृतपणे मांडण्यास तयार असाल तर कृपया ($1 गणकदोष वृतांत) पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी "[ $3, $2]" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.',
index 0811cd8..243b3b2 100644 (file)
@@ -326,6 +326,7 @@ $messages = array(
 'newwindow' => '(dibuka di tetingkap baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lagi...',
+'morenotlisted' => 'Lain-lain yang tidak tersenarai...',
 'mypage' => 'Halaman',
 'mytalk' => 'Perbualan',
 'anontalk' => 'Perbualan bagi IP ini',
@@ -699,6 +700,7 @@ Sila tunggu sebentar dan cuba lagi.',
 # E-mail sending
 'php-mail-error-unknown' => 'Ralat tak diketahui dalam fungsi mail() PHP',
 'user-mail-no-addy' => 'E-eml cuba dihantar tanpa alamat e-mel',
+'user-mail-no-body' => 'Anda telah cuba menghantar e-mel dengan isi yang kosong atau terlampau ringkas.',
 
 # Change password dialog
 'resetpass' => 'Tukar kata laluan',
@@ -1479,15 +1481,13 @@ Tindakan ini tidak boleh dibatalkan.',
 'right-sendemail' => 'Mengirim e-mel kepada pengguna-pengguna lain',
 'right-passwordreset' => 'Lihat e-mel set semula kata laluan',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log akaun baru',
+'newuserlogpagetext' => 'Yang berikut ialah log penciptaan pengguna.',
+
 # User rights log
 'rightslog' => 'Log hak pengguna',
 'rightslogtext' => 'Ini ialah log perubahan terhadap hak pengguna.',
-'rightslogentry' => 'menukar keahlian kumpulan bagi $1 daripada $2 kepada $3',
-'rightslogentry-autopromote' => 'dinaik pangkat secara automatik dari $2 ke $3',
-'logentry-rights-rights' => '$1 menukar keahlian kumpulan untuk $3 dari $4 ke $5',
-'logentry-rights-rights-legacy' => '$1 menukar keahlian kumpulan untuk $3',
-'logentry-rights-autopromote' => '$1 dinaik pangkat secara automatik dari $4 ke $5',
-'rightsnone' => '(tiada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'membaca laman ini',
@@ -2127,10 +2127,6 @@ Memerlukan sekurang-kurangnya satu domain peringkat tinggi, cth. "*.org".<br />
 'activeusers-hidesysops' => 'Sorokkan pentadbir',
 'activeusers-noresult' => 'Tiada pengguna dijumpai.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log akaun baru',
-'newuserlogpagetext' => 'Yang berikut ialah log penciptaan pengguna.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hak kumpulan pengguna',
 'listgrouprights-summary' => 'Yang berikut ialah senarai kumpulan pengguna yang ditubuhkan di wiki ini dengan hak-hak masing-masing.
@@ -2268,6 +2264,8 @@ $UNWATCHURL
 
 Maklum balas dan bantuan selanjutnya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dicipta',
+'changed' => 'diubah',
 
 # Delete
 'deletepage' => 'Hapus laman',
@@ -2336,6 +2334,8 @@ Lihat [[Special:ProtectedPages|senarai laman terlindung]] untuk senarai laman-la
 'prot_1movedto2' => '[[$1]] dipindahkan ke [[$2]]',
 'protect-badnamespace-title' => 'Ruang nama yang tidak boleh dilindungi',
 'protect-badnamespace-text' => 'Laman-laman dalam ruang nama ini tidak boleh dilindungi.',
+'protect-norestrictiontypes-text' => 'Halaman ini tidak boleh dilindungi kerana tiadanya jenis-jenis sekatan yang disediakan.',
+'protect-norestrictiontypes-title' => 'Halaman tak terlindung',
 'protect-legend' => 'Sahkan perlindungan',
 'protectcomment' => 'Sebab:',
 'protectexpiry' => 'Sehingga:',
@@ -2993,6 +2993,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-magic-words' => 'Kata sakti ($1)',
 'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
 'pageinfo-templates' => 'Templat tertransklusi ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Halaman|Halaman-halaman}} yang tertransklusi pada ($1)',
 'pageinfo-toolboxlink' => 'Maklumat halaman',
 'pageinfo-redirectsto' => 'Melencong ke',
 'pageinfo-redirectsto-info' => 'maklumat',
@@ -3001,6 +3002,10 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-protect-cascading' => 'Perlindungan sedang melata dari sini',
 'pageinfo-protect-cascading-yes' => 'Ya',
 'pageinfo-protect-cascading-from' => 'Perlindungan sedang melata dari',
+'pageinfo-category-info' => 'Keterangan kategori',
+'pageinfo-category-pages' => 'Bilangan halaman',
+'pageinfo-category-subcats' => 'Bilangan subkategori',
+'pageinfo-category-files' => 'Bilangan fail',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3092,6 +3097,8 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.",
 'minutes' => '$1 minit',
 'hours' => '$1 jam',
 'days' => '$1 hari',
+'months' => '$1 bulan',
+'years' => '$1 tahun',
 'ago' => '$1 yang lalu',
 'just-now' => 'tadi',
 
@@ -3854,6 +3861,10 @@ Imej ditunjuk dalam leraian penuh, jenis fail yang lain dibuka dengan atur cara
 'logentry-newusers-create2' => 'Akaun pengguna $3 dibuka oleh $1',
 'logentry-newusers-autocreate' => 'Akaun $1 dibuka secara automatik',
 'newuserlog-byemail' => 'kata laluan dihantar melalui e-mel',
+'logentry-rights-rights' => '$1 menukar keahlian kumpulan untuk $3 dari $4 ke $5',
+'logentry-rights-rights-legacy' => '$1 menukar keahlian kumpulan untuk $3',
+'logentry-rights-autopromote' => '$1 dinaik pangkat secara automatik dari $4 ke $5',
+'rightsnone' => '(tiada)',
 
 # Feedback
 'feedback-bugornote' => 'Jika anda bersedia untuk menerangkan masalah teknikal secara terperinci, sila [$1 laporkan pepijat]. 
index 67ea8de..1845e5d 100644 (file)
@@ -1517,15 +1517,13 @@ Hawnhekk hawn valur iġġenerat b'mod każwali li inti tista' tuża: $1",
 'right-sendemail' => 'Jibgħat ittri-e lil utenti oħra',
 'right-passwordreset' => 'Jara l-messaġġi tal-impostazzjoni mill-ġdid tal-password',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Utenti ġodda',
+'newuserlogpagetext' => "Dan hu reġistru tal-kreazzjoni ta' kontijiet ġodda.",
+
 # User rights log
 'rightslog' => 'Drittijiet tal-utenti',
 'rightslogtext' => "Dan huwa r-reġistru tal-modifiki ta' drittijiet tal-utenti.",
-'rightslogentry' => "biddel is-sħubija ta' $1 minn $2 għal $3",
-'rightslogentry-autopromote' => 'ġie awtomatikament promoss minn $2 għal $3',
-'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',
-'rightsnone' => '(xejn)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'aqra din il-paġna',
@@ -2127,10 +2125,6 @@ Protokolli aċċettati: <code>$1</code> (jekk ma jiġi speċifikat l-ebda protok
 'activeusers-hidesysops' => 'Aħbi amministraturi',
 'activeusers-noresult' => 'L-ebda utent ma nstab.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Utenti ġodda',
-'newuserlogpagetext' => "Dan hu reġistru tal-kreazzjoni ta' kontijiet ġodda.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Drittijiet tal-grupp tal-utenti',
 'listgrouprights-summary' => "Hawn taħt hawn elenkati l-gruppi tal-utenti għal din il-wiki, bid-drittijiet ta' aċċess rispettiv.
@@ -2264,6 +2258,8 @@ $UNWATCHURL
 
 Biex tgħaddi kumment u biex tikseb iktar għajnuna:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'inħolqot',
+'changed' => 'modifikata',
 
 # Delete
 'deletepage' => 'Ħassar il-paġna',
@@ -3810,6 +3806,10 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 'logentry-newusers-create2' => 'Il-kont $3 ġie maħluq minn $1',
 'logentry-newusers-autocreate' => 'Il-kont $1 ġie maħluq awtomatikament',
 'newuserlog-byemail' => "il-password intbagħtet permezz ta' posta elettronika",
+'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',
+'rightsnone' => '(xejn)',
 
 # Feedback
 'feedback-subject' => 'Suġġett:',
index 18e0686..26ed430 100644 (file)
@@ -639,9 +639,11 @@ Causo l çponiblizes, este será outelizado pa te dar crédito pul tou trabalho.
 'right-move' => 'Arrastrar páiginas',
 'right-movefile' => 'Arrastrar fexeiros',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de criaçon de outelizadores',
+
 # User rights log
 'rightslog' => 'Registro de dreitos de l outelizador',
-'rightsnone' => '(nanhun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lher esta páigina',
@@ -846,9 +848,6 @@ Páiginas que steian ne ls [[Special:Watchlist|tous begiados]] son amostradas an
 # Special:ListUsers
 'listusers-submit' => 'Amostrar',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de criaçon de outelizadores',
-
 # Special:ListGroupRights
 'listgrouprights-rights' => 'Dreitos',
 'listgrouprights-members' => '(lista de nembros)',
@@ -875,6 +874,9 @@ Altaraçones feturas na tal páigina i páiginas de çcusson a eilha associadas
 'watching' => 'A begiar...',
 'unwatching' => 'A deixar de begiar...',
 
+'created' => 'criada',
+'changed' => 'demudada',
+
 # Delete
 'deletepage' => 'Botar fuora páigina',
 'delete-confirm' => 'Botar fuora "$1"',
@@ -1230,4 +1232,7 @@ Causo l fexeiro tenga sido demudado a partir de l sou stado oureginal, alguns de
 'tags-title' => 'Eitiquetas',
 'tags-edit' => 'eiditar',
 
+# New logging system
+'rightsnone' => '(nanhun)',
+
 );
index 2eac463..421949f 100644 (file)
@@ -894,11 +894,13 @@ Your e-mail address is not revealed when other users contact you.
 'right-userrights-interwiki' => 'အခြားဝီကီများမှ အသုံးပြုသူများ၏ အသုံးပြုသူအခွင့်အရေးများကို တည်းဖြတ်ရန်',
 'right-sendemail' => 'အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်',
 
+# Special:Log/newusers
+'newuserlogpage' => 'အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း',
+'newuserlogpagetext' => 'ဤသည်မှာ အသုံးပြုသူအသစ် ဖတ်တီးမှု မှတ်တမ်း ဖြစ်သည်။',
+
 # User rights log
 'rightslog' => 'အသုံးပြုသူ၏ အခွင့်အရေးများ မှတ်တမ်း',
 'rightslogtext' => 'ဤသည်မှာ အသုံးပြုသူအခွင့်အရေးများ၏ ပြောင်းလဲမှုများမှတ်တမ်းဖြစ်သည်။',
-'rightslogentry' => '$1 အတွက် အုပ်စုအသင်ဝင်ဖြစ်မှုကို အုပ်စု $2 မှ အုပ်စု $3 သို့ ပြောင်းလဲပြီး',
-'rightsnone' => '(ဘာမှမရှိ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ဤစာမျက်နှာကို ဖတ်ရန်',
@@ -1261,10 +1263,6 @@ Your e-mail address is not revealed when other users contact you.
 'activeusers-hidesysops' => 'အက်ဒမင်များကို ဝှက်ရန်',
 'activeusers-noresult' => 'အသုံးပြုသူ မတွေ့ပါ။',
 
-# Special:Log/newusers
-'newuserlogpage' => 'အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း',
-'newuserlogpagetext' => 'ဤသည်မှာ အသုံးပြုသူအသစ် ဖတ်တီးမှု မှတ်တမ်း ဖြစ်သည်။',
-
 # Special:ListGroupRights
 'listgrouprights' => 'အသုံးပြုသူအုပ်စု အခွင့်အရေးများ',
 'listgrouprights-group' => 'အုပ်စု',
@@ -1320,6 +1318,8 @@ Your e-mail address is not revealed when other users contact you.
 
 'enotif_impersonal_salutation' => '{{SITENAME}} အသုံးပြုသူ',
 'enotif_anon_editor' => 'အမည်မသိ အသုံးပြုသူ $1',
+'created' => 'ဖန်တီးလိုက်သည်',
+'changed' => 'ပြောင်းလဲလိုက်သည်',
 
 # Delete
 'deletepage' => 'စာမျက်နှာကိုဖျက်ပါ',
@@ -1909,6 +1909,7 @@ Your e-mail address is not revealed when other users contact you.
 'revdelete-restricted' => 'အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်',
 'revdelete-unrestricted' => 'အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်',
 'newuserlog-byemail' => 'စကားဝှက်ကို အီးမေးဖြင့် ပို့လိုက်ပါပြီ။',
+'rightsnone' => '(ဘာမှမရှိ)',
 
 # API errors
 'api-error-filename-tooshort' => 'ဖိုင်အမည်သည် တိုလွန်းသည်။',
index cefe191..a368246 100644 (file)
@@ -233,7 +233,7 @@ $messages = array(
 
 'underline-always' => 'Свал',
 'underline-never' => 'Зярдояк',
-'underline-default' => 'Ð\92аÑ\81нÑ\8fнÑ\8c Ð±Ñ\80аÑ\83зеÑ\80',
+'underline-default' => 'Ð\91Ñ\80аÑ\83зеÑ\80Ñ\8dнÑ\8c Ñ\83Ñ\88одкÑ\81 Ð»Ð°Ð´Ñ\81емаÑ\82не',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Витнема-петнема уминенть фонт стилезэ',
@@ -491,8 +491,8 @@ $messages = array(
 Пачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.',
 'missingarticle-rev' => '(лиякстомтома#: $1)',
 'missingarticle-diff' => '(Мейсэ явовить: $1, $2)',
-'internalerror' => 'Ð\9fоÑ\82монÑ\8c Ð¸Ð»Ñ\8cведÑ\8cкÑ\81',
-'internalerror_info' => 'Ð\9fоÑ\82монÑ\8c Ð¸Ð»Ñ\8cведÑ\8cкÑ\81: $1',
+'internalerror' => 'Потмоильведькс',
+'internalerror_info' => 'Потмоильведькс: $1',
 'fileappenderrorread' => '"$1" файлась эзь ловново поладомо шкастонзо.',
 'fileappenderror' => '"$1" файлась эзь поладово "$2" файлантень.',
 'filecopyerror' => '"$1" файлась эзь ванстово од "$2" файлакс.',
@@ -504,6 +504,7 @@ $messages = array(
 'unexpected' => 'Апак учонь вейкетстямо: "$1"="$2".',
 'formerror' => 'Ильведевкс: Формась а кучови',
 'badarticleerror' => 'Те лопасонть вешезь тевесь а тееви.',
+'cannotdelete-title' => '"$1" лопась а нардави',
 'badtitle' => 'Амаштовикс конякс',
 'badtitletext' => 'Вешезь лопанть лемезэ аволь виде, чаво, эли аволь видестэ сюлмазь келеньйутковань эли интервикинь лем. Паряк, лемсэнть тевс нолдазь анолдавикс тешкст.',
 'viewsource' => 'Ванномс лисьмапрянть',
@@ -512,9 +513,11 @@ $messages = array(
 'protectedpagetext' => 'Те лопась панжома экшсэ, илязо понго витнемс-петнемс эли лия тевс.',
 'viewsourcetext' => 'Те лопанть лисьмапрясь маштови ваномскак, лангстонзо саемс копияяк:',
 'sqlhidden' => '(SQL вешнемась кекшезь)',
+'namespaceprotected' => "'''$1''' лемпотмосонть арась видечить витнемс-петнемс лопатнесэ.",
 'ns-specialprotected' => '{{ns:special}} лем марто лопатне а витневить-петневить.',
 'titleprotected' => "Те коняксонть ванстызе [[Теиця:$1|$1]], кияк иляссо тее.
 Тувталось вана ''$2''.",
+'exception-nologin' => 'Эзить сова',
 
 # Virus scanner
 'virus-scanfailed' => 'сканнось эзь лисе (код $1)',
@@ -526,7 +529,9 @@ $messages = array(
 'yourpassword' => 'Салава валот:',
 'yourpasswordagain' => 'Омбоцеде сёрмадык кирдицянь леметь:',
 'remembermypassword' => 'Ледстемс совамом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
+'securelogin-stick-https' => 'Кирдемс "HTTPS" сюлмавкс совамодо мейлеяк',
 'yourdomainname' => 'Эсеть доменэть:',
+'password-change-forbidden' => 'Те викисэнть а полавтсак салававалот.',
 'login' => 'Совамо',
 'nav-login-createaccount' => 'Совамо / тейть совамотарка',
 'loginprompt' => '{{SITENAME}} сайтэнтень совамга эряви нолдамс тевс cookies.',
@@ -593,6 +598,7 @@ $messages = array(
 
 # Change password dialog
 'resetpass' => 'Полавтомс совамо валот',
+'resetpass_announce' => 'Совавить нурька шкань салававалсо, кона кучозель куляпаргозот. Совамот прядомга эряви путомс од салававал вана тезэень:',
 'resetpass_header' => 'Полавтомс совамо валот',
 'oldpassword' => 'Ташто совамо валот:',
 'newpassword' => 'Од совамо валот:',
@@ -865,6 +871,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'search-interwiki-default' => '$1 савкс:',
 'search-interwiki-more' => '(седе ламо)',
 'search-relatedarticle' => 'Малавикс',
+'mwsuggest-disable' => 'Лоткавтомс "AJAX" превспутыенть',
 'searcheverything-enable' => 'Вешнемс весе лем потмотнестэ',
 'searchrelated' => 'малавикс',
 'searchall' => 'весе',
@@ -914,6 +921,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'prefs-rendering' => 'Тюсозо-лангозо',
 'saveprefs' => 'Ванстомс',
 'resetprefs' => 'Нардамс апак вансто полавтнемат',
+'restoreprefs' => 'Велявтомс мекев весе ушодкс ладсематнень',
 'prefs-editing' => 'Витнема-петнема',
 'prefs-edit-boxsize' => 'Витнема-петнема вальманть сэрензэ-келензэ.',
 'rows' => 'Вал чилькстнэ (строкатне):',
@@ -985,9 +993,10 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'group-user-member' => '{{GENDER:$1|теиця}}',
 'group-autoconfirmed-member' => '
 {{GENDER:$1|сонсь кемекставиця теиця}}',
-'group-bot-member' => 'Бот',
-'group-sysop-member' => 'Администратор',
-'group-bureaucrat-member' => 'Бюрократ',
+'group-bot-member' => '{{GENDER:$1|Бот}}',
+'group-sysop-member' => '{{GENDER:$1|Администратор}}',
+'group-bureaucrat-member' => '
+{{GENDER:$1|Бюрократ}}',
 
 'grouppage-user' => '{{ns:project}}:Совицятне',
 'grouppage-bot' => '{{ns:project}}:Ботт',
@@ -1024,9 +1033,12 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'right-siteadmin' => 'Датабазань сёлгомо ды панжомо',
 'right-passwordreset' => 'Ваномс теицянь салава валонь полавтома е-сёрмат',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Теицянь шкамодо-теемадо конёв',
+'newuserlogpagetext' => 'Те теицянь шкавксто журнал',
+
 # User rights log
 'rightslog' => 'Уськетеицянть видечинть кемекстома',
-'rightsnone' => '(арасть)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'те лопань ловномо',
@@ -1087,6 +1099,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'newsectionsummary' => '/* $1 */ од пелькс',
 'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга (JavaScript эряви)',
 'rc-enhanced-hide' => 'Кекшемс келейстэ ёвтазенть',
+'rc-old-title' => 'васня сёрмадозель «$1» лем марто',
 
 # Recent changes linked
 'recentchangeslinked' => 'Сюлмавозь лиякстоматне',
@@ -1115,6 +1128,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'filestatus' => 'Авторонь видечинь статусозо:',
 'filesource' => 'Лисьмапрязо:',
 'uploadedfiles' => 'Ёвкстань файлат',
+'ignorewarnings' => 'А явомс мель «Ванок» серьгедематненень',
 'minlength1' => 'Файлалемесь аштезэ вейке эли седе ламо тешксттнэстэ.',
 'badfilename' => 'Файланть лемесь полавтозь "$1"-кс.',
 'filetype-missing' => 'Файланть арась поладкс пезэ (саемга «.jpg»).',
@@ -1312,6 +1326,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'mostimages' => 'Весемеде ламо сюлмавкс марто файлат',
 'mostrevisions' => 'Лопат конатнесэ теезь сехте ламо лиякстомтомат',
 'prefixindex' => 'Весе лопатне, конат саевить истямо икелькс пене марто',
+'prefixindex-namespace' => 'Весе лопат, косо лемушодксось ($1 лемпотмо)',
 'shortpages' => 'Нурькине лопат',
 'longpages' => 'Кувака лопат',
 'deadendpages' => 'Поладкстомо-лисемавтомо лопат',
@@ -1393,10 +1408,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'activeusers-hidesysops' => 'Кекшемс администратортнэнь',
 'activeusers-noresult' => 'Якинзэ-пакинзэ арасть',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Теицянь шкамодо-теемадо конёв',
-'newuserlogpagetext' => 'Те теицянь шкавксто журнал',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Теиця куронть видечинзэ',
 'listgrouprights-group' => 'Куро',
@@ -1448,6 +1459,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'enotif_impersonal_salutation' => '{{SITENAME}} теицясь',
 'enotif_lastdiff' => 'Те полавтоманть ваномга вант $1.',
 'enotif_anon_editor' => 'лемтеме теиця $1',
+'created' => 'теезь-шказь',
+'changed' => 'полавтозь',
 
 # Delete
 'deletepage' => 'Нардамс лопанть',
@@ -2213,6 +2226,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # New logging system
 'newuserlog-byemail' => 'салава валот кучозь е-сёрмасо',
+'rightsnone' => '(арасть)',
 
 # Feedback
 'feedback-subject' => 'Мезде:',
@@ -2220,6 +2234,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'feedback-cancel' => 'А теемс',
 'feedback-close' => 'Анок',
 
+# Search suggestions
+'searchsuggest-search' => 'Вешнемс',
+
 # API errors
 'api-error-filename-tooshort' => 'Керьмазлементь а саты кувалмозо',
 'api-error-illegal-filename' => 'Керьмазлемесь а маштови.',
index 7d54b31..48d2e38 100644 (file)
@@ -711,7 +711,6 @@ $2، $1',
 # User rights log
 'rightslog' => 'سیاهه اختیارای کاروری',
 'rightslogtext' => 'اینتا سیاهه تغییرای اختیارای کاروری هسته.',
-'rightsnone' => '(هچّی)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'این صفحه ره دچی‌ین',
@@ -864,6 +863,7 @@ $2، $1',
 'enotif_lastvisited' => 'بدی‌ین همه‌ی تغییرات از آخرین باری که سر بزونی وسّه $1 ره هارشین.',
 'enotif_lastdiff' => 'هارشائن این تغییر وسّه $1 ره بزنین.',
 'enotif_anon_editor' => 'نشناسی‌یه کارور $1',
+'created' => 'بساته بیّه',
 
 # Delete
 'deletepage' => 'صفحه پاک هاکردن',
@@ -1086,6 +1086,7 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ، $3 ره بدون اینکه مسیر تغییری درس بوه به $4 که مسیر تغییر بیه منتقل هاکرده',
 'logentry-newusers-newusers' => '$1  بساتن اتا حساب کاروری',
 'logentry-newusers-create' => '$1  بساتن اتا حساب کاروری',
+'rightsnone' => '(هچّی)',
 
 # Feedback
 'feedback-subject' => 'موضوع:',
index 239339b..e464a70 100644 (file)
@@ -739,7 +739,6 @@ Intlā ticnequi, tlācah quimatīzqueh motequi.',
 
 # User rights log
 'rightslog' => 'Tlatequitiltilīlli huelītiliztli tlahcuilōlloh',
-'rightsnone' => 'ahtlein',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ticpōhuāz inīn zāzanilli',
@@ -1058,6 +1057,8 @@ $UNWATCHURL
 
 Tētlamachītīliztli īhuān oc yeh tēpalehuiliztli:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ōmochīuh',
+'changed' => 'ōmotlacuep',
 
 # Delete
 'deletepage' => 'Ticpolōz inīn zāzanilli',
@@ -1503,6 +1504,9 @@ Niman tihuelīti [[Special:UserLogin|timocalaqui]] auh ticpactiāz huiquitica.',
 # HTML forms
 'htmlform-selectorother-other' => 'Occē',
 
+# New logging system
+'rightsnone' => 'ahtlein',
+
 # Search suggestions
 'searchsuggest-search' => 'Tlatēmoliztli',
 
index 78313ce..89ca035 100644 (file)
@@ -449,6 +449,7 @@ $messages = array(
 'newwindow' => '(åpnes i et nytt vindu)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Mer …',
+'morenotlisted' => 'Mer som ikke er oppført&nbsp;…',
 'mypage' => 'Min brukerside',
 'mytalk' => 'Min diskusjonsside',
 'anontalk' => 'Brukerdiskusjon for denne IP-adressen',
@@ -513,7 +514,7 @@ $messages = array(
 'unprotectthispage' => 'Endre beskyttelsen av denne siden',
 'newpage' => 'Ny side',
 'talkpage' => 'Diskuter denne siden',
-'talkpagelinktext' => 'Diskusjon',
+'talkpagelinktext' => 'diskusjon',
 'specialpage' => 'Spesialside',
 'personaltools' => 'Personlige verktøy',
 'postcomment' => 'Ny seksjon',
@@ -819,6 +820,7 @@ Du kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.',
 # E-mail sending
 'php-mail-error-unknown' => 'Ukjent feil i PHPs mail()-funksjon',
 'user-mail-no-addy' => 'Forsøkte å sende e-post uten e-postadresse',
+'user-mail-no-body' => 'Prøvde å sende e-post med tom eller for kort brødtekst.',
 
 # Change password dialog
 'resetpass' => 'Endre passord',
@@ -885,6 +887,7 @@ Midlertidig passord: $2',
 'changeemail-oldemail' => 'Nåværende e-postadresse:',
 'changeemail-newemail' => 'Ny e-postadresse:',
 'changeemail-none' => '(ingen)',
+'changeemail-password' => 'Ditt passord på {{SITENAME}}:',
 'changeemail-submit' => 'Endre e-post',
 'changeemail-cancel' => 'Avbryt',
 
@@ -1461,9 +1464,9 @@ Dette kan ikke tilbakestilles.',
 'prefs-emailconfirm-label' => 'E-postbekreftelse:',
 'prefs-textboxsize' => 'Størrelse på redigeringsvindu',
 'youremail' => 'E-post:',
-'username' => 'Brukernavn:',
-'uid' => 'Bruker-ID:',
-'prefs-memberingroups' => 'Medlem i følgende {{PLURAL:$1|gruppe|grupper}}:',
+'username' => '{{GENDER:$1|Brukernavn}}:',
+'uid' => '{{GENDER:$1|Bruker-ID}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Medlem}} i følgende {{PLURAL:$1|gruppe|grupper}}:',
 'prefs-registration' => 'Registreringstid:',
 'yourrealname' => 'Virkelig navn:',
 'yourlanguage' => 'Språk:',
@@ -1612,15 +1615,13 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'right-sendemail' => 'Send e-post til andre brukere',
 'right-passwordreset' => 'Vis e-poster over tilbakestilte passord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brukeropprettelseslogg',
+'newuserlogpagetext' => 'Dette er en logg over brukeropprettelser.',
+
 # User rights log
 'rightslog' => 'Brukerrettighetslogg',
 'rightslogtext' => 'Dette er en logg over endringer av brukerrettigheter.',
-'rightslogentry' => 'endret gruppe for $1 fra $2 til $3',
-'rightslogentry-autopromote' => 'ble automatisk forfremmet fra $2 til $3',
-'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',
-'rightsnone' => '(ingen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'se denne siden',
@@ -2243,7 +2244,7 @@ Se også [[Special:WantedCategories|ønskede kategorier]].',
 'linksearch-ok' => 'Søk',
 'linksearch-text' => 'Jokertegn slik som i «*.wikipedia.org» kan brukes.
 Det kreves at det oppgis minst et toppnivådomene, for eksempel «*.org».<br />
-Støttede protokoller: <code>$1</code> (ikke legg til noen av disse i søket ditt).',
+{{PLURAL:$2|Støttede protokoller}}: <code>$1</code> (ikke legg til noen av disse i søket ditt).',
 'linksearch-line' => '$1 lenkes fra $2',
 'linksearch-error' => 'Jokertegn kan kun brukes foran tjenernavnet.',
 
@@ -2262,10 +2263,6 @@ Støttede protokoller: <code>$1</code> (ikke legg til noen av disse i søket dit
 'activeusers-hidesysops' => 'Skjul administratorer',
 'activeusers-noresult' => 'Ingen brukere funnet.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brukeropprettelseslogg',
-'newuserlogpagetext' => 'Dette er en logg over brukeropprettelser.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rettigheter for brukergrupper',
 'listgrouprights-summary' => 'Følgende er en liste over brukergrupper som er definert på denne wikien, og hvilke rettigheter de har.
@@ -2331,8 +2328,8 @@ E-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil vis
 'watchnologin' => 'Ikke logget inn',
 'watchnologintext' => 'Du må være [[Special:UserLogin|logget inn]] for å kunne endre overvåkningslisten.',
 'addwatch' => 'Legg til i overvåkningslisten',
-'addedwatchtext' => "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]].
-Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp her, og siden vil fremstå '''uthevet''' i [[Special:RecentChanges|listen over siste endringer]] for å gjøre det lettere å finne den.",
+'addedwatchtext' => 'Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]] din.
+Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp der.',
 'removewatch' => 'Fjern fra overvåkningslisten',
 'removedwatchtext' => 'Siden «[[:$1]]» er fjernet fra [[Special:Watchlist|overvåkningslisten din]].',
 'watch' => 'Overvåk',
@@ -2366,7 +2363,7 @@ Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir lis
 'enotif_subject_moved' => '{{SITENAME}}-siden $1 har blitt flyttet av {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}}-siden $1 har blitt gjenopprettet av {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}}-siden $1 har blitt endret av {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => '{{SITENAME}}-siden $1 ble slettet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
+'enotif_body_intro_deleted' => '{{SITENAME}}-siden $1 ble slettet $PAGEEDITDATE av {{gender:$2|$2}}; se $3.',
 'enotif_body_intro_created' => '{{SITENAME}}-siden $1 ble opprettet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
 'enotif_body_intro_moved' => '{{SITENAME}}-siden $1 ble flyttet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
 'enotif_body_intro_restored' => '{{SITENAME}}-siden $1 ble gjenopprettet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
@@ -2401,6 +2398,8 @@ $UNWATCHURL
 
 Tilbakemelding og videre assistanse:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'opprettet',
+'changed' => 'endret',
 
 # Delete
 'deletepage' => 'Slett side',
@@ -2466,6 +2465,8 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over gjeld
 'prot_1movedto2' => '[[$1]] flyttet til [[$2]]',
 'protect-badnamespace-title' => 'Navnerom som ikke kan beskyttes',
 'protect-badnamespace-text' => 'Sider i dette navnerommet kan ikke beskyttes.',
+'protect-norestrictiontypes-text' => 'Denne siden kan ikke beskyttes fordi det ikke er noen tilgjengelige begrensningstyper.',
+'protect-norestrictiontypes-title' => 'Ubeskyttbar side',
 'protect-legend' => 'Bekreft låsing',
 'protectcomment' => 'Årsak:',
 'protectexpiry' => 'Utløper:',
@@ -2480,9 +2481,9 @@ Dette er de nåværende innstillingene for siden '''$1''':",
 'protect-cascadeon' => 'Denne siden er for tiden beskyttet fordi den er inkludert på følgende {{PLURAL:$1|side|sider}} som har dypbeskyttelse slått på.
 Du kan endre sidens beskyttelsesnivå, men det vil ikke påvirke dypbeskyttelsen.',
 'protect-default' => 'Tillat alle brukere',
-'protect-fallback' => 'Må ha «$1»-tillatelse',
-'protect-level-autoconfirmed' => 'Blokker uregistrerte og nye brukere',
-'protect-level-sysop' => 'Kun administratorer',
+'protect-fallback' => 'Tillat kun brukere med tillatelsen «$1»',
+'protect-level-autoconfirmed' => 'Tillat kun autobekreftede brukere',
+'protect-level-sysop' => 'Tillat kun administratorer',
 'protect-summary-cascade' => 'dypbeskyttelse',
 'protect-expiring' => 'utløper $1 (UTC)',
 'protect-expiring-local' => 'løper ut $1',
@@ -2576,7 +2577,7 @@ $1',
 'blanknamespace' => '(Hoved)',
 
 # Contributions
-'contributions' => 'Brukerbidrag',
+'contributions' => '{{GENDER:$1|Brukerbidrag}}',
 'contributions-title' => 'Brukerbidrag av $1',
 'mycontris' => 'Bidrag',
 'contribsub2' => 'For $1 ($2)',
@@ -2957,6 +2958,7 @@ Lagre den på din egen datamaskin og last den opp her.',
 'import-error-interwiki' => 'Siden «$1» ble ikke importert fordi navnet er reservert for ekstern lenking (interwiki).',
 'import-error-special' => 'Siden «$1» ble ikke importert fordi den tilhører et spesialnavnerom som ikke tillater sider.',
 'import-error-invalid' => 'Siden «$1» ble ikke importert fordi navnet er ugyldig.',
+'import-error-unserialize' => 'Revisjon $2 av siden «$1» kunne ikke serialiseres. Det ble rapportert at revisjonen bruker innholdsmodellen $3 serialisert som $4.',
 'import-options-wrong' => 'Feil {{PLURAL:$2|opsjon|opsjoner}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Den angitte grunnsiden har en ugyldig tittel.',
 'import-rootpage-nosubpage' => 'Navnerommet "$1" til grunnsiden tillater ikke undersider.',
@@ -3126,7 +3128,8 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-recent-authors' => 'Antall nylige forfattere',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
-'pageinfo-templates' => 'Transkludert {{PLURAL:$1|mal|maler}} ($1)',
+'pageinfo-templates' => 'Transkluderte {{PLURAL:$1|mal|maler}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Sider}} transkludert på ($1)',
 'pageinfo-toolboxlink' => 'Sideinformasjon',
 'pageinfo-redirectsto' => 'Omdirigerer til',
 'pageinfo-redirectsto-info' => 'info',
@@ -3135,6 +3138,10 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-protect-cascading' => 'Dypbeskyttelse starter herfra',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Dypbeskyttelse fra',
+'pageinfo-category-info' => 'Kategoriinformasjon',
+'pageinfo-category-pages' => 'Antall sider',
+'pageinfo-category-subcats' => 'Antall underkategorier',
+'pageinfo-category-files' => 'Antall filer',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3221,6 +3228,8 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 'minutes' => '{{PLURAL:$1|$1 minutt|$1 minutter}}',
 'hours' => '{{PLURAL:$1|$1 time|$1 timer}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dager}}',
+'months' => '{{PLURAL:$1|$1 måned|$1 måneder}}',
+'years' => '{{PLURAL:$1|$1 år}}',
 'ago' => '$1 siden',
 'just-now' => 'nettopp',
 
@@ -3997,6 +4006,10 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'logentry-newusers-create2' => 'Kontoen $3 ble opprettet av $1',
 'logentry-newusers-autocreate' => 'Konto $1 ble opprettet automatisk',
 'newuserlog-byemail' => 'passord sendt på e-post',
+'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',
+'rightsnone' => '(ingen)',
 
 # Feedback
 'feedback-bugornote' => 'Hvis du er klar til å sende inn en detaljert feilrapport, vennligst [$1 rapporter en feil].
index f815fcf..be27a74 100644 (file)
@@ -1341,11 +1341,13 @@ Dat kann nich wedder ungeschehn maakt warrn.',
 'right-siteadmin' => 'Datenbank sperren un wedder apen maken',
 'right-override-export-depth' => 'Exporteer Sieden, lenkt Sieden inslaten bet to en Deepd vun 5',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ne’e-Bruker-Logbook',
+'newuserlogpagetext' => 'Dit is dat Logbook för nee opstellte Brukerkonten.',
+
 # User rights log
 'rightslog' => 'Brukerrechten-Logbook',
 'rightslogtext' => 'In dit Logbook staht Ännern an de Brukerrechten.',
-'rightslogentry' => 'Grupp bi $1 vun $2 op $3 ännert.',
-'rightsnone' => '(kene)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'de Sied to lesen',
@@ -1806,10 +1808,6 @@ Kiek ok bi de [[Special:WantedCategories|wünschten Kategorien]].',
 'activeusers-hidesysops' => 'Administraters nich wiesen',
 'activeusers-noresult' => 'Keen Brukers funnen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ne’e-Bruker-Logbook',
-'newuserlogpagetext' => 'Dit is dat Logbook för nee opstellte Brukerkonten.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brukergruppen-Rechten',
 'listgrouprights-summary' => 'Dit is en List vun de Brukergruppen, de in dit Wiki defineert sünd, un de Rechten, de dor mit verbunnen sünd.
@@ -1917,6 +1915,8 @@ Du kriggst solang keen Bescheedgeev-E-Mails mehr, bet dat du de Siet wedder bes
 
 --
 De Instellungen vun dien Oppasslist to ännern, gah na: {{canonicalurl:Special:Watchlist/edit}}',
+'created' => 'opstellt',
+'changed' => 'ännert',
 
 # Delete
 'deletepage' => 'Siet wegsmieten',
@@ -3089,5 +3089,6 @@ Geev den Dateinaam ahn den Tosatz „{{ns:file}}:“ an.',
 'revdelete-restricted' => 'Inschränkungen för Administraters instellt',
 'revdelete-unrestricted' => 'Inschränkungen för Administraters rutnahmen',
 'newuserlog-byemail' => 'Passwoord per E-Mail toschickt',
+'rightsnone' => '(kene)',
 
 );
index a283803..fe35dac 100644 (file)
@@ -1578,12 +1578,13 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'right-sendemail' => 'Bericht versturen naor aandere gebrukers',
 'right-passwordreset' => 'Bekiek netpostberichten veur t opniej instellen van joew wachtwoord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek mit anwas',
+'newuserlogpagetext' => 'Hieronder staon de niej in-eschreven gebrukers',
+
 # User rights log
 'rightslog' => 'Gebrukersrechtenlogboek',
 'rightslogtext' => 'Dit is n logboek mit veraanderingen van gebrukersrechten',
-'rightslogentry' => 'Gebrukersrechten veur $1 ewiezigd van $2 naor $3',
-'rightslogentry-autopromote' => 'was automaties umhoge egaon van $2 naor $3',
-'rightsnone' => '(gien)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'disse zied lezen',
@@ -2217,10 +2218,6 @@ Ondersteunde protokollen: <code>$1</code> (zet t niet in joew zeukopdrachte).',
 'activeusers-hidesysops' => 'Beheerders verbargen',
 'activeusers-noresult' => 'Gien aktieve gebrukers evunnen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek mit anwas',
-'newuserlogpagetext' => 'Hieronder staon de niej in-eschreven gebrukers',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebrukersgroepen',
 'listgrouprights-summary' => "Op disse zied staon de gebrukersgroepen van disse wiki beschreven, mit de biebeheurende rechten.
@@ -2349,6 +2346,8 @@ $UNWATCHURL
 
 Opmarkingen en veerdere hulpe:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'an-emaakt',
+'changed' => 'ewiezigd',
 
 # Delete
 'deletepage' => 'Vortdoon',
@@ -3885,6 +3884,7 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'logentry-newusers-create2' => '$1 hef n gebruker $3 an-emaakt',
 'logentry-newusers-autocreate' => 'De gebruker $1 is automaties an-emaakt',
 'newuserlog-byemail' => 'wachtwoord is verstuurd via de netpost',
+'rightsnone' => '(gien)',
 
 # Feedback
 'feedback-bugornote' => 'A\'j zovere bin um n technies probleem nauwkeurig te beschrieven, [$1 meld dan n programmafout].
index 5691ef6..05f60a9 100644 (file)
@@ -1305,12 +1305,12 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'right-sendemail' => 'अन्य प्रयोगकर्ताहरुलाई इमेल गर्ने',
 'right-passwordreset' => 'पासवर्ड परिवर्तन गर्ने ईमेलहरु हेर्नुहोस',
 
+# Special:Log/newusers
+'newuserlogpage' => 'प्रयोगकर्ता श्रृजना लग',
+
 # User rights log
 'rightslog' => 'प्रयोगकर्ता अधिकार लग',
 'rightslogtext' => 'यो प्रयोगकर्ता अधिकारहरुको परिवर्तन लग हो ।',
-'rightslogentry' => '$1 समूह सदस्याता $2 बाट $3 मा परिवर्तन गरिएको छ',
-'rightslogentry-autopromote' => ' $2 बाट $3 मा स्वत: बढुवा गरिएको छ',
-'rightsnone' => '(कुनैपनि होइन)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'यो पृष्ठ पढ्ने',
@@ -1812,9 +1812,6 @@ $1',
 'activeusers-hidesysops' => 'प्रबन्धकहरु लुकाउने',
 'activeusers-noresult' => 'प्रयोगकर्ताहरु भेटिएनन्।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोगकर्ता श्रृजना लग',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोगकर्ता समूह अधिकार',
 'listgrouprights-summary' => 'निम्न सूची यस विकिमा परिभाषित समूहहरु र तिनीहरुले प्रयोगगर्न सक्ने संबद्ध  अधिकारहरुको हो।
@@ -1939,6 +1936,8 @@ $UNWATCHURL
 
 प्रतिक्रिया र अन्य सहयोगको निम्ति:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाइएको',
+'changed' => 'परिवर्तन भइसकेको',
 
 # Delete
 'deletepage' => 'पृष्ठ मेट्नुहोस्',
@@ -3434,6 +3433,7 @@ $5
 'revdelete-unrestricted' => 'प्रवन्धककोलागि निषेधहरु हटाइयो ।',
 'logentry-move-move' => '$1 द्वारा $3 पृष्ठलाई $4 मा सारियो',
 'newuserlog-byemail' => 'इ मेलबाट पठाइएको प्रवेशशव्द',
+'rightsnone' => '(कुनैपनि होइन)',
 
 # Feedback
 'feedback-subject' => 'विषय:',
index 036fcb7..cbb1938 100644 (file)
@@ -487,6 +487,7 @@ $messages = array(
 'newwindow' => '(opent in een nieuw venster)',
 'cancel' => 'Annuleren',
 'moredotdotdot' => 'Meer…',
+'morenotlisted' => 'Meer niet in de lijst...',
 'mypage' => 'Gebruikerspagina',
 'mytalk' => 'Overleg',
 'anontalk' => 'Overlegpagina voor dit IP-adres',
@@ -718,7 +719,7 @@ Mogelijk is deze al door iemand anders verwijderd.',
 'delete-hook-aborted' => 'Het verwijderen is afgebroken door een hook.
 Er is geen toelichting beschikbaar.',
 'badtitle' => 'Ongeldige paginanaam',
-'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikinaamkoppeling.
+'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikikoppeling.
 Wellicht bevat de paginanaam niet toegestane tekens.',
 'perfcached' => 'Deze gegevens komen uit een cache en zijn mogelijk niet actueel. Er {{PLURAL:$1|is maximaal één resultaat|zijn maximaal $1 resultaten}} beschikbaar in de cache.',
 'perfcachedts' => 'Deze gegevens komen uit een cache die voor het laatst is bijgewerkt op $2 om $3. Er {{PLURAL:$4|is maximaal één resultaat|zijn maximaal $4 resultaten}} beschikbaar in de cache.',
@@ -879,6 +880,7 @@ Wacht even voordat u het opnieuw probeert.',
 # E-mail sending
 'php-mail-error-unknown' => 'Er is een onbekende fout opgetreden in de mail()-functie van PHP',
 'user-mail-no-addy' => 'Geprobeerd een e-mail te verzenden zonder een e-mailadres.',
+'user-mail-no-body' => 'Er is geprobeerd een e-mail te verzenden zonder inhoud of met een hele korte inhoud.',
 
 # Change password dialog
 'resetpass' => 'Wachtwoord wijzigen',
@@ -1689,15 +1691,13 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'right-sendemail' => 'E-mail versturen aan andere gebruikers',
 'right-passwordreset' => 'E-mails voor wachtwoord opnieuw instellen bekijken',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek nieuwe gebruikers',
+'newuserlogpagetext' => 'Hieronder staan de nieuw ingeschreven gebruikers',
+
 # User rights log
 'rightslog' => 'Gebruikersrechtenlogboek',
 'rightslogtext' => 'Hieronder staan de wijzigingen in gebruikersrechten.',
-'rightslogentry' => 'heeft de gebruikersrechten voor $1 gewijzigd van $2 naar $3',
-'rightslogentry-autopromote' => 'is automatisch gepromoveerd van de groepen "$2" naar de groepen "$3"',
-'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',
-'rightsnone' => '(geen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'deze pagina te bekijken',
@@ -2367,10 +2367,6 @@ Heeft tenminste een topleveldomein nodig, zoals bijvoorbeeld "*.org".<br />
 'activeusers-hidesysops' => 'Beheerders verbergen',
 'activeusers-noresult' => 'Geen actieve gebruikers gevonden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek nieuwe gebruikers',
-'newuserlogpagetext' => 'Hieronder staan de nieuw ingeschreven gebruikers',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebruikersgroepen',
 'listgrouprights-summary' => 'Op deze pagina staan de gebruikersgroepen in deze wiki beschreven, met hun bijbehorende rechten.
@@ -2506,6 +2502,8 @@ $UNWATCHURL
 
 Terugkoppeling en verdere assistentie:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aangemaakt',
+'changed' => 'gewijzigd',
 
 # Delete
 'deletepage' => 'Pagina verwijderen',
@@ -2578,6 +2576,8 @@ Zie de [[Special:ProtectedPages|lijst met beveiligde pagina's]] voor alle beveil
 'prot_1movedto2' => '[[$1]] is hernoemd naar [[$2]]',
 'protect-badnamespace-title' => 'Niet te beveiligen naamruimte',
 'protect-badnamespace-text' => "Pagina's in deze naamruimte kunnen niet beveiligd worden.",
+'protect-norestrictiontypes-text' => 'Deze pagina kan niet beveiligd worden omdat er geen beperkingstypen beschikbaar zijn.',
+'protect-norestrictiontypes-title' => 'Niet te beveiligen pagina',
 'protect-legend' => 'Beveiliging bevestigen',
 'protectcomment' => 'Reden:',
 'protectexpiry' => 'Duur:',
@@ -2594,9 +2594,9 @@ Dit zijn de huidige instellingen voor de pagina '''$1''':",
 'protect-cascadeon' => "Deze pagina is beveiligd, omdat die in de volgende {{PLURAL:$1|pagina|pagina's}} is opgenomen, die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie.
 Het beveiligingsniveau wijzigen heeft geen enkel effect.",
 'protect-default' => 'Toestaan voor alle gebruikers',
-'protect-fallback' => 'Hiervoor is het recht "$1" nodig',
-'protect-level-autoconfirmed' => 'Blokkeren voor nieuwe en anonieme gebruikers',
-'protect-level-sysop' => 'Alleen beheerders',
+'protect-fallback' => 'Alleen gebruikers met het recht "$1" toestaan',
+'protect-level-autoconfirmed' => 'Alleen automatisch bevestigde gebruikers toestaan',
+'protect-level-sysop' => 'Alleen beheerders toestaan',
 'protect-summary-cascade' => 'cascade',
 'protect-expiring' => 'vervalt op $2 om $3 (UTC)',
 'protect-expiring-local' => 'vervalt op $1',
@@ -2734,7 +2734,7 @@ De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergege
 'isimage' => 'bestandskoppeling',
 'whatlinkshere-prev' => '{{PLURAL:$1|vorige|vorige $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|volgende|volgende $1}}',
-'whatlinkshere-links' => '← koppelingen naar deze pagina',
+'whatlinkshere-links' => '← koppelingen',
 'whatlinkshere-hideredirs' => 'doorverwijzingen $1',
 'whatlinkshere-hidetrans' => 'Transclusies $1',
 'whatlinkshere-hidelinks' => 'koppelingen $1',
@@ -3274,6 +3274,7 @@ Meestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisch woord|Magische woorden}} ($1)',
 'pageinfo-hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Gebruikt sjabloon|Gebruikte sjablonen}} ($1)',
+'pageinfo-transclusions' => "{{PLURAL:$1|Pagina|Pagina's}} getranscludeerd op ($1)",
 'pageinfo-toolboxlink' => 'Paginagegevens',
 'pageinfo-redirectsto' => 'Verwijst door naar',
 'pageinfo-redirectsto-info' => 'informatie',
@@ -3282,6 +3283,10 @@ Meestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.',
 'pageinfo-protect-cascading' => 'Beveiligingen werken vanaf hier door',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Pagina is beveiligd vanuit een andere pagina',
+'pageinfo-category-info' => 'Categoriegegevens',
+'pageinfo-category-pages' => "Aantal pagina's",
+'pageinfo-category-subcats' => 'Aantal subcategorieën',
+'pageinfo-category-files' => 'Aantal bestanden',
 
 # Skin names
 'skinname-standard' => 'Klassiek',
@@ -3370,6 +3375,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuut|$1 minuten}}',
 'hours' => '{{PLURAL:$1|$1 uur|$1 uur}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dagen}}',
+'months' => '{{PLURAL:$1|één maand|$1 maanden}}',
+'years' => '{{PLURAL:$1|één jaar|$1 jaar}}',
 'ago' => '$1 geleden',
 'just-now' => 'Daarnet',
 
@@ -4147,6 +4154,10 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'logentry-newusers-create2' => 'Gebruiker $3 is aangemaakt door $1',
 'logentry-newusers-autocreate' => 'De gebruiker $1 is automatisch aangemaakt',
 'newuserlog-byemail' => 'wachtwoord is verzonden per e-mail',
+'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',
+'rightsnone' => '(geen)',
 
 # Feedback
 'feedback-bugornote' => 'Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].
index 405992d..5d202e1 100644 (file)
@@ -449,6 +449,7 @@ $messages = array(
 'newwindow' => '(vert opna i eit nytt vindauge)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Meir …',
+'morenotlisted' => 'Meir som ikkje er lista opp …',
 'mypage' => 'Sida mi',
 'mytalk' => 'Diskusjon',
 'anontalk' => 'Diskusjonside for denne IP-adressa',
@@ -802,6 +803,7 @@ Du kan sjå bort frå denne meldinga dersom kontoen vart oppretta med eit uhell.
 # E-mail sending
 'php-mail-error-unknown' => 'Ukjend feil i PHPs mail()-funksjon',
 'user-mail-no-addy' => '↓Prøvde å senda e-post utan e-postadresse',
+'user-mail-no-body' => 'Freista å senda e-post med tom eller urimeleg stutt brødtekst.',
 
 # Change password dialog
 'resetpass' => 'Endra passord',
@@ -1326,7 +1328,7 @@ For å søkja i alle, bruk prefikset ''all:'' (det inkluderer diskusjonssider, m
 'powersearch-ns' => 'Søk i namnerom:',
 'powersearch-redir' => 'Vis omdirigeringar',
 'powersearch-field' => 'Søk etter',
-'powersearch-togglelabel' => 'Haka av:',
+'powersearch-togglelabel' => 'Hak av:',
 'powersearch-toggleall' => 'Alle',
 'powersearch-togglenone' => 'Ingen',
 'search-external' => 'Eksternt søk',
@@ -1570,15 +1572,13 @@ Dette kan ikkje tilbakestillast.',
 'right-sendemail' => 'Senda e-post til andre brukarar',
 'right-passwordreset' => 'Sjå e-postar for passord som er stilte attende',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brukaropprettingslogg',
+'newuserlogpagetext' => 'Dette er ein logg over oppretta brukarkontoar.',
+
 # User rights log
 'rightslog' => 'Brukartilgangslogg',
 'rightslogtext' => 'Dette er ein logg over endringar av brukartilgang.',
-'rightslogentry' => 'endra brukartilgangen til $1 frå $2 til $3',
-'rightslogentry-autopromote' => '↓vart automatisk forfremja frå $2 til $3',
-'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
-'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
-'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
-'rightsnone' => '(ingen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'sjå denne sida',
@@ -2212,10 +2212,6 @@ Det er påkravt med eit toppnivådomene, til dømes «*.org».<br />
 'activeusers-hidesysops' => 'Skjul administratorar',
 'activeusers-noresult' => 'Ingen brukarar funne.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brukaropprettingslogg',
-'newuserlogpagetext' => 'Dette er ein logg over oppretta brukarkontoar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rettar for brukargrupper',
 'listgrouprights-summary' => 'Følgjande liste viser brukargruppene som er definert på denne wikien, og kvar rettar dei har. Meir informasjon om dei ulike rettane ein kan ha finn ein [[{{MediaWiki:Listgrouprights-helppage}}|her]].',
@@ -2348,6 +2344,8 @@ $UNWATCHURL
 
 Attendemelding og hjelp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oppretta',
+'changed' => 'endra',
 
 # Delete
 'deletepage' => 'Slett sida',
@@ -2411,6 +2409,8 @@ Sjå [[Special:ProtectedPages|lista over verna sider]] for lista over vern som n
 'prot_1movedto2' => '«[[$1]]» flytt til «[[$2]]»',
 'protect-badnamespace-title' => 'Namnerommet kan ikkje vernast',
 'protect-badnamespace-text' => 'Sider i dette namnerommet kan ikkje vernast.',
+'protect-norestrictiontypes-text' => 'Sida kan ikkje vernast sidan det ikkje finst tilgjengelege restriksjonstypar.',
+'protect-norestrictiontypes-title' => 'Side som ikkje kan vernast',
 'protect-legend' => 'Stadfest vern',
 'protectcomment' => 'Grunngjeving:',
 'protectexpiry' => 'Endar:',
@@ -2424,9 +2424,9 @@ Sjå [[Special:ProtectedPages|lista over verna sider]] for lista over vern som n
 Her er dei noverande innstillingane for sida '''$1''':",
 'protect-cascadeon' => 'Denne sida er verna fordi ho er inkludert på {{PLURAL:$1|den opplista sida|dei opplista sidene}} som har djupvern slått på. Du kan endre på nivået til vernet av denne sida, men det vil ikkje ha innverknad på djupvernet.',
 'protect-default' => 'Tillat alle brukarar',
-'protect-fallback' => 'Må ha «$1»-tilgang',
-'protect-level-autoconfirmed' => 'Blokker nye og uregistrerte brukarar',
-'protect-level-sysop' => 'Berre administratorar',
+'protect-fallback' => 'Berre tillat brukarar med løyvet «$1»',
+'protect-level-autoconfirmed' => 'Berre tillat autostadfeste brukarar',
+'protect-level-sysop' => 'Berre tillat administratorar',
 'protect-summary-cascade' => 'djupvern',
 'protect-expiring' => 'endar $1 (UTC)',
 'protect-expiring-local' => 'endar $1',
@@ -2469,8 +2469,8 @@ Her er dei noverande innstillingane for sida '''$1''':",
 'viewdeletedpage' => 'Sjå sletta sider',
 'undeletepagetext' => '{{PLURAL:$1|Den følgjande sida er sletta, men ho|Dei følgjande $1 sidene er sletta, men dei}} finst enno i arkivet og kan attopprettast. Arkivet blir periodevis sletta.',
 'undelete-fieldset-title' => 'Attenderull endringar',
-'undeleteextrahelp' => "For å attoppretta heile historikken til sida, lat alle boksane vera vera tomme og trykk '''''{{int:undeletebtn}}'''''.
-For å berre attopretta delar av historikken, haka av boksane til dei relevante endringane og trykk '''''{{int:undeletebtn}}'''''.",
+'undeleteextrahelp' => "For å attoppretta heile historikken til sida, lat alle boksane vera tomme og trykk '''''{{int:undeletebtn}}'''''.
+For å berre attopretta delar av historikken, hak av boksane til dei relevante endringane og trykk '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|Éin versjon arkivert|$1 versjonar arkiverte}}',
 'undeletehistory' => 'Om du gjenopprettar sida vil alle endringar i historikken også bli gjenoppretta. Dersom ei ny side med same namn er oppretta etter slettinga, vil dei gjenoppretta endringane dukke opp før denne i endringshistorikken.',
 'undeleterevdel' => 'Gjenoppretting kan ikkje utførast om det resulterer i at den øvste endringa delvis vert sletta. I slike tilfelle må du fjerne merkinga av den siste sletta endringa.',
@@ -2515,9 +2515,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Namnerom:',
 'invert' => 'Vreng val',
-'tooltip-invert' => 'Haka av boksen for å gøyma endringar på sider i det valde namnerommet (og det tilknytte namnerommet om det er haka av)',
+'tooltip-invert' => 'Hak av boksen for å gøyma endringar på sider i det valde namnerommet (og det tilknytte namnerommet om det er haka av)',
 'namespace_association' => 'Tilknytt namnerom',
-'tooltip-namespace_association' => 'Haka av boksen for at diskusjonssida eller emnenamnerommet knytt til det valde namnerommet skal vera med òg',
+'tooltip-namespace_association' => 'Hak av boksen for at diskusjonssida eller emnenamnerommet knytt til det valde namnerommet skal vera med òg',
 'blanknamespace' => '(Hovud)',
 
 # Contributions
@@ -2622,7 +2622,7 @@ Sjå [[Special:BlockList|blokkeringslista]] for alle blokkeringane.',
 'blocklist-tempblocks' => 'Gøym mellombelse blokkeringar',
 'blocklist-addressblocks' => 'Gøym einskilde IP-blokkeringar',
 'blocklist-rangeblocks' => 'Gøym intervallblokkeringar',
-'blocklist-timestamp' => 'Tidsmerkje',
+'blocklist-timestamp' => 'Tidsmerke',
 'blocklist-target' => 'Mål',
 'blocklist-expiry' => 'Endar',
 'blocklist-by' => 'Blokkerande admin',
@@ -2708,11 +2708,15 @@ IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:Blo
 # Move page
 'move-page' => 'Flytt $1',
 'move-page-legend' => 'Flytt side',
-'movepagetext' => "Ved å bruke skjemaet nedanfor kan du få omdøypt ei side og flytt heile historikken til det nye namnet. Den gamle tittelen vil bli ei omdirigeringsside til den nye tittelen. Lenkjer til den gamle tittelen vil ikkje bli endra. Pass på å sjekke for doble eller dårlege omdirigeringar. Du er ansvarleg for at alle lenkjene stadig peiker dit det er meininga at dei skal peike.
+'movepagetext' => "Ved å bruka skjemaet nedanfor kan du få omdøypt ei side og flytt heile historikken til det nye namnet.
+Den gamle tittelen vil verta ei omdirigeringsside til den nye.
+Du kan oppdatera omdirigeringar som peikar til den opphavlege tittelen automatisk.
+Vel du å ikkje gjera dette, pass på å sjå etter [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|øydelagde omdirigeringar]].
 
-Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen. Du kan likevel flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, så lenge den sida du flytter attende til ikkje er vorten endra sidan flyttinga.
+Merk at sida '''ikkje''' vert flytt dersom det alt finst ei side med den nye tittelen, minder ho er ei omdirigering og ikkje har nokon endringshistorikk. Detter tyder at du kan omdøypa ei side attende til der ho vart omdøypt frå om du gjorde eit mistak, og du kan ikkje skriva over sider som finst.
 
-<b>ÅTVARING!</b> Dette kan vera ei drastisk og uventa endring for ei populær side; ver sikker på at du skjønner konsekvensane av dette før du fortset.",
+'''ÅTVARING!'''
+Dette kan vera ei drastisk og uventa endring for ei populær side; ver viss på at du skjøner konsekvensane av dette før du held fram.",
 'movepagetext-noredirectfixer' => "Nyttar ein skjemaet under får ein døypt om ei side og flytt heile historikken til det nye namnet. 
 Den gamle tittelen vil verta ei omdirigeringsside for den nye tittelen. 
 Pass på å sjå etter [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|uverksame]] omdirigeringar. 
@@ -2728,7 +2732,7 @@ ver viss på at du skjøner konsekvensane av flyttinga før du held fram.",
 *ei ikkje-tom diskusjonsside alt finst under det nye namnet, eller
 *du fjernar avhakinga i boksen nedanfor.
 
-I desse falla lyt du flytta eller fletta sida manuelt, om ynskeleg.",
+I desse falla lyt du flytta eller fletta sida manuelt, om ynskjeleg.",
 'movearticle' => 'Flytt side:',
 'moveuserpage-warning' => "'''Åtvaring:''' Du er i ferd med å flytta ei brukarside. Merk at berre sida vert flytt og at brukarnamnet '''ikkje''' vert endra.",
 'movenologin' => 'Ikkje innlogga',
@@ -2816,7 +2820,7 @@ Dersom du berre vil ha noverande versjon, kan du også bruke ei lenkje, til døm
 'allmessages' => 'Systemmeldingar',
 'allmessagesname' => 'Namn',
 'allmessagesdefault' => 'Standardtekst',
-'allmessagescurrent' => 'Noverande tekst',
+'allmessagescurrent' => 'Gjeldande meldingstekst',
 'allmessagestext' => 'Dette er ei liste over systemmeldingar i MediaWiki-namnerommet.
 Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] om du ynskjer å bidra til den generelle omsetjinga av MediaWiki.',
 'allmessagesnotsupportedDB' => "Denne sida kan ein ikkje bruka fordi «'''\$wgUseDatabaseMessages'''» er slått av.",
@@ -3055,6 +3059,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-magic-words' => '{{PLURAL:$1|Trylleord}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Løynd kategori|Løynde kategoriar}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Inkludert mal|Inkluderte malar}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Side inkludert|Sider inkluderte}} på ($1)',
 'pageinfo-toolboxlink' => 'Sideinformasjon',
 'pageinfo-redirectsto' => 'Omdirigerer til',
 'pageinfo-redirectsto-info' => 'info',
@@ -3063,6 +3068,10 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-protect-cascading' => 'Djupvern byrjar her',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Djupvern byrjar i',
+'pageinfo-category-info' => 'Kategoriinformasjon',
+'pageinfo-category-pages' => 'Tal sider',
+'pageinfo-category-subcats' => 'Tal underkategoriar',
+'pageinfo-category-files' => 'Tal filer',
 
 # Skin names
 'skinname-standard' => 'Klassisk',
@@ -3148,6 +3157,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minutt|$1 minutt}}',
 'hours' => '{{PLURAL:$1|$1 time|$1 timar}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dagar}}',
+'months' => '{{PLURAL:$1|éin månad|$1 månader}}',
+'years' => '{{PLURAL:$1|éitt år|$1 år}}',
 'ago' => '$1 sidan',
 'just-now' => 'akkurat no',
 
@@ -3898,6 +3909,10 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'logentry-newusers-create2' => 'Brukarkontoen $3 vart oppretta av $1',
 'logentry-newusers-autocreate' => 'Kontoen $1 vart oppretta av seg sjølv',
 'newuserlog-byemail' => 'passordet er sendt på e-post',
+'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
+'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
+'rightsnone' => '(ingen)',
 
 # Feedback
 'feedback-bugornote' => 'Er du klar til å skildra ein teknisk vanske i detalj, gjer vel å [$1 rapportera inn ein feil].
diff --git a/languages/messages/MessagesNo.php b/languages/messages/MessagesNo.php
deleted file mode 100644 (file)
index ca3f1b8..0000000
+++ /dev/null
@@ -1,3407 +0,0 @@
-<?php
-/** Norwegian (bokmål)‬ (‪norsk (bokmål)‬)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- * @author Jeblad
- */
-
-$fallback = 'nb';
-
-$messages = array(
-# User preference toggles
-'tog-underline' => 'Strek under lenker:',
-'tog-justify' => 'Blokkjusterte avsnitt',
-'tog-hideminor' => 'Skjul mindre redigeringer i siste endringer',
-'tog-hidepatrolled' => 'Skjul patruljerte redigeringer i siste endringer',
-'tog-newpageshidepatrolled' => 'Skjul patruljerte sider fra listen over nye sider.',
-'tog-extendwatchlist' => 'Utvid overvåkningslisten til å vise alle endringer, ikke bare de siste',
-'tog-usenewrc' => 'Forbedret siste endringer (krever JavaScript)',
-'tog-numberheadings' => 'Autonummerer overskrifter',
-'tog-showtoolbar' => 'Vis verktøylinje (JavaScript)',
-'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke (JavaScript)',
-'tog-editsection' => 'Rediger avsnitt ved hjelp av [rediger]-lenke',
-'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)',
-'tog-showtoc' => 'Vis innholdsfortegnelse (for sider med flere enn tre avsnitt)',
-'tog-rememberpassword' => 'Husk meg i denne nettleseren (i høyst $1 {{PLURAL:$1|dag|dager}})',
-'tog-watchcreations' => 'Overvåk sider jeg oppretter',
-'tog-watchdefault' => 'Overvåk alle sider jeg redigerer',
-'tog-watchmoves' => 'Overvåk sider jeg flytter',
-'tog-watchdeletion' => 'Overvåk sider jeg sletter',
-'tog-minordefault' => 'Merk i utgangspunktet alle redigeringer som mindre',
-'tog-previewontop' => 'Flytt forhåndsvisningen foran redigeringsboksen',
-'tog-previewonfirst' => 'Bruk forhåndsvisning ved første redigering av en side',
-'tog-nocache' => 'Deaktiver nettlesermellomlagring av sider («caching»)',
-'tog-enotifwatchlistpages' => 'Send meg en e-post når sider på overvåkningslisten blir endret',
-'tog-enotifusertalkpages' => 'Send meg en e-post ved endringer av brukerdiskusjonssiden min',
-'tog-enotifminoredits' => 'Send meg en e-post også ved mindre sideendringer',
-'tog-enotifrevealaddr' => 'Vis min e-postadresse i utgående meldinger',
-'tog-shownumberswatching' => 'Vis antall overvåkende brukere',
-'tog-oldsig' => 'Nåværende signatur:',
-'tog-fancysig' => 'Signatur som wikitekst uten automatisk lenke',
-'tog-externaleditor' => 'Bruk ekstern behandler som standard (kun for viderekomne, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
-'tog-externaldiff' => 'Bruk ekstern differanse som standard (kun for viderekomne, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
-'tog-showjumplinks' => 'Slå på «gå til»-lenker',
-'tog-uselivepreview' => 'Bruk levende forhåndsvisning (eksperimentell JavaScript)',
-'tog-forceeditsummary' => 'Advar meg når jeg ikke gir noen redigeringsforklaring',
-'tog-watchlisthideown' => 'Skjul egne endringer fra overvåkningslisten',
-'tog-watchlisthidebots' => 'Skjul robotendringer fra overvåkningslisten',
-'tog-watchlisthideminor' => 'Skjul mindre endringer fra overvåkningslisten',
-'tog-watchlisthideliu' => 'Skjul endringer av innloggede brukere fra overvåkningslisten',
-'tog-watchlisthideanons' => 'Skjul endringer av anonyme brukere fra overvåkningslisten',
-'tog-watchlisthidepatrolled' => 'Skjul patruljerte endringer fra overvåkningslisten',
-'tog-nolangconversion' => 'Slå av variantkonvertering',
-'tog-ccmeonemails' => 'Send meg kopier av e-poster jeg sender til andre brukere',
-'tog-diffonly' => 'Ikke vis sideinnhold under differ',
-'tog-showhiddencats' => 'Vis skjulte kategorier',
-'tog-norollbackdiff' => 'Ikke vis diff etter tilbakestilling',
-
-'underline-always' => 'Alltid',
-'underline-never' => 'Aldri',
-'underline-default' => 'Bruk nettleserstandard',
-
-# Font style option in Special:Preferences
-'editfont-style' => 'Endre stilen for skrifttypen i området:',
-'editfont-default' => 'Nettleserstandard',
-'editfont-monospace' => 'Skrift med fast bredde',
-'editfont-sansserif' => 'Sans-serif',
-'editfont-serif' => 'Serif',
-
-# Dates
-'sunday' => 'søndag',
-'monday' => 'mandag',
-'tuesday' => 'tirsdag',
-'wednesday' => 'onsdag',
-'thursday' => 'torsdag',
-'friday' => 'fredag',
-'saturday' => 'lørdag',
-'sun' => 'søn',
-'mon' => 'man',
-'tue' => 'tir',
-'wed' => 'ons',
-'thu' => 'tor',
-'fri' => 'fre',
-'sat' => 'lør',
-'january' => 'januar',
-'february' => 'februar',
-'march' => 'mars',
-'april' => 'april',
-'may_long' => 'mai',
-'june' => 'juni',
-'july' => 'juli',
-'august' => 'august',
-'september' => 'september',
-'october' => 'oktober',
-'november' => 'november',
-'december' => 'desember',
-'january-gen' => 'januar',
-'february-gen' => 'februar',
-'march-gen' => 'mars',
-'april-gen' => 'april',
-'may-gen' => 'mai',
-'june-gen' => 'juni',
-'july-gen' => 'juli',
-'august-gen' => 'august',
-'september-gen' => 'september',
-'october-gen' => 'oktober',
-'november-gen' => 'november',
-'december-gen' => 'desember',
-'jan' => 'jan',
-'feb' => 'feb',
-'mar' => 'mar',
-'apr' => 'apr',
-'may' => 'mai',
-'jun' => 'jun',
-'jul' => 'jul',
-'aug' => 'aug',
-'sep' => 'sep',
-'oct' => 'okt',
-'nov' => 'nov',
-'dec' => 'des',
-
-# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategorier}}',
-'category_header' => 'Sider i kategorien «$1»',
-'subcategories' => 'Underkategorier',
-'category-media-header' => 'Filer i kategorien «$1»',
-'category-empty' => "''Denne kategorien inneholder for tiden ingen artikler eller filer.''",
-'hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}}',
-'hidden-category-category' => 'Skjulte kategorier',
-'category-subcat-count' => '{{PLURAL:$2|Denne kategorien har kun den følgende underkategorien.|Denne kategorien har følgende {{PLURAL:$1|underkategori|$1 underkategorier}}, av totalt $2.}}',
-'category-subcat-count-limited' => 'Kategorien har følgende {{PLURAL:$1|underkategori|$1 underkategorier}}.',
-'category-article-count' => '{{PLURAL:$2|Denne kategorien inneholder kun den følgende siden.|Følgende {{PLURAL:$1|side|$1 sider}} er i denne kategorien, av totalt $2.}}',
-'category-article-count-limited' => 'Følgende {{PLURAL:$1|side|$1 sider}} er i denne kategorien.',
-'category-file-count' => '{{PLURAL:$2|Denne kategorien inneholder kun den følgende filen.|Følgende {{PLURAL:$1|fil|$1 filer}} er i denne kategorien, av totalt $2.}}',
-'category-file-count-limited' => 'Følgende {{PLURAL:$1|fil|$1 filer}} er i denne kategorien.',
-'listingcontinuesabbrev' => 'forts.',
-'index-category' => 'Indekserte sider',
-'noindex-category' => 'Ikke-indekserte sider',
-'broken-file-category' => 'Sider med brutte fillenker',
-
-'about' => 'Om',
-'article' => 'Innholdsside',
-'newwindow' => '(åpnes i et nytt vindu)',
-'cancel' => 'Avbryt',
-'moredotdotdot' => 'Mer …',
-'mypage' => 'Min side',
-'mytalk' => 'Min diskusjonsside',
-'anontalk' => 'Brukerdiskusjon for denne IP-adressen',
-'navigation' => 'Navigasjon',
-'and' => '&#32;og',
-
-# Cologne Blue skin
-'qbfind' => 'Finn',
-'qbbrowse' => 'Bla gjennom',
-'qbedit' => 'Rediger',
-'qbpageoptions' => 'Sideinnstillinger',
-'qbpageinfo' => 'Sideinformasjon',
-'qbmyoptions' => 'Egne innstillinger',
-'qbspecialpages' => 'Spesialsider',
-'faq' => 'Ofte stilte spørsmål',
-'faqpage' => 'Project:Ofte stilte spørsmål',
-
-# Vector skin
-'vector-action-addsection' => 'Nytt emne',
-'vector-action-delete' => 'Slett',
-'vector-action-move' => 'Flytt',
-'vector-action-protect' => 'Beskytt',
-'vector-action-undelete' => 'Gjenopprett',
-'vector-action-unprotect' => 'Endre beskyttelse',
-'vector-simplesearch-preference' => 'Aktiver forbedrede søkeforslag (kun for drakten Vector)',
-'vector-view-create' => 'Opprett',
-'vector-view-edit' => 'Rediger',
-'vector-view-history' => 'Vis historikk',
-'vector-view-view' => 'Les',
-'vector-view-viewsource' => 'Vis kilden',
-'actions' => 'Handlinger',
-'namespaces' => 'Navnerom',
-'variants' => 'Varianter',
-
-'errorpagetitle' => 'Feil',
-'returnto' => 'Tilbake til $1.',
-'tagline' => 'Fra {{SITENAME}}',
-'help' => 'Hjelp',
-'search' => 'Søk',
-'searchbutton' => 'Søk',
-'go' => 'Gå',
-'searcharticle' => 'Gå',
-'history' => 'Sidehistorikk',
-'history_short' => 'Historikk',
-'updatedmarker' => 'oppdatert siden mitt forrige besøk',
-'printableversion' => 'Utskriftsvennlig versjon',
-'permalink' => 'Permanent lenke',
-'print' => 'Skriv ut',
-'view' => 'Vis',
-'edit' => 'Rediger',
-'create' => 'Opprett',
-'editthispage' => 'Rediger siden',
-'create-this-page' => 'Opprett denne siden',
-'delete' => 'Slett',
-'deletethispage' => 'Slett denne siden',
-'undelete_short' => 'Gjenopprett {{PLURAL:$1|én revisjon|$1 revisjoner}}',
-'viewdeleted_short' => 'Vis {{PLURAL:$1|en slettet redigering|$1 slettede redigeringer}}',
-'protect' => 'Beskytt',
-'protect_change' => 'endre',
-'protectthispage' => 'Lås siden',
-'unprotect' => 'Endre beskyttelse',
-'unprotectthispage' => 'Endre beskyttelsen av denne siden',
-'newpage' => 'Ny side',
-'talkpage' => 'Diskuter denne siden',
-'talkpagelinktext' => 'Diskusjon',
-'specialpage' => 'Spesialside',
-'personaltools' => 'Personlige verktøy',
-'postcomment' => 'Ny seksjon',
-'articlepage' => 'Vis innholdsside',
-'talk' => 'Diskusjon',
-'views' => 'Visninger',
-'toolbox' => 'Verktøy',
-'userpage' => 'Vis brukerside',
-'projectpage' => 'Vis prosjektside',
-'imagepage' => 'Vis filside',
-'mediawikipage' => 'Vis beskjedside',
-'templatepage' => 'Vis mal',
-'viewhelppage' => 'Vis hjelpeside',
-'categorypage' => 'Vis kategoriside',
-'viewtalkpage' => 'Vis diskusjon',
-'otherlanguages' => 'På andre språk',
-'redirectedfrom' => '(Omdirigert fra $1)',
-'redirectpagesub' => 'Omdirigeringsside',
-'lastmodifiedat' => 'Denne siden ble sist endret $1 kl. $2.',
-'viewcount' => 'Denne siden er vist $1 {{PLURAL:$1|gang|ganger}}.',
-'protectedpage' => 'Låst side',
-'jumpto' => 'Gå til:',
-'jumptonavigation' => 'navigasjon',
-'jumptosearch' => 'søk',
-'view-pool-error' => 'Beklager, serverne er overbelastet for øyeblikket.
-For mange brukere forsøker å se denne siden.
-Vennligst vent en stund før du prøver å besøke denne siden på nytt.
-
-$1',
-'pool-timeout' => 'Tidsavbudd mens man ventet på låsing',
-'pool-queuefull' => 'Køen er full',
-'pool-errorunknown' => 'Ukjent feil',
-
-# 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' => 'Om {{SITENAME}}',
-'aboutpage' => 'Project:Om',
-'copyright' => 'Innholdet er tilgjengelig under $1.',
-'copyrightpage' => '{{ns:project}}:Opphavsrett',
-'currentevents' => 'Aktuelt',
-'currentevents-url' => 'Project:Aktuelt',
-'disclaimers' => 'Forbehold',
-'disclaimerpage' => 'Project:Generelle forbehold',
-'edithelp' => 'Redigeringshjelp',
-'edithelppage' => 'Help:Redigering',
-'helppage' => 'Help:Innhold',
-'mainpage' => 'Hovedside',
-'mainpage-description' => 'Hovedside',
-'policy-url' => 'Project:Retningslinjer',
-'portal' => 'Prosjektportal',
-'portal-url' => 'Project:Prosjektportal',
-'privacy' => 'Personvern',
-'privacypage' => 'Project:Personvern',
-
-'badaccess' => 'Rettighetsfeil',
-'badaccess-group0' => 'Du har ikke tilgang til å utføre handlingen du prøvde på.',
-'badaccess-groups' => 'Handlingen du prøvde å utføre kan kun utføres av brukere i {{PLURAL:$2|gruppa|gruppene}} $1.',
-
-'versionrequired' => 'Versjon $1 av MediaWiki påtrengt',
-'versionrequiredtext' => 'Versjon $1 av MediaWiki er nødvendig for å bruke denne siden. Se [[Special:Version|versjonsiden]]',
-
-'ok' => 'OK',
-'retrievedfrom' => 'Hentet fra «$1»',
-'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye meldinger',
-'newmessagesdifflink' => 'siste endring',
-'youhavenewmessagesmulti' => 'Du har nye beskjeder på $1',
-'editsection' => 'rediger',
-'editold' => 'rediger',
-'viewsourceold' => 'vis kilde',
-'editlink' => 'rediger',
-'viewsourcelink' => 'vis kilde',
-'editsectionhint' => 'Rediger avsnitt: $1',
-'toc' => 'Innhold',
-'showtoc' => 'vis',
-'hidetoc' => 'skjul',
-'collapsible-collapse' => 'skjul',
-'collapsible-expand' => 'vis',
-'thisisdeleted' => 'Se eller gjenopprett $1?',
-'viewdeleted' => 'Vis $1?',
-'restorelink' => '{{PLURAL:$1|én slettet revisjon|$1 slettede revisjoner}}',
-'feedlinks' => 'Mating:',
-'feed-invalid' => 'Ugyldig matingstype.',
-'feed-unavailable' => 'Abonnementskilder er ikke tilgjengelig',
-'site-rss-feed' => '$1 RSS-mating',
-'site-atom-feed' => '$1 Atom-mating',
-'page-rss-feed' => '«$1» RSS-mating',
-'page-atom-feed' => '«$1» Atom-mating',
-'red-link-title' => '$1 (siden finnes ikke)',
-'sort-descending' => 'Sorter i synkende rekkefølge',
-'sort-ascending' => 'Sorter i stigende rekkefølge',
-
-# Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Side',
-'nstab-user' => 'Brukerside',
-'nstab-media' => 'Mediaside',
-'nstab-special' => 'Spesialside',
-'nstab-project' => 'Prosjektside',
-'nstab-image' => 'Fil',
-'nstab-mediawiki' => 'Melding',
-'nstab-template' => 'Mal',
-'nstab-help' => 'Hjelp',
-'nstab-category' => 'Kategori',
-
-# Main script and global functions
-'nosuchaction' => 'Funksjonen finnes ikke',
-'nosuchactiontext' => 'Handlingen spesifisert i URL-en er ugyldig.
-Du kan ha skrevet URL-en feil, eller fulgt en link som var feil.
-Det kan også være en bug i {{SITENAME}}.',
-'nosuchspecialpage' => 'En slik spesialside finnes ikke',
-'nospecialpagetext' => 'Du ba om en ugyldig spesialside; en liste over gyldige spesialsider finnes på [[Special:SpecialPages|{{int:specialpages}}]].',
-
-# General errors
-'error' => 'Feil',
-'databaseerror' => 'Databasefeil',
-'dberrortext' => 'Det har oppstått en syntaksfeil i en databaseforespørsel.
-Dette kan tyde på en feil i programvaren.
-Forrige databaseforespørsel var:
-<blockquote><tt>$1</tt></blockquote>
-fra funksjonen «<tt>$2</tt>».
-Databasen returnerte feilen «<tt>$3: $4</tt>».',
-'dberrortextcl' => 'Det oppsto en syntaksfeil i en databaseforespørsel.
-Forrige databaseforespørsel var:
-«$1»
-fra funksjonen «$2».
-Databasen returnerte feilen «$3: $4».',
-'laggedslavemode' => 'Advarsel: Dette kan være en eldre versjon av siden.',
-'readonly' => 'Databasen er skrivebeskyttet',
-'enterlockreason' => 'Skriv en begrunnelse for skrivebeskyttelsen, inkludert et estimat for når den blir opphevet',
-'readonlytext' => 'Databasen er for øyeblikket skrivebeskyttet, sannsynligvis på grunn av rutinemessig vedlikehold.
-
-Administratoren som låste databasen ga forklaringen: $1',
-'missing-article' => 'Databasen fant ikke teksten på siden som den burde ha funnet, med navnet «$1» $2.
-
-Dette skyldes vanligvis at man følger en utdatert diff- eller historikklenke til en side som har blitt slettet.
-
-Om dette ikke er tilfellet kan du ha oppdaget en feil i programvaren.
-Vennligst rapporter dette til en [[Special:ListUsers/sysop|administrator]], oppgi da nettadressen.',
-'missingarticle-rev' => '(revisjon#: $1)',
-'missingarticle-diff' => '(diff: $1, $2)',
-'readonly_lag' => 'Databasen er automatisk skrivebeskyttet så slavetjenerne kan ta igjen mestertjeneren',
-'internalerror' => 'Intern feil',
-'internalerror_info' => 'Intern feil: $1',
-'fileappenderrorread' => 'Klarte ikke å lese «$1» når data skulle tilføyes.',
-'fileappenderror' => 'Kunne ikke legge "$1" til "$2".',
-'filecopyerror' => 'Klarte ikke å kopiere filen «$1» til «$2».',
-'filerenameerror' => 'Klarte ikke å døpe om filen «$1» til «$2».',
-'filedeleteerror' => 'Klarte ikke å slette filen «$1».',
-'directorycreateerror' => 'Klarte ikke å opprette mappe «$1».',
-'filenotfound' => 'Klarte ikke å finne filen «$1».',
-'fileexistserror' => 'Klarte ikke å skrive til filen «$1»: filen finnes fra før',
-'unexpected' => 'Uventet verdi: «$1»=«$2».',
-'formerror' => 'Feil: klarte ikke å sende skjema',
-'badarticleerror' => 'Handlingen kan ikke utføres på denne siden.',
-'cannotdelete' => 'Kunne ikke slette filen «$1». Den kan ha blitt slettet av noen andre.',
-'badtitle' => 'Ugyldig tittel',
-'badtitletext' => 'Den ønskede tittelen var ugyldig, tom eller feilaktig lenket fra en annen wiki.
-Det kan inneholder en eller flere tegn som ikke kan brukes i titler.',
-'querypage-no-updates' => 'Oppdateringer for denne siden er slått av. Data her blir ikke gjenoppfrisket.',
-'wrong_wfQuery_params' => 'Gale paramtere til wfQuery()<br />
-Funksjon: $1<br />
-Spørring: $2',
-'viewsource' => 'Vis kildetekst',
-'actionthrottled' => 'Handlingsgrense overskredet',
-'actionthrottledtext' => 'For å beskytte mot spam, kan du ikke utføre denne handlingen for mange ganger i løpet av et kort tidssrom, og du har overskredet denne grensen. Prøv igjen om noen minutter.',
-'protectedpagetext' => 'Denne siden har blitt låst for redigeringer.',
-'viewsourcetext' => 'Du kan se og kopiere kilden til denne siden:',
-'protectedinterface' => 'Denne siden viser brukergrensesnittet for programvaren, og er låst for å hindre misbruk.',
-'editinginterface' => "'''Advarsel:''' Du redigerer en side som brukes i grensesnittet for programvaren. Endringer på denne siden vil påvirke hvordan grensesnittet vil se ut. For oversettelser er det best om du bruker [//translatewiki.net/wiki/Main_Page?setlang=no translatewiki.net], prosjektet for oversettelse av MediaWiki.",
-'sqlhidden' => '(SQL-spørring skjult)',
-'cascadeprotected' => 'Denne siden er låst for redigering fordi den inkluderes på følgende sider som har dypbeskyttelse slått på:<!--{{PLURAL:$1}}-->
-$2',
-'namespaceprotected' => "Du har ikke tillatelse til å redigere sider i navnerommet '''$1'''.",
-'customcssprotected' => 'Du har ikke tillatelse til å redigere denne CSS-siden fordi den inneholder en annen brukers personlige innstillinger.',
-'customjsprotected' => 'Du har ikke tillatelse til å redigere denne JavaScript-siden fordi den inneholder en annen brukers personlige innstillinger.',
-'ns-specialprotected' => 'Sier i navnerommet {{ns:special}} kan ikke redigeres.',
-'titleprotected' => "Denne tittelen har blitt låst for oppretting av [[User:$1|$1]].
-Den angitte grunnen er ''$2''.",
-
-# Virus scanner
-'virus-badscanner' => "Dårlig konfigurasjon: ukjent virusskanner: ''$1''",
-'virus-scanfailed' => 'skanning mislyktes (kode $1)',
-'virus-unknownscanner' => 'ukjent antivirusprogram:',
-
-# Login and logout pages
-'logouttext' => "'''Du er nå logget ut.'''
-
-Du kan fortsette å bruke {{SITENAME}} anonymt, eller [[Special:UserLogin|logge inn igjen]] som samme eller annen bruker.
-Merk at noen sider kan vise at du fortsatt er logget inn fram til du tømmer mellomlageret i nettleseren.",
-'welcomecreation' => '==Velkommen, $1!==
-Brukerkontoen din har blitt opprettet.
-Ikke glem å endre [[Special:Preferences|innstillingene]] dine.',
-'yourname' => 'Brukernavn:',
-'yourpassword' => 'Passord:',
-'yourpasswordagain' => 'Gjenta passord',
-'remembermypassword' => 'Husk meg på denne datamaskinen (i maks $1 {{PLURAL:$1|dag|dager}})',
-'securelogin-stick-https' => 'Vær fortsatt koblet til HTTPS etter innlogging',
-'yourdomainname' => 'Ditt domene',
-'externaldberror' => 'Det var en ekstern autentifiseringsfeil, eller du kan ikke oppdatere din eksterne konto.',
-'login' => 'Logg inn',
-'nav-login-createaccount' => 'Logg inn eller opprett en konto',
-'loginprompt' => 'Du må ha slått på informasjonskapsler for å logge in på {{SITENAME}}.',
-'userlogin' => 'Logg inn eller opprett en konto',
-'userloginnocreate' => 'Logg inn',
-'logout' => 'Logg ut',
-'userlogout' => 'Logg ut',
-'notloggedin' => 'Ikke logget inn',
-'nologin' => "Er du ikke registrert? '''$1'''.",
-'nologinlink' => 'Opprett en konto',
-'createaccount' => 'Opprett konto',
-'gotaccount' => "Har du allerede et brukernavn? '''$1'''.",
-'gotaccountlink' => 'Logg inn',
-'userlogin-resetlink' => 'Har du glemt påloggingsdetaljene dine?',
-'createaccountmail' => 'per e-post',
-'createaccountreason' => 'Årsak:',
-'badretype' => 'Passordene samsvarte ikke.',
-'userexists' => 'Brukernavnet er allerede i bruk.
-Velg et annet brukernavn.',
-'loginerror' => 'Innloggingsfeil',
-'createaccounterror' => 'Kunne ikke opprette konto: $1',
-'nocookiesnew' => 'Din brukerkonto er nå opprettet, men du har ikke logget på. {{SITENAME}} bruker informasjonskapsler («cookies») for å logge brukere på og du har slått dem av. Slå dem på for å kunne logge på med ditt nye brukernavn og passord.',
-'nocookieslogin' => '{{SITENAME}} bruker informasjonskapsler («cookies») for å logge brukere på og du har slått dem av. Slå dem på og prøv igjen.',
-'nocookiesfornew' => 'Brukerkontoen ble ikke opprettet siden vi ikke kunne bekrefte dens kilde.
-Kontroller at du har aktivert informasjonskapsler, oppdater siden og prøv igjen.',
-'noname' => 'Du har ikke oppgitt et gyldig brukernavn.',
-'loginsuccesstitle' => 'Du er nå logget inn',
-'loginsuccess' => 'Du er nå logget inn på {{SITENAME}} som «$1».',
-'nosuchuser' => 'Det eksisterer ingen bruker ved navn «$1».
-Merk at det skilles mellom store og små bokstaver.
-Sjekk stavemåten eller [[Special:UserLogin/signup|opprett en ny konto]].',
-'nosuchusershort' => 'Det finnes ingen bruker ved navn «$1». Kontroller stavemåten.',
-'nouserspecified' => 'Du må oppgi et brukernavn.',
-'login-userblocked' => 'Brukeren er blokkert. Innlogging er ikke tillatt.',
-'wrongpassword' => 'Du har oppgitt et ugyldig passord. Prøv igjen.',
-'wrongpasswordempty' => 'Du oppga ikke noe passord. Prøv igjen.',
-'passwordtooshort' => 'Passord må ha minst {{PLURAL:$1|ett tegn|$1 tegn}}.',
-'password-name-match' => 'Passordet ditt må være anderledes enn brukernavnet.',
-'password-login-forbidden' => 'Bruken av disse brukernavn og passord har blitt forbudt.',
-'mailmypassword' => 'Send nytt passord',
-'passwordremindertitle' => 'Nytt midlertidig passord fra {{SITENAME}}',
-'passwordremindertext' => 'Noen (antagelig deg, fra IP-adressen $1) ba oss sende deg et nytt
-passord til {{SITENAME}} ($4). Et midlertidig passord for «$2» har
-blitt laget og er satt til «$3». Om det var det du ville, må du logge inn
-og velge et nytt passord nå. Det midlertidige passordet vil utgå om {{PLURAL:$5|én dag|$5 dager}}.
-
-Dersom denne forespørselen ble utført av noen andre, eller om du kom på passordet
-og ikke lenger ønsker å endre det, kan du ignorere denne beskjeden
-og fortsette å bruke det gamle passordet.',
-'noemail' => 'Det er ikke registrert noen e-postadresse for brukeren «$1».',
-'noemailcreate' => 'De må oppgi en gyldig e-postadresse.',
-'passwordsent' => 'Et nytt passord har blitt sendt til e-postadressen registrert på bruker «$1». 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}}.',
-'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.',
-'emailauthenticated' => 'Din e-postadresse ble bekreftet $2 $3.',
-'emailnotauthenticated' => 'Din e-postadresse er ikke bekreftet. Du vil ikke kunne motta e-post for noen av følgende egenskaper.',
-'noemailprefs' => 'Oppgi en e-postadresse for at disse funksjonene skal fungere.',
-'emailconfirmlink' => 'Bekreft e-postadressen din.',
-'invalidemailaddress' => 'Din e-postadresse kan ikke aksepteres, fordi den er ugyldig formatert.
-Skriv inn en fungerende e-postadresse eller tøm feltet.',
-'accountcreated' => 'Konto opprettet',
-'accountcreatedtext' => 'Brukerkonto for $1 har blitt opprettet.',
-'createaccount-title' => 'Kontooppretting på {{SITENAME}}',
-'createaccount-text' => 'Noen opprettet en konto for din e-postadresse på {{SITENAME}} ($4) med navnet «$2», med «$3» som passord. Du burde logge inn og endre passordet nå.
-
-Du kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.',
-'usernamehasherror' => 'Brukernavn kan ikke inneholde nummertegn.',
-'login-throttled' => 'Du har prøvd å logge inn med denne kontoen for mange ganger. Vent før du prøver igjen.',
-'login-abort-generic' => 'Innleggingen ble avbrutt.',
-'loginlanguagelabel' => 'Språk: $1',
-'suspicious-userlogout' => 'Din forespørsel om å logge ut ble nektet fordi den så ut til å ha bli sendt av en ødelagt nettleser eller en mellomtjener.',
-
-# E-mail sending
-'php-mail-error-unknown' => 'Ukjent feil i PHPs mail()-funksjon',
-
-# Change password dialog
-'resetpass' => 'Endre passord',
-'resetpass_announce' => 'Du logget inn med en midlertidig e-postkode. For å fullføre innloggingen må du oppgi et nytt passord her:',
-'resetpass_text' => '<!-- Legg til tekst her -->',
-'resetpass_header' => 'Endre passord',
-'oldpassword' => 'Gammelt passord:',
-'newpassword' => 'Nytt passord:',
-'retypenew' => 'Gjenta nytt passord:',
-'resetpass_submit' => 'Angi passord og logg inn',
-'resetpass_success' => 'Passordet ditt ble endret! Logger inn&nbsp;…',
-'resetpass_forbidden' => 'Passord kan ikke endres',
-'resetpass-no-info' => 'Du må være logget inn for å gå til denne siden direkte',
-'resetpass-submit-loggedin' => 'Endre passord',
-'resetpass-submit-cancel' => 'Avbryt',
-'resetpass-wrong-oldpass' => 'Feil midlertidig eller nåværende passord.
-Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.',
-'resetpass-temp-password' => '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-legend' => 'Tilbakestill passord',
-'passwordreset-disabled' => 'Tilbakestilling av passord har blitt deaktivert på denne wikien.',
-'passwordreset-pretext' => '{{PLURAL:$1||Angi en av datadelene nedenfor}}',
-'passwordreset-username' => 'Brukernavn:',
-'passwordreset-domain' => 'Domene:',
-'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
-tilknyttet denne e-postadressen:
-
-$2
-
-{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{PLURAL:$5|én dag|$5 dager}}.
-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}}
-($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er tilknyttet denne e-postadressen:
-
-$2
-
-{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{én dag|$5 dager}}.
-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-emailelement' => 'Brukernavn: $1
-Midlertidig passord: $2',
-'passwordreset-emailsent' => 'En påminnelse har blitt sendt på e-post.',
-
-# Edit page toolbar
-'bold_sample' => 'Fet tekst',
-'bold_tip' => 'Fet tekst',
-'italic_sample' => 'Kursiv tekst',
-'italic_tip' => 'Kursiv tekst',
-'link_sample' => 'Lenketittel',
-'link_tip' => 'Intern lenke',
-'extlink_sample' => 'http://www.example.com lenketittel',
-'extlink_tip' => 'Ekstern lenke (husk prefikset http://)',
-'headline_sample' => 'Overskriftstekst',
-'headline_tip' => 'Overskrift, nivå 2',
-'nowiki_sample' => 'Sett inn uformatert tekst her',
-'nowiki_tip' => 'Ignorer wikiformatering',
-'image_sample' => 'Eksempel.jpg',
-'image_tip' => 'Innebygd fil',
-'media_sample' => 'Eksempel.ogg',
-'media_tip' => 'Fillenke',
-'sig_tip' => 'Din signatur med dato',
-'hr_tip' => 'Horisontal linje (bruk sparsomt)',
-
-# Edit pages
-'summary' => 'Redigeringsforklaring:',
-'subject' => 'Emne/overskrift:',
-'minoredit' => 'Dette er en mindre endring',
-'watchthis' => 'Overvåk denne siden',
-'savearticle' => 'Lagre siden',
-'preview' => 'Forhåndsvisning',
-'showpreview' => 'Forhåndsvisning',
-'showlivepreview' => 'Levende forhåndsvisning',
-'showdiff' => 'Vis endringer',
-'anoneditwarning' => "'''Advarsel:''' Du er ikke logget inn.
-IP-adressen din blir bevart i sidens redigeringshistorikk.",
-'anonpreviewwarning' => "''Du er ikke logget inn. Lagring vil registrere din IP-adresse i sidens redigeringshistorikk.''",
-'missingsummary' => "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring.
-Velger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.",
-'missingcommenttext' => 'Vennligst legg inn en kommentar under.',
-'missingcommentheader' => "'''Påminnelse:''' Du har ikke angitt et emne/overskrift for denne kommentaren.
-Om du trykker «{{int:savearticle}}» igjen vil redigeringen din bli lagret uten forklaring.",
-'summary-preview' => 'Forhåndsvisning av redigeringsforklaring:',
-'subject-preview' => 'Forhåndsvisning av emne/overskrift:',
-'blockedtitle' => 'Brukeren er blokkert',
-'blockedtext' => "'''Ditt brukernavn eller din IP-adresse har blitt blokkert.'''
-
-Blokkeringen ble utført av $1. Grunnen som ble oppgitt var ''$2''.
-
-* Blokkeringen begynte: $8
-* Blokkeringen utgår: $6
-* Blokkering ment på: $7
-
-Du kan kontakte $1 eller en annen [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringen.
-Du kan ikke bruke «E-post til denne brukeren»-funksjonen med mindre du har oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]] og du ikke er blokkert fra å sende e-post.
-Din nåværende IP-adresse er $3, og blokkerings-ID-en er #$5.
-Vennligst ta all denne informasjonen ved henvendelser.",
-'autoblockedtext' => "Din IP-adresse har blitt automatisk blokkert fordi den ble brukt av en annen bruker som ble blokkert av $1.
-Den oppgitte grunnen var:
-
-:'''$2'''
-
-* Blokkeringen begynte: $8
-* Blokkeringen utgår: $6
-* Blokkeringen er ment for: $7
-
-Du kan kontakte $1 eller en av de andre [[{{MediaWiki:Grouppage-sysop}}|administratorene]] for å diskutere blokkeringen.
-
-Merk at du ikke kan bruke «E-post til denne brukeren»-funksjonen med mindre du har registrert en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].
-
-Din IP-adresse er $3, og blokkerings-ID-en er #$5.
-Vennligst ta med all denne informasjonen ved henvendelser.",
-'blockednoreason' => 'ingen grunn gitt',
-'whitelistedittext' => 'Du må $1 for å redigere artikler.',
-'confirmedittext' => 'Du må bekrefte e-postadressen din før du kan redigere sider. Vennligst oppgi og bekreft e-postadressen din via [[Special:Preferences|innstillingene dine]].',
-'nosuchsectiontitle' => 'Finner ikke avsnittet',
-'nosuchsectiontext' => 'Du prøvde å redigere et avsnitt som ikke eksisterer.
-Det kan ha blitt flyttet eller slettet mens du så på siden.',
-'loginreqtitle' => 'Innlogging kreves',
-'loginreqlink' => 'logge inn',
-'loginreqpagetext' => 'Du må $1 for å se andre sider.',
-'accmailtitle' => 'Passord sendt.',
-'accmailtext' => 'Et tilfeldig passord for [[User talk:$1|$1]] har blitt sendt til $2.
-
-Passordet for denne nye kontoen [[Special:ChangePassword|kan endres]] når du logger inn.',
-'newarticle' => '(Ny)',
-'newarticletext' => "Du har fulgt en lenke til en side som ikke finnes ennå.
-For å opprette siden, begynn å skrive i boksen under (se [[{{MediaWiki:Helppage}}|hjelpesiden]] for mer informasjon).
-Om du havnet her ved en feil, trykk '''tilbake''' i nettleseren.",
-'anontalkpagetext' => "----
-''Dette er en diskusjonsside for en uregistrert bruker som ikke har opprettet konto eller ikke er logget inn.
-Vi er derfor nødt til å bruke den numeriske IP-adressen til å identifisere ham eller henne.
-En IP-adresse kan være delt mellom flere brukere.
-Hvis du er en uregistrert bruker og synes at du har fått irrelevante kommentarer på en slik side, [[Special:UserLogin/signup|opprett en konto]] eller [[Special:UserLogin|logg inn]] så vi unngår fremtidige forvekslinger med andre uregistrerte brukere.''",
-'noarticletext' => 'Det er for tiden ingen tekst på denne siden.
-Du kan [[Special:Search/{{PAGENAME}}|søke etter denne sidetittelen]] på andre sider,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relaterte logger],
-eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} opprette siden]</span>.',
-'noarticletext-nopermission' => 'Det er ingen tekst på denne siden.
-Du kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] i andre sider, eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>.',
-'userpage-userdoesnotexist' => 'Brukerkontoen «<nowiki>$1</nowiki>» er ikke registrert. Sjekk om du ønsker å opprette/redigere denne siden.',
-'userpage-userdoesnotexist-view' => 'Kontoen «$1» er ikke registrert.',
-'blocked-notice-logextract' => 'Denne brukeren er for tiden blokkert.
-Siste blokkeringsloggelement kan sees nedenfor.',
-'clearyourcache' => "'''Merk:''' Etter lagring vil det kanskje være nødvendig at nettleseren sletter hurtiglageret sitt for at endringene skal tre i kraft.
-* '''Firefox / Safari:''' hold ''Shift'' mens du klikker på ''Oppdater'' eller trykk ''Ctrl-F5'' eller ''Ctrl-R'' (''Command-R'' på en Mac)
-* '''Google Chrome:''' trykk ''Ctrl-Shift-R'' (''Command-Shift-R'' på en Mac)
-* '''Internet Explorer:''' hold ''Ctrl'' mens du klikker på ''Oppdater'' eller trykk ''Ctrl-F5''
-* '''Konqueror:''' klikk ''Oppdater'' eller trykk ''F5''
-* '''Opera:''' tøm hurtiglageret i ''Verktøy → Innstillinger''",
-'usercssyoucanpreview' => "'''Tips:''' Bruk '{{int:showpreview}}'-knappen for å teste din nye CSS før du lagrer.",
-'userjsyoucanpreview' => "'''Tips:''' Bruk '{{int:showpreview}}'-knappen for å teste ditt nye JS før du lagrer.",
-'usercsspreview' => "'''Husk at dette bare er en forhåndsvisning av din bruker-CSS og at den ikke er lagret!'''",
-'userjspreview' => "'''Husk at dette bare er en test eller forhåndsvisning av ditt bruker-JavaScript, og det ikke er lagret!'''",
-'sitecsspreview' => "'''Husk at du bare forhåndsviser denne CSS.'''
-'''Den har ikke blitt lagret ennå!'''",
-'sitejspreview' => "'''Husk at du bare forhåndsviser denne JavaScript-koden.'''
-'''Den har ikke blitt lagret ennå!'''",
-'userinvalidcssjstitle' => "'''Advarsel:''' Det finnes ikke noe utseende ved navn «$1». Husk at .css- og .js-sider bruker titler i små bokstaver, for eksempel {{ns:user}}:Eksempel/vector.css, ikke {{ns:user}}:Eksempel/Vector.css",
-'updated' => '(Oppdatert)',
-'note' => "'''Merk:'''",
-'previewnote' => "'''Husk at dette bare er en forhåndsvisning.'''
-Endringene dine har ikke blitt lagret ennå!",
-'previewconflict' => 'Slik vil teksten i redigeringsvinduet se ut dersom du lagrer den.',
-'session_fail_preview' => "'''Beklager! Klarte ikke å lagre redigeringen din. Prøv igjen. Om det fortsetter å gå galt, prøv å [[Special:UserLogout|logge ut]] og så inn igjen.'''",
-'session_fail_preview_html' => "'''Beklager! Klarte ikke å lagre redigeringen din på grunn av tap av øktdata.'''
-
-''Fordi {{SITENAME}} har rå HTML slått på, er forhåndsvisningen skjult for å forhindre JavaScript-angrep.''
-
-'''Om dette er et legitimt redigeringsforsøk, prøv igjen. Om det da ikke fungerer, prøv å [[Special:UserLogout|logge ut]] og logge inn igjen.'''",
-'token_suffix_mismatch' => "'''Redigeringen din har blitt avvist fordi klienten din ikke hadde punktasjonstegn i redigeringsteksten. Redigeringen har blitt avvist for å hindre ødeleggelse av artikkelteksten. Dette forekommer av og til når man bruker vevbaserte anonyme proxytjenester.'''",
-'edit_form_incomplete' => "'''Deler av redigeringsskjemaet nådde ikke tjeneren; dobbelsjekk at redigeringen er korrekt og prøv igjen.'''",
-'editing' => 'Redigerer $1',
-'editingsection' => 'Redigerer $1 (avsnitt)',
-'editingcomment' => 'Redigerer $1 (ny seksjon)',
-'editconflict' => 'Redigeringskonflikt: $1',
-'explainconflict' => "Noen andre har endret teksten siden du begynte å redigere.
-Den øverste boksen inneholder den nåværende tekst.
-Dine endringer vises i den nederste boksen.
-Du er nødt til å flette dine endringer sammen med den nåværende teksten.
-'''Kun''' teksten i den øverste tekstboksen blir lagret når du trykker «{{int:savearticle}}».",
-'yourtext' => 'Din tekst',
-'storedversion' => 'Den lagrede versjonen',
-'nonunicodebrowser' => "'''ADVARSEL: Nettleseren din har ikke støtte for Unicode. Skru det på før du begynner å redigere artikler.'''",
-'editingold' => "'''ADVARSEL:
-Du redigerer en gammel versjon av denne siden.
-Hvis du lagrer den, vil alle endringer foretatt siden denne versjonen bli overskrevet.'''",
-'yourdiff' => 'Forskjeller',
-'copyrightwarning' => "Merk at alle bidrag til {{SITENAME}} anses som utgitt under $2 (se $1 for detaljer).
-Om du ikke vil at dine bidrag skal kunne redigeres og distribuert fritt etter andres forgodtbefinnende, ikke legg det til her.<br />
-Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som samsvarer med vilkårene eller ikke er vernet av opphavsrett.
-'''Ikke legg til opphavsbeskyttet materiale uten tillatelse!'''",
-'copyrightwarning2' => "Vennligst merk at alle bidrag til {{SITENAME}} kan bli redigert, endret eller fjernet av andre bidragsytere. Om du ikke vil at dine bidrag skal kunne redigeres fritt, ikke legg det til her.<br />
-Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som er i public domain eller lignende (se $1 for detaljer). '''IKKE LEGG TIL OPPHAVSBESKYTTET MATERIALE UTEN TILLATELSE!'''",
-'readonlywarning' => "'''ADVARSEL: Databasen er låst på grunn av vedlikehold,
-så du kan ikke lagre dine endringer akkurat nå. Det kan være en god idé å
-kopiere teksten din til en tekstfil, så du kan lagre den til senere.'''
-
-Systemadministratoren som låste databasen oppga følgende årsak: $1",
-'protectedpagewarning' => "'''Advarsel: Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den.'''
-Det siste loggelementet er oppgitt under som referanse:",
-'semiprotectedpagewarning' => "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan endre den.
-Det siste loggelementet er oppgitt under som referanse:",
-'cascadeprotectedwarning' => "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede sider:<!--{{PLURAL:$1}}-->",
-'titleprotectedwarning' => "'''Advarsel: Denne siden har blitt låst slik at [[Special:ListGroupRights|spesielle rettigheter]] kreves for å opprette den.'''
-Det siste loggelementet er oppgitt under som referanse:",
-'templatesused' => '{{PLURAL:$1|Mal|Maler}} som brukes på denne siden:',
-'templatesusedpreview' => '{{PLURAL:$1|Mal|Maler}} brukt i denne forhåndsvisningen:',
-'templatesusedsection' => '{{PLURAL:$1|Mal|Maler}} brukt i denne seksjonen:',
-'template-protected' => '(beskyttet)',
-'template-semiprotected' => '(halvbeskyttet)',
-'hiddencategories' => 'Denne siden er medlem av {{PLURAL:$1|1 skjult kategori|$1 skjulte kategorier}}:',
-'edittools' => '<!-- Teksten her vil vises under redigerings- og opplastingsboksene. -->',
-'nocreatetitle' => 'Sideoppretting er begrenset',
-'nocreatetext' => '{{SITENAME}} har begrensede muligheter for oppretting av nye sider. Du kan gå tilbake og redigere en eksisterende side, eller [[Special:UserLogin|logge inn eller opprette en ny konto]].',
-'nocreate-loggedin' => 'Du har ikke tillatelse til å opprette sider.',
-'sectioneditnotsupported-title' => 'Seksjonsredigering støttes ikke',
-'sectioneditnotsupported-text' => 'Seksjonsredigering støttes ikke på denne siden.',
-'permissionserrors' => 'Tilgangsfeil',
-'permissionserrorstext' => 'Du har ikke tillatelse til å utføre dette, av følgende {{PLURAL:$1|grunn|grunner}}:',
-'permissionserrorstext-withaction' => 'Du har ikke tillatelse til å $2 {{PLURAL:$1|på grunn av|av følgende grunner}}:',
-'recreate-moveddeleted-warn' => "Advarsel: Du er i ferd med å opprette en side som tidligere har blitt slettet.'''
-
-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' => 'Vis fullstendig logg',
-'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.',
-'edit-no-change' => 'Redigeringen din ble ignorert fordi det ikke var noen endringer.',
-'edit-already-exists' => 'Kunne ikke opprette ny side fordi den finnes fra før.',
-
-# Parser/template warnings
-'expensive-parserfunction-warning' => 'Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.
-
-Det burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..',
-'expensive-parserfunction-category' => 'Sider med for mange prosesskrevende parserfunksjoner',
-'post-expand-template-inclusion-warning' => 'Advarsel: Størrelsen på inkluderte maler er for stor.
-Noen maler vil ikke bli inkludert.',
-'post-expand-template-inclusion-category' => 'Sider som inneholder for store maler',
-'post-expand-template-argument-warning' => 'Advarsel: Siden inneholder ett eller flere malparametere som blir for lange når de utvides.
-Disse parameterne har blitt utelatt.',
-'post-expand-template-argument-category' => 'Sider med utelatte malparametere',
-'parser-template-loop-warning' => 'Mal-loop oppdaget: [[$1]]',
-'parser-template-recursion-depth-warning' => 'Mal er brukt for mange ganger ($1)',
-'language-converter-depth-warning' => 'Dybdegrense for språkkonvertering overskredet ($1)',
-
-# "Undo" feature
-'undo-success' => 'Redigeringen kan omgjøres. Sjekk sammenligningen under for å bekrefte at du vil gjøre dette, og lagre endringene for å fullføre omgjøringen.',
-'undo-failure' => 'Redigeringen kunne ikke omgjøres på grunn av konflikterende etterfølgende redigeringer.',
-'undo-norev' => 'Redigeringen kunne ikke fjernes fordi den ikke eksisterer eller ble slettet',
-'undo-summary' => 'Fjerner revisjon $1 av [[Special:Contributions/$2]] ([[User talk:$2|diskusjon]] | [[Special:Contributions/$2|{{int:contribslink}}]])',
-
-# Account creation failure
-'cantcreateaccounttitle' => 'Kan ikke opprette konto',
-'cantcreateaccount-text' => "Kontooppretting fra denne IP-adressen ('''$1''') har blitt blokkert av [[User:$3|$3]].
-
-Grunnen som ble oppgitt av $3 er ''$2''",
-
-# History pages
-'viewpagelogs' => 'Vis logger for denne siden',
-'nohistory' => 'Denne siden har ingen historikk.',
-'currentrev' => 'Nåværende versjon',
-'currentrev-asof' => 'Nåværende revisjon fra $1',
-'revisionasof' => 'Revisjonen fra $1',
-'revision-info' => 'Revisjon per $1 av $2',
-'previousrevision' => '← Eldre revisjon',
-'nextrevision' => 'Nyere revisjon →',
-'currentrevisionlink' => 'Nåværende revisjon',
-'cur' => 'nå',
-'next' => 'neste',
-'last' => 'forrige',
-'page_first' => 'første',
-'page_last' => 'siste',
-'histlegend' => "Valg av diff: merk i radioboksene de revisjonene du ønsker å sammenligne og trykk linjeskift eller knappen nederst på siden.<br />
-Forklaring: '''({{int:cur}})''' = forskjell fra nåværende revisjon, '''({{int:last}})''' = forskjell fra foregående revisjon, '''{{int:minoreditletter}}''' = mindre endring.",
-'history-fieldset-title' => 'Bla i historikken',
-'history-show-deleted' => 'Kun slettede',
-'histfirst' => 'Første',
-'histlast' => 'Siste',
-'historysize' => '({{PLURAL:$1|1 byte|$1 byte}})',
-'historyempty' => '(tom)',
-
-# Revision feed
-'history-feed-title' => 'Revisjonshistorikk',
-'history-feed-description' => 'Revisjonshistorikk for denne siden',
-'history-feed-item-nocomment' => '$1 på $2',
-'history-feed-empty' => 'Den etterspurte siden finnes ikke. Den kan ha blitt slettet fra wikien, eller fått et nytt navn. Prøv å [[Special:Search|søke]] etter beslektede sider.',
-
-# Revision deletion
-'rev-deleted-comment' => '(redigeringskommentar fjernet)',
-'rev-deleted-user' => '(brukernavn fjernet)',
-'rev-deleted-event' => '(fjernet loggoppføring)',
-'rev-deleted-user-contribs' => '[brukernavn eller IP-adresse fjernet – redigeringen vises ikke blant bidragene]',
-'rev-deleted-text-permission' => "Denne revisjonen har blitt '''slettet'''.
-Det kan være detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
-'rev-deleted-text-unhide' => "Denne siderevisjonen har blitt '''slettet'''.
-Se etter detaljer i slettingsloggen: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}].
-Som administrator kan du fortsatt [$1 se revisjonen] om du ønsker det.",
-'rev-suppressed-text-unhide' => "Denne siderevisjonen har blitt '''skjult'''.
-Informasjon om dette kan finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].
-Som administrator kan du fortsatt [$1 se revisjonen] om du ønsker det.",
-'rev-deleted-text-view' => "Denne siderevisjonen har blitt '''slettet'''.
-Som administrator kan du fortsatt se den. Detaljer finnes i slettingsloggen: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}].",
-'rev-suppressed-text-view' => "!Denne siderevisjonen har blitt '''skjult'''.
-Som administrator kan du se den; detaljer kan finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
-'rev-deleted-no-diff' => "Du kan ikke vise forskjellen fordi en av versjonene har blitt '''slettet'''.
-Det kan finnes flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
-'rev-suppressed-no-diff' => "Du kanne ikke se revisjonsforskjellen fordi en av revisjonene har blitt '''slettet'''.",
-'rev-deleted-unhide-diff' => "Én av revisjonene i denne diffen har blitt '''slettet'''.
-Det finnes flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].
-Som administrator kan du fortsatt [$1 se diffen] om du ønsker å gå videre.",
-'rev-suppressed-unhide-diff' => "En av siderevisjonene i denne diffen har blitt '''skjult'''.
-Det kan være detaljer i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].
-Som administrator kan du fortsatt [$1 se diffen] om du ønsker å gå videre.",
-'rev-deleted-diff-view' => "En av revisjonene i denne diffen har blitt '''slettet'''.
-Som administrator kan du se diffen; det kan finnes detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
-'rev-suppressed-diff-view' => "En av revisjonene i denne diffen har blitt '''skjult'''.
-Som administrator kan du se denne diffen; det kan finnes detaljer i [{{fullurl:{{#Special:Log}}/suppcess|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
-'rev-delundel' => 'vis/skjul',
-'rev-showdeleted' => 'vis',
-'revisiondelete' => 'Slett/gjenopprett revisjoner',
-'revdelete-nooldid-title' => 'Ugyldig målversjon',
-'revdelete-nooldid-text' => 'Du har ikke angitt en målversjon for denne funksjonen, den angitte versjonen finnes ikke, eller du forsøker å skjule den nåværende versjonen.',
-'revdelete-nologtype-title' => 'Ingen loggtype spesifisert',
-'revdelete-nologtype-text' => 'Du har ikke spesifisert en loggtype å utføre denne handlingen på.',
-'revdelete-nologid-title' => 'Ugyldig loggelement',
-'revdelete-nologid-text' => 'Du har enten ikke spesifisert ett loggelement å utføre på denne funksjonen, eller spesifisert element finnes ikke.',
-'revdelete-no-file' => 'Den spesifiserte filen finnes ikke.',
-'revdelete-show-file-confirm' => 'Er du sikker på at du ønsker å vise en slettet versjon av filen «<nowiki>$1</nowiki>» fra den $2 klokken $3?',
-'revdelete-show-file-submit' => 'Ja',
-'revdelete-selected' => "'''{{PLURAL:$2|Valgt revisjon|Valgte revisjoner}} av [[:$1]]:'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Valgt loggoppføring|Valgte loggoppføringer}}:'''",
-'revdelete-text' => "'''Slettede versjoner og oppføringer vil fortsatt vises i sidehistorikken og loggene, men deler av innholdet vil ikke lenger bli offentliggjort.'''
-Andre administratorer på {{SITENAME}} vil fortsatt kunne se det skjulte innholdet, og kan gjenopprette det, med mindre videre begrensninger blir gitt av sideoperatørene.",
-'revdelete-confirm' => 'Bekreft at du ønsker å gjøre dette, at du forstår konsekvensene, og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].',
-'revdelete-suppress-text' => "Skjuling bør '''kun''' brukes i følgende tilfeller:
-* Mulig injurierende utsagn
-* Upassende personlige opplysninger, herunder
-*: ''privatadresser og -telefonnumre, fødselsnumre og lignende''",
-'revdelete-legend' => 'Fastsett synlighetsbegrensninger',
-'revdelete-hide-text' => 'Skjul revisjonstekst',
-'revdelete-hide-image' => 'Skjul filinnhold',
-'revdelete-hide-name' => 'Skjul handling og mål',
-'revdelete-hide-comment' => 'Skjul redigeringsforklaring',
-'revdelete-hide-user' => 'Skjul bidragsyters brukernavn eller IP',
-'revdelete-hide-restricted' => 'La disse begrensningene gjelde for administratorer også, og steng dette grensesnittet',
-'revdelete-radio-same' => '(ikke endre)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nei',
-'revdelete-suppress' => 'Skjul informasjon også fra administratorer',
-'revdelete-unsuppress' => 'Fjern betingelser på gjenopprettede revisjoner',
-'revdelete-log' => 'Årsak:',
-'revdelete-submit' => 'Utfør på {{PLURAL:$1|valgt revisjon|valgte revisjoner}}',
-'revdelete-success' => "'''Versjonssynlighet vellykket oppdatert.'''",
-'revdelete-failure' => "'''Kunne ikke endre versjonssynligheten:'''
-$1",
-'logdelete-success' => "'''Hendelsessynlighet satt.'''",
-'logdelete-failure' => "'''Loggens synlighet kunne ikke bli stilt inn:'''
-$1",
-'revdel-restore' => 'endre synlighet',
-'revdel-restore-deleted' => 'slettede revisjoner',
-'revdel-restore-visible' => 'synlige revisjoner',
-'pagehist' => 'Sidehistorikk',
-'deletedhist' => 'Slettet historikk',
-'revdelete-hide-current' => 'Feil under skjuling av objektet datert $2, $1: dette er den gjeldende revisjonen.
-Den kan ikke skjules.',
-'revdelete-show-no-access' => 'Feil under visning av objekt datert $2, $1: dette objektet har blitt markert "begrenset".
-Du har ikke tilgang til det.',
-'revdelete-modify-no-access' => 'Feil under endring av objekt datert $2, $1: dette objektet har blitt markert "begrenset".
-Du har ikke tilgang til det.',
-'revdelete-modify-missing' => 'Feil under endring av objekt ID $1: det mangler i databasen!',
-'revdelete-no-change' => "'''Advarsel:''' objektet datert $2 $1 hadde allerede synlighetsinnstillingene du forespurte.",
-'revdelete-concurrent-change' => 'Feil under endring av objektet datert $2, $1: dets status ser ut til å ha blitt endret av noen andre mens du prøvde å endre det.
-Vennligst sjekk loggen.',
-'revdelete-only-restricted' => 'Feil ved gjemming av objekt datert $2, $1: du kan ikke skjule objekt fra å vises for administratorer uten også å velge en av de andre visningsalternativene.',
-'revdelete-reason-dropdown' => '*Vanlige slettingsgrunner
-** Opphavsrettsbrudd
-** Upassende personopplysninger
-** Mulig falskt sladder',
-'revdelete-otherreason' => 'Annen/ytterligere årsak:',
-'revdelete-reasonotherlist' => 'Annen årsak',
-'revdelete-edit-reasonlist' => 'Rediger begrunnelser for sletting',
-'revdelete-offender' => 'Forfatter av denne versjonen:',
-
-# Suppression log
-'suppressionlog' => 'Sideskjulingslogg',
-'suppressionlogtext' => 'Under er en liste over sider som er slettet eller blokkert med innhold skjult fra administratorer.
-Se [[Special:BlockList|IP-blokkeringsliste]] for oversikt over aktuelle utelukkelser og blokkeringer.',
-
-# History merging
-'mergehistory' => 'Flett sidehistorikker',
-'mergehistory-header' => 'Denne siden lar deg flette historikken til to sider.
-Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
-'mergehistory-box' => 'Flett historikken til to sider:',
-'mergehistory-from' => 'Kildeside:',
-'mergehistory-into' => 'Målside:',
-'mergehistory-list' => 'Flettbar redigeringshistorikk',
-'mergehistory-merge' => 'Følgende revisjoner av [[:$1]] kan flettes til [[:$2]]. Du kan velge å flette kun de revisjonene som kom før tidspunktet gitt i tabellen. Merk at bruk av navigasjonslenkene vil resette denne kolonnen.',
-'mergehistory-go' => 'Vis flettbare redigeringer',
-'mergehistory-submit' => 'Flett revisjoner',
-'mergehistory-empty' => 'Ingen revisjoner kan flettes.',
-'mergehistory-success' => '{{PLURAL:$3|Én revisjon|$3 revisjoner}} av [[:$1]] ble flettet til [[:$2]].',
-'mergehistory-fail' => 'Klarte ikke å utføre historikkfletting; sjekk siden og tidsparameterne igjen.',
-'mergehistory-no-source' => 'Kildesiden $1 finnes ikke.',
-'mergehistory-no-destination' => 'Målsiden $1 finnes ikke.',
-'mergehistory-invalid-source' => 'Kildesiden må ha en gyldig tittel.',
-'mergehistory-invalid-destination' => 'Målsiden må ha en gyldig tittel.',
-'mergehistory-autocomment' => 'Flettet [[:$1]] inn i [[:$2]]',
-'mergehistory-comment' => 'Flettet [[:$1]] inn i [[:$2]]: $3',
-'mergehistory-same-destination' => 'Kilde- og målside kan ikke være den samme.',
-'mergehistory-reason' => 'Årsak:',
-
-# Merge log
-'mergelog' => 'Flettingslogg',
-'pagemerge-logentry' => 'flettet [[$1]] til [[$2]] (revisjoner fram til $3)',
-'revertmerge' => 'Omgjør fletting',
-'mergelogpagetext' => 'Nedenfor er en liste over de nyligste flettingene av sidehistorikker.',
-
-# Diffs
-'history-title' => 'Revisjonshistorikk for «$1»',
-'difference-multipage' => '(Forskjell mellom sider)',
-'lineno' => 'Linje $1:',
-'compareselectedversions' => 'Sammenlign valgte revisjoner',
-'showhideselectedversions' => 'Vis/skjul valgte versjoner',
-'editundo' => 'angre',
-'diff-multi' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av {{PLURAL:$2|én bruker|$2 brukere}} vises ikke)',
-'diff-multi-manyusers' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)',
-
-# Search results
-'searchresults' => 'Søkeresultat',
-'searchresults-title' => 'Søkeresultat for «$1»',
-'searchresulttext' => 'For mer informasjon om søking i {{SITENAME}}, se [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => "Du søkte etter '''[[:$1]]''' ([[Special:Prefixindex/$1|alle sider som begynner med «$1»]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle sider som lenker til «$1»]])",
-'searchsubtitleinvalid' => "Du søkte etter '''$1'''",
-'toomanymatches' => 'For mange mulige svar, prøv med en annen spørring',
-'titlematches' => 'Artikkeltitler med treff på forespørselen',
-'notitlematches' => 'Ingen sidetitler samsvarte med søket',
-'textmatches' => 'Artikkeltekster med treff på forespørselen',
-'notextmatches' => 'Inden sidetekst samsvarte med søket',
-'prevn' => 'forrige {{PLURAL:$1|$1}}',
-'nextn' => 'neste {{PLURAL:$1|$1}}',
-'prevn-title' => 'Forrige $1 {{PLURAL:$1|resultat|resultater}}',
-'nextn-title' => 'Neste $1 {{PLURAL:$1|resultat|resultater}}',
-'shown-title' => 'Vis $1 {{PLURAL:$1|resultat|resultater}} per side',
-'viewprevnext' => 'Vis ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend' => 'Søkeinnstillinger',
-'searchmenu-exists' => "* Siden '''[[$1]]'''",
-'searchmenu-new' => "'''Opprett siden ''[[:$1]]'' på denne wikien.'''",
-'searchhelp-url' => 'Help:Hjelp',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Vis alle sider som begynner med dette]]',
-'searchprofile-articles' => 'Innholdssider',
-'searchprofile-project' => 'Hjelp- og prosjektsider',
-'searchprofile-images' => 'Multimedia',
-'searchprofile-everything' => 'Alt',
-'searchprofile-advanced' => 'Avansert',
-'searchprofile-articles-tooltip' => 'Søk i $1',
-'searchprofile-project-tooltip' => 'Søk i $1',
-'searchprofile-images-tooltip' => 'Søk etter filer',
-'searchprofile-everything-tooltip' => 'Søk i alt innhold (inkldert diskusjonssider)',
-'searchprofile-advanced-tooltip' => 'Søk i visse navnerom',
-'search-result-size' => '$1 ({{PLURAL:$2|ett|$2}} ord)',
-'search-result-category-size' => '{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})',
-'search-result-score' => 'Relevans: $1&nbsp;%',
-'search-redirect' => '(omdirigering $1)',
-'search-section' => '(avsnitt $1)',
-'search-suggest' => 'Mente du: $1',
-'search-interwiki-caption' => 'Søsterprosjekt',
-'search-interwiki-default' => '$1-resultat:',
-'search-interwiki-more' => '(mer)',
-'search-mwsuggest-enabled' => 'med forslag',
-'search-mwsuggest-disabled' => 'ingen forslag',
-'search-relatedarticle' => 'Relatert',
-'mwsuggest-disable' => 'Slå av AJAX-forslag',
-'searcheverything-enable' => 'Søk i alle navnerom',
-'searchrelated' => 'relatert',
-'searchall' => 'alle',
-'showingresults' => "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
-'showingresultsnum' => "Nedenfor vises {{PLURAL:$3|'''ett''' resultat|'''$3''' resultater}} fra og med nummer '''$2'''.",
-'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
-'nonefound' => "'''Merk''': Som standard søkes det kun i enkelte navnerom.
-For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler, osv), eller bruk det ønskede navnerommet som prefiks.",
-'search-nonefound' => 'Det var ingen resultater som passet til søket.',
-'powersearch' => 'Avansert søk',
-'powersearch-legend' => 'Avansert søk',
-'powersearch-ns' => 'Søk i navnerom:',
-'powersearch-redir' => 'Vis omdirigeringer',
-'powersearch-field' => 'Søk etter',
-'powersearch-togglelabel' => 'Merk:',
-'powersearch-toggleall' => 'Alle',
-'powersearch-togglenone' => 'Ingen',
-'search-external' => 'Eksternt søk',
-'searchdisabled' => 'Søkefunksjonen er slått av. Du kan søke via Google i mellomtiden. Merk at Googles indeksering av {{SITENAME}} muligens er utdatert.',
-
-# Quickbar
-'qbsettings' => 'Brukerinnstillinger for hurtigmeny.',
-'qbsettings-none' => 'Ingen',
-'qbsettings-fixedleft' => 'Fast venstre',
-'qbsettings-fixedright' => 'Fast høyre',
-'qbsettings-floatingleft' => 'Flytende venstre',
-'qbsettings-floatingright' => 'Flytende til høyre',
-'qbsettings-directionality' => '"Låst", f. eks. i posisjon "låst til venstre eller til høyre". For venstre-mot-høyre-språk vil hurtigvelgeren være satt til venstre, for høyre-mot-venstre-språk til høyre.',
-
-# Preferences page
-'preferences' => 'Innstillinger',
-'mypreferences' => 'Innstillinger',
-'prefs-edits' => 'Antall redigeringer:',
-'prefsnologin' => 'Ikke logget inn',
-'prefsnologintext' => 'Du må være <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logget inn]</span> for å endre brukerinnstillingene.',
-'changepassword' => 'Endre passord',
-'prefs-skin' => 'Utseende',
-'skin-preview' => 'Forhåndsvisning',
-'datedefault' => 'Ingen foretrukket',
-'prefs-beta' => 'Betafunksjoner',
-'prefs-datetime' => 'Dato og tid',
-'prefs-labs' => 'Lab-funksjoner',
-'prefs-personal' => 'Brukerdata',
-'prefs-rc' => 'Siste endringer',
-'prefs-watchlist' => 'Overvåkningsliste',
-'prefs-watchlist-days' => 'Dager som skal vises i overvåkningslisten:',
-'prefs-watchlist-edits' => 'Antall redigeringer som skal vises i utvidet overvåkningsliste:',
-'prefs-watchlist-edits-max' => 'Maksimum antall: 1000',
-'prefs-watchlist-token' => 'Nøkkel for overvåkningsliste',
-'prefs-misc' => 'Diverse',
-'prefs-resetpass' => 'Endre passord',
-'prefs-email' => 'Alternativer for e-post',
-'prefs-rendering' => 'Utseende',
-'saveprefs' => 'Lagre',
-'resetprefs' => 'Tilbakestill ulagrede endringer',
-'restoreprefs' => 'Tilbakestill til standardinnstillinger overalt',
-'prefs-editing' => 'Redigering',
-'prefs-edit-boxsize' => 'Størrelse på redigeringsvinduet.',
-'rows' => 'Rader:',
-'columns' => 'Kolonner',
-'searchresultshead' => 'Søk',
-'resultsperpage' => 'Resultater per side:',
-'stub-threshold' => 'Grense for <span class="mw-stub-example">stubblenkeformatering</span>:',
-'stub-threshold-disabled' => 'Deaktivert',
-'recentchangesdays' => 'Antall dager som skal vises i siste endringer:',
-'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|dag|dager}})',
-'recentchangescount' => 'Antall redigeringer som skal vises som standard:',
-'prefs-help-recentchangescount' => 'Dette inkluderer nylige endringer, sidehistorikk og logger.',
-'prefs-help-watchlist-token' => 'Om du fyller ut dette feltet med et hemmelig tall, vil det lages en RSS-liste for overvåkningslisten din.
-Alle som vet det rette tallet vil være i stand til å lese overvåkningslisten din, så velg en sikker verdi.
-Her er et tilfeldig tall du kan bruke: $1',
-'savedprefs' => 'Innstillingene ble lagret.',
-'timezonelegend' => 'Tidssone:',
-'localtime' => 'Lokaltid:',
-'timezoneuseserverdefault' => 'Bruk wikistandard ($1)',
-'timezoneuseoffset' => 'Annet (spesifiser forskjell)',
-'timezoneoffset' => 'Forskjell¹:',
-'servertime' => 'Serverens tid er nå:',
-'guesstimezone' => 'Hent tidssone fra nettleseren',
-'timezoneregion-africa' => 'Afrika',
-'timezoneregion-america' => 'Amerika',
-'timezoneregion-antarctica' => 'Antarktis',
-'timezoneregion-arctic' => 'Arktis',
-'timezoneregion-asia' => 'Asia',
-'timezoneregion-atlantic' => 'Atlanterhavet',
-'timezoneregion-australia' => 'Australia',
-'timezoneregion-europe' => 'Europe',
-'timezoneregion-indian' => 'Det indiske hav',
-'timezoneregion-pacific' => 'Stillehavet',
-'allowemail' => 'Tillat andre å sende meg e-post',
-'prefs-searchoptions' => 'Søkealternativ',
-'prefs-namespaces' => 'Navnerom',
-'defaultns' => 'Søk ellers i disse navnerommene:',
-'default' => 'standard',
-'prefs-files' => 'Filer',
-'prefs-custom-css' => 'Personlig CSS',
-'prefs-custom-js' => 'Personlig Javascript',
-'prefs-common-css-js' => 'Delt CSS/JS for alle drakter:',
-'prefs-reset-intro' => 'Du kan bruke denne siden til å tilbakestille innstillingene dine til standardinnstillingene.
-Dette kan ikke tilbakestilles.',
-'prefs-emailconfirm-label' => 'E-postbekreftelse:',
-'prefs-textboxsize' => 'Størrelse på redigeringsvindu',
-'youremail' => 'E-post:',
-'username' => 'Brukernavn:',
-'uid' => 'Bruker-ID:',
-'prefs-memberingroups' => 'Medlem i følgende {{PLURAL:$1|gruppe|grupper}}:',
-'prefs-registration' => 'Registreringstid:',
-'yourrealname' => 'Virkelig navn:',
-'yourlanguage' => 'Språk:',
-'yourvariant' => 'Språkvariant for innhold:',
-'yournick' => 'Signatur:',
-'prefs-help-signature' => 'Kommentarer på diskusjonssider bør alltid signeres med «<nowiki>~~~~</nowiki>», som vil bli konvertert til din signatur med tidspunkt.',
-'badsig' => 'Ugyldig råsignatur; sjekk HTML-elementer.',
-'badsiglength' => 'Signaturen er for lang.
-Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
-'yourgender' => 'Kjønn:',
-'gender-unknown' => 'Uspesifisert',
-'gender-male' => 'Mann',
-'gender-female' => 'Kvinne',
-'prefs-help-gender' => 'Valgfritt: brukes for kjønnskorrekt tekst av programvaren. Denne informasjonen vil være offentlig.',
-'email' => 'E-post',
-'prefs-help-realname' => '* Virkelig navn (valgfritt): dersom du velger å oppgi navnet, vil det bli brukt til å kreditere deg for ditt arbeid.',
-'prefs-help-email' => 'Å angi e-postadresse er valgfritt, men er nødvendig for å få tilsendt nytt passord om du skulle glemme det gamle.',
-'prefs-help-email-others' => 'Du kan også velge å la andre brukere kontakte deg via brukersiden din uten å røpe identiteten din.',
-'prefs-help-email-required' => 'E-postadresse er påkrevd.',
-'prefs-info' => 'Grunnleggende informasjon',
-'prefs-i18n' => 'Internasjonalisering',
-'prefs-signature' => 'Signatur',
-'prefs-dateformat' => 'Datoformat',
-'prefs-timeoffset' => 'Tidsforskyvning',
-'prefs-advancedediting' => 'Avanserte alternativ',
-'prefs-advancedrc' => 'Avanserte alternativ',
-'prefs-advancedrendering' => 'Avanserte alternativ',
-'prefs-advancedsearchoptions' => 'Avanserte alternativ',
-'prefs-advancedwatchlist' => 'Avanserte alternativ',
-'prefs-displayrc' => 'Visningsalternativ',
-'prefs-displaysearchoptions' => 'Visningsalternativer',
-'prefs-displaywatchlist' => 'Visningsalternativer',
-'prefs-diffs' => 'Forskjeller',
-
-# User preference: e-mail validation using jQuery
-'email-address-validity-valid' => 'E-postadressen ser gyldig ut',
-'email-address-validity-invalid' => 'Skriv inn en gyldig e-postadresse',
-
-# User rights
-'userrights' => 'Brukerrettighetskontroll',
-'userrights-lookup-user' => 'Ordne brukergrupper',
-'userrights-user-editname' => 'Skriv inn et brukernavn:',
-'editusergroup' => 'Endre brukergrupper',
-'userrights-editusergroup' => 'Rediger brukergrupper',
-'saveusergroups' => 'Lagre brukergrupper',
-'userrights-groupsmember' => 'Medlem av:',
-'userrights-groupsmember-auto' => 'Implisitt medlem av:',
-'userrights-groups-help' => 'Du kan endre hvilke grupper denne brukeren er medlem av.
-* En avkrysset boks betyr at brukeren er medlem av gruppen.
-* En uavkrysset boks betyr at brukeren ikke er medlem av gruppen.
-* En * betyr at du ikke kan fjerne gruppemedlemskapet når du har lagt det til, eller vice versa.',
-'userrights-reason' => 'Årsak:',
-'userrights-no-interwiki' => 'Du har ikke tillatelse til å endre brukerrettigheter på andre wikier.',
-'userrights-nodatabase' => 'Databasen $1 finnes ikke, eller er ikke lokal.',
-'userrights-nologin' => 'Du må [[Special:UserLogin|logge inn]] med en administratorkonto for å endre brukerrettigheter.',
-'userrights-notallowed' => 'Kontoen din har ikke tillatelse til å legge til eller fjerne brukerrettigheter.',
-'userrights-changeable-col' => 'Grupper du kan endre',
-'userrights-unchangeable-col' => 'Grupper du ikke kan endre',
-'userrights-irreversible-marker' => '$1 *',
-
-# Groups
-'group' => 'Gruppe:',
-'group-user' => 'Brukere',
-'group-autoconfirmed' => 'Autobekreftede brukere',
-'group-bot' => 'Roboter',
-'group-sysop' => 'Administratorer',
-'group-bureaucrat' => 'Byråkrater',
-'group-suppress' => 'Sidefjernere',
-'group-all' => '(alle)',
-
-'group-user-member' => 'bruker',
-'group-autoconfirmed-member' => 'autobekreftet bruker',
-'group-bot-member' => 'robot',
-'group-sysop-member' => 'administrator',
-'group-bureaucrat-member' => 'byråkrat',
-'group-suppress-member' => 'revisjonsfjerner',
-
-'grouppage-user' => '{{ns:project}}:Brukere',
-'grouppage-autoconfirmed' => '{{ns:project}}:Autobekreftede brukere',
-'grouppage-bot' => '{{ns:project}}:Roboter',
-'grouppage-sysop' => '{{ns:project}}:Administratorer',
-'grouppage-bureaucrat' => '{{ns:project}}:Byråkrater',
-'grouppage-suppress' => '{{ns:project}}:Historikkrydding',
-
-# Rights
-'right-read' => 'Se sider',
-'right-edit' => 'Redigere sider',
-'right-createpage' => 'Opprette sider (som ikke er diskusjonssider)',
-'right-createtalk' => 'Opprette diskusjonssider',
-'right-createaccount' => 'Opprette nye kontoer',
-'right-minoredit' => 'Marker endringer som mindre',
-'right-move' => 'Flytte sider',
-'right-move-subpages' => 'Flytte sider med undersider',
-'right-move-rootuserpages' => 'Flytte hovedbrukersider',
-'right-movefile' => 'Flytte filer',
-'right-suppressredirect' => 'Behøver ikke å opprette omdirigeringer ved sideflytting',
-'right-upload' => 'Laste opp filer',
-'right-reupload' => 'Skrive over eksisterende filer',
-'right-reupload-own' => 'Skrive over egne filer',
-'right-reupload-shared' => 'Skrive over delte filer lokalt',
-'right-upload_by_url' => 'Laste opp en fil via URL',
-'right-purge' => 'Rense mellomlageret for sider',
-'right-autoconfirmed' => 'Redigere halvlåste sider',
-'right-bot' => 'Bli behandlet som en automatisk prosess',
-'right-nominornewtalk' => 'Får ikke «Du har nye meldinger»-beskjeden ved mindre endringer på diskusjonsside',
-'right-apihighlimits' => 'Bruke API med høyere grenser',
-'right-writeapi' => 'Redigere via API',
-'right-delete' => 'Slette sider',
-'right-bigdelete' => 'Slette sider med stor historikk',
-'right-deleterevision' => 'Slette og gjenopprette enkeltrevisjoner av sider',
-'right-deletedhistory' => 'Se slettet sidehistorikk uten tilhørende sidetekst',
-'right-deletedtext' => 'Vis slettet tekst og endringer mellom slettede versjoner',
-'right-browsearchive' => 'Søke i slettede sider',
-'right-undelete' => 'Gjenopprette sider',
-'right-suppressrevision' => 'Se og gjenopprette skjulte siderevisjoner',
-'right-suppressionlog' => 'Se private logger',
-'right-block' => 'Blokkere andre brukere fra å redigere',
-'right-blockemail' => 'Blokkere brukere fra å sende e-post',
-'right-hideuser' => 'Blokkere et brukernavn og skjule det fra det offentlige',
-'right-ipblock-exempt' => 'Kan redigere fra blokkerte IP-adresser',
-'right-proxyunbannable' => 'Kan redigere fra blokkerte proxyer',
-'right-unblockself' => 'Fjern blokkering av seg selv',
-'right-protect' => 'Endre beskyttelsesnivåer',
-'right-editprotected' => 'Redigere beskyttede sider',
-'right-editinterface' => 'Redigere brukergrensesnittet',
-'right-editusercssjs' => 'Redigere andre brukeres CSS- og JS-filer',
-'right-editusercss' => 'Redigere andre brukeres CSS-filer',
-'right-edituserjs' => 'Redigere andre brukeres JS-filer',
-'right-rollback' => 'Raskt tilbakestille den siste brukeren som har redigert en gitt side',
-'right-markbotedits' => 'Markere tilbakestillinger som robotredigeringer',
-'right-noratelimit' => 'Påvirkes ikke av hastighetsgrenser',
-'right-import' => 'Importere sider fra andre wikier',
-'right-importupload' => 'Importere sider via opplasting',
-'right-patrol' => 'Markere redigeringer som patruljerte',
-'right-autopatrol' => 'Får sine egne redigeringer merket som patruljerte',
-'right-patrolmarks' => 'Bruke patruljeringsfunksjoner i siste endringer',
-'right-unwatchedpages' => 'Se listen over uovervåkede sider',
-'right-mergehistory' => 'Flette sidehistorikker',
-'right-userrights' => 'Redigere alle brukerrettigheter',
-'right-userrights-interwiki' => 'Redigere rettigheter for brukere på andre wikier',
-'right-siteadmin' => 'Låse og låse opp databasen',
-'right-override-export-depth' => 'Eksporter sider inkludert lenkede sider til en dypde på 5',
-'right-sendemail' => 'Send e-post til andre brukere',
-
-# User rights log
-'rightslog' => 'Brukerrettighetslogg',
-'rightslogtext' => 'Dette er en logg over forandringer i brukerrettigheter.',
-'rightslogentry' => 'endret gruppe for $1 fra $2 til $3',
-'rightslogentry-autopromote' => 'ble automatisk forfremmet fra $2 til $3',
-'rightsnone' => '(ingen)',
-
-# Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'se denne siden',
-'action-edit' => 'redigere denne siden',
-'action-createpage' => 'opprette sider',
-'action-createtalk' => 'opprette diskusjonssider',
-'action-createaccount' => 'opprette denne kontoen',
-'action-minoredit' => 'merke denne redigeringen som mindre',
-'action-move' => 'flytte denne siden',
-'action-move-subpages' => 'flytte denne siden og dens undersider',
-'action-move-rootuserpages' => 'flytte hovedbrukersider',
-'action-movefile' => 'flytte denne filen',
-'action-upload' => 'laste opp denne filen',
-'action-reupload' => 'overskrive den nåværende filen',
-'action-reupload-shared' => 'overskrive denne filen på fellesdatabasen',
-'action-upload_by_url' => 'laste opp denne filen fra en URL',
-'action-writeapi' => 'bruke skrive-API-en',
-'action-delete' => 'slette denne siden',
-'action-deleterevision' => 'slette denne revisjonen',
-'action-deletedhistory' => 'se denne sidens slettede historikk',
-'action-browsearchive' => 'søke i slettede sider',
-'action-undelete' => 'gjenopprette denne siden',
-'action-suppressrevision' => 'se og gjenopprette denne skjulte revisjonen',
-'action-suppressionlog' => 'se denne private loggen',
-'action-block' => 'blokkere denne brukeren fra å redigere',
-'action-protect' => 'endre denne sidens beskyttelsesnivåer',
-'action-import' => 'importere denne siden fra en annen wiki',
-'action-importupload' => 'importere denne siden fra en opplastet fil',
-'action-patrol' => 'merke andre brukeres redigeringer som patruljert',
-'action-autopatrol' => 'merke redigeringene dine som patruljert',
-'action-unwatchedpages' => 'vise listen over uovervåkede sider',
-'action-mergehistory' => 'flette sidens historikk',
-'action-userrights' => 'redigere alle brukerrettigheter',
-'action-userrights-interwiki' => 'endre brukerrettigheter for brukere på andre wikier',
-'action-siteadmin' => 'låse eller låse opp databasen',
-
-# Recent changes
-'nchanges' => '$1 {{PLURAL:$1|endring|endringer}}',
-'recentchanges' => 'Siste endringer',
-'recentchanges-legend' => 'Alternativ for siste endringer',
-'recentchanges-summary' => 'Vis de siste endringene til denne siden',
-'recentchanges-feed-description' => 'Følg med på siste endringer i denne wikien med denne matingen.',
-'recentchanges-label-newpage' => 'Denne redigeringen opprettet en ny side',
-'recentchanges-label-minor' => 'Dette er en mindre endring',
-'recentchanges-label-bot' => 'Denne redigeringen ble gjort av en bot',
-'recentchanges-label-unpatrolled' => 'Denne redigeringen har ikke blitt patruljert ennå',
-'rcnote' => "Nedenfor vises {{PLURAL:$1|'''1''' endring|de siste '''$1''' endringene}} fra {{PLURAL:$2|det siste døgnet|de siste '''$2''' døgnene}}, per $5 $4.",
-'rcnotefrom' => "Nedenfor er endringene fra '''$2''' (opp til '''$1''' vises).",
-'rclistfrom' => 'Vis nye endringer med start fra $1',
-'rcshowhideminor' => '$1 mindre endringer',
-'rcshowhidebots' => '$1 roboter',
-'rcshowhideliu' => '$1 innloggede brukere',
-'rcshowhideanons' => '$1 anonyme brukere',
-'rcshowhidepatr' => '$1 godkjente endringer',
-'rcshowhidemine' => '$1 mine endringer',
-'rclinks' => 'Vis siste $1 endringer i de siste $2 dagene<br />$3',
-'diff' => 'diff',
-'hist' => 'hist',
-'hide' => 'Skjul',
-'show' => 'Vis',
-'minoreditletter' => 'm',
-'newpageletter' => 'N',
-'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1 overvåkende {{PLURAL:$1|bruker|brukere}}]',
-'rc_categories' => 'Begrens til kategorier (skilletegn: «|»)',
-'rc_categories_any' => 'Alle',
-'newsectionsummary' => '/* $1 */ ny seksjon',
-'rc-enhanced-expand' => 'Vis detaljer (krever JavaScript)',
-'rc-enhanced-hide' => 'Skjul detaljer',
-
-# Recent changes linked
-'recentchangeslinked' => 'Relaterte endringer',
-'recentchangeslinked-feed' => 'Relaterte endringer',
-'recentchangeslinked-toolbox' => 'Relaterte endringer',
-'recentchangeslinked-title' => 'Endringer relatert til «$1»',
-'recentchangeslinked-noresult' => 'Ingen endringer på lenkede sider i den gitte perioden.',
-'recentchangeslinked-summary' => "Dette er en liste over de siste endringene på sidene lenket fra en spesifisert side (eller til meldlemmer av en spesifisert kategori).
-Sider på [[Special:Watchlist|overvåkningslisten din]] er i '''fet skrift'''.",
-'recentchangeslinked-page' => 'Sidenavn:',
-'recentchangeslinked-to' => 'Vis endringer på sider som lenker til den gitte siden istedet',
-
-# Upload
-'upload' => 'Last opp fil',
-'uploadbtn' => 'Last opp fil',
-'reuploaddesc' => 'Avbryt opplasting og gå tilbake til opplastingsskjemaet',
-'upload-tryagain' => 'Send inn endret filbeskrivelse',
-'uploadnologin' => 'Ikke logget inn',
-'uploadnologintext' => 'Du må være [[Special:UserLogin|logget inn]] for å kunne laste opp filer.',
-'upload_directory_missing' => 'Oppplastingsmappen ($1) mangler og kunne ikke opprettes av tjeneren.',
-'upload_directory_read_only' => 'Opplastingsmappa ($1) er ikke skrivbar for tjeneren.',
-'uploaderror' => 'Feil under opplasting av fil',
-'upload-recreate-warning' => "'''Advarsel: En fil med det navnet har blitt slettet eller flyttet.'''
-
-Slette- og flytteloggen for denne siden gjengis her:",
-'uploadtext' => "Bruk skjemaet nedenfor for å laste opp filer.
-For å se eller søke i eksisterende filer, gå til [[Special:FileList|listen over filer]]. Opplastinger lagres også i [[Special:Log/upload|opplastingsloggen]].
-
-For å inkludere en fil på en side, bruk en slik lenke:
-*'''<tt><nowiki>[[</nowiki>{{ns:file}}:Filnavn.jpg<nowiki>]]</nowiki></tt>''' for å bruke bildet i opprinnelig form
-*'''<tt><nowiki>[[</nowiki>{{ns:file}}:Filnavn.png|200px|thumb|left|Alternativ tekst<nowiki>]]</nowiki></tt>''' for å bruke bildet med en bredde på 200&nbsp;piksler, venstrestilt og med «Alternativ tekst» som beskrivelse
-*'''<tt><nowiki>[[</nowiki>{{ns:media}}:Filnavn.ogg<nowiki>]]</nowiki></tt>''' for å lenke direkte til filen uten å vise den",
-'upload-permitted' => 'Tillatte filtyper: $1.',
-'upload-preferred' => 'Foretrukne filtyper: $1',
-'upload-prohibited' => 'Forbudte filtyper: $1.',
-'uploadlog' => 'opplastingslogg',
-'uploadlogpage' => 'Opplastingslogg',
-'uploadlogpagetext' => 'Her er en liste over de siste opplastede filene.
-Se [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning',
-'filename' => 'Filnavn',
-'filedesc' => 'Beskrivelse',
-'fileuploadsummary' => 'Beskrivelse:',
-'filereuploadsummary' => 'Filendringer:',
-'filestatus' => 'Opphavsrettsstatus:',
-'filesource' => 'Kilde:',
-'uploadedfiles' => 'Filer som er lastet opp',
-'ignorewarning' => 'Ignorer advarselen og lagre filen likevel',
-'ignorewarnings' => 'Ignorer eventuelle advarsler',
-'minlength1' => 'Filnavn må være på minst én bokstav.',
-'illegalfilename' => 'Filnavnet «$1» inneholder ugyldige tegn. Gi filen et nytt navn og prøv igjen.',
-'badfilename' => 'Navnet på filen er blitt endret til «$1».',
-'filetype-mime-mismatch' => 'Filendelsen «.$1» tilsvarer ikke MIME-typen som oppgis i filen ($2).',
-'filetype-badmime' => 'Filer av typen «$1» kan ikke lastes opp.',
-'filetype-bad-ie-mime' => 'Kan ikke laste opp denne filen fordi Internet Explorer ville detektert denne som «$1», noe som er ikke er tillatt, og en potensielt farlig filtype.',
-'filetype-unwanted-type' => "'''«.$1»''' er en uønsket filtype.
-{{PLURAL:$3|Foretrukken filtype|Foretrukne filtyper}} er $2.",
-'filetype-banned-type' => "{{PLURAL:$4|Filtypen|Filtypene}} '''«.$1»''' er ikke {{PLURAL:$4|tillatt|tillatte}}.
-{{PLURAL:$3|Tillatt filtype|Tillatte filtyper}} er $2.",
-'filetype-missing' => 'Filen har ingen endelse (som «.jpg»).',
-'empty-file' => 'Filen du sendte inn var tom.',
-'file-too-large' => 'Filen du sendte inn var for stor.',
-'filename-tooshort' => 'Filnavnet er for kort.',
-'filetype-banned' => 'Denne filtypen er forbudt.',
-'verification-error' => 'Denne filen bestod ikke filbekreftelsen.',
-'hookaborted' => 'Endringene du prøvde å gjøre ble avbrutt av en utvidelseskrok.',
-'illegal-filename' => 'Filnavnet er ikke tillatt.',
-'overwrite' => 'Overskriving av eksisterende filer er ikke tillatt.',
-'unknown-error' => 'En ukjent feil oppsto.',
-'tmp-create-error' => 'Kunne ikke opprette midlertidig fil.',
-'tmp-write-error' => 'Feil ved skriving av midlertidig fil.',
-'large-file' => 'Det er anbefalt at filen ikke er større enn $1; denne filen er $2.',
-'largefileserver' => 'Denne filen er større enn det tjeneren er satt opp til å tillate.',
-'emptyfile' => 'Filen du lastet opp ser ut til å være tom. Dette kan komme av en skrivefeil i filnavnet. Sjekk om du virkelig vil laste opp denne filen.',
-'windows-nonascii-filename' => 'Denne wikien støtter ikke filnavn med spesialtegn.',
-'fileexists' => "Ei fil med dette navnet finnes allerede.
-Sjekk '''<tt>[[:$1]]</tt>''' hvis du ikke er sikker på at du vil forandre den.
-[[$1|thumb]]",
-'filepageexists' => "Beskrivelsessiden for denne filen finnes allerede på '''<tt>[[:$1]]</tt>''', men ingen filer med dette navnet finnes. Sammendraget du skruver inn vil ikke vises på beskrivelsessiden. For at det skal dukke opp der må du skrive det inn manuelt etter å da lastet opp filen.
-[[$1|thumb]]",
-'fileexists-extension' => "En fil med et lignende navn finnes: [[$2|thumb]]
-* Navnet på din fil: '''<tt>[[:$1]]</tt>'''
-* Navn på eksisterende fil: '''<tt>[[:$2]]</tt>'''
-Velg et annet filnavn.",
-'fileexists-thumbnail-yes' => "Filen ser ut til å være et bilde av redusert størrelse. [[$1|thumb]]
-Vennligst sjekk filen '''<tt>[[:$1]]</tt>'''.
-Om filen du sjekket er det samme bildet, men i opprinnelig størrelse, er det ikke nødvendig å laste opp en ekstra fil.",
-'file-thumbnail-no' => "Filnavnet begynner med '''<tt>$1</tt>'''.
-Det virker som om det er et bilde av redusert størrelse ''(miniatyrbilde)''.
-Om du har dette bildet i stor utgave, last opp det, eller endre filnavnet på denne filen.",
-'fileexists-forbidden' => 'En fil med dette navnet finnes fra før, og kan ikke erstattes.
-Om du fortsatt ønsker å laste opp filen, gå tilbake og last den opp under et nytt navn. [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Ei fil med dette navnet finnes fra før i det delte fillageret.
-Om du fortsatt ønsker å laste opp filen, gå tilbake og last den opp under et nytt navn. [[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => 'Denne filen er en dublett av følgende {{PLURAL:$1|fil|filer}}:',
-'file-deleted-duplicate' => 'En fil identisk med denne filen ([[:$1]]) har tidligere blitt slettet. Du bør sjekke denne filens slettehistorikk før du prøver å laste den opp på nytt.',
-'uploadwarning' => 'Opplastingsadvarsel',
-'uploadwarning-text' => 'Vennligst endre filbeskrivelsen nedenfor og prøv igjen.',
-'savefile' => 'Lagre fil',
-'uploadedimage' => 'lastet opp «[[$1]]»',
-'overwroteimage' => 'last opp en ny versjon av «[[$1]]»',
-'uploaddisabled' => 'Opplastingsfunksjonen er slått av',
-'copyuploaddisabled' => 'Opplasting via nettadresse deaktivert.',
-'uploadfromurl-queued' => 'Opplastingen din har blitt satt i kø.',
-'uploaddisabledtext' => 'Opplasting er slått av.',
-'php-uploaddisabledtext' => 'PHP-filopplasting er deaktivert. Sjekk innstillingen for file_uploads.',
-'uploadscripted' => 'Denne filen inneholder HTML eller skripting som kan feiltolkes av en nettleser.',
-'uploadvirus' => 'Denne filen inneholder virus! Detaljer: $1',
-'uploadjava' => 'Filen er en ZIP-fil som inneholder en Java-fil av typen .class.
-Det er ikke tillatt å laste opp Java-filer, fordi de kan omgå sikkerhetsrestriksjoner.',
-'upload-source' => 'Kildefil',
-'sourcefilename' => 'Velg en fil:',
-'sourceurl' => 'Kildens URL:',
-'destfilename' => 'Ønsket filnavn:',
-'upload-maxfilesize' => 'Maksimal filstørrelse: $1',
-'upload-description' => 'Filbeskrivelse',
-'upload-options' => 'Opplastingsvalg',
-'watchthisupload' => 'Overvåk denne filen',
-'filewasdeleted' => 'Ei fil ved dette navnet har blitt lastet opp tidligere, og så slettet. Sjekk $1 før du forsøker å laste det opp igjen.',
-'filename-bad-prefix' => "Navnet på filen du laster opp begynner med '''«$1»''', hvilket er et ikke-beskrivende navn som vanligvis brukes automatisk av digitalkameraer. Vennligst bruk et mer beskrivende navn på filen.",
-'filename-prefix-blacklist' => ' #<!-- leave this line exactly as it is --> <pre>
-# Syntaksen er som følger:
-#   * Alt fra tegnet «#» til slutten av linja er en kommentar
-#   * Alle linjer som ikke er blanke er et prefiks som vanligvis brukes automatisk av digitale kameraer
-CIMG # Casio
-DSC_ # Nikon
-DSCF # Fuji
-DSCN # Nikon
-DUW # noen mobiltelefontyper
-IMG # generisk
-JD # Jenoptik
-MGP # Pentax
-PICT # div.
- #</pre> <!-- leave this line exactly as it is -->',
-'upload-success-subj' => 'Opplastingen er gjennomført',
-'upload-success-msg' => 'Din opplasting fra [$2] var vellykket. Den er tilgjengelig her: [[:{{ns:file}}:$1]]',
-'upload-failure-subj' => 'Opplastingsproblem',
-'upload-failure-msg' => 'Det oppsto et problem med opplastingen din fra [$2]:
-
-$1',
-'upload-warning-subj' => 'Opplastingsadvarsel',
-'upload-warning-msg' => 'Det oppsto et problem med opplastingen din fra [$2]. Du kan gå tilbake til [[Special:Upload/stash/$1|opplastingsskjemaet]] for å løse dette problemet.',
-
-'upload-proto-error' => 'Gal protokoll',
-'upload-proto-error-text' => 'Fjernopplasting behøver adresser som begynner med <code>http://</code> eller <code>ftp://</code>.',
-'upload-file-error' => 'Intern feil',
-'upload-file-error-text' => 'En intern feil oppsto under forsøk på å lage en midlertidig fil på tjeneren. Vennligst kontakt en [[Special:ListUsers/sysop|administrator]].',
-'upload-misc-error' => 'Ukjent opplastingsfeil',
-'upload-misc-error-text' => 'En ukjent feil forekom under opplastingen.
-Bekreft at adressen er gyldig og tilgjengelig, og prøv igjen.
-Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
-'upload-too-many-redirects' => 'URL-en inneholdt for mange omdirigeringer',
-'upload-unknown-size' => 'Ukjent størrelse',
-'upload-http-error' => 'En HTTP-feil oppstod: $1',
-
-# ZipDirectoryReader
-'zip-file-open-error' => 'Det oppsto en feil under åpning av filen for ZIP-sjekking.',
-'zip-wrong-format' => 'Den angitte filen var ikke en ZIP-fil.',
-'zip-bad' => 'Filen er en skadd eller på annen måte uleselig ZIP-fil.
-Den kan ikke sikkerhetskontrolleres.',
-'zip-unsupported' => 'Filen er en ZIP-fil som bruker funksjoner som ikke støttes av MediaWiki.
-Den kan ikke sikkerhetskontrolleres.',
-
-# Special:UploadStash
-'uploadstash' => 'Last opp stash',
-'uploadstash-summary' => 'Denne siden gir tilgang til filer som har blitt lastet opp (eller er i ferd med å bli lastet opp) men som ennå ikke er publisert til wikien. Disse filene er ikke synlige for andre enn brukeren som lastet dem opp.',
-'uploadstash-clear' => 'Fjern stashede filer',
-'uploadstash-nofiles' => 'Du har ingen stashede filer.',
-'uploadstash-badtoken' => 'Utføringen av den handlingen var mislykket, kanskje fordi dine redigeringsrettigheter har utløpt. Prøv igjen.',
-'uploadstash-errclear' => 'Fjerning av filene var mislykket.',
-'uploadstash-refresh' => 'Oppdater listen over filer',
-
-# img_auth script messages
-'img-auth-accessdenied' => 'Ingen tilgang',
-'img-auth-nopathinfo' => 'Manglende PATH_INFO.
-Tjeneren din er ikke satt opp til å gi denne informasjonen.
-Den er kanskje CGI-basert og støtter ikke img_auth.
-[//www.mediawiki.org/wiki/Manual:Image_Authorization Se bildeautorisasjon.]',
-'img-auth-notindir' => 'Den ønskede stien finnes ikke i den oppsatte opplastingsmappa.',
-'img-auth-badtitle' => 'Kunne ikke lage en gyldig tittel ut fra «$1».',
-'img-auth-nologinnWL' => 'Du er ikke logget inn, og «$1» er ikke på hvitelista.',
-'img-auth-nofile' => 'Filen «$1» finnes ikke.',
-'img-auth-isdir' => 'Du prøver å få tilgang til mappa «$1».
-Kun filtilgang tillates.',
-'img-auth-streaming' => 'Sender «$1».',
-'img-auth-public' => 'Funksjonen til img_auth.php er å lage filer fra en privat wiki.
-Denne wikien er satt opp som en offentlig wiki.
-For best mulig sikkerhet er img_auth.php slått av.',
-'img-auth-noread' => 'Brukeren har ikke tilgang til å lese «$1».',
-'img-auth-bad-query-string' => 'URL-en har en ugyldig spørrestreng.',
-
-# HTTP errors
-'http-invalid-url' => 'Ugyldig internettadresse: $1',
-'http-invalid-scheme' => 'Internettadresser med «$1»-formen støttes ikke',
-'http-request-error' => 'HTTP-forespørselen feilet på grunn av en ukjent feil.',
-'http-read-error' => 'HTTP-lesefeil.',
-'http-timed-out' => 'Tidsavbrudd på HTTP-forespørsel.',
-'http-curl-error' => 'Feil under henting av adresse: $1',
-'http-host-unreachable' => 'Kunne ikke nå adressen.',
-'http-bad-status' => 'Det var et problem under HTTP-forespørselen: $1 $2',
-
-# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-'upload-curl-error6' => 'Kunne ikke nå adressen',
-'upload-curl-error6-text' => 'Adressen kunne ikke nås. Vennligst dobbelsjekk at adressen er korrekt og at siden er oppe.',
-'upload-curl-error28' => 'Opplastingstimeout',
-'upload-curl-error28-text' => 'Siden brukte for lang tid på å reagere. Vennligst sjekk at siden er oppe, og vent en kort stund for du prøver igjen. Vurder å prøve på en mindre hektisk tid.',
-
-'license' => 'Lisens:',
-'license-header' => 'Lisensiering',
-'nolicense' => 'Ingen spesifisert',
-'license-nopreview' => '(Forhåndsvisning ikke tilgjengelig)',
-'upload_source_url' => ' (en gyldig, offentlig tilgjengelig adresse)',
-'upload_source_file' => ' (en fil på din datamaskin)',
-
-# Special:ListFiles
-'listfiles-summary' => 'Denne spesialsiden viser alle opplastede filer.
-Når den filtreres av en bruker, vises bare de sist opplastede versjonene av filen.',
-'listfiles_search_for' => 'Søk etter filnavn:',
-'imgfile' => 'fil',
-'listfiles' => 'Filliste',
-'listfiles_thumb' => 'Miniatyrbilde',
-'listfiles_date' => 'Dato',
-'listfiles_name' => 'Navn',
-'listfiles_user' => 'Bruker',
-'listfiles_size' => 'Størrelse (bytes)',
-'listfiles_description' => 'Beskrivelse',
-'listfiles_count' => 'Versjoner',
-
-# File description page
-'file-anchor-link' => 'Fil',
-'filehist' => 'Filhistorikk',
-'filehist-help' => 'Klikk på en dato/klokkeslett for å se filen slik den var da.',
-'filehist-deleteall' => 'slett alt',
-'filehist-deleteone' => 'slett',
-'filehist-revert' => 'tilbakestill',
-'filehist-current' => 'nåværende',
-'filehist-datetime' => 'Dato/tid',
-'filehist-thumb' => 'Miniatyrbilde',
-'filehist-thumbtext' => 'Miniatyrbilde av versjonen fra $1',
-'filehist-nothumb' => 'Intet miniatyrbilde',
-'filehist-user' => 'Bruker',
-'filehist-dimensions' => 'Dimensjoner',
-'filehist-filesize' => 'Filstørrelse',
-'filehist-comment' => 'Kommentar',
-'filehist-missing' => 'Fil mangler',
-'imagelinks' => 'Filbruk',
-'linkstoimage' => 'Følgende {{PLURAL:$1|side|$1 sider}} har lenker til denne filen:',
-'linkstoimage-more' => 'Mer enn $1 {{PLURAL:$1|side|sider}} lenker til denne filen.
-Følgende liste viser {{PLURAL:$1|den første siden|de $1 første sidene}}.
-En [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengelig.',
-'nolinkstoimage' => 'Det er ingen sider som bruker denne filen.',
-'morelinkstoimage' => 'Vis [[Special:WhatLinksHere/$1|flere lenker]] til denne filen.',
-'linkstoimage-redirect' => '$1 (filomdirigering) $2',
-'duplicatesoffile' => 'Følgende {{PLURAL:$1|fil er en dublett|filer er dubletter}} av denne filen ([[Special:FileDuplicateSearch/$2|fler detaljer]]):',
-'sharedupload' => 'Denne filen er fra $1 og kan bli brukt av andre prosjekter.',
-'sharedupload-desc-there' => 'Denne filen er fra $1 og kan brukes på andre prosjekter.
-Se [$2 filbeskrivelsessida] for mer informasjon.',
-'sharedupload-desc-here' => 'Denne filen er fra $1 og kan brukes av andre prosjekter.
-Beskrivelsen fra [$2 filbeskrivelsessida] vises nedenfor.',
-'filepage-nofile' => 'Det finnes ingen fil med dette navnet.',
-'filepage-nofile-link' => 'Ingen fil med dette navnet eksisterer, men du kan [$1 laste den opp].',
-'uploadnewversion-linktext' => 'Last opp en ny versjon av denne filen',
-'shared-repo-from' => 'fra $1',
-'shared-repo' => 'et delt fillager',
-
-# File reversion
-'filerevert' => 'Tilbakestill $1',
-'filerevert-legend' => 'Tilbakestill fil',
-'filerevert-intro' => "Du tilbakestiller '''[[Media:$1|$1]]''' til [$4 versjonen à $2, $3].",
-'filerevert-comment' => 'Årsak:',
-'filerevert-defaultcomment' => 'Tilbakestilte til versjonen à $1, $2',
-'filerevert-submit' => 'Tilbakestill',
-'filerevert-success' => "'''[[Media:$1|$1]]''' ble tilbakestilt til [$4 versjonen à $2, $3].",
-'filerevert-badversion' => 'Det er ingen tidligere lokal versjon av denne filen med det gitte tidstrykket.',
-
-# File deletion
-'filedelete' => 'Slett $1',
-'filedelete-legend' => 'Slett fil',
-'filedelete-intro' => "Du er i ferd med å slette filen '''[[Media:$1|$1]]''' sammen med hele dens historikk.",
-'filedelete-intro-old' => "Du sletter versjonen av '''[[Media:$1|$1]]''' à [$4 $3, $2].",
-'filedelete-comment' => 'Årsak:',
-'filedelete-submit' => 'Slett',
-'filedelete-success' => "'''$1''' ble slettet.",
-'filedelete-success-old' => "Versjonen av '''[[Media:$1|$1]]''' à $3, $2 ble slettet.",
-'filedelete-nofile' => "'''$1''' finnes ikke.",
-'filedelete-nofile-old' => "Det er ingen arkivert versjon av '''$1''' med de gitte attributtene.",
-'filedelete-otherreason' => 'Annen/utdypende grunn:',
-'filedelete-reason-otherlist' => 'Annen grunn',
-'filedelete-reason-dropdown' => '*Vanlige slettingsgrunner
-** Opphavsrettsbrudd
-** Duplikatfil',
-'filedelete-edit-reasonlist' => 'Rediger begrunnelser for sletting',
-'filedelete-maintenance' => 'Sletting og gjenoppretting av filer er midlertidig slått av på grunn av vedlikehold.',
-
-# MIME search
-'mimesearch' => 'MIME-søk',
-'mimesearch-summary' => 'Denne siden muliggjør filtrering av filer per MIME-type. Skriv inn: innholdstype/undertype, for eksempel <tt>image/jpeg</tt>.',
-'mimetype' => 'MIME-type:',
-'download' => 'last ned',
-
-# Unwatched pages
-'unwatchedpages' => 'Sider som ikke er overvåket',
-
-# List redirects
-'listredirects' => 'Liste over omdirigeringer',
-
-# Unused templates
-'unusedtemplates' => 'Ubrukte maler',
-'unusedtemplatestext' => 'Denne siden lister opp alle sider i malnavnerommet ({{ns:template}}:) som ikke er inkludert på en annen side. Husk å sjekke for andre slags lenker til malen før du sletter den.',
-'unusedtemplateswlh' => 'andre lenker',
-
-# Random page
-'randompage' => 'Tilfeldig side',
-'randompage-nopages' => 'Det er ingen sider i {{PLURAL:$2|det følgende navnrommet|de følgende navnrommene}}: $1.',
-
-# Random redirect
-'randomredirect' => 'Tilfeldig omdirigering',
-'randomredirect-nopages' => 'Det er ingen omdirigeringer i navnerommet $1.',
-
-# Statistics
-'statistics' => 'Statistikk',
-'statistics-header-pages' => 'Sidestatistikk',
-'statistics-header-edits' => 'Redigeringsstatistikk',
-'statistics-header-views' => 'Visningsstatistikk',
-'statistics-header-users' => 'Brukerstatistikk',
-'statistics-header-hooks' => 'Øvrig statistikk',
-'statistics-articles' => 'Innholdssider',
-'statistics-pages' => 'Sider',
-'statistics-pages-desc' => 'Alle sider på wikien, inkludert diskusjonssider, omdirigeringer o.l.',
-'statistics-files' => 'Opplastede filer',
-'statistics-edits' => 'Redigeringer siden {{SITENAME}} ble opprettet',
-'statistics-edits-average' => 'Gjennomsnittlig antall redigeringer per side',
-'statistics-views-total' => 'Totalt antall visninger',
-'statistics-views-total-desc' => 'Visninger av ikke-eksisterende sider og spesielsider inkluderes ikke',
-'statistics-views-peredit' => 'Visninger per redigering',
-'statistics-users' => 'Registrerte [[Special:ListUsers|brukere]]',
-'statistics-users-active' => 'Aktive brukere',
-'statistics-users-active-desc' => 'Brukere som har utført handlinger {{PLURAL:$1|det siste døgnet|de siste $1 dagene}}',
-'statistics-mostpopular' => 'Mest viste sider',
-
-'disambiguations' => 'Sider som lenker til artikler med flertydige titler',
-'disambiguationspage' => 'Template:Peker',
-'disambiguations-text' => "Følgende sider lenker til en '''pekerside'''.
-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]]",
-
-'doubleredirects' => 'Doble omdirigeringer',
-'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.
-Hver rad inneholder lenker til første og andre omdirigering, samt målet for den andre omdirigeringen, som vanligvis er den «virkelige» målsiden som den første omdirigeringen burde peke til.
-<del>Gjennomstrøkne</del> sider har blitt fikset.',
-'double-redirect-fixed-move' => '[[$1]] har blitt flyttet, og er nå en omdirigering til [[$2]]',
-'double-redirect-fixed-maintenance' => 'Fikser dobbel omdirigering fra [[$1]] til [[$2]].',
-'double-redirect-fixer' => 'Omdirigeringsfikser',
-
-'brokenredirects' => 'Brutte omdirigeringer',
-'brokenredirectstext' => 'Følgende omdirigeringer peker til ikkeeksisterende sider:',
-'brokenredirects-edit' => 'rediger',
-'brokenredirects-delete' => 'slett',
-
-'withoutinterwiki' => 'Sider uten språklenker',
-'withoutinterwiki-summary' => 'Følgende sider lenker ikke til andre språkversjoner:',
-'withoutinterwiki-legend' => 'Prefiks',
-'withoutinterwiki-submit' => 'Vis',
-
-'fewestrevisions' => 'Artikler med færrest revisjoner',
-
-# Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
-'ncategories' => '$1 {{PLURAL:$1|kategori|kategorier}}',
-'nlinks' => '$1 {{PLURAL:$1|lenke|lenker}}',
-'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}',
-'nrevisions' => '$1 {{PLURAL:$1|revisjon|revisjoner}}',
-'nviews' => '$1 {{PLURAL:$1|visning|visninger}}',
-'nimagelinks' => 'Brukt på $1 {{PLURAL:$1|side|sider}}',
-'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}',
-'specialpage-empty' => 'Denne siden er tom.',
-'lonelypages' => 'Foreldreløse sider',
-'lonelypagestext' => 'Følgende sider blir ikke lenket til eller brukt på andre sider på {{SITENAME}}.',
-'uncategorizedpages' => 'Ukategoriserte sider',
-'uncategorizedcategories' => 'Ukategoriserte kategorier',
-'uncategorizedimages' => 'Ukategoriserte filer',
-'uncategorizedtemplates' => 'Ukategoriserte maler',
-'unusedcategories' => 'Ubrukte kategorier',
-'unusedimages' => 'Ubrukte filer',
-'popularpages' => 'Populære sider',
-'wantedcategories' => 'Ønskede kategorier',
-'wantedpages' => 'Etterspurte sider',
-'wantedpages-badtitle' => 'Ugyldig tittel i resultatene: $1',
-'wantedfiles' => 'Ønskede filer',
-'wantedtemplates' => 'Etterspurte maler',
-'mostlinked' => 'Sider med flest lenker til seg',
-'mostlinkedcategories' => 'Kategorier med flest sider',
-'mostlinkedtemplates' => 'Mest brukte maler',
-'mostcategories' => 'Sider med flest kategorier',
-'mostimages' => 'Mest brukte filer',
-'mostrevisions' => 'Artikler med flest revisjoner',
-'prefixindex' => 'Alle sider med prefiks',
-'shortpages' => 'Korte sider',
-'longpages' => 'Lange sider',
-'deadendpages' => 'Blindveisider',
-'deadendpagestext' => 'Følgende sider lenker ikke til andre sider på {{SITENAME}}.',
-'protectedpages' => 'Låste sider',
-'protectedpages-indef' => 'Kun beskyttelser på ubestemt tid',
-'protectedpages-cascade' => 'Kun dypbeskyttelse',
-'protectedpagestext' => 'Følgende sider er låst for flytting eller redigering',
-'protectedpagesempty' => 'Ingen sider er for øyeblikket låst med disse paramterne.',
-'protectedtitles' => 'Beskyttede titler',
-'protectedtitlestext' => 'Følgende titler er beskyttet fra opprettelse',
-'protectedtitlesempty' => 'Ingen titler beskyttes med disse parameterne for øyeblikket.',
-'listusers' => 'Brukerliste',
-'listusers-editsonly' => 'Vis bare brukere med redigeringer',
-'listusers-creationsort' => 'Sorter etter opprettelsesdato',
-'usereditcount' => '{{PLURAL:$1|én redigering|$1 redigeringer}}',
-'newpages' => 'Nye sider',
-'newpages-username' => 'Brukernavn:',
-'ancientpages' => 'Eldste sider',
-'move' => 'Flytt',
-'movethispage' => 'Flytt denne siden',
-'unusedimagestext' => 'Følgende filer eksisterer men er ikke innlagt på noen sider.
-Merk at andre sider kanskje lenker til en fil med en direkte lenke, så filen listes her selv om den faktisk er i bruk.',
-'unusedcategoriestext' => 'Følgende kategorier finnes, men det er ingen sider i dem.',
-'notargettitle' => 'Intet mål',
-'notargettext' => 'Du oppga ikke en målside eller bruker å utføre denne funksjonen på.',
-'nopagetitle' => 'Målsiden finnes ikke',
-'nopagetext' => 'Siden du ville flytte finnes ikke.',
-'pager-newer-n' => '{{PLURAL:$1|1 nyere|$1 nyere}}',
-'pager-older-n' => '{{PLURAL:$1|1 eldre|$1 eldre}}',
-'suppress' => 'Historikkrydding',
-'querypage-disabled' => 'Denne spesialsiden er deaktivert av ytelsesårsaker.',
-
-# Book sources
-'booksources' => 'Bokkilder',
-'booksources-search-legend' => 'Søk etter bokkilder',
-'booksources-go' => 'Gå',
-'booksources-text' => 'Under er en liste over lenker til andre sider som selger nye og brukte bøker, og kan også ha videre informasjon om bøker du leter etter:',
-'booksources-invalid-isbn' => 'Det gitte ISBN-nummeret er ugyldig; sjekk om du har angitt det riktig.',
-
-# Special:Log
-'specialloguserlabel' => 'Bruker:',
-'speciallogtitlelabel' => 'Tittel:',
-'log' => 'Logger',
-'all-logs-page' => 'Alle offentlige logger',
-'alllogstext' => 'Kombinert visning av alle loggene på {{SITENAME}}.
-Du kan minske antallet resultater ved å velge loggtype, brukernavn eller den siden som er påvirket (husk å skille mellom store og små bokstaver).',
-'logempty' => 'Ingen elementer i loggen.',
-'log-title-wildcard' => 'Søk i titler som starter med denne teksten',
-
-# Special:AllPages
-'allpages' => 'Alle sider',
-'alphaindexline' => '$1 til $2',
-'nextpage' => 'Neste side ($1)',
-'prevpage' => 'Forrige side ($1)',
-'allpagesfrom' => 'Vis sider fra og med:',
-'allpagesto' => 'Vis sider som slutter på:',
-'allarticles' => 'Alle sider',
-'allinnamespace' => 'Alle sider i $1-navnerommet',
-'allnotinnamespace' => 'Alle sider (ikke i $1-navnerommet)',
-'allpagesprev' => 'Forrige',
-'allpagesnext' => 'Neste',
-'allpagessubmit' => 'Gå',
-'allpagesprefix' => 'Vis sider med prefikset:',
-'allpagesbadtitle' => 'Den angitte sidetittelen var ugyldig eller hadde et interwiki-prefiks. Den kan inneholde ett eller flere tegn som ikke kan brukes i titler.',
-'allpages-bad-ns' => '{{SITENAME}} har ikke navnerommet «$1».',
-
-# Special:Categories
-'categories' => 'Kategorier',
-'categoriespagetext' => 'Følgende {{PLURAL:$1|kategori|kategorier}} inneholder sider eller media.
-[[Special:UnusedCategories|Ubrukte kategorier]] vises ikke her.
-Se også [[Special:WantedCategories|ønskede kategorier]].',
-'categoriesfrom' => 'Vis kategorier fra og med:',
-'special-categories-sort-count' => 'soter etter antall',
-'special-categories-sort-abc' => 'sorter alfabetisk',
-
-# Special:DeletedContributions
-'deletedcontributions' => 'Slettede brukerbidrag',
-'deletedcontributions-title' => 'Slettede brukerbidrag',
-'sp-deletedcontributions-contribs' => 'bidrag',
-
-# Special:LinkSearch
-'linksearch' => 'Søk i eksterne lenker',
-'linksearch-pat' => 'Søkemønster:',
-'linksearch-ns' => 'Navnerom:',
-'linksearch-ok' => 'Søk',
-'linksearch-text' => 'Jokertegn som «*.wikipedia.org» kan brukes.<br />Støttede protokoller: <tt>$1</tt>',
-'linksearch-line' => '$1 lenkes fra $2',
-'linksearch-error' => 'Jokertegn kan kun brukes foran tjenernavnet.',
-
-# Special:ListUsers
-'listusersfrom' => 'Vis brukere fra og med:',
-'listusers-submit' => 'Vis',
-'listusers-noresult' => 'Ingen bruker funnet.',
-'listusers-blocked' => '(konto blokkert)',
-
-# Special:ActiveUsers
-'activeusers' => 'Liste over aktive brukere',
-'activeusers-intro' => 'Dette er en liste over brukere som har hatt en eller annen form for aktivitet innenfor {{PLURAL:$1|den siste dagen|de siste dagene}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|endring|endringer}} {{PLURAL:$3|det siste døgnet|de siste $3 dagene}}',
-'activeusers-from' => 'Vis brukere fra og med:',
-'activeusers-hidebots' => 'Skjul roboter',
-'activeusers-hidesysops' => 'Skjul administratorer',
-'activeusers-noresult' => 'Ingen brukere funnet.',
-
-# Special:Log/newusers
-'newuserlogpage' => 'Brukeropprettelseslogg',
-'newuserlogpagetext' => 'Dette er en logg over brukeropprettelser.',
-
-# Special:ListGroupRights
-'listgrouprights' => 'Rettigheter for brukergrupper',
-'listgrouprights-summary' => 'Følgende er en liste over brukergrupper som er definert på denne wikien, og hvilke rettigheter de har.
-Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrouprights-helppage}}|her]].',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Innvilget rettighet</span>
-* <span class="listgrouprights-granted">Tilbaketrukket rettighet</span>',
-'listgrouprights-group' => 'Gruppe',
-'listgrouprights-rights' => 'Rettigheter',
-'listgrouprights-helppage' => 'Help:Grupperettigheter',
-'listgrouprights-members' => '(liste over medlemmer)',
-'listgrouprights-addgroup' => 'Kan legge til {{PLURAL:$2|gruppa|gruppene}}: $1',
-'listgrouprights-removegroup' => 'Kan fjerne {{PLURAL:$2|gruppa|gruppene}}: $1',
-'listgrouprights-addgroup-all' => 'Kan legge til alle grupper',
-'listgrouprights-removegroup-all' => 'Kan fjerne alle grupper',
-'listgrouprights-addgroup-self' => 'Kan legge til {{PLURAL:$2|gruppe|gruppene}} til egen konto: $1',
-'listgrouprights-removegroup-self' => 'Kan ta vekk {{PLURAL:$2|gruppe|grupper}} fra egen konto: $1',
-'listgrouprights-addgroup-self-all' => 'Kan legge til alle grupper til egen konto',
-'listgrouprights-removegroup-self-all' => 'Kan ta bort alle grupper fra egen konto',
-
-# E-mail user
-'mailnologin' => 'Ingen avsenderadresse',
-'mailnologintext' => 'Du må være [[Special:UserLogin|logget inn]] og ha en gyldig e-postadresse satt i [[Special:Preferences|brukerinnstillingene]] for å sende e-post til andre brukere.',
-'emailuser' => 'E-post til denne brukeren',
-'emailpage' => 'E-post til bruker',
-'emailpagetext' => 'Du kan bruke skjemaet nedenfor for å sende en e-post til denne brukeren.
-Den e-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil dukke opp i «fra»-feltet på denne e-posten, så mottakeren er i stand til å svare.',
-'usermailererror' => 'E-postobjekt returnerte feilen:',
-'usermaildisabled' => 'Brukerepost deaktivert',
-'usermaildisabledtext' => 'Du kan ikke sende epost til andre brukere på denne wikien',
-'noemailtitle' => 'Ingen e-postadresse',
-'noemailtext' => 'Dene brukeren har ikke oppgitt en gyldig e-postadresse.',
-'nowikiemailtitle' => 'Ingen e-post tillatt',
-'nowikiemailtext' => 'Denne brukeren har valgt å ikke motta e-post fra andre brukere.',
-'emailnotarget' => 'Ikke-eksisterende eller ugyldig brukernavn for mottaker.',
-'emailtarget' => 'Skriv inn brukernavnet på mottakeren',
-'emailusername' => 'Brukernavn:',
-'emailusernamesubmit' => 'Send',
-'email-legend' => 'Send en e-post til en annen {{SITENAME}}-bruker',
-'emailfrom' => 'Fra:',
-'emailto' => 'Til:',
-'emailsubject' => 'Emne:',
-'emailmessage' => 'Beskjed:',
-'emailsend' => 'Send',
-'emailccme' => 'Send meg en kopi av beskjeden min.',
-'emailccsubject' => 'Kopi av din beskjed til $1: $2',
-'emailsent' => 'E-post sendt',
-'emailsenttext' => 'E-postbeskjeden er sendt',
-'emailuserfooter' => 'E-posten ble sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.',
-
-# User Messenger
-'usermessage-summary' => 'Etterlater en systembeskjed.',
-'usermessage-editor' => 'Systembudbringer',
-
-# Watchlist
-'watchlist' => 'Overvåkningsliste',
-'mywatchlist' => 'Overvåkningsliste',
-'watchlistfor2' => 'For $1 $2',
-'nowatchlist' => 'Du har ingenting i overvåkningslisten.',
-'watchlistanontext' => 'Vennligst $1 for å vise eller redigere sider på overvåkningslisten din.',
-'watchnologin' => 'Ikke logget inn',
-'watchnologintext' => 'Du må være [[Special:UserLogin|logget inn]] for å kunne endre overvåkningslisten.',
-'addwatch' => 'Legg til i overvåkningslisten',
-'addedwatchtext' => "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]].
-Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp her, og siden vil fremstå '''uthevet''' i [[Special:RecentChanges|listen over siste endringer]] for å gjøre det lettere å finne den.",
-'removewatch' => 'Fjern fra overvåkningslisten',
-'removedwatchtext' => 'Siden «[[:$1]]» er fjernet fra [[Special:Watchlist|overvåkningslisten din]].',
-'watch' => 'Overvåk',
-'watchthispage' => 'Overvåk denne siden',
-'unwatch' => 'Avslutt overvåkning',
-'unwatchthispage' => 'Fjerner overvåkning',
-'notanarticle' => 'Ikke en artikkel',
-'notvisiblerev' => 'Revisjonen er slettet',
-'watchnochange' => 'Ingen av sidene i overvåkningslisten er endret i den valgte perioden.',
-'watchlist-details' => '{{PLURAL:$1|Én side|$1 sider}} på din overvåkningsliste, teller ikke diskusjonssider.',
-'wlheader-enotif' => '* E-postnotifikasjon er slått på.',
-'wlheader-showupdated' => "* Sider som har blitt forandret siden du sist besøkte dem vises i '''fet tekst'''",
-'watchmethod-recent' => 'sjekker siste endringer for sider i overvåkningslisten',
-'watchmethod-list' => 'sjekker siste endringer for sider i overvåkningslisten',
-'watchlistcontains' => 'Overvåkningslisten inneholder $1 {{PLURAL:$1|side|sider}}.',
-'iteminvalidname' => 'Problem med «$1», ugyldig navn&nbsp;…',
-'wlshowlast' => 'Vis siste $1 timer $2 dager $3',
-'watchlist-options' => 'Alternativ for overvåkningslisten',
-
-# Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'Overvåker…',
-'unwatching' => 'Fjerner fra overvåkningsliste…',
-'watcherrortext' => 'Det oppsto en feil under endring av overvåkningsinnstillingene dine for «$1».',
-
-'enotif_mailer' => '{{SITENAME}}s påminnelsessystem',
-'enotif_reset' => 'Merk alle sider som besøkt',
-'enotif_newpagetext' => 'Dette er en ny side.',
-'enotif_impersonal_salutation' => '{{SITENAME}}-bruker',
-'changed' => 'endret',
-'created' => 'opprettet',
-'enotif_subject' => '{{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED av $PAGEEDITOR',
-'enotif_lastvisited' => 'Se $1 for alle endringer siden ditt forrige besøk.',
-'enotif_lastdiff' => 'Se $1 for å se denne endringen.',
-'enotif_anon_editor' => 'anonym bruker $1',
-'enotif_body' => 'Kjære $WATCHINGUSERNAME,
-
-
-{{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED den $PAGEEDITDATE av $PAGEEDITOR, se $PAGETITLE_URL for den nåværende revisjonen.
-
-$NEWPAGE
-
-Redigeringssammendrag: $PAGESUMMARY $PAGEMINOREDIT
-
-Kontakt brukeren:
-e-post: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
-
-Det vil ikke komme flere varsler om endringer på denne siden med mindre du besøker den.
-Du kan også fjerne varslingsflagg for alle overvåkede sider i overvåkningslisten din.
-
-             Ditt vennlige varslingssystem for {{SITENAME}}
-
---
-For å endre innstillingene for e-postvarsler, se
-{{canonicalurl:{{#special:Preferences}}}}
-
-For å endre innstillingene for overvåkningslisten, se
-{{canonicalurl:{{#special:EditWatchlist}}}}
-
-For å slette en side fra overvåkningssiden, se
-$UNWATCHURL
-
-Tilbakemelding og videre assistanse:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
-
-# Delete
-'deletepage' => 'Slett side',
-'confirm' => 'Bekreft',
-'excontent' => 'Innholdet var: «$1»',
-'excontentauthor' => 'innholdet var «$1» (og eneste bidragsyter var [[Special:Contributions/$2|$2]])',
-'exbeforeblank' => 'innholdet før siden ble tømt var: «$1»',
-'exblank' => 'siden var tom',
-'delete-confirm' => 'Slett «$1»',
-'delete-legend' => 'Slett',
-'historywarning' => 'Advarsel: Siden du er i ferd med å slette har en historikk med omtrent {{PLURAL:$1|én revisjon|$1 revisjoner}}:',
-'confirmdeletetext' => 'Du holder på å slette en side sammen med historikken.
-Bekreft at du virkelig vil slette denne siden, at du forstår konsekvensene og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].',
-'actioncomplete' => 'Gjennomført',
-'actionfailed' => 'Handling mislyktes',
-'deletedtext' => '«$1» er slettet.
-Se $2 for en oversikt over de siste slettingene.',
-'dellogpage' => 'Slettingslogg',
-'dellogpagetext' => 'Under er ei liste over nylige slettinger.',
-'deletionlog' => 'slettingslogg',
-'reverted' => 'Gjenopprettet en tidligere versjon',
-'deletecomment' => 'Årsak:',
-'deleteotherreason' => 'Annen/utdypende grunn:',
-'deletereasonotherlist' => 'Annen grunn',
-'deletereason-dropdown' => '* Vanlige grunner for sletting
-** På forfatters forespørsel
-** Opphavsrettsbrudd
-** Vandalisme',
-'delete-edit-reasonlist' => 'Rediger begrunnelser for sletting',
-'delete-toobig' => 'Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Muligheten til å slette slike sider er begrenset for å unngå utilsiktet forstyrring av {{SITENAME}}.',
-'delete-warning-toobig' => 'Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Sletting av denne siden kan forstyrre databasen til {{SITENAME}}; vær varsom.',
-
-# Rollback
-'rollback' => 'Fjern redigeringer',
-'rollback_short' => 'Tilbakestill',
-'rollbacklink' => 'tilbakestill',
-'rollbackfailed' => 'Kunne ikke tilbakestille',
-'cantrollback' => 'Kan ikke fjerne redigering; den siste brukeren er den eneste forfatteren.',
-'alreadyrolled' => 'Kan ikke fjerne den siste redigeringen på [[$1]] av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); en annen har allerede redigert siden eller fjernet redigeringen.
-
-Den siste redigeringen ble foretatt av [[User:$3|$3]] ([[User talk:$3|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
-'editcomment' => "Redigeringskommentaren var: «''$1''»",
-'revertpage' => 'Tilbakestilte endring av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjon av [[User:$1|$1]]',
-'revertpage-nouser' => 'Tilbakestilte endringer av (fjernet brukernavn) til siste versjon av [[User:$1|$1]]',
-'rollback-success' => 'Tilbakestilte endringer av $1; endret til siste versjon av $2.',
-
-# Edit tokens
-'sessionfailure-title' => 'Sesjonsfeil',
-'sessionfailure' => "Det ser ut til å være et problem med innloggingen din, og den ble avbrutt av sikkerhetshensyn. Trykk ''Tilbake'' i nettleseren din, oppdater siden og prøv igjen.",
-
-# Protect
-'protectlogpage' => 'Beskyttelseslogg',
-'protectlogtext' => 'Nedenfor er en liste over endringer av sidebeskyttelser.
-Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over gjeldende sidebeskyttelser.',
-'protectedarticle' => 'beskyttet «[[$1]]»',
-'modifiedarticleprotection' => 'endret beskyttelsesnivå for «[[$1]]»',
-'unprotectedarticle' => 'fjernet beskyttelse av «[[$1]]»',
-'movedarticleprotection' => 'flyttet beskyttelsesinnstillinger fra «[[$2]]» til «[[$1]]»',
-'protect-title' => 'Låser «$1»',
-'prot_1movedto2' => '[[$1]] flyttet til [[$2]]',
-'protect-legend' => 'Bekreft låsing',
-'protectcomment' => 'Årsak:',
-'protectexpiry' => 'Utløper:',
-'protect_expiry_invalid' => 'Utløpstiden er ugyldig.',
-'protect_expiry_old' => 'Utløpstiden har allerede vært.',
-'protect-unchain-permissions' => 'Lås opp flere beskyttelsesinnstillinger',
-'protect-text' => "Du kan se og endre beskyttelsesnivået for siden '''$1''' her.",
-'protect-locked-blocked' => "Du kan ikke endre beskyttelsesnivåer mens du er blokkert. Dette er de nåværende innstillingene for siden '''$1''':",
-'protect-locked-dblock' => "Beskyttelsesnivåer kan ikke endres under en aktiv databasebeskyttelse. Dette er de nåværende innstillingene for siden '''$1''':",
-'protect-locked-access' => "Kontoen din har ikke tillatelse til å endre sidebeskyttelsesnivå.
-Dette er de nåværende innstillingene for siden '''$1''':",
-'protect-cascadeon' => 'Denne siden er for tiden beskyttet fordi den er inkludert på følgende {{PLURAL:$1|side|sider}} som har dypbeskyttelse slått på.
-Du kan endre sidens beskyttelsesnivå, men det vil ikke påvirke dypbeskyttelsen.',
-'protect-default' => 'Tillat alle brukere',
-'protect-fallback' => 'Må ha «$1»-tillatelse',
-'protect-level-autoconfirmed' => 'Eastte anonyma ja ođđa geavaheddjiid',
-'protect-level-sysop' => 'Kun administratorer',
-'protect-summary-cascade' => 'dypbeskyttelse',
-'protect-expiring' => 'utløper $1 (UTC)',
-'protect-expiry-indefinite' => 'ubestemt',
-'protect-cascade' => 'Beskytt sider som er inkludert på denne siden (dypbeskyttelse)',
-'protect-cantedit' => 'Du kan ikke endre beskyttelsesnivået til denne siden fordi du ikke har tillatelse til å redigere den.',
-'protect-othertime' => 'Annen tid:',
-'protect-othertime-op' => 'annen tid',
-'protect-existing-expiry' => 'Gjeldende utløpstid: $3 $2',
-'protect-otherreason' => 'Annen/utdypende grunn:',
-'protect-otherreason-op' => 'Annen grunn',
-'protect-dropdown' => '*Vanlige låsingsårsaker
-** Gjentatt hærverk
-** Gjentatt spam
-** Redigeringskrig
-** Side med mange besøkende',
-'protect-edit-reasonlist' => 'Rediger låsingsgrunner',
-'protect-expiry-options' => '1 time:1 hour,1 dag:1 day,1 uke:1 week,2 uker:2 weeks,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year,uendelig:infinite',
-'restriction-type' => 'Tillatelse:',
-'restriction-level' => 'Restriksjonsnivå:',
-'minimum-size' => 'Minimumstørrelse',
-'maximum-size' => 'Maksimumstørrelse:',
-'pagesize' => '(byte)',
-
-# Restrictions (nouns)
-'restriction-edit' => 'Redigering',
-'restriction-move' => 'Flytting',
-'restriction-create' => 'Opprett',
-'restriction-upload' => 'Last opp',
-
-# Restriction levels
-'restriction-level-sysop' => 'fullstendig låst',
-'restriction-level-autoconfirmed' => 'halvlåst',
-'restriction-level-all' => 'alle nivåer',
-
-# Undelete
-'undelete' => 'Vis slettede sider',
-'undeletepage' => 'Se og gjenopprett slettede sider',
-'undeletepagetitle' => "'''Følgende innhold er slettede revisjoner av [[:$1]].'''",
-'viewdeletedpage' => 'Vis slettede sider',
-'undeletepagetext' => 'Følgende {{PLURAL:$1|side|sider}} er slettet, men finnes fortsatt i arkivet og kan gjenopprettes. Arkivet blir periodevis slettet.',
-'undelete-fieldset-title' => 'Gjenopprett revisjoner',
-'undeleteextrahelp' => "For å gjenopprette hele sidens historikk, la alle boksene være tomme og klikk '''''{{int:undeletebtn}}'''''.
-For å gjenopprette kun deler, kryss av boksene for revisjonene du vil gjenopprette og klikk '''''{{int:undeletebtn}}'''''.",
-'undeleterevisions' => '{{PLURAL:$1|Én versjon arkivert|$1 versjoner arkiverte}}',
-'undeletehistory' => 'Om du gjenoppretter siden vil alle revisjoner gjenopprettes i historikken.
-Dersom en ny side ved samme navn har blitt oprettet etter slettingen, vil de gjenopprettede revisjonene dukke opp før denne i redigeringshistorikken.',
-'undeleterevdel' => 'Gjenoppretting kan ikke utføres dersom det resulterer i at den øverste revisjonen blir delvis slettet. I slike tilfeller må du fjerne merkingen av den nyeste slettede revisjonen.',
-'undeletehistorynoadmin' => 'Denne artikkelen har blitt slettet. Grunnen for slettingen vises i oppsummeringen nedenfor, sammen med detaljer om brukerne som redigerte siden før den ble slettet. Teksten i disse slettede revisjonene er kun tilgjengelig for administratorer.',
-'undelete-revision' => 'Slettet revisjon av $1 (per $4 $5) av $3:',
-'undeleterevision-missing' => 'Ugyldig eller manglende revisjon. Du kan ha en ødelagt lenke, eller revisjonen har blitt fjernet fra arkivet.',
-'undelete-nodiff' => 'Ingen tidligere revisjoner funnet.',
-'undeletebtn' => 'Gjenopprett',
-'undeletelink' => 'vis/gjenopprett',
-'undeleteviewlink' => 'vis',
-'undeletereset' => 'Nullstill',
-'undeleteinvert' => 'Inverter valg',
-'undeletecomment' => 'Årsak:',
-'undeletedrevisions' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}} gjenopprettet',
-'undeletedrevisions-files' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}} og {{PLURAL:$2|én fil|$2 filer}} gjenopprettet',
-'undeletedfiles' => '{{PLURAL:$1|Én fil|$1 filer}} gjenopprettet',
-'cannotundelete' => 'Kunne ikke gjenopprette siden (den kan være gjenopprettet av noen andre).',
-'undeletedpage' => "'''$1 ble gjenopprettet'''
-
-Sjekk [[Special:Log/delete|slettingsloggen]] for en liste over nylige slettinger og gjenopprettelser.",
-'undelete-header' => 'Se [[Special:Log/delete|slettingsloggen]] for nylig slettede sider.',
-'undelete-search-box' => 'Søk i slettede sider',
-'undelete-search-prefix' => 'Vis sider som starter med:',
-'undelete-search-submit' => 'Søk',
-'undelete-no-results' => 'Ingen passende sider funnet i slettingsarkivet.',
-'undelete-filename-mismatch' => 'Kan ikke gjenopprette filrevisjon med tidstrykk $1: ikke samsvarende filnavn',
-'undelete-bad-store-key' => 'Kan ikke gjenopprette filrevisjon med tidstrykk $1: fil manglet før sletting',
-'undelete-cleanup-error' => 'Feil i sletting av ubrukt arkivfil «$1».',
-'undelete-missing-filearchive' => 'Klarte ikke å gjenopprette filarkivet med ID $1 fordi det ikke er i databasen. Det kan ha blitt gjenopprettet tidligere.',
-'undelete-error-short' => 'Feil under filgjenoppretting: $1',
-'undelete-error-long' => 'Feil oppsto under filgjenoppretting:
-
-$1',
-'undelete-show-file-confirm' => 'Er du sikker på at du vil vise en slettet versjon av filen «<nowiki>$1</nowiki>» fra den $2 klokken $3?',
-'undelete-show-file-submit' => 'Ja',
-
-# Namespace form on various pages
-'namespace' => 'Navnerom:',
-'invert' => 'Inverter valg',
-'tooltip-invert' => 'Kryss av denne boksen for å skjule endringer på sider i det valgte navnerommet (og tilhørende navnerom hvis de er avkrysset også)',
-'namespace_association' => 'Tilknyttet navnerom',
-'tooltip-namespace_association' => 'Kryss av denne boksen for å også inkludere diskusjons- eller emnenavnerommet som er tilknyttet det valgte navnerommet',
-'blanknamespace' => '(Hoved)',
-
-# Contributions
-'contributions' => 'Brukerbidrag',
-'contributions-title' => 'Brukerbidrag av $1',
-'mycontris' => 'Egne bidrag',
-'contribsub2' => 'For $1 ($2)',
-'nocontribs' => 'Ingen endringer er funnet som passer disse kriteriene.',
-'uctop' => '(siste)',
-'month' => 'Fra måned (og tidligere):',
-'year' => 'Fra år (og tidligere):',
-
-'sp-contributions-newbies' => 'Vis kun bidrag fra nye kontoer',
-'sp-contributions-newbies-sub' => 'For nybegynnere',
-'sp-contributions-newbies-title' => 'Bidrag av nye kontoer',
-'sp-contributions-blocklog' => 'blokkeringslogg',
-'sp-contributions-deleted' => 'slettede brukerbidrag',
-'sp-contributions-uploads' => 'opplastinger',
-'sp-contributions-logs' => 'logger',
-'sp-contributions-talk' => 'diskusjon',
-'sp-contributions-userrights' => 'brukerrettighetskontroll',
-'sp-contributions-blocked-notice' => 'Denne brukeren er for tiden blokkert.
-Siste blokkeringsloggelement kan sees nedenfor.',
-'sp-contributions-blocked-notice-anon' => 'Denne IP-adressen er for tiden blokkert.
-Den siste oppføringen i blokkeringsloggen er vist nedenfor som referanse:',
-'sp-contributions-search' => 'Søk etter bidrag',
-'sp-contributions-username' => 'IP-adresse eller brukernavn:',
-'sp-contributions-toponly' => 'Vis kun endringer som er gjeldende revisjoner',
-'sp-contributions-submit' => 'Søk',
-
-# What links here
-'whatlinkshere' => 'Lenker hit',
-'whatlinkshere-title' => 'Sider som lenker til «$1»',
-'whatlinkshere-page' => 'Side:',
-'linkshere' => "Følgende sider lenker til '''[[:$1]]''':",
-'nolinkshere' => "Ingen sider lenker til '''[[:$1]]'''.",
-'nolinkshere-ns' => "Ingen sider lenker til '''[[:$1]]''' i valgte navnerom.",
-'isredirect' => 'omdirigeringsside',
-'istemplate' => 'transklusjon',
-'isimage' => 'fillenke',
-'whatlinkshere-prev' => '{{PLURAL:$1|forrige|forrige $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|neste|neste $1}}',
-'whatlinkshere-links' => '← lenker',
-'whatlinkshere-hideredirs' => '$1 omdirigeringer',
-'whatlinkshere-hidetrans' => '$1 transkluderinger',
-'whatlinkshere-hidelinks' => '$1 lenker',
-'whatlinkshere-hideimages' => '$1 fillenker',
-'whatlinkshere-filters' => 'Filtre',
-
-# Block/unblock
-'autoblockid' => 'Autoblokker #$1',
-'block' => 'Blokker bruker',
-'unblock' => 'Fjern blokkering av bruker',
-'blockip' => 'Blokker bruker',
-'blockip-title' => 'Blokker bruker',
-'blockip-legend' => 'Blokker bruker',
-'blockiptext' => 'Bruk skjemaet under for å blokkere en IP-adresses tilgang til å redigere artikler. Dette må kun gjøres for å forhindre hærverk, og i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjene]]. Fyll ut en spesiell begrunnelse under.',
-'ipadressorusername' => 'IP-adresse eller brukernavn',
-'ipbexpiry' => 'Varighet:',
-'ipbreason' => 'Årsak:',
-'ipbreasonotherlist' => 'Annen grunn',
-'ipbreason-dropdown' => '*Vanlige blokkeringsgrunner
-** Legger inn feilinformasjon
-** Fjerner innhold fra sider
-** Lenkespam
-** Legger inn vås
-** Truende oppførsel
-** Misbruk av flere kontoer
-** Uakseptabelt brukernavn',
-'ipb-hardblock' => 'Hindre innloggede brukere i å redigere fra denne IP-adressen',
-'ipbcreateaccount' => 'Hindre kontoopprettelse',
-'ipbemailban' => 'Forhindre brukeren fra å sende e-post',
-'ipbenableautoblock' => 'Blokker forrige IP-adresse brukt av denne brukeren automatisk, samt alle IP-adresser brukeren forsøker å redigere med i framtiden',
-'ipbsubmit' => 'Blokker denne brukeren',
-'ipbother' => 'Annen tid',
-'ipboptions' => '2 timer:2 hours,1 dag:1 day,3 dager:3 days,1 uke:1 week,2 uker:2 weeks,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year,uendelig:infinite',
-'ipbotheroption' => 'annet',
-'ipbotherreason' => 'Annen/utdypende grunn:',
-'ipbhidename' => 'Skjul brukernavn fra endringer og lister',
-'ipbwatchuser' => 'Overvåk brukerens brukerside og diskusjonsside',
-'ipb-disableusertalk' => 'Hindre denne brukeren i å redigere sin egen diskusjonsside mens han/hun er blokkert',
-'ipb-change-block' => 'Blokker brukeren på nytt med disse innstillingene',
-'ipb-confirm' => 'Bekreft blokkering',
-'badipaddress' => 'Ugyldig IP-adresse.',
-'blockipsuccesssub' => 'Blokkering utført',
-'blockipsuccesstext' => '­«[[Special:Contributions/$1|$1]]» har blitt blokkert.<br />
-Se [[Special:IPBlockList|blokkeringslisten]] for alle blokkeringer.',
-'ipb-blockingself' => 'Du er i ferd med å blokkere deg selv! Er du sikker på at du vil gjøre det?',
-'ipb-confirmhideuser' => 'Du er i ferd med å blokkere en bruker med «skjul bruker» aktivert. Dette vil skjule brukerens navn i alle lister og loggoppføringer. Er du sikker på at du vil gjøre dette?',
-'ipb-edit-dropdown' => 'Rediger blokkeringsgrunner',
-'ipb-unblock-addr' => 'Avblokker $1',
-'ipb-unblock' => 'Avblokker et brukernavn eller en IP-adresse',
-'ipb-blocklist' => 'Vis gjeldende blokkeringer',
-'ipb-blocklist-contribs' => 'Bidrag fra $1',
-'unblockip' => 'Opphev blokkering',
-'unblockiptext' => 'Bruk skjemaet under for å gjenopprette skriveadgangen for en tidligere blokkert adresse eller bruker.',
-'ipusubmit' => 'Opphev blokkering',
-'unblocked' => '[[User:$1|$1]] ble avblokkert',
-'unblocked-range' => '$1 har fått løftet blokkeringen',
-'unblocked-id' => 'Blokkering $1 ble fjernet',
-'blocklist' => 'Blokkerte brukere',
-'ipblocklist' => 'Blokkerte IP-adresser og brukernavn',
-'ipblocklist-legend' => 'Finn en blokkert bruker',
-'blocklist-userblocks' => 'Skjul kontoblokkeringer',
-'blocklist-tempblocks' => 'Skjul midlertidige blokkeringer',
-'blocklist-addressblocks' => 'Skjul individuelle IP-blokkeringer',
-'blocklist-timestamp' => 'Tidsstempel',
-'blocklist-target' => 'Mål',
-'blocklist-expiry' => 'Utløper',
-'blocklist-by' => 'Blokkerende admin',
-'blocklist-params' => 'Blokkeringsparametre',
-'blocklist-reason' => 'Årsak',
-'ipblocklist-submit' => 'Søk',
-'ipblocklist-localblock' => 'Lokal blokkering',
-'ipblocklist-otherblocks' => '{{PLURAL:$1|Annen blokkering|Andre blokkeringer}}',
-'infiniteblock' => 'uendelig',
-'expiringblock' => 'utgår den $1 kl $2',
-'anononlyblock' => 'kun uregistrerte',
-'noautoblockblock' => 'autoblokkering slått av',
-'createaccountblock' => 'kontooppretting blokkert',
-'emailblock' => 'e-post blokkert',
-'blocklist-nousertalk' => 'kan ikke redigere sin egen diskusjonsside',
-'ipblocklist-empty' => 'Blokkeringslisten er tom.',
-'ipblocklist-no-results' => 'Den angitte IP-adressen eller brukeren er ikke blokkert.',
-'blocklink' => 'blokker',
-'unblocklink' => 'opphev blokkering',
-'change-blocklink' => 'endre blokkering',
-'contribslink' => 'bidrag',
-'autoblocker' => 'Du ble automatisk blokkert fordi du deler IP-adresse med «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».',
-'blocklogpage' => 'Blokkeringslogg',
-'blocklog-showlog' => 'Denne brukeren har blitt blokkert før.
-Blokkeringsloggen vises nedenfor.',
-'blocklog-showsuppresslog' => 'Denne brukeren har tidligere blitt blokkert og skjult.
-Skjulingsloggen vises nedenfor.',
-'blocklogentry' => 'blokkerte [[$1]] med en varighet på $2 $3',
-'reblock-logentry' => 'endret blokkeringsinnstillinger for [[$1]] med en varighet på $2 $3',
-'blocklogtext' => 'Dette er en logg som viser hvilke brukere som har blitt blokkert og avblokkert. Automatisk blokkerte IP-adresser vises ikke. Se [[Special:BlockList|blokkeringslisten]] for en liste over IP-adresser som er blokkert akkurat nå.',
-'unblocklogentry' => 'opphevet blokkeringen av $1',
-'block-log-flags-anononly' => 'kun uregistrerte brukere',
-'block-log-flags-nocreate' => 'kontooppretting deaktivert',
-'block-log-flags-noautoblock' => 'autoblokkering slått av',
-'block-log-flags-noemail' => 'e-post blokkert',
-'block-log-flags-nousertalk' => 'kan ikke redigere egen diskusjonsside',
-'block-log-flags-angry-autoblock' => 'utvidet autoblokkering aktivert',
-'block-log-flags-hiddenname' => 'brukernavn skjult',
-'range_block_disabled' => 'Muligheten til å blokkere flere IP-adresser om gangen er slått av.',
-'ipb_expiry_invalid' => 'Ugyldig utløpstid.',
-'ipb_expiry_temp' => 'For å skjule brukernavnet må blokkeringen være permanent.',
-'ipb_hide_invalid' => 'Kan ikke skjule denne kontoen. Den kan ha for mange redigeringer.',
-'ipb_already_blocked' => '«$1» er allerede blokkert',
-'ipb-needreblock' => '$1 er blokkert fra før. Vil du endre innstillingene?',
-'ipb-otherblocks-header' => '{{PLURAL:$1|Annen blokkering|Andre blokkeringer}}',
-'unblock-hideuser' => 'Du kan ikke løfte blokkeringen av denne brukeren siden dens brukernavn har blitt skjult.',
-'ipb_cant_unblock' => 'Feil: Blokk-ID $1 ikke funnet. Kan ha blitt avblokkert allerede.',
-'ipb_blocked_as_range' => 'Feil: IP-en $1 er ikke blokkert direkte, og kan ikke avblokkeres. Den er imidlertid blokkert som del av blokkeringa av IP-rangen $2, som kan avblokkeres.',
-'ip_range_invalid' => 'Ugyldig IP-rad.',
-'ip_range_toolarge' => 'Blokkering av IP-serier større enn /$1 er ikke tillatt.',
-'blockme' => 'Blokker meg',
-'proxyblocker' => 'Proxyblokker',
-'proxyblocker-disabled' => 'Denne funksjonen er slått av.',
-'proxyblockreason' => 'IP-adressen din ble blokkert fordi den er en åpen proxy. Kontakt internettleverandøren din eller teknisk støtte og informer dem om dette alvorlige sikkerhetsproblemet.',
-'proxyblocksuccess' => 'Utført.',
-'sorbsreason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.',
-'sorbs_create_account_reason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}. Du kan ikke opprette en konto',
-'cant-block-while-blocked' => 'Du kan ikke blokkere andre mens du selv er blokkert.',
-'cant-see-hidden-user' => 'Brukeren du prøver å blokkere har allerede blitt blokkert og skjult. Ettersom du ikke har rett til å skjule brukere (hideuser), kan du ikke se eller endre brukerens blokkering.',
-'ipbblocked' => 'Du kan ikke blokkere eller avblokkere andre brukere, siden du selv er blokkert',
-'ipbnounblockself' => 'Du har ikke tillatelse til å avblokkere deg selv',
-
-# Developer tools
-'lockdb' => 'Lås database',
-'unlockdb' => 'Åpne database',
-'lockdbtext' => 'Å låse databasen vil avbryte alle brukere fra å kunne
-redigere sider, endre deres innstillinger, redigere deres
-overvåkningsliste, og andre ting som krever endringer i databasen.
-Bekreft at du har til hensikt å gjøre dette, og at du vil
-låse opp databasen når vedlikeholdet er utført.',
-'unlockdbtext' => 'Å låse opp databasen vil si at alle brukere igjen
-kan redigere sider, endre sine innstillinger, redigere sin
-overvåkningsliste, og andre ting som krever endringer i databasen.
-Bekreft at du har til hensikt å gjøre dette.',
-'lockconfirm' => 'Ja, jeg vil virkelig låse databasen.',
-'unlockconfirm' => 'Ja, jeg vil virkelig låse opp databasen.',
-'lockbtn' => 'Lås databasen',
-'unlockbtn' => 'Åpne databasen',
-'locknoconfirm' => 'Du har ikke bekreftet handlingen.',
-'lockdbsuccesssub' => 'Databasen er nå låst',
-'unlockdbsuccesssub' => 'Databasen er nå lås opp',
-'lockdbsuccesstext' => 'Databasen er låst.<br />Husk å [[Special:UnlockDB|låse den opp]] når du er ferdig med vedlikeholdet.',
-'unlockdbsuccesstext' => 'Databasen er låst opp.',
-'lockfilenotwritable' => 'Kan ikke skrive til databasen. For å låse eller åpne databasen, må denne kunne skrives til av tjeneren.',
-'databasenotlocked' => 'Databasen er ikke låst.',
-'lockedbyandtime' => '(av $1 den $2, kl $3)',
-
-# Move page
-'move-page' => 'Flytt $1',
-'move-page-legend' => 'Flytt side',
-'movepagetext' => "Når du bruker skjemaet nedenfor døper du om en side og flytter hele historikken til det nye navnet.
-Den gamle tittelen blir en omdirigeringsside til den nye tittelen.
-Du kan oppdatere omdirigeringer som peker til den opprinnelige tittelen automatisk.
-Om du velger å ikke gjøre det, sjekk at flyttingen ikke fører til [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].
-Du er ansvarlig for at lenker fortsetter å peke til de sidene de er ment å peke til.
-
-Legg merke til at siden '''ikke''' kan flyttes hvis det allerede finnes en side med den nye tittelen, med mindre den er tom eller er en omdirigeringsside uten historikk.
-Det betyr at du kan flytte en side tilbake dit den kom fra hvis du gjør en feil, og du kan ikke overskrive eksisterende sider ved et uhell.
-
-'''Advarsel!'''
-Dette kan være en drastisk og uventet endring for en populær side;
-vær sikker på at du forstår konsekvensene av dette før du fortsetter.",
-'movepagetext-noredirectfixer' => "Skjemaet nedenfor vil gi en side ny tittel og flytte historikken dens til det nye navnet.
-Den gamle tittelen vil bli en omdirigering til den nye.
-Sjekk om det blir [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].
-Du er ansvarlig for å sjekke at lenker fortsetter å gå dit de skal.
-
-Merk at sider '''ikke''' blir flyttet om det allerede finnes en side med den tittelen, med mindre siden er tom eller en omdirigering og ikke har noen redigeringshistorikk.
-Dette betyr at du kan endre tittelen til en tittel siden hadde tidligere, og at du ikke kan skrive over en eksisterende side.
-
-'''Advarsel!'''
-Dette kan være en drastisk og uventen endring for en populær side;
-vær sikker på at du forstår konsekvensene av dette før du fortsetter.",
-'movepagetalktext' => "Den tilhørende diskusjonssiden vil automatisk bli flyttet sammen med siden '''med mindre:'''
-*Det allerede finnes en diskusjonsside som ikke er tom under det nye navnet, eller
-*Du fjerner markeringen i boksen nedenfor.
-
-I disse tilfellene er du nødt til å flytte eller flette siden manuelt, om ønskelig.",
-'movearticle' => 'Flytt side:',
-'moveuserpage-warning' => "'''Advarsel:''' Du er i ferd med å flytte en brukerside. Merk at kun siden vil bli flyttet; brukernavnet vil ''ikke'' bli endret.",
-'movenologin' => 'Ikke logget inn',
-'movenologintext' => 'Du må være registrert bruker og være [[Special:UserLogin|logget på]] for å flytte en side.',
-'movenotallowed' => 'Du har ikke tillatelse til å flytte sider.',
-'movenotallowedfile' => 'Du har ikke tillatelse til å flytte filer.',
-'cant-move-user-page' => 'Du har ikke tillatelse til å flytte brukersider (bortsett fra undersider).',
-'cant-move-to-user-page' => 'Du har ikke tillatelse til å flytte brukersider (bortsett fra undersider).',
-'newtitle' => 'Til ny tittel:',
-'move-watch' => 'Overvåk kilde- og målsiden',
-'movepagebtn' => 'Flytt side',
-'pagemovedsub' => 'Flytting gjennomført',
-'movepage-moved' => "'''«$1» ble flyttet til «$2»'''",
-'movepage-moved-redirect' => 'En omdirigering har blitt opprettet.',
-'movepage-moved-noredirect' => 'Det ble ikke opprettet en omdirigering.',
-'articleexists' => 'En side med det navnet finnes allerede eller det valgte navn er ugyldig.
-Velg et annet navn.',
-'cantmove-titleprotected' => 'Du kan ikke flytte en side til dette navnet, fordi den nye tittelen er beskyttet fra opprettelse.',
-'talkexists' => "'''Siden ble flyttet korrekt, men den tilhørende diskusjonssiden kunne ikke flyttes fordi det allerede finnes en under den nye tittelen.
-Du er nødt til å flette dem manuelt.'''",
-'movedto' => 'flyttet til',
-'movetalk' => 'Flytt tilhørende diskusjonsside.',
-'move-subpages' => 'Flytt alle undersider (opp til $1)',
-'move-talk-subpages' => 'Flytt alle undersider av diskusjonssiden (opp til $1)',
-'movepage-page-exists' => 'Siden $1 finnes allerede og kan ikke overskrives automatisk.',
-'movepage-page-moved' => 'Siden $1 har blitt flyttet til $2.',
-'movepage-page-unmoved' => 'Siden $1 kunne ikke flyttes til $2.',
-'movepage-max-pages' => 'Grensen på {{PLURAL:$1|én side|$1 sider}} er nådd; ingen flere sider vil bli flyttet automatisk.',
-'movelogpage' => 'Flyttelogg',
-'movelogpagetext' => 'Her er ei liste over sider som har blitt flyttet.',
-'movesubpage' => '{{PLURAL:$1|Underside|Undersider}}',
-'movesubpagetext' => 'Denne siden har {{PLURAL:$1|én underside|$1 undersider}} som vises nedenfor.',
-'movenosubpage' => 'Denne siden har ingen undersider.',
-'movereason' => 'Årsak:',
-'revertmove' => 'tilbakestill',
-'delete_and_move' => 'Slett og flytt',
-'delete_and_move_text' => '==Sletting nødvendig==
-Målsiden «[[:$1]]» finnes allerede. Vil du slette den så denne siden kan flyttes dit?',
-'delete_and_move_confirm' => 'Ja, slett siden',
-'selfmove' => 'Kilde- og destinasjonstittel er den samme; kan ikke flytte siden.',
-'immobile-source-namespace' => 'Kan ikke flytte sider i navnerommet «$1»',
-'immobile-target-namespace' => 'Kan ikke flytte sider til navnerommet «$1»',
-'immobile-target-namespace-iw' => 'Du kan ikke flytte en side til et navn som er en interwikilenke.',
-'immobile-source-page' => 'Denne siden kan ikke flyttes.',
-'immobile-target-page' => 'Kan ikke flytte til det navnet.',
-'imagenocrossnamespace' => 'Kan ikke flytte filer til andre navnerom enn filnavnerommet',
-'nonfile-cannot-move-to-file' => 'Kan ikke flytte ikke-filer til filnavnerom',
-'imagetypemismatch' => 'Den nye filendelsen tilsvarer ikke filtypen',
-'imageinvalidfilename' => 'Målnavnet er ugyldig',
-'fix-double-redirects' => 'Oppdater omdirigeringer som fører til den gamle tittelen',
-'move-leave-redirect' => 'La det være igjen en omdirigering',
-'protectedpagemovewarning' => "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan flytte den.
-Det siste loggelementet er oppgitt under som referanse:",
-'semiprotectedpagemovewarning' => "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan flytte den.
-Det siste loggelementet er oppgitt under som referanse:",
-'move-over-sharedrepo' => '== Filen finnes ==
-[[:$1]] finnes på en delt kilde. Dersom du flytter en fil til dette navnet, vil du overstyre den delte filen.',
-'file-exists-sharedrepo' => 'Det valgte filnavnet er allerede i bruk på en delt kilde.
-Vennligst velg et annet navn.',
-
-# Export
-'export' => 'Eksporter sider',
-'exporttext' => 'Du kan eksportere teksten og redigeringshistorikken for en bestemt side eller en gruppe sider i XML.
-Dette kan senere importeres til en annen wiki som bruker MediaWiki ved hjelp av [[Special:Import|importsiden]].
-
-For å eksportere sider, skriv inn titler i tekstboksen under, én tittel per linje, og velg om du vil ha kun nåværende versjon, eller alle versjoner i historikken.
-
-Dersom du bare vil ha nåværende versjon, kan du også bruke en lenke, for eksempel [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for siden «[[{{MediaWiki:Mainpage}}]]».',
-'exportcuronly' => 'Ta bare med den nåværende versjonen, ikke hele historikken.',
-'exportnohistory' => "----
-'''Merk:''' Eksportering av hele historikken gjennom dette skjemaet har blitt slått av av ytelsesgrunner.",
-'export-submit' => 'Eksporter',
-'export-addcattext' => 'Legg til sider fra kategori:',
-'export-addcat' => 'Legg til',
-'export-addnstext' => 'Legg til sider fra navnerom:',
-'export-addns' => 'Legg til',
-'export-download' => 'Lagre som fil',
-'export-templates' => 'Ta med maler',
-'export-pagelinks' => 'Inkluder lenkede sider med en dybde på:',
-
-# Namespace 8 related
-'allmessages' => 'Systemmeldinger',
-'allmessagesname' => 'Navn',
-'allmessagesdefault' => 'Standardtekst',
-'allmessagescurrent' => 'Nåværende tekst',
-'allmessagestext' => 'Dette er en liste over tilgjengelige systemmeldinger i MediaWiki-navnerommet.
-Besøk [//translatewiki.net translatewiki.net] om du ønsker å bidra med oversettelse av MediaWiki.',
-'allmessagesnotsupportedDB' => "''{{ns:special}}:Allmessages'' kan ikke brukes fordi '''\$wgUseDatabaseMessages''' er slått av.",
-'allmessages-filter-legend' => 'Filtrér',
-'allmessages-filter' => 'Filtrér etter tilpassningsgrad',
-'allmessages-filter-unmodified' => 'Uendret',
-'allmessages-filter-all' => 'Alle',
-'allmessages-filter-modified' => 'Endret',
-'allmessages-prefix' => 'Filtrer etter prefiks:',
-'allmessages-language' => 'Språk:',
-'allmessages-filter-submit' => 'Gå',
-
-# Thumbnails
-'thumbnail-more' => 'Forstørr',
-'filemissing' => 'Filen mangler',
-'thumbnail_error' => 'Feil under oppretting av miniatyrbilde: $1',
-'djvu_page_error' => 'DjVu-side ute av rekkevidde',
-'djvu_no_xml' => 'Klarte ikke å hente XML for DjVu-fil',
-'thumbnail_invalid_params' => 'Ugyldige miniatyrparametere, eller PNG-fil med flere piksler enn 12,5 millioner.',
-'thumbnail_dest_directory' => 'Klarte ikke å opprette målmappe',
-'thumbnail_image-type' => 'Bildetypen støttes ikke',
-'thumbnail_gd-library' => 'Ufullstendig konfigurering av GD library: mangler funksjonen $1',
-'thumbnail_image-missing' => 'Filen ser ut til å mangle: $1',
-
-# Special:Import
-'import' => 'Importer sider',
-'importinterwiki' => 'Transwiki-importering',
-'import-interwiki-text' => 'Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].',
-'import-interwiki-source' => 'Kildewiki/side:',
-'import-interwiki-history' => 'Kopier all historikk for denne siden',
-'import-interwiki-templates' => 'Inkluder alle maler',
-'import-interwiki-submit' => 'Importer',
-'import-interwiki-namespace' => 'Målnavnerom:',
-'import-upload-filename' => 'Filnavn:',
-'import-comment' => 'Kommentar:',
-'importtext' => 'Importer filen fra kildewikien med [[Special:Export|eksporteringsverktøyet]].
-Lagre den på din egen datamaskin og last den opp her.',
-'importstart' => 'Importerer sider&nbsp;…',
-'import-revision-count' => '({{PLURAL:$1|Én revisjon|$1 revisjoner}})',
-'importnopages' => 'Ingen sider å importere.',
-'imported-log-entries' => 'Importerte $1 {{PLURAL:$1|loggoppføring|loggoppføringer}}.',
-'importfailed' => 'Importering mislyktes: $1',
-'importunknownsource' => 'Ukjent importkildetype',
-'importcantopen' => 'Kunne ikke åpne importfil',
-'importbadinterwiki' => 'Ugyldig interwikilenke',
-'importnotext' => 'Tom eller ingen tekst',
-'importsuccess' => 'Importering ferdig.',
-'importhistoryconflict' => 'Motstridende revisjoner finnes (siden kan ha blitt importert tidligere)',
-'importnosources' => 'Ingen transwikiimportkilder er angitt, og direkte historikkimporteringer er slått av.',
-'importnofile' => 'Ingen importfil opplastet.',
-'importuploaderrorsize' => 'Importfilopplasting mislyktes. Filen er større enn tillatt opplastingsstørrelse.',
-'importuploaderrorpartial' => 'Importfilopplasting mislyktes. Filen ble kun delvis opplastet.',
-'importuploaderrortemp' => 'Importfilopplasting mislyktes. En midlertidig mappe mangler.',
-'import-parse-failure' => 'Tolkningsfeil ved XML-import',
-'import-noarticle' => 'Ingen side å importere!',
-'import-nonewrevisions' => 'Alle revisjoner var importert fra før.',
-'xml-error-string' => '$1 på linje $2, kolonne $3 (byte: $4): $5',
-'import-upload' => 'Last opp XML-data',
-'import-token-mismatch' => 'Sesjonsdata mistet. Venligst prøv igjen.',
-'import-invalid-interwiki' => 'Kan ikke importere fra angitt wiki.',
-
-# Import log
-'importlogpage' => 'Importlogg',
-'importlogpagetext' => 'Administrativ import av sider med redigeringshistorikk fra andre wikier.',
-'import-logentry-upload' => 'importerte [[$1]] ved opplasting',
-'import-logentry-upload-detail' => 'Importerte {{PLURAL:$1|én revisjon|$1 revisjoner}}',
-'import-logentry-interwiki' => 'transwikiimporterte $1',
-'import-logentry-interwiki-detail' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}} fra $2',
-
-# Tooltip help for the actions
-'tooltip-pt-userpage' => 'Din brukerside',
-'tooltip-pt-anonuserpage' => 'Brukersiden for IP-adressen du redigerer fra',
-'tooltip-pt-mytalk' => 'Din diskusjonsside',
-'tooltip-pt-anontalk' => 'Diskusjon om redigeringer fra denne IP-adressen',
-'tooltip-pt-preferences' => 'Dine innstillinger',
-'tooltip-pt-watchlist' => 'Liste over sider du overvåker for endringer.',
-'tooltip-pt-mycontris' => 'Liste over dine bidrag',
-'tooltip-pt-login' => 'Du oppfordres til å logge inn, men det er ikke obligatorisk',
-'tooltip-pt-anonlogin' => 'Du oppfordres til å logge inn, men det er ikke obligatorisk.',
-'tooltip-pt-logout' => 'Logg ut',
-'tooltip-ca-talk' => 'Diskusjon om innholdssiden',
-'tooltip-ca-edit' => 'Du kan redigere denne siden. Vennligst bruk forhåndsvisningsknappen før du lagrer.',
-'tooltip-ca-addsection' => 'Start et nytt avsnitt',
-'tooltip-ca-viewsource' => 'Denne siden er beskyttet.
-Du kan se på kildeteksten',
-'tooltip-ca-history' => 'Tidligere revisjoner av denne siden',
-'tooltip-ca-protect' => 'Beskytt denne siden',
-'tooltip-ca-unprotect' => 'Endre beskyttelsen av denne siden',
-'tooltip-ca-delete' => 'Slett denne siden',
-'tooltip-ca-undelete' => 'Gjenopprett redigerenge som ble gjort på denne siden før den ble slettet.',
-'tooltip-ca-move' => 'Flytt denne siden',
-'tooltip-ca-watch' => 'Legg denne siden til overvåkningslisten din',
-'tooltip-ca-unwatch' => 'Fjern denne siden fra din overvåkningsliste',
-'tooltip-search' => 'Søk i {{SITENAME}}',
-'tooltip-search-go' => 'Gå til en side med dette navnet om den finnes',
-'tooltip-search-fulltext' => 'Søk etter sider som innholder denne teksten',
-'tooltip-p-logo' => 'Hovedside',
-'tooltip-n-mainpage' => 'Gå til hovedsiden',
-'tooltip-n-mainpage-description' => 'Gå til hovedsiden',
-'tooltip-n-portal' => 'Om prosjektet, hva du kan gjøre, hvor du kan finne ting',
-'tooltip-n-currentevents' => 'Finn bakgrunnsinformasjon om aktuelle hendelser',
-'tooltip-n-recentchanges' => 'Liste over siste endringer på wikien.',
-'tooltip-n-randompage' => 'Vis en tilfeldig side',
-'tooltip-n-help' => 'Stedet for å få hjelp',
-'tooltip-t-whatlinkshere' => 'Liste over alle wikisider som lenker hit',
-'tooltip-t-recentchangeslinked' => 'Siste endringer i sider som blir lenket fra denne siden',
-'tooltip-feed-rss' => 'RSS-mating for denne siden',
-'tooltip-feed-atom' => 'Atom-mating for denne siden',
-'tooltip-t-contributions' => 'Vis liste over bidrag fra denne brukeren',
-'tooltip-t-emailuser' => 'Send en e-post til denne brukeren',
-'tooltip-t-upload' => 'Last opp filer',
-'tooltip-t-specialpages' => 'Liste over alle spesialsider',
-'tooltip-t-print' => 'Utskriftsvennlig versjon av denne siden',
-'tooltip-t-permalink' => 'Permanent lenke til denne revisjonen av siden',
-'tooltip-ca-nstab-main' => 'Vis innholdssiden',
-'tooltip-ca-nstab-user' => 'Vis brukersiden',
-'tooltip-ca-nstab-media' => 'Vis mediasiden',
-'tooltip-ca-nstab-special' => 'Dette er en spesialside og kan ikke redigeres',
-'tooltip-ca-nstab-project' => 'Vis prosjektsiden',
-'tooltip-ca-nstab-image' => 'Vis filsiden',
-'tooltip-ca-nstab-mediawiki' => 'Vis systembeskjeden',
-'tooltip-ca-nstab-template' => 'Vis malen',
-'tooltip-ca-nstab-help' => 'Vis hjelpesiden',
-'tooltip-ca-nstab-category' => 'Vis kategorisiden',
-'tooltip-minoredit' => 'Merk dette som en mindre endring',
-'tooltip-save' => 'Lagre endringene dine',
-'tooltip-preview' => 'Forhåndsvis endringene dine, vennligst gjør dette før du lagrer!',
-'tooltip-diff' => 'Vis hvilke endringer du har gjort på teksten',
-'tooltip-compareselectedversions' => 'Se forskjellen mellom de to valgte revisjonene av denne siden',
-'tooltip-watch' => 'Legg denne siden til overvåkningslisten din',
-'tooltip-recreate' => 'Gjenopprett siden til tross for at den har blitt slettet',
-'tooltip-upload' => 'Start opplasting',
-'tooltip-rollback' => '«Tilbakestill»-knappen tilbakestiller den siste bidragsyterens endring(er) på denne siden med ett klikk',
-'tooltip-undo' => '«Angre» tilbakestiller denne endringen og åpner redigeringsskjemaet i forhåndsvisningsmodus. Det tillater en å legge til en begrunnelse i redigeringsforklaringen.',
-'tooltip-preferences-save' => 'Lagre innstillinger',
-'tooltip-summary' => 'Skriv et kort sammendrag',
-
-# Stylesheets
-'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utseender. */',
-'standard.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Standard */',
-'nostalgia.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Nostalgia */',
-'cologneblue.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Kølnerblå */',
-'monobook.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Monobook */',
-'myskin.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta MySkin */',
-'chick.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Chick */',
-'simple.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Simple */',
-'modern.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Modern */',
-
-# Scripts
-'common.js' => '/* Javascript i denne fila vil gjelde for alle drakter. */',
-'standard.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Standard */',
-'nostalgia.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Nostalgia */',
-'cologneblue.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Kølnerblå */',
-'monobook.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Monobook */',
-'myskin.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta MySkin */',
-'chick.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Chick */',
-'simple.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Simple */',
-'modern.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Modern */',
-
-# Metadata
-'notacceptable' => 'Tjeneren har ingen mulige måter å vise data i din nettleser.',
-
-# Attribution
-'anonymous' => '{{PLURAL:$1|Anonym bruker|Anonyme brukere}} av {{SITENAME}}',
-'siteuser' => '{{SITENAME}}-bruker $1',
-'anonuser' => '{{SITENAME}}s anonyme bruker $1',
-'lastmodifiedatby' => 'Denne siden ble sist redigert $1 kl. $2 av $3.',
-'othercontribs' => 'Basert på arbeid av $1.',
-'others' => 'andre',
-'siteusers' => '{{SITENAME}}-{{PLURAL:$2|bruker|brukere}} $1',
-'anonusers' => '{{SITENAME}}s {{PLURAL:$2|anonyme bruker|anonyme brukere}} $1',
-'creditspage' => 'Sidekrediteringer',
-'nocredits' => 'Ingen krediteringer er tilgjengelig for denne siden.',
-
-# Spam protection
-'spamprotectiontitle' => 'Søppelpostfilter',
-'spamprotectiontext' => 'Siden du ønsket å lagre ble blokkert av spamfilteret.
-Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nettsted.',
-'spamprotectionmatch' => 'Følgende tekst er det som aktiverte spamfilteret: $1',
-'spambot_username' => 'MediaWikis spamopprydning',
-'spam_reverting' => 'Tilbakestiller til siste versjon uten lenke til $1',
-'spam_blanking' => 'Alle revisjoner inneholdt lenke til $1, tømmer siden',
-
-# Info page
-'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-header-edits' => 'Redigeringer',
-'pageinfo-header-watchlist' => 'Overvåkningsliste',
-'pageinfo-header-views' => 'Visninger',
-'pageinfo-subjectpage' => 'Side',
-'pageinfo-talkpage' => 'Diskusjonsside',
-'pageinfo-watchers' => 'Antall overvåkere',
-'pageinfo-edits' => 'Antall redigeringer',
-'pageinfo-authors' => 'Antall forskjellige forfattere',
-'pageinfo-views' => 'Antall visninger',
-'pageinfo-viewsperedit' => 'Visninger per redigering',
-
-# Skin names
-'skinname-standard' => 'Standard',
-'skinname-nostalgia' => 'Nostalgi',
-'skinname-cologneblue' => 'Kølnerblå',
-'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'Eget utseende',
-'skinname-simple' => 'Enkel',
-'skinname-modern' => 'Moderne',
-
-# Patrolling
-'markaspatrolleddiff' => 'Godkjenn endringen',
-'markaspatrolledtext' => 'Godkjenn denne siden',
-'markedaspatrolled' => 'Merket som godkjent',
-'markedaspatrolledtext' => 'Den valgte revisjonen av [[:$1]] har blitt markert som patruljert.',
-'rcpatroldisabled' => 'Siste endringer-patruljering er slått av',
-'rcpatroldisabledtext' => 'Siste endringer-patruljeringsfunksjonen er slått av.',
-'markedaspatrollederror' => 'Kan ikke merke som godkjent',
-'markedaspatrollederrortext' => 'Du må spesifisere en versjon å merke som godkjent.',
-'markedaspatrollederror-noautopatrol' => 'Du kan ikke merke dine egne endringer som godkjente.',
-
-# Patrol log
-'patrol-log-page' => 'Godkjenningslogg',
-'patrol-log-header' => 'Dette er en logg over patruljerte sideversjoner.',
-'log-show-hide-patrol' => '$1 patruljeringslogg',
-
-# Image deletion
-'deletedrevision' => 'Slettet gammel revisjon $1.',
-'filedeleteerror-short' => 'Feil under filsletting: $1',
-'filedeleteerror-long' => 'Feil oppsto under filsletting:
-
-$1',
-'filedelete-missing' => 'Filen «$1» kan ikke slettes fordi den ikke finnes.',
-'filedelete-old-unregistered' => 'Filrevisjonen «$1» finnes ikke i databasen.',
-'filedelete-current-unregistered' => 'Filen «$1» finnes ikke i databasen.',
-'filedelete-archive-read-only' => 'Arkivmappa «$1» kan ikke skrives av tjeneren.',
-
-# Browsing diffs
-'previousdiff' => '← Forrige endring',
-'nextdiff' => 'Neste endring →',
-
-# Media information
-'mediawarning' => "'''Advarsel''': Denne filen kan inneholde farlig kode.
-Ved å åpne den kan systemet ditt kompromitteres.",
-'imagemaxsize' => "Bildestørrelsesgrense:<br />''(for filbeskrivelsessider)''",
-'thumbsize' => 'Miniatyrbildestørrelse:',
-'widthheightpage' => '$1×$2, {{PLURAL:$3|én side|$3 sider}}',
-'file-info' => 'filstørrelse: $1, MIME-type: $2',
-'file-info-size' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4',
-'file-info-size-pages' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4, $5 {{PLURAL:$5|side|sider}}',
-'svg-long-desc' => 'SVG-fil, standardoppløsning $1 × $2 piksler, filstørrelse: $3',
-'show-big-image' => 'Full oppløsning',
-'show-big-image-size' => '$1 × $2 piksler',
-'file-info-gif-looped' => 'gjentas',
-'file-info-gif-frames' => '$1 {{PLURAL:$1|ramme|rammer}}',
-'file-info-png-looped' => 'loopet',
-'file-info-png-repeat' => 'avspilt $1 {{PLURAL:$1|gang|ganger}}',
-'file-info-png-frames' => '$1 {{PLURAL:$1|bilde|bilder}}',
-
-# Special:NewFiles
-'newimages' => 'Galleri over nye filer',
-'imagelisttext' => "Dete er en liste med '''$1''' {{PLURAL:$1|fil|filer}} sortert $2.",
-'newimages-summary' => 'Denne spesialsiden viser de sist opplastede filene.',
-'newimages-legend' => 'Filnavn',
-'newimages-label' => 'Filnavn (helt eller delvis):',
-'showhidebots' => '($1 roboter)',
-'noimages' => 'Ingenting å se.',
-'ilsubmit' => 'Søk',
-'bydate' => 'etter dato',
-'sp-newimages-showfrom' => 'Vis nye filer fra og med $2 $1',
-
-# Bad image list
-'bad_image_list' => 'Formatet er som følger:
-
-Kun listeelementer (linjer som starter med *) tas med.
-Den første lenken på en linje må være en lenke til en dårlig fil.
-Alle andre lenker på samme linje anses for å være unntak, altså sider der filen kan opptre.',
-
-# Metadata
-'metadata' => 'Metadata',
-'metadata-help' => 'Denne filen inneholder tilleggsinformasjon, antagligvis lagt til av digitalkameraet eller skanneren brukt til å lage eller digitalisere det.
-Hvis filen har blitt forandret fra utgangspunktet, kan enkelte detaljer være unøyaktige.',
-'metadata-expand' => 'Vis utvidede detaljer',
-'metadata-collapse' => 'Skjul utvidede detaljer',
-'metadata-fields' => 'Bildemetadatafelt listet i denne meldingen inkluderes på bildesiden når metadatatabellen er slått sammen.
-Andre vil skjules som standard.
-* make
-* model
-* datetimeoriginal
-* exposuretime
-* fnumber
-* isospeedratings
-* focallength
-* artist
-* copyright
-* imagedescription
-* gpslatitude
-* gpslongitude
-* gpsaltitude',
-
-# EXIF tags
-'exif-imagewidth' => 'Bredde',
-'exif-imagelength' => 'Høyde',
-'exif-bitspersample' => 'Bits per komponent',
-'exif-compression' => 'Kompresjonsskjema',
-'exif-photometricinterpretation' => 'Pixelsammensetning',
-'exif-orientation' => 'Retning',
-'exif-samplesperpixel' => 'Antall komponenter',
-'exif-planarconfiguration' => 'Dataarrangement',
-'exif-ycbcrsubsampling' => 'Subsamplingsforhold mellom Y og C',
-'exif-ycbcrpositioning' => 'Y- og C-posisjonering',
-'exif-xresolution' => 'Horisontal oppløsning',
-'exif-yresolution' => 'Vertikal oppløsning',
-'exif-stripoffsets' => 'Plassering for bildedata',
-'exif-rowsperstrip' => 'Antall rader per stripe',
-'exif-stripbytecounts' => 'Antall byte per kompresserte stripe',
-'exif-jpeginterchangeformat' => 'Offset til JPEG SOI',
-'exif-jpeginterchangeformatlength' => 'Byte med JPEG-data',
-'exif-whitepoint' => 'Hvitpunktkromatisitet',
-'exif-primarychromaticities' => 'Primærfargenes renhet',
-'exif-ycbcrcoefficients' => 'Koeffisienter fr fargeromstransformasjonsmatrise',
-'exif-referenceblackwhite' => 'Par av svarte og hvite referanseverdier',
-'exif-datetime' => 'Dato og tid for filendring',
-'exif-imagedescription' => 'Bildetittel',
-'exif-make' => 'Kameraprodusent',
-'exif-model' => 'Kameramodell',
-'exif-software' => 'Programvare brukt',
-'exif-artist' => 'Skaper',
-'exif-copyright' => 'Opphavsbeskyttelse tilhører',
-'exif-exifversion' => 'Exif-versjon',
-'exif-flashpixversion' => 'Støttet Flashpix-versjon',
-'exif-colorspace' => 'Fargerom',
-'exif-componentsconfiguration' => 'Betydning av hver komponent',
-'exif-compressedbitsperpixel' => 'Bildekompresjonsmodus',
-'exif-pixelydimension' => 'Bildebredde',
-'exif-pixelxdimension' => 'Bildehøyde',
-'exif-usercomment' => 'Brukerkommentarer',
-'exif-relatedsoundfile' => 'Relatert lydfil',
-'exif-datetimeoriginal' => 'Dato og tid for datagenerering',
-'exif-datetimedigitized' => 'Dato og tid for digitalisering',
-'exif-subsectime' => 'Endringstidspunkt, sekunddeler',
-'exif-subsectimeoriginal' => 'Eksponeringstidspunkt, sekunddeler',
-'exif-subsectimedigitized' => 'Digitaliseringstidspunkt, sekunddeler',
-'exif-exposuretime' => 'Eksponeringstid',
-'exif-exposuretime-format' => '$1 sek ($2)',
-'exif-fnumber' => 'F-nummer',
-'exif-exposureprogram' => 'Eksponeringsprogram',
-'exif-spectralsensitivity' => 'Spektralsensitivitet',
-'exif-isospeedratings' => 'Filmhastighet (ISO)',
-'exif-shutterspeedvalue' => 'APEX lukkerhastighet',
-'exif-aperturevalue' => 'APEX blenderåpning',
-'exif-brightnessvalue' => 'APEX lysstyrke',
-'exif-exposurebiasvalue' => 'Eksponeringsbias',
-'exif-maxaperturevalue' => 'Maksimal blender',
-'exif-subjectdistance' => 'Avstand til subjekt',
-'exif-meteringmode' => 'Målingsmodus',
-'exif-lightsource' => 'Lyskilde',
-'exif-flash' => 'Blits',
-'exif-focallength' => 'Linsens brennvidde',
-'exif-subjectarea' => 'Motivområde',
-'exif-flashenergy' => 'Blitsenergi',
-'exif-focalplanexresolution' => 'Oppløsning i fokalplan X',
-'exif-focalplaneyresolution' => 'Oppløsning i fokalplan Y',
-'exif-focalplaneresolutionunit' => 'Enhet for oppløsning i fokalplan',
-'exif-subjectlocation' => 'Motivets beliggenhet',
-'exif-exposureindex' => 'Eksponeringsindeks',
-'exif-sensingmethod' => 'Avkjenningsmetode',
-'exif-filesource' => 'Filkilde',
-'exif-scenetype' => 'Scenetype',
-'exif-customrendered' => 'Tilpasset bildebehandling',
-'exif-exposuremode' => 'Eksponeringsmodus',
-'exif-whitebalance' => 'Hvit balanse',
-'exif-digitalzoomratio' => 'Digitalt zoomomfang',
-'exif-focallengthin35mmfilm' => 'Brennvidde på 35 mm-film',
-'exif-scenecapturetype' => 'Motivprogram',
-'exif-gaincontrol' => 'Scenekontroll',
-'exif-contrast' => 'Kontrast',
-'exif-saturation' => 'Metning',
-'exif-sharpness' => 'Skarphet',
-'exif-devicesettingdescription' => 'Beskrivelse av apparatets innstilling',
-'exif-subjectdistancerange' => 'Avstandsintervall til motiv',
-'exif-imageuniqueid' => 'Unik bilde-ID',
-'exif-gpsversionid' => 'Versjon for GPS-tagger',
-'exif-gpslatituderef' => 'nordlig eller sørlig breddegrad',
-'exif-gpslatitude' => 'Breddegrad',
-'exif-gpslongituderef' => 'Østlig eller vestlig breddegrad',
-'exif-gpslongitude' => 'Lengdegrad',
-'exif-gpsaltituderef' => 'Høydereferanse',
-'exif-gpsaltitude' => 'Høyde',
-'exif-gpstimestamp' => 'GPS-tid (atomklokke)',
-'exif-gpssatellites' => 'Satelitter brukt i måling',
-'exif-gpsstatus' => 'Mottakerstatus',
-'exif-gpsmeasuremode' => 'Målingsmodus',
-'exif-gpsdop' => 'Målingspresisjon',
-'exif-gpsspeedref' => 'Fartsenhet',
-'exif-gpsspeed' => 'GPS-mottakerens hastighet',
-'exif-gpstrackref' => 'Referanse for bevegelsesretning',
-'exif-gpstrack' => 'Bevegelsesretning',
-'exif-gpsimgdirectionref' => 'Referanse for bilderetning',
-'exif-gpsimgdirection' => 'Bilderetning',
-'exif-gpsmapdatum' => 'Brukt geodetisk data',
-'exif-gpsdestlatituderef' => 'Referanse for målbreddegrad',
-'exif-gpsdestlatitude' => 'Målbreddegrad',
-'exif-gpsdestlongituderef' => 'Referanse for mållengdegrad',
-'exif-gpsdestlongitude' => 'Mållengdegrad',
-'exif-gpsdestbearingref' => 'Referanse for retning mot målet',
-'exif-gpsdestbearing' => 'Retning mot målet',
-'exif-gpsdestdistanceref' => 'Referanse for lengde til mål',
-'exif-gpsdestdistance' => 'Lengde til mål',
-'exif-gpsprocessingmethod' => 'Navn på GPS-prosesseringsmetode',
-'exif-gpsareainformation' => 'Navn på GPS-område',
-'exif-gpsdatestamp' => 'GPS-dato',
-'exif-gpsdifferential' => 'Differentiell GPS-korreksjon',
-'exif-jpegfilecomment' => 'JPEG-filkommentar',
-'exif-keywords' => 'Nøkkelord',
-'exif-worldregioncreated' => 'Verdensregionen som bildet ble tatt i',
-'exif-countrycreated' => 'Landet som bildet ble tatt i',
-'exif-countrycodecreated' => 'Landskoden som bildet ble tatt i',
-'exif-provinceorstatecreated' => 'Provinsen eller delstaten som bildet ble tatt i',
-'exif-citycreated' => 'Byen som bildet ble tatt i',
-'exif-sublocationcreated' => 'Bydelen som bildet ble tatt i',
-'exif-worldregiondest' => 'Verdensregionen vises',
-'exif-countrydest' => 'Landet vises',
-'exif-countrycodedest' => 'Landskoden vises',
-'exif-provinceorstatedest' => 'Provinsen eller delstaten vises',
-'exif-citydest' => 'Byen vises',
-'exif-sublocationdest' => 'Bydelen vises',
-'exif-objectname' => 'Kort tittel',
-'exif-specialinstructions' => 'Spesielle instruksjoner',
-'exif-headline' => 'Overskrift',
-'exif-credit' => 'Kreditt/Leverandør',
-'exif-source' => 'Kilde',
-'exif-editstatus' => 'Bildets redaksjonelle status',
-'exif-urgency' => 'Prioritet',
-'exif-fixtureidentifier' => 'Fiksturnavn',
-'exif-locationdest' => 'Avbildet plass',
-'exif-locationdestcode' => 'Avbildet plasseringskode',
-'exif-objectcycle' => 'Tid på dagen mediet er ment for',
-'exif-contact' => 'Kontaktinformasjon',
-'exif-writer' => 'Forfatter',
-'exif-languagecode' => 'Språk',
-'exif-iimversion' => 'IIM-versjon',
-'exif-iimcategory' => 'Kategori',
-'exif-iimsupplementalcategory' => 'Tilleggskategorier',
-'exif-datetimeexpires' => 'Ikke bruk etter',
-'exif-datetimereleased' => 'Utgitt den',
-'exif-originaltransmissionref' => 'Opprinnelig lokasjonskode for transmisjon',
-'exif-identifier' => 'Identifikator',
-'exif-lens' => 'Objektiv',
-'exif-serialnumber' => 'Kameraets serienummer',
-'exif-cameraownername' => 'Kameraets eier',
-'exif-label' => 'Etikett',
-'exif-datetimemetadata' => 'Dato metadata sist ble endret',
-'exif-nickname' => 'Bildets uformelle navn',
-'exif-rating' => 'Vurdering (av 5)',
-'exif-rightscertificate' => 'Rettighetsforvaltningssertifikat',
-'exif-copyrighted' => 'Opphavsrettsstatus',
-'exif-copyrightowner' => 'Opphavsrettsinnehaver',
-'exif-usageterms' => 'Bruksvilkår',
-'exif-webstatement' => 'Opphavsrettserklæring på internett',
-'exif-originaldocumentid' => 'Unik ID for originaldokumentet',
-'exif-licenseurl' => 'URL for opphavsrettslisens',
-'exif-morepermissionsurl' => 'Alternativ lisensieringsinformasjon',
-'exif-attributionurl' => 'Ved gjenbruk av dette arbeidet, vennligst inkluder en lenke til',
-'exif-preferredattributionname' => 'Ved gjenbruk av dette arbeidet, vennligst gi kreditt til',
-'exif-pngfilecomment' => 'PNG-filkommentar',
-'exif-disclaimer' => 'Ansvarsfraskrivelse',
-'exif-contentwarning' => 'Innholdsadvarsel',
-'exif-giffilecomment' => 'GIF-filkommentar',
-'exif-intellectualgenre' => 'Elementtype',
-'exif-subjectnewscode' => 'Emnekode',
-'exif-scenecode' => 'IPTC-scenekode',
-'exif-event' => 'Avbildet hendelse',
-'exif-organisationinimage' => 'Avbildet organisasjon',
-'exif-personinimage' => 'Avbildet person',
-'exif-originalimageheight' => 'Høyde på bildet før det ble beskåret',
-'exif-originalimagewidth' => 'Bredde på bildet før det ble beskåret',
-
-# EXIF attributes
-'exif-compression-1' => 'Ukomprimert',
-'exif-compression-2' => 'CCITT Gruppe 3 1-dimensjonal modifisert Huffman-kjørelengdekoding',
-'exif-compression-3' => 'CCITT Gruppe 3 faks-koding',
-'exif-compression-4' => 'CCITT Gruppe 4 faks-koding',
-
-'exif-copyrighted-true' => 'Opphavsrettsbeskyttet',
-'exif-copyrighted-false' => 'Ikke beskyttet av opphavsrett',
-
-'exif-unknowndate' => 'Ukjent dato',
-
-'exif-orientation-1' => 'Normal',
-'exif-orientation-2' => 'Snudd horisontalt',
-'exif-orientation-3' => 'Rotert 180°',
-'exif-orientation-4' => 'Snudd vertikalt',
-'exif-orientation-5' => 'Rotated 90° CCW and flipped vertically
-
-Rotert 90° mot klokka og vridd vertikalt',
-'exif-orientation-6' => 'Rotert 90° mot klokka',
-'exif-orientation-7' => 'Rotert 90° med klokka og vridd vertikalt',
-'exif-orientation-8' => 'Rotert 90° med klokka',
-
-'exif-planarconfiguration-1' => 'chunkformat',
-'exif-planarconfiguration-2' => 'planærformat',
-
-'exif-colorspace-65535' => 'Ukalibrert',
-
-'exif-componentsconfiguration-0' => 'finnes ikke',
-
-'exif-exposureprogram-0' => 'Ikke angitt',
-'exif-exposureprogram-1' => 'Manuell',
-'exif-exposureprogram-2' => 'Normalt program',
-'exif-exposureprogram-3' => 'Blenderprioritet',
-'exif-exposureprogram-4' => 'Slutterprioritet',
-'exif-exposureprogram-5' => 'Kunstnerlig program (prioriterer skarphetsdyp)',
-'exif-exposureprogram-6' => 'Bevegelsesprogram (prioriterer kortere sluttertid)',
-'exif-exposureprogram-7' => 'Portrettmodus (for nærbilder med ufokusert bakgrunn)',
-'exif-exposureprogram-8' => 'Landskapsmodus (for landskapsbilder med fokusert bakgrunn)',
-
-'exif-subjectdistance-value' => '$1 meter',
-
-'exif-meteringmode-0' => 'Ukjent',
-'exif-meteringmode-1' => 'Gjennomsnitt',
-'exif-meteringmode-2' => 'Sentrumsveid gjennomsnitt',
-'exif-meteringmode-3' => 'Spot',
-'exif-meteringmode-4' => 'Multispot',
-'exif-meteringmode-5' => 'Mønster',
-'exif-meteringmode-6' => 'Delvis',
-'exif-meteringmode-255' => 'Annet',
-
-'exif-lightsource-0' => 'Ukjent',
-'exif-lightsource-1' => 'Dagslys',
-'exif-lightsource-2' => 'Lysrør',
-'exif-lightsource-3' => 'Glødelampe',
-'exif-lightsource-4' => 'Blits',
-'exif-lightsource-9' => 'Fint vær',
-'exif-lightsource-10' => 'Overskyet',
-'exif-lightsource-11' => 'Skygge',
-'exif-lightsource-12' => 'Dagslyslysrør (D 5700 – 7100K)',
-'exif-lightsource-13' => 'Dagshvitt lysrør (N 4600 – 5400K)',
-'exif-lightsource-14' => 'Kaldhvitt lysrør (W 3900 – 4500K)',
-'exif-lightsource-15' => 'Hvitt lysrør (WW 3200 – 3700K)',
-'exif-lightsource-17' => 'Standardlys A',
-'exif-lightsource-18' => 'Standardlys B',
-'exif-lightsource-19' => 'Standardlys C',
-'exif-lightsource-24' => 'ISO studiobelysning',
-'exif-lightsource-255' => 'Annen lyskilde',
-
-# Flash modes
-'exif-flash-fired-0' => 'Blitz ikke utløst',
-'exif-flash-fired-1' => 'Blitz utløst',
-'exif-flash-return-0' => 'ingen funksjon for oppdaing av strobelys',
-'exif-flash-return-2' => 'strobelys ikke oppdaget',
-'exif-flash-return-3' => 'strobelys oppdaget',
-'exif-flash-mode-1' => 'tvunget blitzutløsning',
-'exif-flash-mode-2' => 'tvunget blitzløs',
-'exif-flash-mode-3' => 'automatisk modus',
-'exif-flash-function-1' => 'Ingen blitzfunksjon',
-'exif-flash-redeye-1' => 'røde-øyne-redusering',
-
-'exif-focalplaneresolutionunit-2' => 'tommer',
-
-'exif-sensingmethod-1' => 'Ikke angitt',
-'exif-sensingmethod-2' => 'Énchipsfargesensor',
-'exif-sensingmethod-3' => 'Tochipsfargesensor',
-'exif-sensingmethod-4' => 'Trechipsfargesensor',
-'exif-sensingmethod-5' => 'Fargesekvensiell områdesensor',
-'exif-sensingmethod-7' => 'Trilineær sensor',
-'exif-sensingmethod-8' => 'Fargesekvensiell linær sensor',
-
-'exif-filesource-3' => 'Digitalt stillbildekamera',
-
-'exif-scenetype-1' => 'Direktefotografert bilde',
-
-'exif-customrendered-0' => 'Normal prosess',
-'exif-customrendered-1' => 'Tilpasset prosess',
-
-'exif-exposuremode-0' => 'Automatisk eksponering',
-'exif-exposuremode-1' => 'Manuell eksponering',
-'exif-exposuremode-2' => 'Automatisk alternativeksponering',
-
-'exif-whitebalance-0' => 'Automatisk hvitbalanse',
-'exif-whitebalance-1' => 'Manuell hvitbalanse',
-
-'exif-scenecapturetype-0' => 'Standard',
-'exif-scenecapturetype-1' => 'Landskap',
-'exif-scenecapturetype-2' => 'Portrett',
-'exif-scenecapturetype-3' => 'Nattscene',
-
-'exif-gaincontrol-0' => 'Ingen',
-'exif-gaincontrol-1' => 'Økning av lavnivåforsterkning',
-'exif-gaincontrol-2' => 'Økning av høynivåforsterkning',
-'exif-gaincontrol-3' => 'Senkning av lavnivåforsterkning',
-'exif-gaincontrol-4' => 'Senkning av høynivåforsterkning',
-
-'exif-contrast-0' => 'Normal',
-'exif-contrast-1' => 'Myk',
-'exif-contrast-2' => 'Hard',
-
-'exif-saturation-0' => 'Normal',
-'exif-saturation-1' => 'Lav metningsgrad',
-'exif-saturation-2' => 'Høy metningsgrad',
-
-'exif-sharpness-0' => 'Normal',
-'exif-sharpness-1' => 'Myk',
-'exif-sharpness-2' => 'Hard',
-
-'exif-subjectdistancerange-0' => 'Ukjent',
-'exif-subjectdistancerange-1' => 'Makro',
-'exif-subjectdistancerange-2' => 'Nærbilde',
-'exif-subjectdistancerange-3' => 'Fjernbilde',
-
-# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
-'exif-gpslatitude-n' => 'Nordlig breddegrad',
-'exif-gpslatitude-s' => 'Sørlig breddegrad',
-
-# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
-'exif-gpslongitude-e' => 'Østlig lengdegrad',
-'exif-gpslongitude-w' => 'Vestlig lengdegrad',
-
-# Pseudotags used for GPSAltitudeRef
-'exif-gpsaltitude-above-sealevel' => '{{PLURAL:$1|Én|$1}} meter over havet',
-'exif-gpsaltitude-below-sealevel' => '{{PLURAL:$1|Én|$1}} meter under havet',
-
-'exif-gpsstatus-a' => 'Måling pågår',
-'exif-gpsstatus-v' => 'Målingsinteroperabilitet',
-
-'exif-gpsmeasuremode-2' => 'todimensjonell måling',
-'exif-gpsmeasuremode-3' => 'tredimensjonell måling',
-
-# Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-k' => 'Kilometer per time',
-'exif-gpsspeed-m' => 'Miles per time',
-'exif-gpsspeed-n' => 'Knop',
-
-# Pseudotags used for GPSDestDistanceRef
-'exif-gpsdestdistance-k' => 'Kilometer',
-'exif-gpsdestdistance-m' => 'Miles',
-'exif-gpsdestdistance-n' => 'Nautiske mil',
-
-'exif-gpsdop-excellent' => 'Utmerket ($1)',
-'exif-gpsdop-good' => 'God ($1)',
-'exif-gpsdop-moderate' => 'Moderat ($1)',
-'exif-gpsdop-fair' => 'Middelmådig ($1)',
-'exif-gpsdop-poor' => 'Dårlig ($1)',
-
-'exif-objectcycle-a' => 'Kun morgen',
-'exif-objectcycle-p' => 'Kun kveld',
-'exif-objectcycle-b' => 'Både morgen og kveld',
-
-# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
-'exif-gpsdirection-t' => 'Sann retning',
-'exif-gpsdirection-m' => 'Magnetisk retning',
-
-'exif-ycbcrpositioning-1' => 'Sentrert',
-'exif-ycbcrpositioning-2' => 'Co-lokalisert',
-
-'exif-dc-contributor' => 'Bidragsytere',
-'exif-dc-coverage' => 'Romlig eller timelig omfang av mediet',
-'exif-dc-date' => 'Dato(er)',
-'exif-dc-publisher' => 'Utgiver',
-'exif-dc-relation' => 'Relaterte media',
-'exif-dc-rights' => 'Rettigheter',
-'exif-dc-source' => 'Mediakilde',
-'exif-dc-type' => 'Mediatype',
-
-'exif-rating-rejected' => 'Avvist',
-
-'exif-isospeedratings-overflow' => 'Større enn 65535',
-
-'exif-iimcategory-ace' => 'Kunst, kultur og underholdning',
-'exif-iimcategory-clj' => 'Kriminalitet og jura',
-'exif-iimcategory-dis' => 'Katastrofer og ulykker',
-'exif-iimcategory-fin' => 'Økonomi og næringsliv',
-'exif-iimcategory-edu' => 'Utdanning',
-'exif-iimcategory-evn' => 'Miljø',
-'exif-iimcategory-hth' => 'Helse',
-'exif-iimcategory-hum' => 'Menneskelig interesse',
-'exif-iimcategory-lab' => 'Arbeidskraft',
-'exif-iimcategory-lif' => 'Livsstil og fritid',
-'exif-iimcategory-pol' => 'Politikk',
-'exif-iimcategory-rel' => 'Religion og livssyn',
-'exif-iimcategory-sci' => 'Vitenskap og teknologi',
-'exif-iimcategory-soi' => 'Sosiale problemer',
-'exif-iimcategory-spo' => 'Sport',
-'exif-iimcategory-war' => 'Krig, konflikt og uro',
-'exif-iimcategory-wea' => 'Vær',
-
-'exif-urgency-normal' => 'Normal ($1)',
-'exif-urgency-low' => 'Lav ($1)',
-'exif-urgency-high' => 'Høy ($1)',
-'exif-urgency-other' => 'Brukerdefinert prioritet ($1)',
-
-# External editor support
-'edit-externally' => 'Rediger denne filen med et eksternt program',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonene] for mer informasjon)',
-
-# 'all' in various places, this might be different for inflected languages
-'watchlistall2' => 'alle',
-'namespacesall' => 'alle',
-'monthsall' => 'alle',
-'limitall' => 'alle',
-
-# E-mail address confirmation
-'confirmemail' => 'Bekreft e-postadresse',
-'confirmemail_noemail' => 'Du har ikke oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].',
-'confirmemail_text' => 'Du må bekrefte e-postadressen din før du kan benytte deg av e-posttjenester på {{SITENAME}}. Trykk på knappen under for å sende en bekreftelsesmelding til e-postadressen din. Meldingen vil inneholde en lenke med en kode; følg lenken for å bekrefte at e-postadressen er gyldig.',
-'confirmemail_pending' => 'En bekreftelseskode har allerede blitt sendt til deg på e-post; om du nylig opprettet kontoen din, kan du ønske å vente noen minutter før du spør om ny kode.',
-'confirmemail_send' => 'Send en bekreftelseskode.',
-'confirmemail_sent' => 'Bekreftelsesmelding sendt.',
-'confirmemail_oncreate' => 'En bekreftelseskode ble sendt til din e-postadresse. Denne koden er ikke nødvendig for å logge inn, men er nødvendig for å slå på e-postbaserte tjenester i denne wikien.',
-'confirmemail_sendfailed' => '{{SITENAME}} klarte ikke å sende bekreftelseskode.
-Sjekk e-postadressen for ugyldige tegn.
-
-E-postsenderen ga følgende melding: $1',
-'confirmemail_invalid' => 'Ugyldig bekreftelseskode. Koden kan ha utløpt.',
-'confirmemail_needlogin' => 'Du må $1 for å bekrefte e-postadressen din.',
-'confirmemail_success' => 'Din e-postadresse er nå bekreftet. Du kan nå logge inn og nyte wikien.',
-'confirmemail_loggedin' => 'E-postadressen din er bekreftet.',
-'confirmemail_error' => 'Noe gikk galt under lagringen av din bekreftelse.',
-'confirmemail_subject' => 'Bekreftelsesmelding fra {{SITENAME}}',
-'confirmemail_body' => 'Noen, antageligvis deg, har registrert kontoen «$2» på {{SITENAME}}, fra IP-adressen $1.
-
-For å bekrefte at denne kontoen tilhører deg og for å aktivere e-posttjenester på {{SITENAME}}, åpne følgende lenke i nettleseren din:
-
-$3
-
-Om du *ikke* registrerte kontoen, følg denne lenken for å avbryte bekreftelse av e-postadresse:
-
-$5
-
-Denne bekreftelseskoden utgår $4.',
-'confirmemail_body_changed' => 'Noen, antageligvis deg, fra IP-adresse $1,
-har endret e-postadressen til kontoen «$2» til denne adressen på {{SITENAME}}.
-
-For å bekrefte at denne kontoen virkelig er din og for å reaktivere e-postegenskaper på {{SITENAME}}, åpne denne lenken i nettleseren din:
-
-$3
-
-Dersom denne kontoen *ikke* tilhører deg, følg denne lenken
-for å avbryte e-postbekreftelsen:
-
-$5
-
-Denne bekreftelseskoden vil løpe ut $4.',
-'confirmemail_body_set' => 'Noen, trolig deg, har satt e-postadressen for kontoen «$2» til denne adressen på {{SITENAME}}, fra IP-adressen $1.
-
-For å bekrefte at denne kontoen tilhører deg og for å slå på e-posttjenestene på {{SITENAME}}, åpne denne lenka i nettleseren din:
-
-$3
-
-Om kontoen *ikke* tilhører deg, følg denne lenka for å avbryte bekreftelsen:
-
-$5
-
-Denne bekreftelseskoden går ut på dato $4.',
-'confirmemail_invalidated' => 'Bekreftelse av e-postadresse avbrutt',
-'invalidateemail' => 'Avbryt bekreftelse av e-postadresse',
-
-# Scary transclusion
-'scarytranscludedisabled' => '[Interwiki-transkludering er slått av]',
-'scarytranscludefailed' => '[Malen kunne ikke hentes for $1]',
-'scarytranscludetoolong' => '[URL-en er for lang]',
-
-# Delete conflict
-'deletedwhileediting' => "'''Advarsel:''' Denne siden har blitt slettet etter at du begynte å redigere den!",
-'confirmrecreate' => '«[[User:$1|$1]]» ([[User talk:$1|diskusjon]]) slettet siden etter at du begynte å redigere den, med begrunnelsen «$2». Vennligst bekreft at du vil gjenopprette siden.',
-'confirmrecreate-noreason' => 'Brukeren [[User:$1|$1]] ([[User talk:$1|diskusjon]]) slettet denne siden etter at du begynte å redigere. Bekreft at du virkelig ønsker å gjenopprette denne siden.',
-'recreate' => 'Gjenopprett',
-
-# action=purge
-'confirm_purge_button' => 'OK',
-'confirm-purge-top' => "Vil du slette tjenerens mellomlagrede versjon (''cache'') av denne siden?",
-'confirm-purge-bottom' => 'Rensing av en side sletter mellomlageret og tvinger frem den nyeste versjonen.',
-
-# action=watch/unwatch
-'confirm-watch-button' => 'OK',
-'confirm-watch-top' => 'Legg denne siden til overvåkningslisten din?',
-'confirm-unwatch-button' => 'OK',
-'confirm-unwatch-top' => 'Fjern denne siden fra overvåkningslisten din?',
-
-# Multipage image navigation
-'imgmultipageprev' => '← forrige side',
-'imgmultipagenext' => 'neste side &rarr;',
-'imgmultigo' => 'Gå!',
-'imgmultigoto' => 'Gå til siden $1',
-
-# Table pager
-'ascending_abbrev' => 'stig.',
-'descending_abbrev' => 'synk.',
-'table_pager_next' => 'Neste side',
-'table_pager_prev' => 'Forrige side',
-'table_pager_first' => 'Første side',
-'table_pager_last' => 'Siste side',
-'table_pager_limit' => 'Vis $1 elementer per side',
-'table_pager_limit_label' => 'Element per side:',
-'table_pager_limit_submit' => 'Gå',
-'table_pager_empty' => 'Ingen resultater',
-
-# Auto-summaries
-'autosumm-blank' => 'Tømmer siden',
-'autosumm-replace' => 'Erstatter siden med «$1»',
-'autoredircomment' => 'Omdirigerer til [[$1]]',
-'autosumm-new' => 'Ny side: $1',
-
-# Live preview
-'livepreview-loading' => 'Laster…',
-'livepreview-ready' => 'Laster&nbsp;… Klar!',
-'livepreview-failed' => 'Levende forhåndsvisning mislyktes. Prøv vanlig forhåndsvisning.',
-'livepreview-error' => 'Tilkobling mislyktes: $1 «$2»
-Prøv vanlig forhåndsvisning.',
-
-# Friendlier slave lag warnings
-'lag-warn-normal' => 'Endringer nyere enn $1 {{PLURAL:$1|sekund|sekunder}} vises muligens ikke i denne listen.',
-'lag-warn-high' => 'På grunn av stor databaseforsinkelse, vil ikke endringer som er nyere enn $1 {{PLURAL:$1|sekund|sekunder}} vises i denne listen.',
-
-# Watchlist editor
-'watchlistedit-numitems' => 'Overvåkningslisten din inneholder {{PLURAL:$1|én tittel|$1 titler}}, ikke inkludert diskusjonssider.',
-'watchlistedit-noitems' => 'Overvåkningslisten din inneholder ingen titler.',
-'watchlistedit-normal-title' => 'Rediger overvåkningsliste',
-'watchlistedit-normal-legend' => 'Fjern titler fra overvåkninglisten',
-'watchlistedit-normal-explain' => 'Titler på overvåkningslisten din vises nedenfor.
-For å fjerne en tittel, merk av boksen ved siden av den og klikk på «{{int:Watchlistedit-normal-submit}}».
-Du kan også [[Special:EditWatchlist/raw|redigere den rå overvåkningslisten]].',
-'watchlistedit-normal-submit' => 'Fjern titler',
-'watchlistedit-normal-done' => '{{PLURAL:$1|Én tittel|$1 titler}} ble fjernet fra overvåkningslisten din:',
-'watchlistedit-raw-title' => 'Rediger rå overvåkningsliste',
-'watchlistedit-raw-legend' => 'Rediger rå overvåkningsliste',
-'watchlistedit-raw-explain' => 'Titler på overvåkningslisten din vises nedenunder, og kan redigeres ved å legge til eller fjerne fra listen;
-én tittel per linje.
-Når du er ferdig, trykk «{{int:Watchlistedit-raw-submit}}».
-Du kan også [[Special:EditWatchlist|bruke standardverktøyet]].',
-'watchlistedit-raw-titles' => 'Titler:',
-'watchlistedit-raw-submit' => 'Oppdater overvåkningsliste',
-'watchlistedit-raw-done' => 'Overvåkningslisten din er oppdatert.',
-'watchlistedit-raw-added' => '{{PLURAL:$1|Én tittel|$1 titler}} ble lagt til:',
-'watchlistedit-raw-removed' => '{{PLURAL:$1|Én tittel|$1 titler}} ble fjernet:',
-
-# Watchlist editing tools
-'watchlisttools-view' => 'Vis relevante endringer',
-'watchlisttools-edit' => 'Vis og rediger overvåkningsliste',
-'watchlisttools-raw' => 'Rediger rå overvåkningsliste',
-
-# Hebrew month names
-'hebrew-calendar-m1' => 'Tisjri',
-'hebrew-calendar-m2' => 'Hesjván',
-'hebrew-calendar-m3' => 'Kislév',
-'hebrew-calendar-m4' => 'Tebét',
-'hebrew-calendar-m5' => 'Sjebát',
-'hebrew-calendar-m6' => 'Adár',
-'hebrew-calendar-m6a' => 'Adár I',
-'hebrew-calendar-m6b' => 'Adár II',
-'hebrew-calendar-m7' => 'Nisán',
-'hebrew-calendar-m8' => 'Ijár',
-'hebrew-calendar-m9' => 'Siván',
-'hebrew-calendar-m10' => 'Tammúz',
-'hebrew-calendar-m11' => 'Ab',
-'hebrew-calendar-m12' => 'Elúl',
-'hebrew-calendar-m1-gen' => 'Tisjri',
-'hebrew-calendar-m2-gen' => 'Hesjván',
-'hebrew-calendar-m3-gen' => 'Kislév',
-'hebrew-calendar-m4-gen' => 'Tebét',
-'hebrew-calendar-m5-gen' => 'Sjebát',
-'hebrew-calendar-m6-gen' => 'Adár',
-'hebrew-calendar-m6a-gen' => 'Adár I',
-'hebrew-calendar-m6b-gen' => 'Adár II',
-'hebrew-calendar-m7-gen' => 'Nisán',
-'hebrew-calendar-m8-gen' => 'Ijár',
-'hebrew-calendar-m9-gen' => 'Siván',
-'hebrew-calendar-m10-gen' => 'Tammúz',
-'hebrew-calendar-m11-gen' => 'Ab',
-'hebrew-calendar-m12-gen' => 'Elúl',
-
-# Core parser functions
-'unknown_extension_tag' => 'Ukjent tilleggsmerking «$1»',
-'duplicate-defaultsort' => 'Advarsel: Standardsorteringen «$2» tar over for den tidligere sorteringen «$1».',
-
-# Special:Version
-'version' => 'Versjon',
-'version-extensions' => 'Installerte utvidelser',
-'version-specialpages' => 'Spesialsider',
-'version-parserhooks' => 'Parsertillegg',
-'version-variables' => 'Variabler',
-'version-antispam' => 'Søppelpostforebygging',
-'version-skins' => 'Drakter',
-'version-other' => 'Annet',
-'version-mediahandlers' => 'Mediahåndterere',
-'version-hooks' => 'Haker',
-'version-extension-functions' => 'Tilleggsfunksjoner',
-'version-parser-extensiontags' => 'Tilleggstagger',
-'version-parser-function-hooks' => 'Parserfunksjoner',
-'version-hook-name' => 'Navn',
-'version-hook-subscribedby' => 'Brukes av',
-'version-version' => '(versjon $1)',
-'version-license' => 'Lisens',
-'version-poweredby-credits' => "Denne wikien er drevet av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
-'version-poweredby-others' => 'andre',
-'version-license-info' => 'MediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon.
-
-MediaWiki er distribuert i håp om at det vil være nyttig, men UTEN NOEN GARANTI; ikke engang implisitt garanti av SALGBARHET eller EGNETHET FOR ET BESTEMT FORMÅL. Se GNU General Public License for flere detaljer.
-
-Du skal ha mottatt [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi av GNU General Public License] sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [//www.gnu.org/licenses/old-licenses/gpl-2.0.html les det på nettet].',
-'version-software' => 'Installert programvare',
-'version-software-product' => 'Produkt',
-'version-software-version' => 'Versjon',
-
-# Special:FilePath
-'filepath' => 'Filsti',
-'filepath-page' => 'Fil:',
-'filepath-submit' => 'Gå',
-'filepath-summary' => 'Denne spesialsiden returnerer den fullstendige stien for en fil.
-Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom sine tilknyttede programmer.',
-
-# Special:FileDuplicateSearch
-'fileduplicatesearch' => 'Søk etter duplikatfiler',
-'fileduplicatesearch-summary' => 'Søk etter duplikatfiler basert på dets hash-verdi.',
-'fileduplicatesearch-legend' => 'Søk etter en duplikatfil',
-'fileduplicatesearch-filename' => 'Filnavn:',
-'fileduplicatesearch-submit' => 'Søk',
-'fileduplicatesearch-info' => '$1 × $2 piksler<br />Filstørrelse: $3<br />MIME-type: $4',
-'fileduplicatesearch-result-1' => 'Det er ingen duplikater av «$1».',
-'fileduplicatesearch-result-n' => 'Det er {{PLURAL:$2|ett duplikat|$2 duplikater}} av «$1».',
-'fileduplicatesearch-noresults' => 'Ingen ved navn «$1» funnet.',
-
-# Special:SpecialPages
-'specialpages' => 'Spesialsider',
-'specialpages-group-maintenance' => 'Vedlikeholdsrapporter',
-'specialpages-group-other' => 'Andre spesialsider',
-'specialpages-group-login' => 'Innlogging / registrering',
-'specialpages-group-changes' => 'Siste endringer og logger',
-'specialpages-group-media' => 'Mediarapporter og opplastinger',
-'specialpages-group-users' => 'Brukere og rettigheter',
-'specialpages-group-highuse' => 'Ofte brukte sider',
-'specialpages-group-pages' => 'Sidelister',
-'specialpages-group-pagetools' => 'Sideverktøy',
-'specialpages-group-wiki' => 'Informasjon og verktøy for wikien',
-'specialpages-group-redirects' => 'Omdirigerende spesialsider',
-'specialpages-group-spam' => 'Spamverktøy',
-
-# Special:BlankPage
-'blankpage' => 'Tom side',
-'intentionallyblankpage' => 'Denne siden er tom med vilje',
-
-# External image whitelist
-'external_image_whitelist' => '#La denne linja være som den er<pre>
-#Skriv fragmenter av regulære uttrykk (delen som går mellom //) nedenfor
-#Disse vil sjekkes mot adresser til bilder fra eksterne sider
-#De som blir godkjent vil vises, ellers vil det gis en lenke til bildet
-#Linjer som begynner med # anses som kommentarer
-#Det skilles ikke mellom store og små bokstaver
-
-#Skriv alle fragmenter av regulære uttrykk over denne lina. La denne linja være som den er</pre>',
-
-# Special:Tags
-'tags' => 'Gyldige endringstagger',
-'tag-filter' => 'Filter for [[Special:Tags|tagger]]:',
-'tag-filter-submit' => 'Filtrer',
-'tags-title' => 'Tagger',
-'tags-intro' => 'Denne siden lister opp taggene programvaren kan merke en endring med, og hva de betyr.',
-'tags-tag' => 'Taggnavn',
-'tags-display-header' => 'Utseende på endringslister',
-'tags-description-header' => 'Fullstendig betydning',
-'tags-hitcount-header' => 'Taggede endringer',
-'tags-edit' => 'rediger',
-'tags-hitcount' => '{{PLURAL:$1|én endring|$1 endringer}}',
-
-# Special:ComparePages
-'comparepages' => 'Sammenlign sider',
-'compare-selector' => 'Sammenlign siderevisjoner',
-'compare-page1' => 'Side 1',
-'compare-page2' => 'Side 2',
-'compare-rev1' => 'Revisjon 1',
-'compare-rev2' => 'Revisjon 2',
-'compare-submit' => 'Sammenlign',
-
-# Database error messages
-'dberr-header' => 'Wikien har et problem',
-'dberr-problems' => 'Siden har tekniske problemer.',
-'dberr-again' => 'Prøv å oppdatere siden om noen minutter.',
-'dberr-info' => '(Kan ikke kontakte databasetjeneren: $1)',
-'dberr-usegoogle' => 'Du kan prøve å søke via Google imens.',
-'dberr-outofdate' => 'Merk at deres indeks over våre sider kan være utdatert.',
-'dberr-cachederror' => 'Følgende er en mellomlagret kopi av den etterspurte siden, og kan være foreldet.',
-
-# HTML forms
-'htmlform-invalid-input' => 'Det er problemer med noen av inndatene dine',
-'htmlform-select-badoption' => 'Verdien du valgte er ikke et gyldig alternativ.',
-'htmlform-int-invalid' => 'Verdien du valgte er ikke et heltall.',
-'htmlform-float-invalid' => 'Verdien du valgte er ikke et tall.',
-'htmlform-int-toolow' => 'Verdien du valgte er mindre enn minimum på $1',
-'htmlform-int-toohigh' => 'Verdien du valgte er over det mulige $1',
-'htmlform-required' => 'Denne verdien er påkrevd',
-'htmlform-submit' => 'Lagre',
-'htmlform-reset' => 'Omgjør endringer',
-'htmlform-selectorother-other' => 'Andre',
-
-# SQLite database support
-'sqlite-has-fts' => '$1 med støtte for fulltekstsøk',
-'sqlite-no-fts' => '$1 uten støtte for fulltekstsøk',
-
-# New logging system
-'revdelete-restricted' => 'begrensninger gjelder også administratorer',
-'revdelete-unrestricted' => 'fjernet begrensninger for administratorer',
-'newuserlog-byemail' => 'passord sendt på e-post',
-
-);
index 0eca8f6..9c73019 100644 (file)
@@ -647,6 +647,9 @@ Ga re fane ka e-poso ya gago go bašumiši ba bangwe ge ba polela le wena ka yon
 'right-edit' => 'Fetola matlakala',
 'right-move' => 'Huduša matlakala',
 
+# Special:Log/newusers
+'newuserlogpage' => '"Log" yago hlola mošumiši',
+
 # User rights log
 'rightslog' => "''log'' ya ditumello tša mošomiši",
 
@@ -863,9 +866,6 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo]
 # Special:ListUsers
 'listusers-submit' => 'Bontšha',
 
-# Special:Log/newusers
-'newuserlogpage' => '"Log" yago hlola mošumiši',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Lenano la ditho)',
 
@@ -906,6 +906,8 @@ Ga eba o nyaka go hloša letlaka le go lenano la ditlhapetšo tša gago, šomiš
 'enotif_impersonal_salutation' => '{{SITENAME}} mošumiši',
 'enotif_lastvisited' => 'Lebelela  $1 go bona diphetogo ka moka gotloga ge go tsena la mafelelo.',
 'enotif_lastdiff' => 'Bona $1 go nyakorela phetogo ye.',
+'created' => 'tlhodilwe',
+'changed' => 'fetotšwe',
 
 # Delete
 'deletepage' => 'Phumula letlakala',
index c677229..68f7974 100644 (file)
@@ -298,7 +298,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Amagar las modificacions susvelhadas dels darrièrs cambiaments',
 'tog-newpageshidepatrolled' => 'Amagar las paginas susvelhadas de la lista de las paginas novèlas',
 'tog-extendwatchlist' => 'Espandir la lista de seguiment per afichar totas las modificacions e non pas solament las mai recentas',
-'tog-usenewrc' => 'Utilizar los darrièrs cambiaments melhorats (necessita JavaScript)',
+'tog-usenewrc' => 'Agropar los cambiaments dins los darrièrs cambiaments e la lista de seguiment (necessita JavaScript)',
 'tog-numberheadings' => 'Numerotar automaticament los títols',
 'tog-showtoolbar' => 'Far veire la barra de menut de modificacion (JavaScript)',
 'tog-editondblclick' => 'Modificar una pagina amb un clic doble (JavaScript)',
@@ -306,23 +306,23 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Modificar una seccion en fasent un clic drech sus son títol (JavaScript)',
 'tog-showtoc' => "Afichar l'ensenhador (per las paginas de mai de 3 seccions)",
 'tog-rememberpassword' => 'Se remembrar de mon senhal sus aqueste ordinator (al mai $1 {{PLURAL:$1|jorn|jorns}})',
-'tog-watchcreations' => 'Apondre las paginas que creï a ma lista de seguiment',
-'tog-watchdefault' => 'Apondre las paginas que modifiqui a ma lista de seguiment',
-'tog-watchmoves' => 'Apondre las paginas que tòrni nomenar a ma lista de seguiment',
-'tog-watchdeletion' => 'Apondre las paginas que suprimissi de ma lista de seguiment',
+'tog-watchcreations' => "Apondre las paginas que creï e los fichièrs qu'impòrti a ma lista de seguiment",
+'tog-watchdefault' => "Apondre las paginas que modifiqui e los fichièrs qu'impòrti a ma lista de seguiment",
+'tog-watchmoves' => 'Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment',
+'tog-watchdeletion' => 'Apondre las paginas e los fichièrs que suprimissi de ma lista de seguiment',
 'tog-minordefault' => 'Considerar mas modificacions coma menoras per defaut',
 'tog-previewontop' => 'Far veire la previsualizacion al dessús de la zòna de modificacion',
 'tog-previewonfirst' => 'Far veire la previsualizacion al moment de la primièra edicion',
 'tog-nocache' => "Desactivar l'amagatal de paginas",
-'tog-enotifwatchlistpages' => 'M’avertir per corrièr electronic quand una pagina de ma lista de seguiment es modificada',
+'tog-enotifwatchlistpages' => 'M’avertir per corrièr electronic quand una pagina o un fichièr de ma lista de seguiment es modificat',
 'tog-enotifusertalkpages' => 'M’avertir per corrièr electronic en cas de modificacion de ma pagina de discussion',
-'tog-enotifminoredits' => 'M’avertir per corrièr electronic quitament en cas de modificacions menoras',
+'tog-enotifminoredits' => 'M’avertir per corrièr electronic quitament en cas de modificacions menoras de las paginas o dels fichièrs',
 'tog-enotifrevealaddr' => 'Afichar mon adreça electronica dins la los corrièrs electronics d’avertiment',
 'tog-shownumberswatching' => "Afichar lo nombre d'utilizaires que seguisson aquesta pagina",
 'tog-oldsig' => 'Apercebut de la signatura existenta :',
 'tog-fancysig' => 'Tractar la signatura coma de wikitèxte (sens ligam automatic)',
 'tog-externaleditor' => 'Utilizar un editor extèrne per defaut (pels utilizaires avançats, necessita una configuracion especiala sus vòstre ordinator)',
-'tog-externaldiff' => 'Utilizar un comparator extèrne per defaut (pels utilizaires avançats, necessita una configuracion especiala sus vòstre ordenador)',
+'tog-externaldiff' => "Utilizar un comparador extèrne per defaut (pels utilizaires avançats, necessita una configuracion especiala sus vòstre ordenador, [//www.mediawiki.org/wiki/Manual:External_editors/fr mai d'informacions]).",
 'tog-showjumplinks' => 'Activar los ligams « navigacion » e « recèrca » en naut de pagina (aparéncias Myskin e autres)',
 'tog-uselivepreview' => 'Utilizar l’apercebut rapid (JavaScript) (experimental)',
 'tog-forceeditsummary' => "M'avertir quand ai pas completat lo contengut de la bóstia de comentaris",
@@ -340,7 +340,7 @@ $messages = array(
 
 'underline-always' => 'Totjorn',
 'underline-never' => 'Pas jamai',
-'underline-default' => 'Segon lo navigador',
+'underline-default' => 'Valor per defaut del navigador o del tèma',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Estil de poliça de la zòna d'edicion :",
@@ -425,8 +425,9 @@ $messages = array(
 'newwindow' => '(dobrís una fenèstra novèla)',
 'cancel' => 'Anullar',
 'moredotdotdot' => 'E mai...',
-'mypage' => 'Ma pagina',
-'mytalk' => 'Ma pagina de discussion',
+'morenotlisted' => 'Mai pas listat…',
+'mypage' => 'Pagina',
+'mytalk' => 'Discussion',
 'anontalk' => 'Discussion amb aquesta adreça IP',
 'navigation' => 'Navigacion',
 'and' => '&#32;e',
@@ -448,6 +449,7 @@ $messages = array(
 'vector-action-protect' => 'Protegir',
 'vector-action-undelete' => 'Restablir',
 'vector-action-unprotect' => 'Suprimir la proteccion',
+'vector-simplesearch-preference' => "Activar la barra de recèrca simplificada (solament per l'abilhatge Vector)",
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Modificar',
 'vector-view-history' => "Veire l'istoric",
@@ -457,6 +459,7 @@ $messages = array(
 'namespaces' => 'Espacis de noms',
 'variants' => 'Variantas',
 
+'navigation-heading' => 'Menú de navigacion',
 'errorpagetitle' => 'Error de títol',
 'returnto' => 'Tornar a la pagina $1.',
 'tagline' => 'Un article de {{SITENAME}}.',
@@ -494,7 +497,7 @@ $messages = array(
 'articlepage' => "Vejatz l'article",
 'talk' => 'Discussion',
 'views' => 'Afichatges',
-'toolbox' => "Bóstia d'espleches",
+'toolbox' => "Bóstia d'aisinas",
 'userpage' => "Pagina d'utilizaire",
 'projectpage' => 'Pagina meta',
 'imagepage' => 'Veire la pagina del fichièr',
@@ -517,6 +520,8 @@ Tròp d’utilizaires cercan a accedir a aquesta pagina.
 Esperatz un moment abans d'ensajar d’accedir a aquesta pagina.
 
 $1",
+'pool-timeout' => "Relambi depassat pendent l'espèra del varrolh",
+'pool-queuefull' => 'La fila de trabalh es plena',
 'pool-errorunknown' => 'Error desconeguda',
 
 # 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).
@@ -551,6 +556,10 @@ $1",
 'youhavenewmessages' => 'Avètz $1 ($2).',
 'newmessageslink' => 'de messatges novèls',
 'newmessagesdifflink' => 'darrièr cambiament',
+'youhavenewmessagesfromusers' => "Avètz $1 {{PLURAL:$3|d'un autre utilizaire|de $3 autres utilizaires}} ($2).",
+'youhavenewmessagesmanyusers' => 'Avètz $1 de fòrça utilizaires ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|un novèl messatge|de novèls messatges}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|darrièr cambiament|darrièrs cambiaments}}',
 'youhavenewmessagesmulti' => 'Avètz de messatges novèls sus $1',
 'editsection' => 'modificar',
 'editold' => 'modificar',
@@ -644,10 +653,12 @@ Informatz-ne un [[Special:ListUsers/sysop|administrator]] aprèp aver notada l
 'cannotdelete' => 'Impossible de suprimir la pagina o lo fichièr « $1 ».
 Benlèu la supression ja es estada efectuada per qualqu’un mai.',
 'cannotdelete-title' => 'Impossible de suprimir la pagina "$1"',
+'delete-hook-aborted' => "Supression anullada per una extension.
+Cap d'explicacion es pas estada provesida.",
 'badtitle' => 'Títol marrit',
 'badtitletext' => 'Lo títol de la pagina demandada es invalid, void o s’agís d’un títol interlenga o interprojècte mal ligat. Benlèu conten un o maites caractèrs que pòdon pas èsser utilizats dins los títols.',
-'perfcached' => 'Aquò es una version en amagatal e es benlèu pas a jorn. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => "Las donadas que segon son dins l'amagatal, son doncas pas forçadament a jorn. La darrièra actualizacion data del $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+'perfcached' => "Las donadas seguendas son en escondedor e benlèu, son pas a jorn. Un maximum de {{PLURAL:$1|un resultat|$1 resultats}} es disponible dins l'escondedor.",
+'perfcachedts' => "Las donadas seguendas son en escondedor e benlèu, son pas a jorn. Un maximum de {{PLURAL:$1|un resultat|$1 resultats}} es disponible dins l'escondedor.",
 'querypage-no-updates' => 'Las mesas a jorn per aquesta pagina son actualamnt desactivadas. Las donadas çaijós son pas mesas a jorn.',
 'wrong_wfQuery_params' => 'Paramètres incorrèctes sus wfQuery()<br />
 Foncion : $1<br />
@@ -656,8 +667,9 @@ Requèsta : $2',
 'viewsource-title' => 'Veire la font de $1',
 'actionthrottled' => 'Accion limitada',
 'actionthrottledtext' => "Per luchar contra lo spam, l’utilizacion d'aquesta accion es limitada a un cèrt nombre de còps dins una sosta pro corta. S'avèra qu'avètz depassat aqueste limit. Ensajatz tornamai dins qualques minutas.",
-'protectedpagetext' => 'Aquesta pagina es estada protegida per empachar sa modificacion.',
+'protectedpagetext' => "Aquesta pagina es estada protegida per empachar sa modificacion o d'autras accions.",
 'viewsourcetext' => 'Podètz veire e copiar lo contengut de l’article per poder trabalhar dessús :',
+'viewyourtext' => "Podètz veire e copiar lo contengut de '''vòstras modificacions''' a aquesta pagina :",
 'protectedinterface' => 'Aquesta pagina provesís de tèxte d’interfàcia pel logicial e es protegida per evitar los abuses.',
 'editinginterface' => "'''Atencion :''' sètz a editar una pagina utilizada per crear lo tèxte de l’interfàcia del logicial. Los cambiaments se repercutaràn, segon lo contèxte, sus totas o d'unas paginas visiblas pels autres utilizaires. Per las traduccions, vos convidam a utilizar lo projècte MediaWiki d'internacionalizacion dels messatges [//translatewiki.net/wiki/Main_Page?setlang=oc translatewiki.net].",
 'sqlhidden' => '(Requèsta SQL amagada)',
@@ -669,6 +681,7 @@ $2",
 'ns-specialprotected' => 'Las paginas dins l’espaci de noms « {{ns:special}} » pòdon pas èsser modificadas',
 'titleprotected' => "Aqueste títol es estat protegit a la creacion per [[User:$1|$1]].
 Lo motiu avançat es « ''$2'' ».",
+'exception-nologin' => 'Pas connectat',
 
 # Virus scanner
 'virus-badscanner' => "Marrida configuracion : escaner de virús desconegut : ''$1''",
@@ -680,11 +693,16 @@ Lo motiu avançat es « ''$2'' ».",
 
 Podètz contunhar d'utilizar {{SITENAME}} anonimament, o vos podètz <span class='plainlinks'>[$1 tornar connectar]</span> jol meteis nom o amb un autre nom.
 Notatz que d'unas paginas pòdon èsser encara afichadas coma s'eratz encara connect{{GENDER:||at|ada}}, fins al moment qu'escafaretz l'amagatal de vòstre navigador.",
-'yourname' => "Vòstre nom d'utilizaire :",
+'welcomeuser' => 'Benvenguda, $1&nbsp;!',
+'welcomecreation-msg' => "Vòstre compte d'utilizaire es estat creat.
+Doblidetz pas de modificar [[Special:Preferences|vòstras preferéncias per {{SITENAME}}]].",
+'yourname' => "Nom d'utilizaire :",
 'yourpassword' => 'Vòstre senhal :',
-'yourpasswordagain' => 'Picatz vòstre senhal tornarmai :',
+'yourpasswordagain' => 'Confirmar lo senhal :',
 'remembermypassword' => 'Me reconnectar automaticament a las visitas venentas (al maximum $1 {{PLURAL:$1|jorn|jorns}})',
+'securelogin-stick-https' => 'Demorar connectat en HTTPS aprèp la connexion',
 'yourdomainname' => 'Vòstre domeni',
+'password-change-forbidden' => 'Podètz pas modificar los senhals sus aqueste wiki.',
 'externaldberror' => 'Siá una error s’es producha amb la banca de donadas d’autentificacion extèrna, siá sètz pas autorizat a metre a jorn vòstre compte extèrne.',
 'login' => 'Identificacion',
 'nav-login-createaccount' => 'Crear un compte o se connectar',
@@ -699,7 +717,7 @@ Notatz que d'unas paginas pòdon èsser encara afichadas coma s'eratz encara con
 'createaccount' => 'Crear un compte novèl',
 'gotaccount' => "Ja avètz un compte ? '''$1'''.",
 'gotaccountlink' => 'Identificatz-vos',
-'userlogin-resetlink' => 'Vos doblidèretz las informacions de conneccion?',
+'userlogin-resetlink' => 'Avètz doblidat vòstres detalhs de connexion ?',
 'createaccountmail' => 'per corrièr electronic',
 'createaccountreason' => 'Motiu :',
 'badretype' => "Los senhals qu'avètz picats son pas identics.",
@@ -751,6 +769,7 @@ Atal los visitors qu'utilizan aquesta adreça IP pòdon pas crear mai de compte
 'emailconfirmlink' => 'Confirmatz vòstra adreça de corrièr electronic',
 'invalidemailaddress' => "Aquesta adreça de corrièr electronic pòt pas èsser acceptada perque sembla qu'a un format incorrècte.
 Picatz una adreça plan formatada o daissatz aqueste camp void.",
+'emaildisabled' => 'Aqueste site pòt pas mandar de corrièls.',
 'accountcreated' => 'Compte creat.',
 'accountcreatedtext' => "Lo compte d'utilizaire de $1 es estat creat.",
 'createaccount-title' => "Creacion d'un compte per {{SITENAME}}",
@@ -760,9 +779,13 @@ Ignoratz aqueste messatge se aqueste compte es estat creat per error.",
 'usernamehasherror' => "Lo nom d'utilizaire pòt pas conténer de caractèrs de hachage",
 'login-throttled' => 'Avètz ensajat tròp de temptativas de connexion darrièrament.
 Esperatz abans d’ensajar tornamai.',
+'login-abort-generic' => 'Vòstra temptativa de connexion a fracassat',
 'loginlanguagelabel' => 'Lenga: $1',
 'suspicious-userlogout' => 'Vòstra demanda de desconnexion es estada refusada perque sembla qu’es estada mandada per un navigador copat o la mesa en escondedor d’un proxy.',
 
+# E-mail sending
+'php-mail-error-unknown' => 'Error desconeguda dins la foncion mail() de PHP.',
+
 # Change password dialog
 'resetpass' => 'Cambiar lo senhal del compte',
 'resetpass_announce' => 'Vos sètz enregistrat amb un senhal temporari mandat per corrièr electronic. Per acabar l’enregistrament, vos cal picar un senhal novèl aicí :',
@@ -909,8 +932,9 @@ La darrièra entrada del jornal dels blocatges es indicada çaijós a títol d
 'userinvalidcssjstitle' => "'''Atencion :''' existís pas d'estil « $1 ». Remembratz-vos que las paginas personalas amb extensions .css e .js utilizan de títols en minusculas, per exemple, {{ns:user}}:Foo/vector.css e non pas {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Mes a jorn)',
 'note' => "'''Nòta :'''",
-'previewnote' => "'''Atencion, aqueste tèxte es sonque una previsualizacion e es pas encara estat salvat !'''",
-'continue-editing' => "Contunhar l'edicion",
+'previewnote' => "'''Remembratz-vos qu'es pas qu'una previsualizacion.'''
+Vòstras modificacions son pas encara estadas enregistradas !",
+'continue-editing' => 'Anar a la zòna de modificacion',
 'previewconflict' => 'Aquesta previsualizacion fa veire lo tèxte de la bóstia de modificacion superiora coma apareisserà se causissètz de lo salvar.',
 'session_fail_preview' => "'''Podèm pas enregistrar vòstra modificacion a causa d’una pèrda d’informacions concernent vòstra sesilha.
 Ensajatz tornarmai.
@@ -981,6 +1005,12 @@ Sembla que siá estada suprimida.',
 Existís ja.',
 'defaultmessagetext' => 'Messatge per defaut',
 
+# Content models
+'content-model-wikitext' => 'wikitèxte',
+'content-model-text' => 'tèxte brut',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Atencion : Aquesta pagina conten tròp d’apèls dispendioses de foncions del parser.
 
@@ -1167,7 +1197,7 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori
 'mergelogpagetext' => "Vaquí, çaijós, la lista de las fusions las mai recentas de l'istoric d'una pagina amb una autra.",
 
 # Diffs
-'history-title' => 'Istoric de las versions de « $1 »',
+'history-title' => '$1 : Istoric de las versions',
 'difference-multipage' => '(Diferéncias entre las paginas)',
 'lineno' => 'Linha $1 :',
 'compareselectedversions' => 'Comparar las versions seleccionadas',
@@ -1242,8 +1272,8 @@ En esperant la reactivacion, podètz efectuar una recèrca via Google.
 Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 
 # Quickbar
-'qbsettings' => "Barra d'espleches",
-'qbsettings-none' => 'Cap',
+'qbsettings' => "Barra d'aisinas",
+'qbsettings-none' => 'Pas cap',
 'qbsettings-fixedleft' => 'Esquèrra',
 'qbsettings-fixedright' => 'Drecha',
 'qbsettings-floatingleft' => 'Flotanta a esquèrra',
@@ -1251,7 +1281,7 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 
 # Preferences page
 'preferences' => 'Preferéncias',
-'mypreferences' => 'Mas preferéncias',
+'mypreferences' => 'Preferéncias',
 'prefs-edits' => 'Nombre d’edicions :',
 'prefsnologin' => 'Vos sètz pas identificat(ada)',
 'prefsnologintext' => 'Vos cal èsser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connectat(ada)]</span> per modificar vòstras preferéncias d’utilizaire.',
@@ -1262,11 +1292,12 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 'prefs-beta' => 'Foncionalitats bèta',
 'prefs-datetime' => 'Data e ora',
 'prefs-labs' => 'Foncionalitats « labs »',
+'prefs-user-pages' => "Paginas d'utilizaire",
 'prefs-personal' => 'Entresenhas personalas',
 'prefs-rc' => 'Darrièrs cambiaments',
 'prefs-watchlist' => 'Lista de seguiment',
 'prefs-watchlist-days' => "Nombre de jorns d'afichar dins la lista de seguiment :",
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => '(maximum $1 jorn{{PLURAL:$1||s}})',
 'prefs-watchlist-edits' => "Nombre de modificacions d'afichar dins la lista de seguiment espandida :",
 'prefs-watchlist-edits-max' => 'Nombre maximum : 1000',
 'prefs-watchlist-token' => 'Geton per la lista de seguiment :',
@@ -1325,9 +1356,9 @@ Vaquí una valor generada aleatòriament que podètz utilizar : $1',
 'prefs-emailconfirm-label' => 'Confirmacion del corrièr electronic :',
 'prefs-textboxsize' => 'Talha de la fenèstra de modificacion',
 'youremail' => 'Adreça de corrièr electronic :',
-'username' => "Nom de l'utilizaire :",
-'uid' => 'Numèro de l’utilizaire :',
-'prefs-memberingroups' => 'Membre {{PLURAL:$1|del grop|dels gropes}} :',
+'username' => "{{GENDER:$1|Nom d'utilizaire|Nom d'utilizaira}}:",
+'uid' => "Numèro d'{{GENDER:$1|utilizaire|utilizaira}}:",
+'prefs-memberingroups' => '{{GENDER:$2|Membre|Membra}} {{PLURAL:$1|del grop|dels gropes}}:',
 'prefs-registration' => 'Data de creacion del compte :',
 'yourrealname' => 'Nom vertadièr :',
 'yourlanguage' => "Lenga de l'interfàcia :",
@@ -1346,6 +1377,7 @@ Deu aver, al maximum $1 caractèr{{PLURAL:$1||s}}.',
 'prefs-help-realname' => "(facultatiu) : se l'especificatz, serà utilizat per vos atribuir vòstras contribucions.",
 'prefs-help-email' => 'L’adreça de corrièr electronic es facultativa mas vos permet de reçaupre lo senhal se lo doblidatz.
 Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagina d’utilizaire o la de discussion sens sofracha de desvelar vòstra idenditat.',
+'prefs-help-email-others' => "Tanben podètz causir de daissar los autres vos contactar sus vòstra pagina de discussion d'utilizaire sens que siá necessari de revelar vòstra identitat.",
 'prefs-help-email-required' => 'Una adreça de corrièr electronic es requesa.',
 'prefs-info' => 'Informacion de basa',
 'prefs-i18n' => 'Internationalizacion',
@@ -1473,11 +1505,13 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'right-sendemail' => 'Mandar un corrièl als autres utilizaires',
 'right-passwordreset' => 'Tòrna inicializar lo senhal d’un utilizaire ([[Special:PasswordReset|pagina especiala]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Istoric de las creacions de comptes',
+'newuserlogpagetext' => "Jornal de las creacions de comptes d'utilizaires.",
+
 # User rights log
 'rightslog' => "Istoric de las modificacions d'estatut",
 'rightslogtext' => "Aquò es un jornal dels cambiaments d'estatut d’utilizaire.",
-'rightslogentry' => 'a modificat los dreches de l’utilizaire « $1 » de $2 a $3',
-'rightsnone' => '(cap)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'legir aquesta pagina',
@@ -1697,6 +1731,27 @@ Se lo problèma persistís, contactatz un [[Special:ListUsers/sysop|administrato
 'upload-unknown-size' => 'Talha desconeguda',
 'upload-http-error' => 'Una error HTTP es intervenguda : $1',
 
+# File backend
+'backend-fail-stream' => 'Impossible de legir lo fichièr $1.',
+'backend-fail-backup' => 'Impossible de salvar lo fichièr $1.',
+'backend-fail-notexists' => 'Lo fichièr $1 existís pas.',
+'backend-fail-alreadyexists' => 'Lo fichièr $1 existís ja.',
+'backend-fail-store' => "Impossible d'emmagazinar lo fichièr « $1 » dins « $2 ».",
+'backend-fail-copy' => 'Impossible de copiar lo fichièr « $1 » dins « $2 ».',
+'backend-fail-move' => 'Impossible de desplaçar lo fichièr « $1 » cap a « $2 ».',
+'backend-fail-opentemp' => 'Impossible de dobrir lo fichièr temporari.',
+'backend-fail-writetemp' => "Impossible d'escriure dins lo fichièr temporari.",
+'backend-fail-closetemp' => 'Impossible de tampar lo fichièr temporari.',
+'backend-fail-read' => 'Impossible de legir lo fichièr $1.',
+'backend-fail-create' => "Impossible d'escriure lo fichièr $1.",
+
+# Lock manager
+'lockmanager-fail-closelock' => 'Impossible de tampar lo fichièr de varrolh per « $1 ».',
+'lockmanager-fail-deletelock' => 'Impossible de suprimir lo fichièr de varrolh per « $1 ».',
+'lockmanager-fail-acquirelock' => "Impossible d'obténer lo fichièr de varrolh per « $1 ».",
+'lockmanager-fail-openlock' => 'Impossible de dobrir lo fichièr de varrolh per « $1 ».',
+'lockmanager-fail-releaselock' => 'Impossible de daissar anar lo fichièr de varrolh per « $1 ».',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'Accès refusat',
 'img-auth-nopathinfo' => 'PATH_INFO mancant.
@@ -1936,7 +1991,7 @@ Las entradas <del>barradas</del> son estadas resolgudas.',
 'listusers-editsonly' => "Far veire sonque los utilizaires qu'an al mens una contribucion",
 'listusers-creationsort' => 'Triar per data de creacion',
 'usereditcount' => '$1 {{PLURAL:$1|cambiament|cambiaments}}',
-'usercreated' => 'Creat lo $1 a $2',
+'usercreated' => '{{GENDER:$3|Creat}} lo $1 a $2',
 'newpages' => 'Paginas novèlas',
 'newpages-username' => "Nom d'utilizaire :",
 'ancientpages' => 'Articles mai ancians',
@@ -1962,8 +2017,8 @@ Notatz que d’autres sites pòdon aver un ligam dirècte cap a un fichièr, e d
 'booksources-invalid-isbn' => "Lo numèro ISBN balhat sembla pas èsser valid ; verificatz s'avètz fach una error al moment de la còpia dempuèi la font.",
 
 # Special:Log
-'specialloguserlabel' => 'Utilizaire :',
-'speciallogtitlelabel' => 'Títol :',
+'specialloguserlabel' => 'Autor :',
+'speciallogtitlelabel' => 'Cibla (títol o utilizaire):',
 'log' => 'Jornals',
 'all-logs-page' => 'Totas las operacions publicas',
 'alllogstext' => 'Afichatge combinat de totes los jornals de {{SITENAME}}.
@@ -2003,7 +2058,7 @@ Vejatz tanben [[Special:WantedCategories|las categorias demandadas]].',
 'sp-deletedcontributions-contribs' => 'contribucions',
 
 # Special:LinkSearch
-'linksearch' => 'Ligams extèrnes',
+'linksearch' => 'Recèrca de ligams extèrnes',
 'linksearch-pat' => 'Recercar l’expression :',
 'linksearch-ns' => 'Espacis de noms :',
 'linksearch-ok' => 'Recercar',
@@ -2026,10 +2081,6 @@ Vejatz tanben [[Special:WantedCategories|las categorias demandadas]].',
 'activeusers-hidesysops' => 'Amagar los administrators',
 'activeusers-noresult' => "Cap d'utilizaire pas trobat.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Istoric de las creacions de comptes',
-'newuserlogpagetext' => "Jornal de las creacions de comptes d'utilizaires.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dreches dels gropes d'utilizaires",
 'listgrouprights-summary' => "Aquesta pagina conten una tièra de gropes definits sus aqueste wiki e mai los dreches d'accès qu'i son associats.
@@ -2055,11 +2106,13 @@ I pòt aver [[{{MediaWiki:Listgrouprights-helppage}}|d'entresenhas complementàr
 e aver indicat una adreça electronica valida dins vòstras [[Special:Preferences|preferéncias]]
 per poder mandar un messatge a un autre utilizaire.',
 'emailuser' => 'Mandar un messatge a aqueste utilizaire',
+'emailuser-title-target' => 'Mandar un corrièl a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}',
+'emailuser-title-notarget' => 'Mandar un corrièr electronic a l’utilizaire',
 'emailpage' => 'Mandar un corrièr electronic a l’utilizaire',
-'emailpagetext' => "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a aqueste utilizaire.
+'emailpagetext' => "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}.
 L'adreça electronica qu'avètz indicada dins [[Special:Preferences|vòstras preferéncias]] apareisserà dins lo camp « Expeditor » de vòstre messatge. E mai, lo destinatari vos poirà respondre dirèctament.",
 'usermailererror' => 'Error dins lo subjècte del corrièr electronic :',
-'defemailsubject' => 'Corrièr electronic mandat dempuèi {{SITENAME}}',
+'defemailsubject' => "{{SITENAME}} Corrièl de l'utilizaire « $1 »",
 'usermaildisabled' => 'Lo mandadís de corrièrs electronics entre utilizairers es desactivat',
 'usermaildisabledtext' => "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sur aquel wiki",
 'noemailtitle' => "Pas d'adreça electronica",
@@ -2123,6 +2176,11 @@ Las modificacions venentas d\'aquesta pagina e de la pagina de discussion associ
 'enotif_mailer' => 'Sistèma d’expedicion de notificacion de {{SITENAME}}',
 'enotif_reset' => 'Marcar totas las paginas coma visitadas',
 'enotif_impersonal_salutation' => 'Utilizaire de {{SITENAME}}',
+'enotif_subject_deleted' => 'La pagina $1 sus {{SITENAME}} es estada suprimida per {{GENDER:$2|$2}}',
+'enotif_subject_created' => 'La pagina $1 sus {{SITENAME}} es estada creada per {{GENDER:$2|$2}}',
+'enotif_subject_moved' => 'La pagina $1 sus {{SITENAME}} es estada renomenada per {{GENDER:$2|$2}}',
+'enotif_subject_restored' => 'La pagina $1 sus {{SITENAME}} es estada restablida per {{GENDER:$2|$2}}',
+'enotif_subject_changed' => 'La pagina $1 sus {{SITENAME}} es estada modificada per {{GENDER:$2|$2}}',
 'enotif_lastvisited' => 'Consultatz $1 per totes los cambiaments dempuèi vòstra darrièra visita.',
 'enotif_lastdiff' => 'Consultatz $1 per veire aquesta modificacion.',
 'enotif_anon_editor' => 'utilizaire anonim $1',
@@ -2152,6 +2210,8 @@ $UNWATCHURL
 
 Retorn e assisténcia :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Suprimir la pagina',
@@ -2191,6 +2251,8 @@ D'efectuar amb prudéncia.",
 'rollback' => 'Anullar las modificacions',
 'rollback_short' => 'Anullar',
 'rollbacklink' => 'anullar',
+'rollbacklinkcount' => 'revocar $1 {{PLURAL:$1|modificacion|modificacions}}',
+'rollbacklinkcount-morethan' => 'revocar mai de $1 {{PLURAL:$1|modificacion|modificacions}}',
 'rollbackfailed' => "L'anullacion a pas capitat",
 'cantrollback' => "Impossible d'anullar : l'autor es la sola persona a aver efectuat de modificacions sus aqueste article",
 'alreadyrolled' => "Impossible d'anullar la darrièra modificacion de l'article « [[:$1]] » efectuada per [[User:$2|$2]] ([[User talk:$2|Discutir]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
@@ -2210,12 +2272,14 @@ Clicatz sus « Precedent » e tornatz cargar la pagina d’ont venètz, puèi en
 
 # Protect
 'protectlogpage' => 'Istoric de las proteccions',
-'protectlogtext' => 'Vejatz las [[Special:ProtectedPages|directivas]] per mai d’informacion.',
+'protectlogtext' => 'Aquí una lista de las modificacions de las proteccions de paginas.
+Consultatz la [[Special:ProtectedPages|lista de las paginas protegidas]] per la lista de las proteccions actualament operacionalas.',
 'protectedarticle' => 'a protegit « [[$1]] »',
 'modifiedarticleprotection' => 'a modificat lo nivèl de proteccion de « [[$1]] »',
-'unprotectedarticle' => 'a desprotegit « [[$1]] »',
+'unprotectedarticle' => 'a suprimit la proteccion de « [[$1]] »',
 'movedarticleprotection' => 'a desplaçat los paramètres de proteccion dempuèi « [[$2]] » cap a « [[$1]] »',
 'protect-title' => 'Cambiar lo nivèl de proteccion de « $1 »',
+'protect-title-notallowed' => 'Veire lo nivèl de proteccion de « $1 »',
 'prot_1movedto2' => 'a renomenat [[$1]] en [[$2]]',
 'protect-legend' => 'Confirmar la proteccion',
 'protectcomment' => 'Rason :',
@@ -2229,9 +2293,9 @@ Clicatz sus « Precedent » e tornatz cargar la pagina d’ont venètz, puèi en
 'protect-locked-access' => "Avètz pas los dreches necessaris per modificar la proteccion de la pagina. Vaquí los reglatges actuals de la pagina '''$1''' :",
 'protect-cascadeon' => "Aquesta pagina es actualament protegida perque es inclusa dins {{PLURAL:$1|la pagina seguenta|las paginas seguentas}}, {{PLURAL:$1|qu'es estada protegida|que son estadas protegidas}} amb l’opcion « proteccion en cascada » activada. Podètz cambiar lo nivèl de proteccion d'aquesta pagina sens qu'aquò afècte la proteccion en cascada.",
 'protect-default' => 'Autorizar totes los utilizaires',
-'protect-fallback' => 'Necessita l’abilitacion «$1»',
-'protect-level-autoconfirmed' => 'Blocar los utilizaires novèls e los utilizaires anonims',
-'protect-level-sysop' => 'Administrators unicament',
+'protect-fallback' => 'Autorizar unicament los utilizaires amb lo drech « $1 »',
+'protect-level-autoconfirmed' => 'Autorizar unicament los utilizaires autoconfirmats',
+'protect-level-sysop' => 'Autorizar unicament los administrators',
 'protect-summary-cascade' => 'proteccion en cascada',
 'protect-expiring' => 'expira lo $1',
 'protect-expiring-local' => 'expira lo $1',
@@ -2323,9 +2387,9 @@ $1",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => "Contribucions d'aqueste contributor",
+'contributions' => "Contribucions de l'{{GENDER:$1|utilizaire|utilizaira}}",
 'contributions-title' => 'Tièra de las contribucions de l’utilizaire $1',
-'mycontris' => 'Mas contribucions',
+'mycontris' => 'Contribucions',
 'contribsub2' => 'Lista de las contribucions de $1 ($2). Las paginas que son estadas escafadas son pas afichadas.',
 'nocontribs' => 'Cap de modificacion correspondenta a aquestes critèris es pas estada trobada.',
 'uctop' => '(darrièra)',
@@ -2365,10 +2429,11 @@ La darrièra intrada del jornal dels blocatges es indicada çaijós a títol d
 'whatlinkshere-hideredirs' => '$1 redireccions',
 'whatlinkshere-hidetrans' => '$1 transclusions',
 'whatlinkshere-hidelinks' => '$1 ligams',
-'whatlinkshere-hideimages' => '$1 ligams de fichièrs',
+'whatlinkshere-hideimages' => '$1 los fichièrs ligats',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
+'autoblockid' => 'Blocatge automatic #$1',
 'block' => 'Blocar un utilizaire',
 'unblock' => 'Desblocar un utilizaire',
 'blockip' => 'Blocar en escritura',
@@ -2421,6 +2486,9 @@ a partir d'una adreça IP precedentament blocada.",
 'blocklist' => 'Utilizaires o adreças IP blocats',
 'ipblocklist' => 'Utilizaires o adreças IP blocats',
 'ipblocklist-legend' => 'Cercar un utilizaire blocat',
+'blocklist-target' => 'Cibla',
+'blocklist-expiry' => "Data d'expiracion",
+'blocklist-reason' => 'Motiu',
 'ipblocklist-submit' => 'Recercar',
 'ipblocklist-localblock' => 'Blocatge local',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|Autre blocatge|Autres blocatges}}',
@@ -2502,11 +2570,12 @@ Doblidetz pas de la desvarrolhar quand auretz acabat vòstra operacion de manten
 # Move page
 'move-page' => 'Tornar nomenar $1',
 'move-page-legend' => 'Tornar nomenar una pagina',
-'movepagetext' => "Utilizatz lo formulari çaijós per tornar nomenar una pagina, en desplaçant tot son istoric cap al nom novèl. Lo títol ancian vendrà una pagina de redireccion cap al títol novèl. Los ligams cap al títol de la pagina anciana seràn pas cambiats ; verificatz qu'aqueste desplaçament a pas creat de [[Special:DoubleRedirects|redireccion dobla]] o de [[Special:BrokenRedirects|redireccion copada]].
+'movepagetext' => "Utilizatz lo formulari çaijós per tornar nomenar una pagina, en desplaçant tot son istoric cap al nom novèl. Lo títol ancian vendrà una pagina de redireccion cap al títol novèl. Podètz metre a jorn automaticament las redireccions actualas que puntan cap al títol original. Se causissètz de lo far pas, asseguratz-vos de verificar tota [[Special:DoubleRedirects|redireccion dobla]] o [[Special:BrokenRedirects|redireccion copada]]. Avètz la responsabilitat de vos assegurar que los ligams contunhen de puntar cap a lor destinacion supausada.
 
-Avètz la responsabilitat de vos assegurar que los ligams contunhen de puntar cap a lor destinacion supausada. Una pagina serà pas desplaçada se la pagina del títol novèl existís ja, a mens qu'aquesta darrièra siá voida o en redireccion, e qu’aja pas d’istoric. Aquò vòl dire que podètz tornar nomenar una pagina cap a sa posicion d’origina s'avètz fach una error, mas que podètz pas escafar una pagina qu'existís ja amb aqueste procediment.
+Notatz que la pagina serà '''pas''' renomada s'existís ja una pagina amb lo novèl títol, levat se aquesta darrièra a un istoric de modificacions verge e es una simpla redireccion. Aquò permet de renomenar una pagina cap a sa posicion d'origina se lo desplaçament s'avera erronèu.
 
-'''ATENCION !''' Aquò pòt provocar un cambiament radical e imprevist per una pagina consultada frequentament. Asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
+'''ATENCION !'''
+Aquò pòt provocar un cambiament radical e imprevist per una pagina consultada frequentament. Asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
 'movepagetalktext' => "La pagina de discussion associada, se presenta, serà automaticament desplaçada amb ''' levat se :'''
 *Desplaçatz una pagina cap a un autre espaci,
 *Una pagina de discussion ja existís amb lo nom novèl, o
@@ -2633,9 +2702,11 @@ Totas las accions d’importacion interwiki son conservadas dins lo [[Special:Lo
 'import-interwiki-templates' => 'Enclure totes los modèls',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Espaci de noms de destinacion :',
+'import-interwiki-rootpage' => 'Pagina raiç de destinacion (opcionala):',
 'import-upload-filename' => 'Nom del fichièr :',
 'import-comment' => 'Comentari :',
-'importtext' => 'Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant l’esplech Special:Export, salvatz-lo sus vòstre disc dur e copiatz-lo aicí.',
+'importtext' => "Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant [[Special:Export|aisina d'exportacion]].
+Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'importstart' => 'Impòrt de las paginas...',
 'import-revision-count' => '$1 {{PLURAL:$1|version|versions}}',
 'importnopages' => "Cap de pagina d'importar.",
@@ -2786,9 +2857,36 @@ Aquò es probablament causat per un ligam sus lista negra que punta cap a un sit
 'spam_blanking' => 'Totas las versions que contenon de ligams cap a $1 son blanquidas',
 
 # Info page
+'pageinfo-title' => 'Informacions per « $1 »',
+'pageinfo-header-basic' => 'Informacions de basa',
+'pageinfo-header-edits' => 'Istoric de las modificacions',
+'pageinfo-header-restrictions' => 'Proteccion de la pagina',
+'pageinfo-header-properties' => 'Proprietats de la pagina',
+'pageinfo-display-title' => 'Títol afichat',
+'pageinfo-default-sort' => 'Clau de triada per defaut',
+'pageinfo-length' => 'Talha de la pagina (en octets)',
+'pageinfo-article-id' => 'Numèro de la pagina',
+'pageinfo-robot-policy' => 'Estatut de motor de recèrca',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'Pas indexable',
 'pageinfo-views' => 'Nombre de vistas',
-'pageinfo-edits' => "Nombre d'edicions",
-'pageinfo-authors' => "Nombre d'autors distints",
+'pageinfo-redirects-name' => 'Redireccions cap a aquesta pagina',
+'pageinfo-subpages-name' => "Sospaginas d'aquesta pagina",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redireccion|redireccions}}; $3 {{PLURAL:$3|non-redireccion|non-redireccions}})',
+'pageinfo-firstuser' => 'Creator de la pagina',
+'pageinfo-firsttime' => 'Data de creacion de la pagina',
+'pageinfo-lastuser' => 'Darrièr contributor',
+'pageinfo-lasttime' => 'Data de la darrièra modificacion',
+'pageinfo-edits' => 'Nombre total de modificacions',
+'pageinfo-authors' => "Nombre total d'autors distinctes",
+'pageinfo-recent-edits' => 'Nombre de modificacions recentas (dins los darrièrs $1)',
+'pageinfo-recent-authors' => "Nombre d'autors distinctes recents",
+'pageinfo-magic-words' => '{{PLURAL:$1|Mot magic|Mots magics}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria amagada|Categorias amagadas}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Modèl inclús|Modèls incluses}} ($1)',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage-yes' => 'Òc',
+'pageinfo-protect-cascading-yes' => 'Òc',
 
 # Skin names
 'skinname-standard' => 'Estandard',
@@ -2839,11 +2937,19 @@ Se l'executatz, vòstre sistèma pòt èsser compromés.",
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pagina|paginas}}',
 'file-info' => 'Talha del fichièr: $1, tipe MIME: $2',
 'file-info-size' => '$1 × $2 pixèl, talha del fichièr: $3, tipe MIME: $4',
+'file-info-size-pages' => '$1 × $2 pixèls, talha de fichièr: $3, tipe MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}',
 'file-nohires' => 'Pas de resolucion mai nauta disponibla.',
 'svg-long-desc' => 'Fichièr SVG, resolucion de $1 × $2 pixèls, talha : $3',
+'svg-long-desc-animated' => 'Fichièr SVG animat, talha $1 x $2 pixèls, talha del fichièr : $3',
 'show-big-image' => 'Imatge en resolucion mai nauta',
+'show-big-image-preview' => "Talha d'aqueste apercebut : $1.",
+'show-big-image-other' => '{{PLURAL:$2|Autra resolucion|Autras resolucions}} : $1.',
+'show-big-image-size' => '$1 × $2 pixèls',
 'file-info-gif-looped' => 'en bocla',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|imatge|imatges}}',
+'file-info-png-looped' => 'en bocla',
+'file-info-png-repeat' => 'jogat $1 {{PLURAL:$1|còp|còps}}',
+'file-info-png-frames' => '$1 {{PLURAL:$1|imatge|imatges}}',
 
 # Special:NewFiles
 'newimages' => 'Galariá dels fichièrs novèls',
@@ -2857,6 +2963,13 @@ Se l'executatz, vòstre sistèma pòt èsser compromés.",
 'bydate' => 'per data',
 'sp-newimages-showfrom' => 'Afichar los imatges novèls importats dempuèi lo $2, $1',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 segonda|$1 segondas}}',
+'minutes' => '{{PLURAL:$1|$1 minuta|$1 minutas}}',
+'hours' => '{{PLURAL:$1|$1 ora|$1 oras}}',
+'days' => '{{PLURAL:$1|$1 jorn|$1 jorns}}',
+'ago' => 'I a $1',
+
 # Bad image list
 'bad_image_list' => "Lo format es lo seguent :
 
@@ -2923,8 +3036,8 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-colorspace' => 'Espaci colorimetric',
 'exif-componentsconfiguration' => 'Significacion de cada compausanta',
 'exif-compressedbitsperpixel' => 'Mòde de compression de l’imatge',
-'exif-pixelydimension' => 'Largor d’imatge valida',
-'exif-pixelxdimension' => 'Nautor d’imatge valida',
+'exif-pixelydimension' => 'Largor de l’imatge',
+'exif-pixelxdimension' => 'Nautor de l’imatge',
 'exif-usercomment' => "Comentaris de l'utilizaire",
 'exif-relatedsoundfile' => 'Fichièr àudio associat',
 'exif-datetimeoriginal' => 'Data e ora de la generacion de donadas',
@@ -2938,9 +3051,9 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-exposureprogram' => 'Programa d’exposicion',
 'exif-spectralsensitivity' => 'Sensibilitat espectrala',
 'exif-isospeedratings' => 'Sensibilitat ISO',
-'exif-shutterspeedvalue' => 'Velocitat d’obturacion',
-'exif-aperturevalue' => 'Dobertura',
-'exif-brightnessvalue' => 'Luminositat',
+'exif-shutterspeedvalue' => "velocitat d’obturacion de l'APEX",
+'exif-aperturevalue' => "Dobertura de l'APEX",
+'exif-brightnessvalue' => 'Luminança APEX',
 'exif-exposurebiasvalue' => 'Correccion d’exposicion',
 'exif-maxaperturevalue' => 'Camp de dobertura maximal',
 'exif-subjectdistance' => 'Distància del subjècte',
@@ -3002,9 +3115,66 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-gpsareainformation' => 'Nom de la zòna GPS',
 'exif-gpsdatestamp' => 'Data GPS',
 'exif-gpsdifferential' => 'Correccion diferenciala GPS',
+'exif-jpegfilecomment' => 'Comentari de fichièr JPEG',
+'exif-keywords' => 'Mots claus',
+'exif-worldregiondest' => 'Region del mond representada',
+'exif-countrydest' => 'País representat',
+'exif-countrycodedest' => 'Còde del país representat',
+'exif-provinceorstatedest' => 'Província o Estat representat',
+'exif-citydest' => 'Vila representada',
+'exif-sublocationdest' => 'Partida de la vila representada',
+'exif-objectname' => 'Títol cort',
+'exif-specialinstructions' => 'Instruccions especialas',
+'exif-headline' => 'Títol',
+'exif-credit' => 'Credit / provesidor',
+'exif-source' => 'Font',
+'exif-editstatus' => "Estatut editorial de l'imatge",
+'exif-urgency' => 'Urgéncia',
+'exif-fixtureidentifier' => 'Nom element recurrent',
+'exif-locationdest' => 'Luòc representat',
+'exif-locationdestcode' => 'Còde del luòc representat',
+'exif-objectcycle' => 'Moment de la jornada al qual aqueste mèdia es destinat',
+'exif-contact' => 'Informacions de contacte',
+'exif-writer' => 'Autor',
+'exif-languagecode' => 'Lenga',
+'exif-iimversion' => 'version IIM',
+'exif-iimcategory' => 'Categoria',
+'exif-iimsupplementalcategory' => 'Categorias suplementàrias',
+'exif-datetimeexpires' => 'Utilizar pas aprèp',
+'exif-datetimereleased' => 'Paregut lo',
+'exif-originaltransmissionref' => 'Còde de localizacion de la transmission originala',
+'exif-identifier' => 'Identificant',
+'exif-lens' => 'Lentilha utilizada',
+'exif-serialnumber' => "Numèro de seria de l'aparelh de fòto",
+'exif-cameraownername' => "Proprietari de l'aparelh de fòto",
+'exif-label' => 'Libellat',
+'exif-rating' => 'Nòta (sus 5)',
+'exif-rightscertificate' => 'Certificat de gestion dels dreches',
+'exif-copyrighted' => "Estatut del drech d'autor",
+'exif-copyrightowner' => "Detentor del drech d'autor",
+'exif-usageterms' => "Condicions d'utilizacion",
+'exif-webstatement' => "Declaracion de dreches d'autor en linha",
+'exif-pngfilecomment' => 'Comentari de fichièr JPEG',
+'exif-disclaimer' => 'Desistiment',
+'exif-contentwarning' => 'Avertiment sul contengut',
+'exif-giffilecomment' => 'Comentari de fichièr GIF',
+'exif-intellectualgenre' => "Tipe d'element",
+'exif-subjectnewscode' => 'Còde del subjècte',
+'exif-scenecode' => 'Còde de scèna IPTC',
+'exif-event' => 'Eveniment representat',
+'exif-organisationinimage' => 'Organizacion representada',
+'exif-personinimage' => 'Persona representada',
+'exif-originalimageheight' => "Nautor de l'imatge abans d'èsser requadrada",
+'exif-originalimagewidth' => "Largor de l'imatge abans d'èsser requadrada",
 
 # EXIF attributes
 'exif-compression-1' => 'Sens compression',
+'exif-compression-2' => "CCITT Grop 3 Longor de l'encodatge Huffman modificat de dimension 1",
+'exif-compression-3' => 'CCITT Grop 3 encodatge del fax',
+'exif-compression-4' => 'CCITT Grop 4 encodatge del fax',
+
+'exif-copyrighted-true' => "Somés al drech d'autor",
+'exif-copyrighted-false' => 'Domeni public',
 
 'exif-unknowndate' => 'Data desconeguda',
 
@@ -3013,9 +3183,9 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-orientation-3' => 'Virada de 180°',
 'exif-orientation-4' => 'Inversada verticalament',
 'exif-orientation-5' => 'Virada de 90° dins lo sens antiorari e inversada verticalament',
-'exif-orientation-6' => 'Virada de 90° dins lo sens orari',
+'exif-orientation-6' => 'Virada de 90° dins lo sens antiorari',
 'exif-orientation-7' => 'Virada de 90° dins lo sens orari e inversada verticalament',
-'exif-orientation-8' => 'Virada de 90° dins lo sens antiorari',
+'exif-orientation-8' => 'Virada de 90° dins lo sens orari',
 
 'exif-planarconfiguration-1' => 'Donadas atenentas',
 'exif-planarconfiguration-2' => 'Donadas separadas',
@@ -3086,7 +3256,7 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-sensingmethod-7' => 'Captador trilinear',
 'exif-sensingmethod-8' => 'Captador de color linear sequencial',
 
-'exif-filesource-3' => 'Aparelh fotografic numeric',
+'exif-filesource-3' => 'Aparelh de fòto numeric',
 
 'exif-scenetype-1' => 'Imatge dirèctament fotografiat',
 
@@ -3136,6 +3306,10 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-gpslongitude-e' => 'Longitud Èst',
 'exif-gpslongitude-w' => 'Longitud Oèst',
 
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|mètre|mètres}} en dessús del nivèl de la mar',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|mètre|mètres}} en dejós del nivèl de la mar',
+
 'exif-gpsstatus-a' => 'Mesura en cors',
 'exif-gpsstatus-v' => 'Interoperabilitat de la mesura',
 
@@ -3152,19 +3326,58 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-gpsdestdistance-m' => 'Milas anglesas',
 'exif-gpsdestdistance-n' => 'Milas nauticas',
 
+'exif-gpsdop-excellent' => 'Excellenta ($1)',
+'exif-gpsdop-good' => 'Bona ($1)',
+'exif-gpsdop-moderate' => 'Mejana ($1)',
+'exif-gpsdop-fair' => 'Passable ($1)',
+'exif-gpsdop-poor' => 'Marrida ($1)',
+
+'exif-objectcycle-a' => 'Matin solament',
+'exif-objectcycle-p' => 'Serada solament',
+'exif-objectcycle-b' => 'Matin e ser',
+
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Direccion vertadièra',
 'exif-gpsdirection-m' => 'Nòrd magnetic',
 
+'exif-ycbcrpositioning-1' => 'Centrat',
+'exif-ycbcrpositioning-2' => 'Cosituat',
+
+'exif-dc-contributor' => 'Contributors',
+'exif-dc-coverage' => 'Portada espaciala o temporala del mèdia',
+'exif-dc-date' => 'Data(s)',
+'exif-dc-publisher' => 'Editor',
+'exif-dc-relation' => 'Mèdias connèxes',
+'exif-dc-rights' => 'dreches',
+'exif-dc-source' => 'Mèdia font',
+'exif-dc-type' => 'Tipe de mèdia',
+
+'exif-rating-rejected' => 'Regetat',
+
+'exif-isospeedratings-overflow' => 'Mai grand que 65535',
+
+'exif-iimcategory-ace' => 'Arts, cultura e lésers',
+'exif-iimcategory-clj' => 'Crime e drech',
+'exif-iimcategory-dis' => 'Catastròfas e accidents',
+'exif-iimcategory-fin' => 'Economia e afars',
 'exif-iimcategory-edu' => 'Educacion',
 'exif-iimcategory-evn' => 'Environament',
 'exif-iimcategory-hth' => 'Santat',
+'exif-iimcategory-hum' => 'Interès uman',
 'exif-iimcategory-lab' => 'Tribailh',
+'exif-iimcategory-lif' => 'Mòde de vida e de lésers',
 'exif-iimcategory-pol' => 'Politic',
 'exif-iimcategory-rel' => 'Religion e cresenças',
 'exif-iimcategory-sci' => 'Sciéncia e tecnologia',
+'exif-iimcategory-soi' => 'Questions socialas',
 'exif-iimcategory-spo' => 'Espòrts',
 'exif-iimcategory-war' => 'Guèrra, conflictes',
+'exif-iimcategory-wea' => 'Metèo',
+
+'exif-urgency-normal' => 'Normala ($1)',
+'exif-urgency-low' => 'Febla ($1)',
+'exif-urgency-high' => 'Nauta ($1)',
+'exif-urgency-other' => "Urgéncia definida per l'utilizaire ($1)",
 
 # External editor support
 'edit-externally' => 'Modificar aqueste fichièr en utilizant una aplicacion extèrna',
@@ -3369,7 +3582,7 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 * <strong class="mw-specialpagerestricted">en gras</strong> son restrenhudas.',
 'specialpages-group-maintenance' => 'Rapòrts de mantenença',
 'specialpages-group-other' => 'Autras paginas especialas',
-'specialpages-group-login' => 'Se connectar / s’enregistrar',
+'specialpages-group-login' => "S'identificar / s'inscriure",
 'specialpages-group-changes' => 'Darrièrs cambiaments e jornals',
 'specialpages-group-media' => 'Rapòrts dels fichièrs de mèdias e dels impòrts',
 'specialpages-group-users' => 'Utilizaires e dreches estacats',
@@ -3408,9 +3621,15 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 'tags-hitcount' => '$1 {{PLURAL:$1|cambiament|cambiaments}}',
 
 # Special:ComparePages
+'comparepages' => 'Comparar de paginas',
+'compare-selector' => 'Comparar las versions de las paginas',
 'compare-page1' => 'Pagina 1',
 'compare-page2' => 'Pagina 2',
+'compare-rev1' => 'Version 1',
+'compare-rev2' => 'Version 2',
 'compare-submit' => 'Comparar',
+'compare-invalid-title' => "Lo títol qu'avètz especificat es incorrècte.",
+'compare-title-not-exists' => "Lo títol qu'avètz especificat existís pas",
 
 # Database error messages
 'dberr-header' => 'Aqueste wiki a un problèma',
@@ -3434,12 +3653,51 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 'htmlform-selectorother-other' => 'Autre',
 
 # New logging system
+'revdelete-content-hid' => 'contengut amagat',
+'revdelete-summary-hid' => 'resumit de modificacion amagat',
+'revdelete-uname-hid' => 'nom d’utilizaire amagat',
+'revdelete-content-unhid' => 'contengut afichat',
+'revdelete-summary-unhid' => 'resumit de modificacion afichat',
+'revdelete-uname-unhid' => 'nom d’utilizaire afichat',
 'revdelete-restricted' => 'aplicar las restriccions als administrators',
 'revdelete-unrestricted' => 'restriccions levadas pels administrators',
+'logentry-move-move' => '$1 a deplaçat la pagina $3 cap a $4',
+'logentry-move-move-noredirect' => '$1 a deplaçat la pagina $3 cap a $4 sens daissar cap de redireccion',
+'logentry-move-move_redir' => '$1 a deplaçat la pagina $3 cap a $4 per dessús una redireccion',
+'logentry-move-move_redir-noredirect' => '$1 a deplaçat la pagina $3 cap a $4 per dessús una redireccion sens daissar cap de redireccion',
+'logentry-newusers-newusers' => "Lo compte d'utilizaire $1 es estat creat",
+'logentry-newusers-create' => "Lo compte d'utilizaire $1 es estat creat",
+'logentry-newusers-create2' => "Lo compte d'utilizaire $3 es estat creat per $1",
+'logentry-newusers-autocreate' => 'Lo compte $1 es estat creat automaticament',
 'newuserlog-byemail' => 'senhal mandat per corrièr electronic',
+'rightsnone' => '(cap)',
+
+# Feedback
+'feedback-subject' => 'Subjècte :',
+'feedback-message' => 'Messatge :',
+'feedback-cancel' => 'Anullar',
+'feedback-submit' => 'Mandar vòstres comentaris',
+'feedback-close' => 'Fach',
 
 # Search suggestions
 'searchsuggest-search' => 'Recercar',
 'searchsuggest-containing' => 'que conten...',
 
+# API errors
+'api-error-unknown-code' => 'Error desconeguda : « $1 »',
+'api-error-unknown-warning' => 'Avertiment desconegut : $1',
+'api-error-unknownerror' => 'Error desconeguda : « $1 »',
+'api-error-uploaddisabled' => 'Lo cargament es desactivat sus aqueste wiki.',
+
+# Durations
+'duration-seconds' => '$1 segonda{{PLURAL:$1||s}}',
+'duration-minutes' => '$1 minuta{{PLURAL:$1||s}}',
+'duration-hours' => '$1 ora{{PLURAL:$1||s}}',
+'duration-days' => '$1 jorn{{PLURAL:$1||s}}',
+'duration-weeks' => '$1 setmana{{PLURAL:$1||s}}',
+'duration-years' => '$1 annada{{PLURAL:$1||s}}',
+'duration-decades' => '$1 decenni{{PLURAL:$1||s}}',
+'duration-centuries' => '$1 sègle{{PLURAL:$1||s}}',
+'duration-millennia' => '$1 milleni{{PLURAL:$1||s}}',
+
 );
index 89cb9af..6e9b9cb 100644 (file)
@@ -389,6 +389,7 @@ $messages = array(
 'newwindow' => '(ଏହା ନୂଆ ଉଇଣ୍ଡୋରେ ଖୋଲିବ)',
 'cancel' => 'ନାକଚ',
 'moredotdotdot' => 'ଅଧିକ...',
+'morenotlisted' => 'ଆଉ ଅଧିକ ତାଲିକାଭୁକ୍ତ ହୋଇନାହିଁ...',
 'mypage' => 'ପୃଷ୍ଠା',
 'mytalk' => 'ଆଲୋଚନା',
 'anontalk' => 'ଏହି ଆଇ.ପି. ଠିକଣା ଉପରେ ଆଲୋଚନା',
@@ -771,6 +772,7 @@ continue using your old password.',
 # E-mail sending
 'php-mail-error-unknown' => 'PHP ର ମେଲ() କାମରେ ଅଜଣା ଅସୁବିଧା ।',
 'user-mail-no-addy' => 'ଏକ ଇ-ମେଲ ଠିକଣା ବିନା ଇ-ମେଲ ପଠାଇବାକୁ ଚେଷ୍ଟା କଲୁଁ ।',
+'user-mail-no-body' => 'ଏକ ଖାଲି କିମ୍ବା ଅଦରକାରୀ ଛୋଟ ଲେଖା ଥିବା ମେଲ ପଠେଇବାକୁ ଚେଷ୍ଟା କରିଥିଲେ',
 
 # Change password dialog
 'resetpass' => 'ପାସୱାର୍ଡ଼ ବଦଳାନ୍ତୁ',
@@ -1048,6 +1050,7 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'edit-already-exists' => 'ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି କରିପାରିଲୁଁ ନାହିଁ ।
 ଏହା ଅଗରୁ ଅଛି ।',
 'defaultmessagetext' => 'ଡିଫଲ୍ଟ ମେସେଜ ଲେଖାଗୁଡିକ',
+'content-failed-to-parse' => '$1 ପ୍ରକାର ପାଇଁ $2 ଲେଖାକୁ ବର୍ଣ୍ଣନା କରିପାରିଲା ନାହିଁ: $3',
 'invalid-content-data' => 'ଅବୈଧ ଆଧାର ତଥ୍ୟ',
 'content-not-allowed-here' => '"$1" ବିଷୟଗୁଡିକ [[$2]]ପୃଷ୍ଠାରେ ରହିପାରିବ ନାହିଁ',
 
@@ -1267,6 +1270,10 @@ $1",
 'editundo' => 'ପଛକୁ ଫେରିବା',
 'diff-multi' => '({{PLURAL:$2|ଜଣେ ବ୍ୟବହାରକାରୀ|$2 ଜଣ ବ୍ୟବହାରକାରୀ}}ଙ୍କ ଦେଇ ହୋଇଥିବା {{PLURAL:$1|ଗୋଟିଏ ମଝି ସଙ୍କଳନ|$1ଟି ମଝି ସଙ୍କଳନ}} ଦେଖାଯାଉନାହିଁ)',
 'diff-multi-manyusers' => '($2 {{PLURAL:$2|ଜଣ|ଜଣ}} ସଭ୍ୟଙ୍କ ଦେଇ କରାଯାଇଥିବା {{PLURAL:$1|ଗୋଟିଏ ମଝି ସଂସ୍କରଣ|$1 ଗୋଟି ମଝି ସଂସ୍କରଣମାନ}} ଦେଖାଯାଉ ନାହିଁ)',
+'difference-missing-revision' => '($1) {{PLURAL:$2|was|were}}ର ଭିନ୍ନତା {{PLURAL:$2|One revision|$2 revisions}} ମିଳିଲା ନାହିଁ ।
+
+ପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।
+ଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।',
 
 # Search results
 'searchresults' => 'ଖୋଜା ଫଳାଫଳ',
@@ -1537,6 +1544,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'right-writeapi' => 'API ଲେଖାର ବ୍ୟବହାର',
 'right-delete' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
 'right-bigdelete' => 'ବଡ଼ ଇତିହାସ ନଥିବା ପୃଷ୍ଠାସବୁକୁ ଲିଭାଇଦେବେ',
+'right-deletelogentry' => 'କୌଣସି ଏକ ତାଲିକା ବିବରଣୀକୁ ଲିଭାଇବେ ଏବଂ ଏବଂ ଲିଭାଇବାରୁ ବାରଣ କରିବେ',
 'right-deleterevision' => 'ଏକ ପୃଷ୍ଠାର ନିର୍ଦ୍ଦିଷ୍ଟ ସଙ୍କଳନମାନ ଲିଭାଇବେ ଓ ଲିଭାଇବାରୁ ରୋକିବେ',
 'right-deletedhistory' => 'ଯୋଡ଼ାଯାଇଥିବା ଲେଖାକୁ ବାଦ ଦେଇ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାର ଇତିହାସ ଦେଖିବେ',
 'right-deletedtext' => 'ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଓ ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଭିତରର ସଙ୍କଳନର ବଦଳ ଦେଖିବେ',
@@ -1573,13 +1581,13 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'right-sendemail' => 'ବାକି ସଭ୍ୟ ମାନଙ୍କୁ ଇ-ମେଲ ପଠାଇବେ',
 'right-passwordreset' => 'ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ ଇମେଲ କରିବେ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ବ୍ୟବହାରକାରୀ ତିଆରି ଲଗ',
+'newuserlogpagetext' => 'ସଭ୍ୟଙ୍କର ଖାତା ଗଠନ ପାଇଁ ଏକ ଇତିହାସ ଅଛି ।',
+
 # User rights log
 'rightslog' => 'ସଭ୍ୟଙ୍କ ଅଧିକାରର ଲଗ',
 'rightslogtext' => 'ସଭ୍ୟଙ୍କ ଅଧିକାର ବଦଳର ଏହା ଏକ ଇତିହାସ ।',
-'rightslogentry' => '$1 ପାଇଁ ଗୋଠ ସଭ୍ୟପଦର ଅବସ୍ଥା $2 ରୁ $3କୁ ବଦଳାଇଦିଆଗଲା',
-'rightslogentry-autopromote' => '$2 ରୁ $3କୁ ଆପେଆପେ ଉନ୍ନୀତ କରାଗଲା',
-'logentry-rights-rights-legacy' => '$1, $3 ପାଇଁ ଗୋଷ୍ଠୀ ସଭ୍ୟପଦ ବଦଳାଇଛି',
-'rightsnone' => '(କିଛି ନାହିଁ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ଏହି ପୃଷ୍ଠାଟି ପଢ଼ିବେ',
@@ -1826,7 +1834,18 @@ $1',
 'backend-fail-closetemp' => 'ଅସ୍ଥାୟୀ ଫାଇଲ ବନ୍ଦ କରିହେଲା ନାହିଁ ।',
 'backend-fail-read' => '$1 ଫାଇଲଟି ପଢ଼ିପାରିଲୁ ନାହିଁ ।',
 'backend-fail-create' => '$1 ଫାଇଲରେ କିଛି ଲେଖି ହେଲା ନାହିଁ ।',
+'backend-fail-maxsize' => '"$1" ଫାଇଲଟିକୁ ଲେଖି ପାରିଲା ନାହିଁ କାରଣ ଏହା {{PLURAL:$2|one byte|$2 bytes}}ଠାରୁ ବଡ ।',
+'backend-fail-readonly' => 'ସାଇତାଲେଖା "$1" କେବଳ ପଢିହେବ । କାରଣଟି ହେଉଛି: "\'\'$2\'\'"',
+'backend-fail-synced' => 'ଭିତର ସାଇତା ମଧ୍ୟରେ "$1"ଏକ ଅସ୍ଥାୟୀ ଫାଇଲ',
+'backend-fail-connect' => 'ସାଇତିବା ଧାରକ "$1" ସହ ଯୋଗାଯୋଗ ହୋଇ ପାରିଲା ନାହିଁ ।',
+'backend-fail-internal' => 'ସାଇତା ଧାରକ "$1" କିଛି ଅଜଣା ଅସୁବିଧା ଉପୁଜିଲା ।',
 'backend-fail-contenttype' => '"$1"ରେ ଥିବା ସାଇତା ପାଇଁ ଥିବା ଫାଇଲର ବିଷୟବସ୍ତୁର ପ୍ରକାର ଗୁଡିକ ଜଣାପଡୁନି ।',
+'backend-fail-batchsize' => 'ସାଇତା ଧାରକକୁ  $1 ଫାଇଲର {{PLURAL:$1|operation|operations}} ଏକ ଗୋଛା ଦିଆଯାଇଥିଲା; ସୀମା ହେଉଛି $2 {{PLURAL:$2|operation|operations}} ।',
+'backend-fail-usable' => 'ଅନୁମତି ନଥିବାରୁ କିମ୍ବା ଧାରକ/ସୂଚୀ ନଥିବାରୁ"$1" ଫାଇଲଟିକୁ ପଢି କିମ୍ବା ଲେଖି ହେଲାନି ।',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'ସାଇତା ଧାରକ "$1" ପାଇଁ ପାଠ୍ୟ ଡାଟାବେସକୁ ସଂଯୋଗ କରିହେଲାନି ।',
+'filejournal-fail-dbquery' => 'ସାଇତା ଧାରକ "$1" ପାଇଁ ପାଠ୍ୟ ଡାଟାବେସକୁ ଅପଡେଟ କରିହେଲାନି ।',
 
 # Lock manager
 'lockmanager-notlocked' => 'କିଳାଯାଇଥିବା "$1"କୁ ଖୋଲିପାରିଲୁ ନାହିଁ; ଏହା ପ୍ରକୃତରେ କିଳାଯାଇନାହିଁ ।',
@@ -1837,6 +1856,7 @@ $1',
 'lockmanager-fail-releaselock' => '"$1" ଚାବି ପାଇଁ ତାଲା ମିଳିଲା ନାହିଁ ।',
 'lockmanager-fail-db-bucket' => '$1 ଝୁଡ଼ିରେ ଥିବା ସବୁ କିଳାଯାଇଥିବା ଡାଟାବେସ ସହ ଯୋଗାଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ ।',
 'lockmanager-fail-db-release' => '$1 ଡାଟାବେସରେ ଲାଗିଥିବା ତାଲା ଖୋଲାଯାଇପାରିଲା ନାହିଁ ।',
+'lockmanager-fail-svr-acquire' => '$1 ସର୍ଭରରେ ଲାଗିଥିବା ତାଲା ଖୋଲାଯାଇପାରିଲା ନାହିଁ ।',
 'lockmanager-fail-svr-release' => '$1 ସର୍ଭରରେ ଲାଗିଥିବା ତାଲା ଖୋଲାଯାଇପାରିଲା ନାହିଁ ।',
 
 # ZipDirectoryReader
@@ -1947,11 +1967,16 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 ଅଧିକ ଜାଣିବା ନିମନ୍ତେ ଦୟାକରି [$2 ଫାଇଲ ବିବରଣୀ ପୃଷ୍ଠା ଦେଖନ୍ତୁ] ।',
 'sharedupload-desc-here' => 'ଏହି ଫାଇଲଟି $1 ଠାରୁ ଓ ଏହା ଅନ୍ୟ ପ୍ରକଳ୍ପରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।
 ଏହାର ବିବରଣୀ [$2 ଫାଇଲ ବିବରଣୀ ପୃଷ୍ଠାରେ] ତଳେ ରହିଅଛି ।',
+'sharedupload-desc-edit' => 'ଏହି ଫାଇଲଟି $1ରୁ ଆସିଛି ଏବଂ ଏହା ଅନ୍ୟ ପ୍ରକଳ୍ପଗୁଡିକରେ ବ୍ୟବହୃତ ହୋଇଥାଇ ପାରେ ।
+ଆପଣ ଏହାର ବର୍ଣ୍ଣନାଟିକୁ ଏହାର [$2 file description page]ରେ ବଦଳାଇ ପାରନ୍ତି ।',
+'sharedupload-desc-create' => 'ଏହି ଫାଇଲଟି $1ରୁ ଆସିଛି ଏବଂ ଏହା ଅନ୍ୟ ପ୍ରକଳ୍ପଗୁଡିକରେ ବ୍ୟବହୃତ ହୋଇଥାଇ ପାରେ ।
+ଆପଣ ଏହାର ବର୍ଣ୍ଣନାଟିକୁ ଏହାର [$2 file description page]ରେ ବଦଳାଇ ପାରନ୍ତି ।',
 'filepage-nofile' => 'ଏହି ନାମରେ କୌଣସିଟି ଫାଇଲ ନାହିଁ ।',
 'filepage-nofile-link' => 'ଏହି ନାମରେ କିଛି ବି ଫାଇଲ ନାହିଁ, କିନ୍ତୁ ଆପଣ ଏହା [$1 ଅପଲୋଡ଼] କରିପାରିବେ ।',
 'uploadnewversion-linktext' => 'ଏହି ଫାଇଲର ନୂଆ ସଙ୍କଳନଟିଏ ଅପଲୋଡ଼ କରିବେ',
 'shared-repo-from' => '$1 ଠାରୁ',
 'shared-repo' => 'ଏକ ବଣ୍ଟା ଭଣ୍ଡାର',
+'upload-disallowed-here' => 'ଆପଣ ଏହି ଫାଇଲଟିକୁ ବଦଳାଇପାରିବେ ନାହିଁ ।',
 
 # File reversion
 'filerevert' => '$1କୁ ଫେରାଇଦେବା',
@@ -2061,6 +2086,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|ବାଇଟ}}',
 'ncategories' => '$1 {{PLURAL:$1|ଶ୍ରେଣୀ|ଶ୍ରେଣୀସମୂହ}}',
+'ninterwikis' => '{{PLURAL:$1|interwiki|interwikis}} $1',
 'nlinks' => '$1 ଟି {{PLURAL:$1|ଲିଙ୍କ|ଲିଙ୍କ}}',
 'nmembers' => '$1 {{PLURAL:$1|member|ସଭ୍ୟ}}',
 'nrevisions' => '$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}',
@@ -2081,12 +2107,15 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'wantedpages' => 'ଦରକାରି ପୃଷ୍ଠା',
 'wantedpages-badtitle' => '$1 ଉତ୍ତରସବୁରେ ଥିବା ଭୁଲ ଟାଇଟଲ',
 'wantedfiles' => 'ଦରକାରି ଫାଇଲ',
+'wantedfiletext-cat' => 'ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ । ଅଧିକନ୍ତୁ, ପ୍ରକୃତରେ ନଥିବା ଫାଇଲଗୁଡିକର ପୃଷ୍ଠାଗୁଡିକ [[:$1]]ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।',
+'wantedfiletext-nocat' => 'ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ ।',
 'wantedtemplates' => 'ଦରକାରୀ ଛାଞ୍ଚ',
 'mostlinked' => 'ଅଧିକ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା',
 'mostlinkedcategories' => 'ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଶ୍ରେଣୀ',
 'mostlinkedtemplates' => 'ବେଶୀ ଯୋଡ଼ାଯାଇଥିବା ଛାଞ୍ଚ',
 'mostcategories' => 'ଅଧିକ ଶ୍ରେଣୀ ଥିବା ପୃଷ୍ଠା',
 'mostimages' => 'ଫାଇଲରେ ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଥିବା',
+'mostinterwikis' => 'ସବୁଠାରୁ ଅଧିକ ଉଇକିଥିବା ପୃଷ୍ଠାଗୁଡିକ',
 'mostrevisions' => 'ସବୁଠାରୁ ଅଧିକ ସଙ୍କଳନ ଥିବା ପୃଷ୍ଠାସମୂହ',
 'prefixindex' => 'ଆଗରୁ କିଛି ଯୋଡ଼ା ସହ ଥିବା ସବୁ ଫରଦସବୁ',
 'prefixindex-namespace' => 'ଉପସର୍ଗ ଲାଗିଥିବା ସବୁଯାକ ପୃଷ୍ଠା ($1 ଗୋଟି ନେମସ୍ପେସ)',
@@ -2140,6 +2169,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 ଆପଣ ଲଗର ପ୍ରକାର ଅନୁସାରେ ବି ସେସବୁକୁ ବାଛି ପାରିବେ । ଇଉଜରନାଆଁଟି ଛୋଟ ଓ ବଡ଼ ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ, ପୃଷ୍ଠାର ନାଆଁ ସବୁ ବି ଛୋଟ ଓ ବଡ଼ ଇଂରାଜି ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ ।',
 'logempty' => 'ଲଗରେ ଥିବା ଲେଖା ସହ ମେଳଖାଉ ନାହିଁ ।',
 'log-title-wildcard' => 'ଏହି ଲେଖାରେ ଆରମ୍ଭ ହୋଇଥିବା ଶିରୋନାମାସବୁ ଖୋଜିବେ',
+'showhideselectedlogentries' => 'ବାଛିଥିବା ତାଲିକାକୁ ଦେଖାଇବେ/ଲୁଚାଇବେ',
 
 # Special:AllPages
 'allpages' => 'ସବୁ ପୃଷ୍ଠା',
@@ -2161,6 +2191,8 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'allpages-hide-redirects' => 'ପୁନଃପ୍ରେରଣସମୂହକୁ ଲୁଚାଇବେ',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଦେଖୁଛନ୍ତି, ଯାହାକି $1 ପୁରୁଣା ହୋଇଥାଇପାରେ ।',
+'cachedspecial-viewing-cached-ts' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଦେଖୁଛନ୍ତି, ଯାହାକି ପ୍ରକୃତରେ ସଂପୂର୍ଣ ନ ହୋଇଥାଇପାରେ ।',
 'cachedspecial-refresh-now' => 'ନୂତନତମ ଦେଖନ୍ତୁ ।',
 
 # Special:Categories
@@ -2184,7 +2216,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'linksearch-ok' => 'ଖୋଜିବା',
 'linksearch-text' => '"*.wikipedia.org" ପରି ୱାଇଲ୍ଡକାର୍ଡ଼ର ବ୍ୟବହାର କରାଯାଇଥାଇ ପାରେ ।
 ଏକ ଉଚ୍ଚକୋଟୀର ଡୋମେନ ଲୋଡ଼ା, ଯଥା "*.org".<br />
-ଅନୁମୋଦିତ ପ୍ରଟୋକଲ: <code>$1</code> (ଯଦି କୌଣସି ପ୍ରୋଟୋକଲ ଦିଆଯାଇନଥାଏ ତେବେ ଆପେ ଆପେ http:// ହୋଇଯାଇଥାଏ) ।',
+ଅନୁମୋଦିତ {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (ଯଦି କୌଣସି ପ୍ରୋଟୋକଲ ଦିଆଯାଇନଥାଏ ତେବେ ଆପେ ଆପେ http:// ହୋଇଯାଇଥାଏ) ।',
 'linksearch-line' => '$1 ଟି $2ରୁ ଯୋଡ଼ାଯାଇଅଛି ।',
 'linksearch-error' => 'କେବଳ ହୋଷ୍ଟ ନାମର ଆରମ୍ଭରେ ୱାଇଲ୍ଡକାର୍ଡ଼ ଦେଖାଯିବ ।',
 
@@ -2203,10 +2235,6 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'activeusers-hidesysops' => 'ପରିଚାଳକମାନଙ୍କୁ ଲୁଚାଇବେ',
 'activeusers-noresult' => 'ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ବ୍ୟବହାରକାରୀ ତିଆରି ଲଗ',
-'newuserlogpagetext' => 'ସଭ୍ୟଙ୍କର ଖାତା ଗଠନ ପାଇଁ ଏକ ଇତିହାସ ଅଛି ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ସଭ୍ୟ ଗୋଠ ଅଧିକାରସମୂହ',
 'listgrouprights-summary' => 'ତଳେ ଉଇକି ସ୍ଥିର କରାଯାଇଥିବା ଏକ ଏକ ବ୍ୟବହାରକାରୀ ଗୋଠର ତାଲିକା ଦିଆଯାଇଛି, ସେଥିରେ ସେମାନଙ୍କ ବ୍ୟବହାର ଅଧିକାର ବାବଦରେ ମଧ୍ୟ ଦିଆଯାଇଛି ।
@@ -2302,6 +2330,16 @@ 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 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ଲିଭାଯାଇଛି, $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_created' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ତିଆରି କରାଯାଇଛି, ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_moved' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ଘୁଞ୍ଚାଯାଇଛି, ଏବେକାର ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_restored' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ପୁନଃସ୍ଥାପନ କରାଯାଇଛି, ଏବେକାର ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_changed' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ବଦଳାଯାଇଛି, ଏବେକାର ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
 'enotif_lastvisited' => 'ଆପଣଙ୍କ ଶେଷ ଦେଖଣା ପରେ ହୋଇଥିବା ବଦଳସବୁକୁ  ଦେଖିବା ନିମନ୍ତେ $1 ଦେଖନ୍ତୁ ।',
 'enotif_lastdiff' => 'ଏହି ବଦଳ ଦେଖିବା ପାଇଁ $1 ଦେଖନ୍ତୁ ।',
 'enotif_anon_editor' => 'ବେନାମି ସଭ୍ୟ $1',
@@ -2326,6 +2364,8 @@ wiki: $PAGEEDITOR_WIKI
 --
 ଆପଣା ଇ-ମେଲ ସୂଚନା ସଜାଣି ଦେଖିବା ନିମନ୍ତେ
 {{canonicalurl:{{#special:Preferences}}}} ଦେଖନ୍ତୁ',
+'created' => 'ତିଆରି କରାଗଲା',
+'changed' => 'ବଦଳାଗଲା',
 
 # Delete
 'deletepage' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
@@ -2365,6 +2405,8 @@ wiki: $PAGEEDITOR_WIKI
 'rollback' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ',
 'rollback_short' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ',
 'rollbacklink' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ',
+'rollbacklinkcount' => '{{PLURAL:$1|edit|edits}} $1 ପଛକୁ ଫେରାଇବେ',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|edit|edits}} $1ରୁ ଅଧିକ ପଛକୁ ଫେରାଇବେ',
 'rollbackfailed' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବିଫଳ ହେଲା',
 'cantrollback' => 'ବଦଳକୁ ପଛକୁ ଫେରାଇ ପାରିବେ ନାହିଁ;
 ଶେଷ ଦାତାଜଣଙ୍କ ଏହି ପୃଷ୍ଠାର ଜଣେମାତ୍ର ଦାତା ।',
@@ -2397,6 +2439,8 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'prot_1movedto2' => '[[$1]] ପୃଷ୍ଠାଟି [[$2]] କୁ ଘୁଞ୍ଚାଇ ଦିଆଗଲା',
 'protect-badnamespace-title' => 'କିଳାହୋଇନଥିବା ନେମସ୍ପେସ',
 'protect-badnamespace-text' => 'ଏହି ନେମସ୍ପେସଥିବା ପୃଷ୍ଠାସବୁକୁ ସାଇତାଯାଇପାରିବ ନାହିଁ ।',
+'protect-norestrictiontypes-text' => 'ଏହି ପୃଷ୍ଠାଟିକୁ କିଳାଯାଇପାରିବ ନାହିଁ କାରଣ ଏହାର କୌଣସି ସୁରକ୍ଷା ପ୍ରକାର ନାହିଁ ।',
+'protect-norestrictiontypes-title' => 'କିଳାଯାଇପାରୁନଥିବା ପୃଷ୍ଠା',
 'protect-legend' => 'କିଳଣାକୁ ଥୟ କରିବେ',
 'protectcomment' => 'କାରଣ:',
 'protectexpiry' => 'ଅଚଳ ହେବ:',
@@ -2794,6 +2838,7 @@ $1ର ଅଟକ ପାଇଁ ଦିଆଯାଇଥିବା କାରଣଟି 
 'immobile-target-namespace-iw' => 'ଇଣ୍ଟରଉଇକି ଲିଙ୍କ ପୃଷ୍ଠା ଘୁଞ୍ଚାଇବା ନିମନ୍ତେ ଏକ ବୈଧ ଲକ୍ଷସ୍ଥଳ ନୁହେଁ ।',
 'immobile-source-page' => 'ଏହି ପୃଷ୍ଠାଟି ଘୁଞ୍ଚାଯୋଗ୍ୟ ନୁହେଁ ।',
 'immobile-target-page' => 'ଦେହି ମୁକାମ ନାମକୁ ଘୁଞ୍ଚାଇହେବ ନାହିଁ ।',
+'bad-target-model' => 'ଆଶାକରାଯାଇଥିବା ଲକ୍ଷସ୍ଥଳୀଟି ଅଲଗା ପ୍ରକାର ଶୈଳୀ ବ୍ୟବହାର କରୁଛି । $1ରୁ $2କୁ ବଦଳାଇ ପାରିବ ନାହିଁ ।',
 'imagenocrossnamespace' => 'ଫାଇଲଟିକୁ ଅଣ-ଫାଇଲ ନେମସ୍ପେସକୁ ଘୁଞ୍ଚାଇହେବ ନାହିଁ',
 'nonfile-cannot-move-to-file' => 'ଅଣ-ଫାଇଲଟିକୁ ଫାଇଲ ନେମସ୍ପେସକୁ ଘୁଞ୍ଚାଇହେବ ନାହିଁ',
 'imagetypemismatch' => 'ନୂଆ ଫାଇଲ ଏକ୍ସଟେନସନ ଏହାର ପ୍ରକାର ସାଙ୍ଗରେ ମେଳ ଖାଉନାହିଁ',
@@ -2817,6 +2862,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 ପୃଷ୍ଠା ରପ୍ତାନି କରିବା ନିମନ୍ତେ ତଳେ ଥିବା ଟେକ୍ସଟ ଘରେ ନାମ ଦିଅନ୍ତୁ, ଧାଡ଼ିପ୍ରତି ଗୋଟିଏ ଲେଖାଏଁ ନାମ, ଆଉ ଆପଣ ଏବେକାର ସଂସ୍କରଣ ଚାହୁଁଛନ୍ତି ବା ପୁରୁଣା ସଂସ୍କରଣମାନ ଚାହୁଁଛନ୍ତି, ପୃଷ୍ଠାର ଇତିହାସ ସହ, କିମ୍ବା ଶେଷ ବଦଳ ବାବଦରେ ଏକ ବିବରଣୀ ସହ ଏବେକାର ସଂସ୍କରଣ ଦିଅନ୍ତୁ ।
 
 ଶେଷ କ୍ଷେତ୍ରରେ ଆପଣ ଏକ ଲିଙ୍କ ବ୍ୟବହାର କରିପାରିବେ, ଯଥା ଏକ ପୃଷ୍ଠା ପାଇଁ [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] "[[{{MediaWiki:Mainpage}}]]" ।',
+'exportall' => 'ସମସ୍ତ ପୃଷ୍ଠାଗୁଡିକୁ ରପ୍ତାନି କରିବେ',
 'exportcuronly' => 'କେବଳ ଏବେକର ସଂସ୍କରଣରେ ଭରିଥାଏ, ପୁରା ଇତିହାସରେ ନୁହେଁ',
 'exportnohistory' => "----
 '''ସୂଚନା:''' ଦେଖଣାରେ ଅସୁବିଧା ହେବା କାରଣରୁ ପୃଷ୍ଠାର ପୁରା ଇତିହାସ ରପ୍ତାନି କରିବା ଅଚଳ କରାଯାଇଛି ।",
@@ -2872,6 +2918,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-interwiki-templates' => 'ସବୁଯାକ ଛାଞ୍ଚ ଏହା ଭିତରେ ରଖିବେ',
 'import-interwiki-submit' => 'ଆମଦାନୀ',
 'import-interwiki-namespace' => 'ଲକ୍ଷ ନେମସ୍ପେସ:',
+'import-interwiki-rootpage' => 'ଲକ୍ଷସ୍ଥଳୀର ମୂଳ ପୃଷ୍ଠା(ଇଛାଧୀନ):',
 'import-upload-filename' => 'ଫାଇଲ ନାମ:',
 'import-comment' => 'ମତାମତ:',
 'importtext' => '[[Special:Export|ରପ୍ତାନି ସୁବିଧା]] ବ୍ୟବହାର କରି ମୂଳ ଉଇକିରୁ ଫାଇଲଟି ରପ୍ତାନି କରନ୍ତୁ ।
@@ -2905,6 +2952,13 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-invalid-interwiki' => 'ଦିଆଯାଇଥିବା ଉଇକିରୁ ଆହରଣ କରାଯାଇପାରିବ ନାହିଁ ।',
 'import-error-edit' => '"$1" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ବଦଳାଇବା ଅଧିକାର ନାହିଁ ।',
 'import-error-create' => '"$1" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ତିଆରିକରିବା ଅଧିକାର ନାହିଁ ।',
+'import-error-interwiki' => '"$1"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମ ବାହାରଲିଙ୍କରେ ଆଗରୁ ଅଛି(ଉଇକିଗୁଡିକ ମଧ୍ୟରେ) ।',
+'import-error-special' => '"$1"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହା ଏକ ବିଶେଷ ନେମସ୍ପେସରେ ଅଛି ଯାହା ପୃଷ୍ଠାଗୁଡିକୁ ଅନୁମତି ଦିଏ ନାହିଁ ।',
+'import-error-invalid' => '"$1"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମଟି ଅବୈଧ ।',
+'import-error-unserialize' => '"$1"ପୃଷ୍ଠାର $2 ପୁନରାବୃତିଟି ଅଣତାଲିକାଭୁକ୍ତ କରାଯାଇପାରିବ ନାହିଁ । ପୁନରାବୃତିଟି $3 ପ୍ରକାର ବ୍ୟବାହର କରିବା ପାଇଁ $4ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।',
+'import-options-wrong' => 'ଭୁଲ {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'ଦିଆଯାଇଥିବା ମୂଳ ପୃଷ୍ଠାର ଶୀର୍ଷକଟି ଅବୈଧ ଅଟେ ।',
+'import-rootpage-nosubpage' => 'ମୂଳ ପୃଷ୍ଠାର "$1" ନେମସ୍ପେସ ଉପପୃଷ୍ଠାର ଅନୁମତି ଦିଏନାହିଁ ।',
 
 # Import log
 'importlogpage' => 'ଇତିହାସ ଆହରଣ',
@@ -2914,6 +2968,16 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-logentry-interwiki' => '$1 କୁ ଟ୍ରାନ୍ସଉଇକି କରାଗଲା',
 'import-logentry-interwiki-detail' => '$2 ଭିତରୁ $1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}',
 
+# JavaScriptTest
+'javascripttest' => 'ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ',
+'javascripttest-title' => 'ଚାଲୁଥିବା $1 ପରଖଗୁଡିକ',
+'javascripttest-pagetext-noframework' => 'ଏହି ପୃଷ୍ଠାଟି ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ ପାଇଁ ସଂରକ୍ଷଣ କରି ରଖାଯାଇଛି ।',
+'javascripttest-pagetext-unknownframework' => '"$1" ଅଜଣା ପରଖ ଗତିବିଧି ।',
+'javascripttest-pagetext-frameworks' => 'ଦୟାକରି ନିମ୍ନରେ ଥିବା ଏକ ପରଖ ପ୍ରକ୍ରିୟାକୁ ବାଛନ୍ତୁ :$1',
+'javascripttest-pagetext-skins' => 'ଏହି ପରଖକୁ ଚାଲୁ କରିବା ପାଇଁ ଏକ ଆବରଣ ବାଛନ୍ତୁ ।',
+'javascripttest-qunit-intro' => 'mediawiki.orgରେ [$1 testing documentation]କୁ ଦେଖନ୍ତୁ ।',
+'javascripttest-qunit-heading' => 'ମେଡିଆଉଇକି ଜାଭାସ୍କ୍ରିପ୍ଟ Qunit ପରଖ ପ୍ରକ୍ରିୟା',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠା',
 'tooltip-pt-anonuserpage' => 'ଆପଣ ଯେଉଁ IP ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି',
@@ -3007,9 +3071,11 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'spambot_username' => 'ମିଡ଼ିଆଉଇକି ସ୍ପାମ ସଫାକରିବା',
 'spam_reverting' => '$1 ସହ ଯୋଡ଼ା ନଥିବା ଶେଷ ସଂସ୍କରଣକୁ ଲେଉଟାଇ ଦେଉଅଛୁଁ',
 'spam_blanking' => '$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା',
+'spam_deleting' => '$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା',
 
 # Info page
 'pageinfo-title' => '"$1"ର ବିବରଣୀ',
+'pageinfo-not-current' => 'ଦୁଖିତଃ, ପୁରୁଣା ସଂସ୍କରଣଗୁଡିକର ଏହି ତଥ୍ୟ ଦେବା ସମ୍ଭବ ନୁହେଁ ।',
 'pageinfo-header-basic' => 'ସାଧାରଣ ଜାଣିବା କଥା',
 'pageinfo-header-edits' => 'ବଦଳ ଇତିହାସ',
 'pageinfo-header-restrictions' => 'ପୃଷ୍ଠା ସୁରକ୍ଷା',
@@ -3020,10 +3086,13 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'pageinfo-article-id' => 'ପୃଷ୍ଠା ଆଇଡ଼ି',
 'pageinfo-language' => 'ପୃଷ୍ଠା ବିଷୟବସ୍ତୁର ଭାଷା',
 'pageinfo-robot-policy' => 'ଖୋଜିବା ଇଞ୍ଜିନ ସ୍ଥିତି',
+'pageinfo-robot-index' => 'ସୂଚୀପତ୍ର କରିହେଉଥିବା',
+'pageinfo-robot-noindex' => 'ସୂଚୀପତ୍ର କରିହେଉନଥିବା',
 'pageinfo-views' => 'ଦେଖଣା ସଂଖ୍ୟା',
 'pageinfo-watchers' => 'ପୃଷ୍ଠା ଦେଖଣାହାରି ସଂଖ୍ୟା',
 'pageinfo-redirects-name' => 'ଏହି ପୃଷ୍ଠାକୁ ଲେଉଟାଣି ଅଛି',
 'pageinfo-subpages-name' => 'ଏହି ପୃଷ୍ଠାରେ ଥିବା ଉପପୃଷ୍ଠା',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})',
 'pageinfo-firstuser' => 'ପୃଷ୍ଠା ତିଆରିକରିଛନ୍ତି',
 'pageinfo-firsttime' => 'ପୃଷ୍ଠା ତିଆରି କରିବା ତାରିଖ',
 'pageinfo-lastuser' => 'ନୂତନତମ ବଦଳକାରୀ',
@@ -3031,12 +3100,23 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'pageinfo-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା',
 'pageinfo-authors' => 'ନିଆରା ଲେଖକଙ୍କ ମୋଟସଂଖ୍ୟା',
 'pageinfo-recent-edits' => 'ନଗଦବଦଳ ସଂଖ୍ୟା($1 ମଧ୍ୟରେ)',
+'pageinfo-recent-authors' => 'ନିଆରା ଲେଖକଙ୍କ ମୋଟସଂଖ୍ୟା',
+'pageinfo-magic-words' => 'ଚମତ୍କାର {{PLURAL:$1|word|words}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|category|categories}} ($1) ଲୁଚାଗଲା',
+'pageinfo-templates' => '{{PLURAL:$1|template|templates}} ($1) ଯୋଡିହେଇଥିବା',
+'pageinfo-transclusions' => '{{PLURAL:$1|Page|Pages}} ($1)ରେ ଯୋଡାଗଲା',
 'pageinfo-toolboxlink' => 'ପୃଷ୍ଠା ସୂଚନା',
 'pageinfo-redirectsto' => 'କୁ ଲେଉଟାଣି',
 'pageinfo-redirectsto-info' => 'ସୂଚନା',
 'pageinfo-contentpage' => 'ବିଷୟବସ୍ତୁ ପୃଷ୍ଠାଭାବେ ଗଣା ହେଲା',
 'pageinfo-contentpage-yes' => 'ହଁ',
+'pageinfo-protect-cascading' => 'ସୁରକ୍ଷାଗୁଡିକ ଏଠାରୁ ଲାଗିଲାଗି ଅଛି',
 'pageinfo-protect-cascading-yes' => 'ହଁ',
+'pageinfo-protect-cascading-from' => 'ରୁ ସୁରକ୍ଷାଗୁଡିକ ଲାଗିଲାଗି ଅଛି',
+'pageinfo-category-info' => 'ଶ୍ରେଣୀସମ୍ପର୍କୀୟ ତଥ୍ୟ',
+'pageinfo-category-pages' => 'ପୃଷ୍ଠା ସଂଖ୍ୟା',
+'pageinfo-category-subcats' => 'ଉପବିଭାଗଗୁଡିକର ସଂଖ୍ୟା',
+'pageinfo-category-files' => 'ଫାଇଲ ସଂଖ୍ୟା',
 
 # Patrolling
 'markaspatrolleddiff' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରାଗଲା',
@@ -3048,6 +3128,8 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'markedaspatrollederror' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିପାରୁଲୁଁ ନାହିଁ',
 'markedaspatrollederrortext' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଏକ ସଂସ୍କରଣ ଦେବାକୁ ପଡ଼ିବ ।',
 'markedaspatrollederror-noautopatrol' => 'ଆପଣ ନିଜର ସମ୍ପାଦନାସବୁକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିପାରିବେ ନାହିଁ ।',
+'markedaspatrollednotify' => '$1 ପାଇଁ ଏହି ବଦଳଟିକୁ ଶ୍ରେଣୀଗତ ବୋଲି ଚିହ୍ନଟ କରାଯାଇଛି ।',
+'markedaspatrollederrornotify' => 'ଶ୍ରେଣୀବିଭାଗ କରିହେଲାନି ।',
 
 # Patrol log
 'patrol-log-page' => 'ଜଗିବା ଇତିହାସ',
@@ -3091,6 +3173,8 @@ $1',
 'file-info-png-looped' => 'ଲୁପ ଥିବା',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|ଥରେ|ଥର}} ଖେଳିଲେ',
 'file-info-png-frames' => '$1 ଗୋଟି {{PLURAL:$1|ଫ୍ରେମ|ଫ୍ରେମ}}',
+'file-no-thumb-animation' => "'''ଟୀକା:ଯାନ୍ତ୍ରିକ ସୀମାରେଖା ଯୋଗୁ, ଏହି ଫାଇଲର ଛୋଟଛବିଗୁଡିକ ଦୋଳାୟମାନ ହେବନାହିଁ ।'''",
+'file-no-thumb-animation-gif' => "'''ଟୀକା:ଯାନ୍ତ୍ରିକ ସୀମାରେଖା ଯୋଗୁ, ଏହି ଫାଇଲଭଳି ଅଧିକ ଆକାରଥିବା GIF ଛବିଗୁଡିକର ଛୋଟଛବିଗୁଡିକ ଦୋଳାୟମାନ ହେବନାହିଁ ।'''",
 
 # Special:NewFiles
 'newimages' => 'ନୁତନ ଫାଇଲଗୁଡିକର ଗ୍ୟାଲେରୀ',
@@ -3109,6 +3193,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 ମିନିଟ|$1 ମିନିଟ}}',
 'hours' => '{{PLURAL:$1|$1 ଘଣ୍ଟା|$1 ଘଣ୍ଟା}}',
 'days' => '{{PLURAL:$1|$1 ଦିନ|$1 ଦିନ}}',
+'months' => '{{PLURAL:$1|$1 month|$1 months}}',
+'years' => '{{PLURAL:$1|$1 year|$1 years}}',
 'ago' => '$1 ଆଗରୁ',
 'just-now' => 'ଏବେ ଏବେ',
 
@@ -3606,6 +3692,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[ଉଇକି-ଉଇକି ଭିତରେ ଟ୍ରାନ୍ସକ୍ଲୁଡ଼ିଙ୍ଗ ଅଚଳ କରାଯାଇଛି]',
 'scarytranscludefailed' => '[$1 ପାଇଁ ଛାଞ୍ଚକୁ ପାଇବା ସମ୍ଭବ ହେଲାନାହିଁ]',
+'scarytranscludefailed-httpstatus' => '[Template fetch failed for $1: HTTP $2]',
 'scarytranscludetoolong' => '[URLଟି ଖୁବ ଲମ୍ବା]',
 
 # Delete conflict
@@ -3634,7 +3721,7 @@ $5
 'imgmultigoto' => '$1 ପୃଷ୍ଠାକୁ ଯିବେ',
 
 # Table pager
-'ascending_abbrev' => 'asc',
+'ascending_abbrev' => 'ସାନରୁ ବଡ କ୍ରମରେ',
 'descending_abbrev' => 'ବଖାଣ',
 'table_pager_next' => 'ପର ପୃଷ୍ଠା',
 'table_pager_prev' => 'ଆଗ ପୃଷ୍ଠା',
@@ -3717,6 +3804,7 @@ $5
 'version-license' => 'ଲାଇସେନ୍ସ',
 'version-poweredby-credits' => "ଏହି ଉଇକିଟି '''[//www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
 'version-poweredby-others' => 'ବାକିସବୁ',
+'version-credits-summary' => 'ଆମେ ଏହି ଲୋକମାନଙ୍କୁ [[Special:Version|MediaWiki]]ରେ ସେମାନକର ଅବଦାନ ପାଇଁ ଚିହ୍ନିବାକୁ ଚାହୁଁଛୁ ।',
 'version-license-info' => 'MediaWiki ଏକ ମାଗଣା ସଫ୍ଟୱାର; ଆପଣ ଏହାକୁ ପୁନବଣ୍ଟନ କରିପାରିବେ ବା GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଅଧିନରେ ବଦଳାଇପାରିବେ ଯାହା ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ ଦେଇ ପ୍ରକାଶିତ ହୋଇଥିବ।
 
 MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯାଇଥାଏ, କିନ୍ତୁ ଏହା କୌଣସି ଲିଖିତ ପଟା ସହ ଆସିନଥାଏ; ଏହା ବିକ୍ରୟଯୋଗ୍ୟତା ବା ଏକ ନିର୍ଦିଷ୍ଟ କାମପାଇଁ ବାଧ୍ୟତାମୂଳକ ପଟା ସହ ଆସିନଥାଏ । ଅଧିକ ଜାଣିବା ନିମନ୍ତେ ଦୟାକରି GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଦେଖନ୍ତୁ ।
@@ -3725,6 +3813,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'version-software' => 'ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର',
 'version-software-product' => 'ଉତ୍ପାଦ',
 'version-software-version' => 'ସଂସ୍କରଣ',
+'version-entrypoints' => 'ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ',
 'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
 'version-entrypoints-header-url' => 'ଇଉଆରଏଲ',
 
@@ -3860,6 +3949,10 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'logentry-newusers-create2' => 'ସଭ୍ୟ ଖାତା $3ଟି $1 ଦ୍ଵାରା ତିଆରି କରାଗଲା',
 'logentry-newusers-autocreate' => '$1 ଖାତାଟି ଆପେଆପେ ତିଆରିହେଲା',
 'newuserlog-byemail' => 'ଇ-ମେଲରେ ପାସୱାର୍ଡ଼ ପଠାଇଦିଆଗଲା',
+'logentry-rights-rights' => '$1, $3 ପାଇଁ $4ରୁ $5କୁ ସଭ୍ୟପଦ ବଦଳାଇଲେ',
+'logentry-rights-rights-legacy' => '$1, $3 ପାଇଁ ଗୋଷ୍ଠୀ ସଭ୍ୟପଦ ବଦଳାଇଛି',
+'logentry-rights-autopromote' => '$1 ଆପେ ଆପେ $4ରୁ $5କୁ ଗଲେ',
+'rightsnone' => '(କିଛି ନାହିଁ)',
 
 # Feedback
 'feedback-bugornote' => 'ଦୟାକରି ଆପଣ ଏକ କାରିଗରି ଅସୁବିଧାଟିଏ ଜଣାଇବା ପାଇଁ ଚାହୁଁଥିଲେ ଦୟାକରି [$1 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । 
@@ -3893,10 +3986,12 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'api-error-emptypage' => 'ନୂଆ, ଖାଲି ପୃଷ୍ଠ ତିଆରି କରିବାର ଅନୁମତି ନାହି ।',
 'api-error-fetchfileerror' => 'ଭିତର ଅସୁବିଧା: ଏହି ଫାଇଲଟି ପାଖରେ ପହଞ୍ଚିବା ବେଳେ କିଛି ଅସୁବିଧା ହେଲା ।',
 'api-error-fileexists-forbidden' => '"$1" ନାମରେ ଗୋଟିଏ ଫାଇଲ ଆଗରୁ ଅଛି, ଏବଂ ଏହା ଉପରେ ଲେଖି ହେବନି ।',
+'api-error-fileexists-shared-forbidden' => '"$1" ନାମରେ ଗୋଟିଏ ଫାଇଲ ବଣ୍ଟାଯାଇଥିବା ସାଇତାଗୃହରେ ଅଛି, ଏବଂ ଏହା ବାଲାଯାଇପାରିବ ନାହିଁ ।',
 'api-error-file-too-large' => 'ଆପଣ ପଠାଇଥିବା ଫାଇଲଟି ବିରାଟ ଅଟେ ।',
 'api-error-filename-tooshort' => 'ଫାଇଲ ନାମଟି ଖୁବ ଛୋଟ ।',
 'api-error-filetype-banned' => 'ଏହି ପ୍ରକାରର ଫାଇଲ ବାରଣ କରାଯାଇଅଛି ।',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|ଏକ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହେଁ|ମାନ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହଁନ୍ତି}} । ଅନୁମୋଦିତ {{PLURAL:$3|ଫାଇଲ ପ୍ରକାର ହେଲା|ଫାଇଲ ପ୍ରକାର ହେଲା}} $2 ।',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|ଏକ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହେଁ|ମାନ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହଁନ୍ତି}} ।
+ଅନୁମୋଦିତ {{PLURAL:$3|ଫାଇଲ ପ୍ରକାର ହେଲା|ଫାଇଲଗୁଡିକର ପ୍ରକାର ହେଲା}} $2 ।',
 'api-error-filetype-missing' => 'ଫାଇଲଟିର ଏକ୍ସଟେନସନ ନାହିଁ ।',
 'api-error-hookaborted' => 'ଏକ ଏକ୍ସଟେନସନ ହୁକ ଦେଇ ଆପଣ କରୁଥିବା ବଦଳଟି ବନ୍ଦ କରିଦିଆଗଲା ।',
 'api-error-http' => 'ଭିତର ଅସୁବିଧା: ସର୍ଭର ସହ ଯୋଡ଼ି ହେଉନାହିଁ ।',
index 9441629..e89ba24 100644 (file)
@@ -1040,8 +1040,8 @@ $2
 'right-delete' => 'Фæрстæ хафын',
 'right-bigdelete' => 'Стыр историимæ фæрстæ хафын',
 
-# User rights log
-'rightsnone' => '(нæй)',
+# Special:Log/newusers
+'newuserlogpage' => 'Архайджыты фæзындты лог',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ацы фарс кæсын',
@@ -1266,9 +1266,6 @@ $3',
 # Special:ListUsers
 'listusers-submit' => 'Равдисын',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Архайджыты фæзындты лог',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Къорд',
 'listgrouprights-rights' => 'Бартæ',
@@ -1302,6 +1299,7 @@ $3',
 'unwatching' => 'Цæстдард фæрсты номхыгъдæй аиуварс кæнын...',
 
 'enotif_anon_editor' => 'сусæг архайæг $1',
+'changed' => 'ивд æрцыд',
 
 # Delete
 'deletepage' => 'Схаф фарс',
@@ -1698,6 +1696,7 @@ $3',
 # New logging system
 'logentry-delete-delete' => '$1 схафта фарс $3',
 'logentry-delete-restore' => '$1 рацарæзта фарс $3',
+'rightsnone' => '(нæй)',
 
 # Feedback
 'feedback-subject' => 'Сæр:',
index 645fbb5..ff05c7b 100644 (file)
@@ -294,7 +294,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'vector-action-protect' => 'ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'vector-action-undelete' => 'ਅਣ-ਮਿਟਾਉਣਾ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'vector-simplesearch-preference' => 'ਵਾਧà©\82 à¨\96à©\8bà¨\9c à¨¸à¨²à¨¾à¨¹à¨¾à¨\82 ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
+'vector-simplesearch-preference' => 'ਸਧਾਰਨ à¨\96à©\8bà¨\9c à¨¸à¨²à¨¾à¨¹ à¨ªà©±à¨\9fà©\80 ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
 'vector-view-create' => 'ਬਣਾਓ',
 'vector-view-edit' => 'ਸੰਪਾਦਨ',
 'vector-view-history' => 'ਇਤਿਹਾਸ ਵੇਖੋ',
@@ -328,7 +328,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'undelete_short' => '{{PLURAL:$1|ਇੱਕ ਸੋਧ|$1 ਸੋਧਾਂ}} ਅਣ-ਮਿਟਾਓ',
 'viewdeleted_short' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
 'protect' => 'ਸੁਰੱਖਿਆ',
-'protect_change' => 'ਤਬਦà©\80ਲੀ',
+'protect_change' => 'ਬਦਲੀ',
 'protectthispage' => 'ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'unprotectthispage' => 'ਇਹ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
@@ -399,7 +399,7 @@ $1',
 'retrievedfrom' => '"$1" ਤੋਂ ਲਿਆ',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
 'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
-'newmessagesdifflink' => 'à¨\86à¨\96ਰà©\80 à¨¤à¨¬à¨¦à©\80ਲੀ',
+'newmessagesdifflink' => 'ਪਿà¨\9bਲà©\80 à¨¬à¨¦ਲੀ',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'youhavenewmessagesmanyusers' => 'ਕਈ ਵਰਤੋਂਕਾਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
@@ -432,7 +432,7 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ਪੰਨਾ',
-'nstab-user' => 'ਮà©\88à¨\82ਬਰ ਪੰਨੇ',
+'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਪੰਨੇ',
 'nstab-media' => 'ਮੀਡੀਆ ਸਫ਼ਾ',
 'nstab-special' => 'ਖਾਸ ਪੰਨਾ',
 'nstab-project' => 'ਪਰਿਯੋਜਨਾ ਪੰਨਾ',
@@ -458,18 +458,17 @@ $1',
 ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁ੍ੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
 ਇਸ ਗਣਿਤਫ਼ਲ "<tt>$2</tt>" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: <blockquote><tt>$1</tt></blockquote.
 ਡੈਟਾਬੇਸ ਨੇ ਇਹ ਤਰੁੱਟੀ "<tt>$3: $4</tt>"ਜਵਾਬ ਵਿਚ ਦਿੱਤੀ।',
-'dberrortextcl' => 'ਡੈਟਾਬੇਸ ਪੁ੍ਛ ਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤਾਂ ਦੀ ਤਰੁੱਟੀ ਮਿਲੀ ਹੈ।
-ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
-ਇਸ ਗਣਿਤਫ਼ਲ "$2" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: "$1".
-ਡੈਟਾਬੇਸ ਨੇ ਇਹ ਤਰੁੱਟੀ "$1"ਜਵਾਬ ਵਿਚ ਦਿੱਤੀ।',
+'dberrortextcl' => 'ਡੈਟਾਬੇਸ ਪੁੱਛਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤ ਗਲਤੀ ਮਿਲੀ ਹੈ।
+ਫੰਕਸ਼ਨ "$2" ਤੋਂ ਪਿਛਲੀ ਡਾਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: "$1".
+ਡੈਟਾਬੇਸ ਨੇ ਇਹ ਗਲਤੀ "$3:$4" ਦਿੱਤੀ',
 'laggedslavemode' => "'''ਖ਼ਬਰਦਾਰ:''' ਹੋ ਸਕਦਾ ਹੈ ਸਫ਼ੇ ਵਿਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਸ਼ਾਮਲ ਨਾ ਹੋਣ।",
 'readonly' => 'ਡਾਟਾਬੇਸ ਲਾਕ ਹੈ',
 'enterlockreason' => 'ਤਾਲਾ-ਬੰਦੀ ਲਈ ਕਾਰਨ ਦਾਖ਼ਲ ਕਰੋ, ਨਾਲ਼ ਹੀ ਤਾਲਾ-ਬੰਦੀ ਦੇ ਰਿਲੀਜ਼ ਹੋਣ ਦਾ ਅੰਦਾਜ਼ਨ ਵਕਤ',
 'readonlytext' => 'ਡੈਟਾਬੇਸ ਨੂੰ ਇਸ ਵੇਲ਼ੇ ਤਾਲਾ ਲੱਗਾ ਹੋਇਆ ਹੈ, ਸ਼ਾਇਦ ਆਮ ਰੱਖ-ਰਖਾਵ ਲਈ, ਇਸਤੋਂ ਬਾਅਦ ਇਹ ਆਮ ਵਾਂਗ ਉਪਲੱਬਧ ਹੋਵੇਗਾ।
 ਜਿਸ ਪ੍ਰਬੰਧਕ ਨੇ ਇਸਨੂੰ ਤਾਲਾ ਲਾਇਆ ਹੈ ਉਸਦਾ ਕਹਿਣਾ ਹੈ ਕਿ: $1',
 'missing-article' => "ਡਾਟਾਬੇਸ ਨੂੰ ''$1'' $2 ਨਾਮ ਦਾ ਕੋਈ ਪੰਨਾ ਨਹੀਂ ਮਿਲਿਆ।
-à¨\86ਮ à¨¤à©\8cਰ à¨¤à©\87 à¨®à¨¿à¨\9fਾà¨\8f à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\87 à¨ªà©°à¨¨à©\87 à¨¦à©\80 à¨\85ਤà©\80ਤ ਕੜੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਇੰਝ ਹੁੰਦਾ ਹੈ।
-à¨\9cà©\87 à¨\87ਹ à¨\97ੱਲ à¨¨à¨¹à©\80à¨\82 à¨¤à¨¾à¨\82 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¸à¨¾à¨«à¨¼à¨\9fਵà©\87à¨\85ਰ à¨µà¨¿à¨\9a à¨\96ਾਮà©\80 à¨®à¨¿à¨² à¨\97à¨\88 à¨¹à©\88। à¨®à¨¿à¨¹à¨°à¨¬à¨¾à¨¨à©\80 ਕਰਕੇ ਪੰਨੇ ਦੇ ਪਤੇ ਸਮੇਤ [[Special:ListUsers/sysop|administrator]] ਨੂੰ ਇਤਲਾਹ ਦਿਓ।",
+à¨\86ਮ à¨¤à©\8cਰ à¨¤à©\87 à¨¹à¨\9fਾà¨\88 à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\87 à¨ªà©°à¨¨à©\87 à¨¦à¨¾ à¨\87ਤਿਹਾਸ ਕੜੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਇੰਝ ਹੁੰਦਾ ਹੈ।
+à¨\9cà©\87 à¨\87ਹ à¨\97ੱਲ à¨¨à¨¹à©\80à¨\82 à¨¤à¨¾à¨\82 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¸à¨¾à¨«à¨¼à¨\9fਵà©\87à¨\85ਰ à¨µà¨¿à¨\9a à¨\96ਾਮà©\80 à¨®à¨¿à¨² à¨\97à¨\88 à¨¹à©\88। à¨\95ਿਰਪਾ ਕਰਕੇ ਪੰਨੇ ਦੇ ਪਤੇ ਸਮੇਤ [[Special:ListUsers/sysop|administrator]] ਨੂੰ ਇਤਲਾਹ ਦਿਓ।",
 'missingarticle-rev' => '(ਬਦਲਾਅ#: $1)',
 'missingarticle-diff' => '(ਫ਼ਰਕ: $1, $2)',
 'readonly_lag' => 'ਜਦੌਂ ਤਕ ਅਧੀਨ ਡੇਟਾਬੇਸ ਸਰਵਰ ਸੁਤੰਤਰ ਡੈਟਾਬੇਸ ਸਰਵਰ ਦੀ ਪਕੜ ਵਿਚ ਨਹੀਂ ਆ ਜਾਂਦੇ ਡੈਟਾਬੇਸ ਸਵੈ ਜਕੜਿਆ ਗਿਆ ਹੈ।',
@@ -496,7 +495,7 @@ $1',
 'viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
 'viewsource-title' => '$1 ਲਈ ਸਰੋਤ ਵੇਖੋ',
 'actionthrottled' => 'ਕਾਰਜ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ',
-'protectedpagetext' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨«à©\87ਰ-ਬਦਲ à¨\95ਰਨ à¨\96਼ਿਲਾਫ਼ à¨¸à©\81ਰੱà¨\96ਿà¨\85ਤ ਹੈ।',
+'protectedpagetext' => 'à¨\87ਹ à¨ªà©°à¨¨à©\87 à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨\85ਤà©\87 à¨¹à©\8bਰ à¨\95ੰਮ à¨¤à©\8bà¨\82 à¨¸à©\81ਰੱà¨\96ਿà¨\85ਤ à¨\95à©\80ਤਾ à¨¹à©\8bà¨\87à¨\86 ਹੈ।',
 'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਕੀਤੀਆਂ "ਆਪਣੀਆਂ ਸੋਧਾਂ" ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'protectedinterface' => 'ਇਹ ਪੰਨਾ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦਾ ਮੂਲ ਪਾਠ ਹੈ ,ਅਤੇ ਦੁਰਵਰਤੌਂ ਤੌਂ ਬਚਾਅ ਲਈ ਰਾਖਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।',
@@ -677,7 +676,7 @@ $2
 # Edit pages
 'summary' => 'ਸਾਰ:',
 'subject' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:',
-'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲੀ ਹੈ',
+'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fà©\80 à¨¬à¨¦ਲੀ ਹੈ',
 'watchthis' => 'ਇਸ ਪੰਨੇ ’ਤੇ ਧਿਆਨ ਰੱਖੋ',
 'savearticle' => 'ਪੰਨਾ ਸਾਂਭੋ',
 'preview' => 'ਝਲਕ',
@@ -747,7 +746,7 @@ sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
 '''ਇਹ ਹਾਲੇ ਸਾਂਭੀ ਨਹੀਂ ਗਈ ਹੈ!'''",
 'updated' => '(ਅੱਪਡੇਟ)',
 'note' => "'''ਨੋਟ:'''",
-'previewnote' => "'''ਯਾਦ à¨°à©±à¨\96à©\8b à¨\87ਹ à¨¸à¨¿à¨°à¨«à¨¼ à¨\87à¨\95 à¨\9dਲà¨\95 à¨¹à©\88।''' à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
+'previewnote' => "'''ਯਾਦ à¨°à©±à¨\96à©\8b à¨\87ਹ à¨\95à©\87ਵਲ à¨\87ੱà¨\95 à¨\9dਲà¨\95 à¨¹à©\88।''' à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
 'continue-editing' => 'ਸੰਪਾਦਨ ਜਾਰੀ ਰੱਖੋ',
 'previewconflict' => 'ਇਹ ਝਲਕ ਲਿਖਤ ਦਾ ਓਹ ਅਕਸ ਪੇਸ਼ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਸਾਂਭੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।',
 'editing' => '$1 ਸੰਪਾਦਨ',
@@ -783,13 +782,13 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 'permissionserrors' => 'ਅਧਿਕਾਰ ਗਲਤੀਆਂ',
 'permissionserrorstext' => 'ਤੁਹਾਨੂੰ ਇੰਝ ਕਰਨ ਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ। ਹੇਠ ਦਿੱਤੇ {{PLURAL:$1|ਕਾਰਨ|ਕਾਰਨ}} ਨੇ:',
 'permissionserrorstext-withaction' => '{{PLURAL:$1|ਇਸ ਕਾਰਨ|ਇਹਨਾਂ ਕਾਰਨਾਂ}} ਕਰਕੇ ਤੁਹਾਨੂੰ $2 ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ:',
-'recreate-moveddeleted-warn' => "'''à¨\96ਬਰਦਾਰ:
+'recreate-moveddeleted-warn' => "'''à¨\9aਿਤਾਵਣà©\80:
 ਤੁਸੀਂ ਐਸਾ ਪੰਨਾ ਬਣਾ ਰਹੇ ਹੋ ਜੋ ਪਹਿਲਾਂ ਹਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।'''
 
 ਖਿਆਲ ਕਰੋ ਕਿ ਕੀ ਇਸ ਪੰਨੇ ਦਾ ਕਾਇਮ ਰਹਿਣਾ ਠੀਕ ਹੈ।
 ਇਸਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
 'moveddeleted-notice' => 'ਇਹ ਪੰਨਾ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
-à¨\87ਸਦà©\87 à¨®à¨¿ਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
+à¨\87ਸਦà©\87 à¨¹ਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
 'log-fulllog' => 'ਪੂਰਾ ਚਿੱਠਾ ਵੇਖੋ',
 'edit-gone-missing' => 'ਸਫ਼ਾ ਅਪਡੇਟ ਨਹੀਂ ਹੋ ਸਕਿਆ।
 ਲਗਦਾ ਹੈ ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
@@ -837,7 +836,7 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 ਲੈਜਅੰਡ:
 '''({{int:cur}})''' = ਨਵੇਂ ਰੀਵਿਜਨ ਨਾਲੋਂ ਫ਼ਰਕ, '''({{int:last}})''' = ਆਖਰੀ ਰੀਵਿਜਨ ਨਾਲੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਸੋਧ।",
 'history-fieldset-title' => 'ਇਤਿਹਾਸ ਨੂੰ ਬ੍ਰਾਊਜ਼ ਕਰੋ',
-'history-show-deleted' => 'ਸਿਰਫ਼ à¨®à¨¿ਟਾਏ ਗਏ',
+'history-show-deleted' => 'ਸਿਰਫ਼ à¨¹ਟਾਏ ਗਏ',
 'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਦੇ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
 'historysize' => '($1 ਬਾਈਟ)',
@@ -895,7 +894,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdelete-radio-unset' => 'ਨਹੀਂ',
 'revdelete-unsuppress' => 'ਮੁੜ ਬਹਾਲ ਕੀਤੀਆਂ ਰੀਵਿਜ਼ਨਾਂ ਤੋਂ ਰੋਕਾਂ ਹਟਾਓ',
 'revdelete-log' => 'ਕਾਰਨ:',
-'revdelete-submit' => 'à¨\9aà©\81ਣà©\87 à¨°à©\80ਵਿà¨\9c਼ਨ à¨\89ੱਤà©\87 à¨²à¨¾à¨\97à©\82 à¨\95ਰà©\8b',
+'revdelete-submit' => 'ਚੁਣੇ ਰੀਵਿਜਨ ਉੱਤੇ ਲਾਗੂ ਕਰੋ',
 'logdelete-success' => "'''ਚਿੱਠੇ ਦੀ ਦਿੱਖ ਕਾਮਯਾਬੀ ਨਾਲ਼ ਸੈੱਟ ਕੀਤੀ।'''",
 'logdelete-failure' => "'''ਚਿੱਠੇ ਦੀ ਦਿੱਖ ਸੈੱਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ:''' $1",
 'revdel-restore' => 'ਦਿੱਖ ਬਦਲੋ',
@@ -1068,8 +1067,8 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-emailconfirm-label' => 'ਈ-ਮੇਲ ਤਸਦੀਕ:',
 'prefs-textboxsize' => 'ਸੋਧ ਖਿੜਕੀ ਦਾ ਅਕਾਰ',
 'youremail' => 'ਈ-ਮੇਲ:',
-'username' => 'ਯà©\82à¨\9c਼ਰ à¨¨à¨¾à¨\82:',
-'uid' => 'ਯà©\82à¨\9c਼ਰ ID:',
+'username' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰਨਾਮ:',
+'uid' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ID:',
 'prefs-memberingroups' => '{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:',
 'prefs-registration' => 'ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦਾ ਵਕਤ:',
 'yourrealname' => 'ਅਸਲੀ ਨਾਮ:',
@@ -1084,8 +1083,8 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'email' => 'ਈਮੇਲ',
 'prefs-help-realname' => 'ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ, ਅਤੇ ਜੇ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।',
 'prefs-help-email' => 'ਤੁਹਾਡੀ ਮਰਜ਼ੀ ਹੈ ਈਮੇਲ ਪਤਾ ਦਿਓ ਜਾਂ ਨਾ ਦਿਓ ਪਰ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਣ ਤੇ ਨਵਾਂ ਪਾਸਵਰਡ ਹਾਸਲ ਕਰਨ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਹੈ।',
-'prefs-help-email-others' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨µà©\80 à¨\9aà©\81ਣ à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\95ਿ à¨¤à©\81ਹਾਡà©\87 à¨®à©\88à¨\82ਬਰ à¨\9cਾà¨\82 à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 à¨¤à©\8bà¨\82 à¨¹à©\8bਰ à¨®à©\88à¨\82ਬਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?
-à¨\9cਦà©\8bà¨\82 à¨¹à©\8bਰ à¨®à©\88à¨\82ਬਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।',
+'prefs-help-email-others' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨µà©\80 à¨\9aà©\81ਣ à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\95ਿ à¨¤à©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨\9cਾà¨\82 à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 à¨¤à©\8bà¨\82 à¨¹à©\8bਰ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?
+à¨\9cਦà©\8bà¨\82 à¨¹à©\8bਰ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।',
 'prefs-help-email-required' => 'ਈ-ਮੇਲ ਪਤਾ ਚਾਹੀਦਾ ਹੈ।',
 'prefs-info' => 'ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ',
 'prefs-signature' => 'ਦਸਤਖ਼ਤ',
@@ -1106,7 +1105,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'userrights-lookup-user' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਦੇਖਭਾਲ',
 'userrights-user-editname' => 'ਇੱਕ ਯੂਜ਼ਰ ਨਾਂ ਦਿਓ:',
 'editusergroup' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੋਧ',
-'editinguser' => '<b>$1</b> à¨¯à©\82à¨\9c਼ਰ ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
+'editinguser' => '<b>$1</b> à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
 'userrights-editusergroup' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੋਧ',
 'saveusergroups' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੰਭਾਲੋ',
 'userrights-groupsmember' => 'ਇਸ ਦਾ ਮੈਂਬਰ:',
@@ -1153,11 +1152,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'right-siteadmin' => 'ਡੈਟਾਬੇਸ ਨੂੰ ਤਾਲਾ ਲਾਉਣਾ ਤੇ ਖੋਲ੍ਹਣਾ',
 'right-sendemail' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣਾ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ਬਣਾਏ ਖਾਤਿਆਂ ਦਾ ਚਿੱਠਾ',
+'newuserlogpagetext' => 'ਇਹ ਬਣੇ ਮੈਂਬਰਾਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
+
 # User rights log
 'rightslog' => 'ਮੈਂਬਰ ਹੱਕਾਂ ਦਾ ਚਿੱਠਾ',
 'rightslogtext' => 'ਇਹ ਮੈਂਬਰ ਹੱਕਾਂ ਵਿਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
-'rightslogentry-autopromote' => '$2 ਤੋਂ ਆਪਣੇ ਆਪ $3 ਤੱਕ ਤਰੱਕੀ ਕਰੀ',
-'rightsnone' => '(ਕੋਈ ਨਹੀਂ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ਇਹ ਸਫ਼ਾ ਪੜ੍ਹਨ',
@@ -1181,31 +1182,31 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'action-sendemail' => 'ਈ-ਮੇਲਾਂ ਭੇਜਣ',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|ਤਬਦà©\80ਲੀ|
-ਤਬਦà©\80ਲੀਆਂ}}',
+'nchanges' => '$1 {{PLURAL:$1|ਬਦਲੀ|
+ਬਦਲੀਆਂ}}',
 'recentchanges' => 'ਹਾਲ ਹੀ ’ਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ',
-'recentchanges-legend' => 'ਹਾਲ à¨¦à©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਸਬੰਧੀ ਚੋਣਾਂ',
+'recentchanges-legend' => 'ਹਾਲ à¨¦à©\80à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ ਸਬੰਧੀ ਚੋਣਾਂ',
 'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
-'recentchanges-feed-description' => 'à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 à¨¹à¨¾à¨² à¨¹à©\80 à¨µà¨¿à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
+'recentchanges-feed-description' => 'à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 à¨¹à¨¾à¨² à¨¹à©\80 à¨µà¨¿à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
 'recentchanges-label-newpage' => 'ਇਹ ਸੰਪਾਦਨ ਨੇ ਨਵਾਂ ਪੰਨਾ ਬਣਾਇਆ ਹੈ',
 'recentchanges-label-minor' => 'ਇਹ ਇੱਕ ਛੋਟਾ ਸੰਪਾਦਨ ਹੈ',
 'recentchanges-label-bot' => 'ਇਹ ਸੰਪਾਦਨ ਬੋਟ ਵਲੋਂ ਕੀਤੀ ਗਈ ਹੈ',
 'recentchanges-label-unpatrolled' => 'ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ',
-'rcnote' => "$4, $5 à¨¤à©±à¨\95 à¨\86à¨\96ਰà©\80 {{PLURAL:$2|ਦਿਨ|'''$2''' à¨¦à¨¿à¨¨à¨¾à¨\82}} à¨µà¨¿à©±à¨\9a {{PLURAL:$1|'''1''' à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¹à©\8bà¨\88 à¨¹à©\88।|'''$1''' à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
+'rcnote' => "$4, $5 à¨¤à©±à¨\95 à¨\86à¨\96ਰà©\80 {{PLURAL:$2|ਦਿਨ|'''$2''' à¨¦à¨¿à¨¨à¨¾à¨\82}} à¨µà¨¿à©±à¨\9a {{PLURAL:$1|'''1''' à¨¬à¨¦à¨²à©\80 à¨¹à©\8bà¨\88 à¨¹à©\88।|'''$1''' à¨¬à¨¦ਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
 'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੀਆਂ) ਤਬਦੀਲੀਆਂ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
-'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à¨¿ਖਾਓ',
-'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ',
+'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\80à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨µà©\87ਖਾਓ',
+'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\80à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ',
 'rcshowhidebots' => '$1 ਬੋਟ',
 'rcshowhideliu' => '$1 ਲਾਗਇਨ ਹੋਏ ਮੈਂਬਰ',
-'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨®à©\88à¨\82ਬਰ',
+'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
 'rcshowhidepatr' => 'ਜਾਂਚੇ ਹੋਏ ਸੰਪਾਦਨ $1',
-'rcshowhidemine' => 'ਮà©\87ਰà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ $1',
-'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 $1 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à¨¿à¨\96ਾà¨\93 <br /> $3',
+'rcshowhidemine' => 'ਮà©\87ਰà©\80à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ $1',
+'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 $1 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨µà©\87à¨\96ਾà¨\93<br /> $3',
 'diff' => 'ਫ਼ਰਕ',
 'hist' => 'ਇਤਿਹਾਸ',
 'hide' => 'ਲੁਕਾਓ',
 'show' => 'ਵਖਾਓ',
-'minoreditletter' => 'ਛ',
+'minoreditletter' => 'ਛ',
 'newpageletter' => 'ਨ',
 'boteditletter' => 'ਬ',
 'rc_categories_any' => 'ਕੋਈ ਵੀ',
@@ -1215,10 +1216,10 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 # Recent changes linked
 'recentchangeslinked' => 'ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ',
 'recentchangeslinked-feed' => 'ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ à¨¤à¨¬à¨¦à©\80ਲੀਆਂ',
+'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ à¨¬à¨¦ਲੀਆਂ',
 'recentchangeslinked-title' => '"$1" ਨਾਲ ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-noresult' => 'à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 â\80\99ਤà©\87, à¨¦à¨¿à©±à¨¤à©\87 à¨¸à¨®à©\87à¨\82 â\80\99à¨\9a à¨\95à©\8bà¨\88 à¨¤à¨¬à¨¦à©\80ਲੀ ਨਹੀਂ ਹੋਈ।',
-'recentchangeslinked-summary' => 'à¨\87ਹ à¨¸à©\82à¨\9aà©\80 à¨\87ੱà¨\95 à¨\96ਾਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨\96ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਨੂੰ ਦਰਸਾਂਉਦੀ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਧਿਆਨਸੂਚੀ]] ਵਿੱਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
+'recentchangeslinked-noresult' => 'à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 â\80\99ਤà©\87, à¨¦à¨¿à©±à¨¤à©\87 à¨¸à¨®à©\87à¨\82 â\80\99à¨\9a à¨\95à©\8bà¨\88 à¨¬à¨¦ਲੀ ਨਹੀਂ ਹੋਈ।',
+'recentchangeslinked-summary' => 'à¨\87ਹ à¨¸à©\82à¨\9aà©\80 à¨\87ੱà¨\95 à¨\96ਾਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨\96ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦ਲੀਆਂ ਨੂੰ ਦਰਸਾਂਉਦੀ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਧਿਆਨਸੂਚੀ]] ਵਿੱਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
 'recentchangeslinked-page' => 'ਪੰਨੇ ਦਾ ਨਾਮ:',
 'recentchangeslinked-to' => 'ਇਸਦੇ ਬਦਲੇ ਇਸ ਪੰਨੇ ਨਾਲ ਜੁੜੇ ਪੰਨਿਆਂ ਵਿੱਚ ਹੋਏ ਬਦਲਾਅ ਦਿਖਾਓ',
 
@@ -1321,7 +1322,7 @@ to upload files.',
 'filehist-thumb' => 'ਨਮੂਨਾ',
 'filehist-thumbtext' => '$1 ਦੇ ਸਮੇਂ ਦੇ ਸੰਸਕਰਨ ਦਾ ਅੰਗੂਠਾਕਾਰ ਪ੍ਰਤੀਰੂਪ',
 'filehist-nothumb' => 'ਕੋਈ ਨਮੂਨਾ-ਤਸਵੀਰ ਨਹੀਂ',
-'filehist-user' => 'ਮà©\88à¨\82ਬਰ',
+'filehist-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 'filehist-dimensions' => 'ਨਾਪ',
 'filehist-filesize' => 'ਫਾਇਲ ਆਕਾਰ',
 'filehist-comment' => 'ਟਿੱਪਣੀ',
@@ -1333,7 +1334,7 @@ to upload files.',
 'sharedupload' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਤੇ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।',
 'sharedupload-desc-there' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
 ਜ਼ਿਆਦਾ ਜਾਣਕਾਰੀ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ [$2 ਫ਼ਾਈਲ ਦਾ ਵੇਰਵਾ ਸਫ਼ਾ] ਵੇਖੋ।',
-'sharedupload-desc-here' => 'à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ $1 à¨¦à©\80 à¨¹à©\88 à¨\85ਤà©\87 à¨¹à©\8bਰ à¨ªà©\8dਰਾà¨\9cà©\88à¨\95à¨\9fਾà¨\82 à¨µà¨¿à¨\9a à¨µà©\80 à¨µà¨°à¨¤à©\80 à¨\9cਾ à¨¸à¨\95ਦà©\80 à¨¹à©\88 à¥¤ à¨\87ਸ [$2 à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\87 à¨µà©\87ਰਵਾ à¨¸à¨«à¨¼à©\87] à¨µà¨¿ਚ ਮੌਜੂਦ ਵੇਰਵਾ ਹੇਠ ਦਿਸ ਰਿਹਾ ਹੈ।',
+'sharedupload-desc-here' => 'à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ $1 à¨¦à©\80 à¨¹à©\88 à¨\85ਤà©\87 à¨¹à©\8bਰ à¨ªà¨°à¨¿à¨¯à©\8bà¨\9cਨਾਵਾà¨\82 à¨µà¨¿à©±à¨\9a à¨µà©\80 à¨µà¨°à¨¤à©\80 à¨\9cਾ à¨¸à¨\95ਦà©\80 à¨¹à©\88 à¥¤ à¨\87ਸ [$2 à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\87 à¨µà©\87ਰਵਾ à¨ªà©°à¨¨à©\87] à¨µà¨¿à©±ਚ ਮੌਜੂਦ ਵੇਰਵਾ ਹੇਠ ਦਿਸ ਰਿਹਾ ਹੈ।',
 'sharedupload-desc-edit' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
 ਸ਼ਾਇਦ ਤੁਸੀਂ [$2 ਫ਼ਾਈਲ ਦੇ ਵੇਰਵੇ ਸਫ਼ੇ] ਤੇ ਇਸਦਾ ਵੇਰਵਾ ਬਦਲਣਾ ਚਾਹੋ।',
 'sharedupload-desc-create' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
@@ -1455,14 +1456,14 @@ to upload files.',
 'pager-older-n' => '{{PLURAL:$1|1 ਪੁਰਾਣਾ|$1 ਪੁਰਾਣੇ}}',
 
 # Book sources
-'booksources' => 'à¨\95ਿਤਾਬ ਸਰੋਤ',
-'booksources-search-legend' => 'à¨\95ਿਤਾਬ ਸਰੋਤ ਖੋਜੋ',
+'booksources' => 'ਪà©\81ਸਤà¨\95ਾà¨\82 à¨¦à©\87 ਸਰੋਤ',
+'booksources-search-legend' => 'ਪà©\81ਸਤà¨\95ਾà¨\82 à¨¦à©\87 ਸਰੋਤ ਖੋਜੋ',
 'booksources-go' => 'ਜਾਓ',
 'booksources-invalid-isbn' => 'ਦਿੱਤਾ ਗਿਆ ISBN ਸਹੀ ਨਹੀਂ ਲਗਦਾ, ਅਸਲੀ ਸਰੋਤ ਤੋਂ ਨਕਲ ਕਰਦੇ ਵਕਤ ਹੋਈਆਂ ਗ਼ਲਤੀਆਂ ਜਾਂਚੋ।',
 
 # Special:Log
-'specialloguserlabel' => 'ਯà©\82à¨\9c਼ਰ:',
-'speciallogtitlelabel' => 'à¨\9fਾà¨\87à¨\9fਲ:',
+'specialloguserlabel' => 'à¨\95ਰਤਾ:',
+'speciallogtitlelabel' => 'ਸਿਰਲà©\87à¨\96:',
 'log' => 'ਚਿੱਠੇ',
 'all-logs-page' => 'ਸਾਰੇ ਆਮ ਚਿੱਠੇ',
 'logempty' => 'ਚਿੱਠੇ ’ਚ ਮੇਲ ਖਾਂਦੀ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।',
@@ -1501,7 +1502,7 @@ to upload files.',
 'sp-deletedcontributions-contribs' => 'ਯੋਗਦਾਨ',
 
 # Special:LinkSearch
-'linksearch' => 'ਬਾਹਰà©\80 à¨²à¨¿à©°à¨\95',
+'linksearch' => 'ਬਾਹਰà©\80 à¨\95à©\9cà©\80 à¨\96à©\8bà¨\9cà©\8b',
 'linksearch-ns' => 'ਥਾਂ-ਨਾਮ:',
 'linksearch-ok' => 'ਖੋਜੋ',
 'linksearch-line' => '$2 ਵਿੱਚ $1 ਬਾਹਰੀ ਸਿਰਨਾਵਾਂ ਹੈ',
@@ -1521,22 +1522,18 @@ to upload files.',
 'activeusers-hidesysops' => 'ਐਡਮਨਿਸਟ੍ਰੇਟਰ ਲੁਕਾਓ',
 'activeusers-noresult' => 'ਕੋਈ ਮੈਂਬਰ ਨਹੀਂ ਲੱਭਿਆ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ਬਣਾਏ ਖਾਤਿਆਂ ਦਾ ਚਿੱਠਾ',
-'newuserlogpagetext' => 'ਇਹ ਬਣੇ ਮੈਂਬਰਾਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'ਗਰੁੱਪ',
 'listgrouprights-rights' => 'ਹੱਕ',
 'listgrouprights-helppage' => 'Help:ਗਰੁੱਪ ਹੱਕ',
-'listgrouprights-members' => '(ਮà©\88à¨\82ਬਰਾਂ ਦੀ ਸੂਚੀ)',
+'listgrouprights-members' => '(ਵਰਤà©\8bà¨\82à¨\95ਾਰਾਂ ਦੀ ਸੂਚੀ)',
 'listgrouprights-addgroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਜੋੜੋ',
 'listgrouprights-removegroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਹਟਾਓ',
 
 # E-mail user
 'mailnologin' => 'ਕੋਈ ਭੇਜਣ ਐਡਰੈੱਸ ਨਹੀਂ',
 'mailnologintext' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਲਾਗਇਨ]] ਹੋਣਾ ਅਤੇ ਆਪਣੀਆਂ [[Special:Preferences|ਪਸੰਦਾਂ]] ਵਿਚ ਇਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦੇਣਾ ਪਵੇਗਾ।',
-'emailuser' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'emailuser' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'emailpage' => 'ਯੂਜ਼ਰ ਨੂੰ ਈਮੇਲ ਕਰੋ',
 'defemailsubject' => '{{SITENAME}} ਈਮੇਲ',
 'usermaildisabled' => 'ਮੈਂਬਰ ਈ-ਮੇਲ ਬੰਦ ਹੈ',
@@ -1570,8 +1567,8 @@ to upload files.',
 'watchnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
 'watchnologintext' => 'ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਫੇਰ-ਬਦਲ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਲਾਗਇਨ]] ਕਰਨਾ ਪਵੇਗਾ।',
 'addwatch' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ’ਚ ਜੋੜੋ',
-'addedwatchtext' => "ਸਫ਼ਾ \"[[:\$1]]\" à¨¤à©\81ਹਾਡà©\80 [[Special:Watchlist|ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f]] ’ਚ ਜੁੜ ਚੁੱਕਾ ਹੈ।
-à¨\87ਸ à¨\85ਤà©\87 à¨\87ਸਦà©\87 à¨\97ੱਲ-ਬਾਤ à¨¸à¨«à¨¼à©\87 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨\93ਥà©\87 à¨µà¨\96ਾà¨\88 à¨¦à©\87ਣà¨\97à©\80à¨\86à¨\82 à¨\85ਤà©\87 à¨µà©\87à¨\96ਣ à¨¦à©\80 à¨¸à©\8cà¨\96 à¨²à¨\88 [[Special:RecentChanges|ਤਾà¨\9c਼ਾ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f]] à¨µà¨¿à¨\9a à¨\87ਹ à¨¸à¨«à¨¼ਾ '''ਗੂੜ੍ਹਾ''' ਦਿਖਾਈ ਦੇਵੇਗਾ।",
+'addedwatchtext' => "ਪੰਨਾ \"[[:\$1]]\" à¨¤à©\81ਹਾਡà©\80 [[Special:Watchlist|ਧਿà¨\86ਨਸà©\82à¨\9aà©\80]] ’ਚ ਜੁੜ ਚੁੱਕਾ ਹੈ।
+à¨\87ਸ à¨\85ਤà©\87 à¨\87ਸਦà©\87 à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨\93ਥà©\87 à¨µà¨\96ਾà¨\88 à¨¦à©\87ਣà¨\97à©\80à¨\86à¨\82 à¨\85ਤà©\87 à¨µà©\87à¨\96ਣ à¨¦à©\80 à¨¸à©\8cà¨\96 à¨²à¨\88 [[Special:RecentChanges|ਹਾਲ à¨¹à©\80 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82]] à¨µà¨¿à©±à¨\9a à¨\87ਹ à¨ªà©°à¨¨ਾ '''ਗੂੜ੍ਹਾ''' ਦਿਖਾਈ ਦੇਵੇਗਾ।",
 'removewatch' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ’ਚੋਂ ਹਟਾਓ',
 'removedwatchtext' => 'ਸਫ਼ਾ "[[:$1]]" [[Special:Watchlist|ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ]] ’ਚੋਂ ਹਟ ਚੁੱਕਾ ਹੈ।',
 'watch' => 'ਧਿਆਨ ਰੱਖੋ',
@@ -1595,6 +1592,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'enotif_lastvisited' => 'ਤੁਹਾਡੀ ਆਖ਼ਰੀ ਆਮਦ ਤੋਂ ਲੈ ਕੇ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।',
 'enotif_lastdiff' => 'ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।',
 'enotif_anon_editor' => 'ਅਗਿਆਤ ਯੂਜ਼ਰ $1',
+'created' => 'ਬਣਾਇਆ',
+'changed' => 'ਬਦਲਿਆ',
 
 # Delete
 'deletepage' => 'ਪੇਜ ਹਟਾਓ',
@@ -1609,7 +1608,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'actionfailed' => 'ਕਾਰਵਾਈ ਨਾਕਾਮ',
 'deletedtext' => '"$1" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।
 ਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।',
-'dellogpage' => 'ਮਿਟਾਉਣ ਦਾ ਚਿੱਠਾ',
+'dellogpage' => 'ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ',
 'dellogpagetext' => 'ਹੇਠਾਂ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਮਿਟਾਉਣਾਂ ਦੀ ਲਿਸਟ ਹੈ।',
 'deletionlog' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
 'deletecomment' => 'ਕਾਰਨ:',
@@ -1648,8 +1647,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'protect-text' => "ਇੱਥੇ ਸ਼ਾਇਦ ਤੁਸੀਂ ਸਫ਼ਾ '''$1''' ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਵੇਖ ਅਤੇ ਬਦਲ ਸਕਦੇ ਹੋ।",
 'protect-default' => 'ਸਭ ਯੂਜ਼ਰ ਮਨਜ਼ੂਰ',
 'protect-fallback' => '"$1" ਅਧਿਕਾਰ ਲੋੜੀਦਾ ਹੈ',
-'protect-level-autoconfirmed' => 'ਨਵà©\87à¨\82 à¨¤à©\87 à¨\97਼à©\88ਰ-ਰà¨\9cਿਸà¨\9fਰ à¨¯à©\82à¨\9c਼ਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ',
-'protect-level-sysop' => 'à¨\95à©\87ਵਲ à¨ªà¨°à¨¸à¨¼à¨¾à¨¸à¨¼ਕ',
+'protect-level-autoconfirmed' => 'ਨਵà©\87à¨\82 à¨¤à©\87 à¨\97à©\88ਰ-ਰà¨\9cਿਸà¨\9fਰ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ',
+'protect-level-sysop' => 'à¨\95à©\87ਵਲ à¨ªà©\8dਰਬੰਧਕ',
 'protect-summary-cascade' => 'ਕਾਸਕੇਡਿੰਗ',
 'protect-cascade' => 'ਇਸ ਸਫ਼ੇ ਵਿਚ ਸ਼ਾਮਲ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਕਰੋ (ਕਾਸਕੇਡਿੰਗ ਸੁਰੱਖਿਆ)',
 'protect-cantedit' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਨਹੀਂ ਬਦਲ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੋਧਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
@@ -1687,8 +1686,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'undeleteviewlink' => 'ਵੇਖੋ',
 'undeletereset' => 'ਰੀ-ਸੈੱਟ',
 'undeletecomment' => 'ਟਿੱਪਣੀ:',
-'undelete-header' => 'ਤਾà¨\9c਼à©\87 à¨®à¨¿à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼ਿਆਂ ਲਈ [[Special:Log/
-delete|ਮਿà¨\9fਾà¨\89ਣਾà¨\82 ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
+'undelete-header' => 'ਤਾà¨\9c਼à©\87 à¨¹à¨\9fਾà¨\8f à¨\97à¨\8f à¨ªà©°à¨¨ਿਆਂ ਲਈ [[Special:Log/
+delete|ਹà¨\9fਾà¨\89ਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'undelete-search-title' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
 'undelete-search-box' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
 'undelete-search-submit' => 'ਖੋਜੋ',
@@ -1708,7 +1707,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'month' => 'ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਮਹੀਨੇ ਤੋਂ :',
 'year' => 'ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਸਾਲ ਤੋਂ :',
 
-'sp-contributions-newbies' => 'ਸਿਰਫ਼ à¨¨à¨µà©\87à¨\82 à¨®à©\88à¨\82ਬਰਾਂ ਦੇ ਯੋਗਦਾਨ ਵਖਾਓ',
+'sp-contributions-newbies' => 'ਸਿਰਫ਼ à¨¨à¨µà©\87à¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾਂ ਦੇ ਯੋਗਦਾਨ ਵਖਾਓ',
 'sp-contributions-newbies-sub' => 'ਨਵੇਂ ਅਕਾਊਂਟਾਂ ਲਈ',
 'sp-contributions-blocklog' => 'ਪਾਬੰਦੀ ਚਿੱਠਾ',
 'sp-contributions-uploads' => 'ਅਪਲੋਡ',
@@ -1719,8 +1718,8 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'sp-contributions-blocked-notice-anon' => 'ਇਹ IP ਪਤਾ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
-'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨®à©\88à¨\82ਬਰ ਨਾਮ:',
-'sp-contributions-toponly' => 'à¨\95à©\87ਵਲ à¨\89ਨà©\8dਹਾà¨\82 à¨¸à©°à¨ªà¨¾à¨¦à¨¨à¨¾à¨\82 à¨¨à©\82à©° à¨¦à¨¿à¨\96ਾਵਾà¨\82 ਜੋ ਨਵੀਨਤਮ ਸੰਸ਼ੋਧਨ ਹਨ',
+'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਨਾਮ:',
+'sp-contributions-toponly' => 'à¨\95à©\87ਵਲ à¨\89ਨà©\8dਹਾà¨\82 à¨¸à©°à¨ªà¨¾à¨¦à¨¨à¨¾à¨\82 à¨¨à©\82à©° à¨µà¨\96ਾà¨\93 ਜੋ ਨਵੀਨਤਮ ਸੰਸ਼ੋਧਨ ਹਨ',
 'sp-contributions-submit' => 'ਖੋਜੋ',
 
 # What links here
@@ -1767,7 +1766,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'unblocked-range' => '$1 ਪਾਬੰਦੀ ਮੁਕਤ ਹੋ ਚੁੱਕੀ ਹੈ',
 'unblocked-id' => 'ਪਾਬੰਦੀ $1 ਹਟ ਚੁੱਕੀ ਹੈ',
 'blocklist' => 'ਪਾਬੰਦੀਸ਼ੁਦਾ ਮੈਂਬਰ',
-'ipblocklist' => 'ਪਾਬੰਦà©\80ਸ਼à©\81ਦਾ à¨®à©\88à¨\82ਬਰ',
+'ipblocklist' => 'ਪਾਬੰਦà©\80ਸ਼à©\81ਦਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
 'ipblocklist-legend' => 'ਪਾਬੰਦੀਸ਼ੁਦਾ ਮੈਂਬਰ ਲੱਭੋ',
 'blocklist-userblocks' => 'ਖਾਤਾ ਪਾਬੰਦੀਆਂ ਲੁਕਾਓ',
 'blocklist-tempblocks' => 'ਆਰਜ਼ੀ ਪਾਬੰਦੀਆਂ ਲੁਕਾਓ',
@@ -1848,7 +1847,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 # Namespace 8 related
 'allmessages' => 'ਸਿਸਟਮ ਸੁਨੇਹੇ',
 'allmessagesname' => 'ਨਾਮ',
-'allmessagesdefault' => 'ਡਿਫਾਲà¨\9f à¨\9fà©\88à¨\95ਸà¨\9f',
+'allmessagesdefault' => 'ਡਿਫਾਲà¨\9f à¨ªà¨¾à¨ ',
 'allmessagescurrent' => 'ਮੌਜੂਦਾ ਟੈਕਸਟ',
 'allmessages-filter-legend' => 'ਛਾਨਣਾ',
 'allmessages-filter-all' => 'ਸਭ',
@@ -1873,10 +1872,10 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Import log
 'importlogpage' => 'ਇੰਪੋਰਟ ਲਾਗ',
-'import-logentry-upload-detail' => '$1 à¨°à©\80ਵਿà¨\9c਼ਨ',
+'import-logentry-upload-detail' => '$1 ਰੀਵਿਜਨ',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨®à©\88à¨\82ਬਰ ਪੰਨਾ',
+'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਪੰਨਾ',
 'tooltip-pt-mytalk' => 'ਤੁਹਾਡਾ ਚਰਚਾ ਪੰਨਾ',
 'tooltip-pt-preferences' => 'ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ',
 'tooltip-pt-watchlist' => 'ਓਹਨਾਂ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ ਜੋ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੇਖ ਰਹੇ ਹੋ',
@@ -1904,29 +1903,29 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 '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-feed-atom' => 'ਇਸ ਪੰਨੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
-'tooltip-t-contributions' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਦੇ ਯੋਗਦਾਨ ਦੀ ਸੂਚੀ',
-'tooltip-t-emailuser' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'tooltip-t-contributions' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਦੇ ਯੋਗਦਾਨ ਦੀ ਸੂਚੀ',
+'tooltip-t-emailuser' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'tooltip-t-upload' => 'ਚਿੱਤਰ ਜਾਂ ਮੀਡੀਆ ਫਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
-'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨\96ਾਸ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ',
+'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ',
 'tooltip-t-print' => 'ਇਹ ਪੰਨੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
 'tooltip-t-permalink' => 'ਪੰਨੇ ਦੇ ਇਸ ਰੀਵਿਜਨ ਲਈ ਪੱਕਾ ਲਿੰਕ',
 'tooltip-ca-nstab-main' => 'ਸਮੱਗਰੀ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-user' => 'ਮੈਂਬਰ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-media' => 'ਮੀਡਿਆ ਪੇਜ ਵੇਖੋ',
-'tooltip-ca-nstab-special' => 'à¨\87ਹ à¨\96ਾਸ ਪੰਨਾ ਹੈ, ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਬਦਲ ਨਹੀਂ ਸਕਦੇ।',
+'tooltip-ca-nstab-special' => 'à¨\87ਹ à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ ਪੰਨਾ ਹੈ, ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਬਦਲ ਨਹੀਂ ਸਕਦੇ।',
 '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' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲੀ ਨਿਸ਼ਾਨ ਲਾਓ',
+'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¬à¨¦ਲੀ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tooltip-save' => 'ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ',
 'tooltip-preview' => 'ਆਪਣੀ ਤਬਦੀਲੀ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ!',
 'tooltip-diff' => 'ਤੁਹਾਡੇ ਦੁਆਰਾ ਲਿਖਤ ਵਿੱਚ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਵਖਾਉਂਦਾ ਹੈ',
@@ -1944,7 +1943,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 # Attribution
 'lastmodifiedatby' => 'ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ $3 ਨੇ ਸੋਧਿਆ ਸੀ।',
 'others' => 'ਹੋਰ',
-'siteusers' => '{{SITENAME}} ਯੂਜ਼ਰ $1',
+'siteusers' => '{{SITENAME}} {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰਾਂ}} $1',
 'creditspage' => 'ਪੇਜ ਮਾਣ',
 
 # Spam protection
@@ -1963,12 +1962,12 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'skinname-simple' => 'ਸੈਂਪਲ',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣà©\80 à¨¤à¨¬à¨¦à©\80ਲੀ',
+'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣà©\80 à¨¬à¨¦ਲੀ',
 'nextdiff' => 'ਤਾਜ਼ਾ ਸੰਪਾਦਨ →',
 
 # Media information
 '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-nohires' => 'ਇਸ ਤੋਂ ਵੱਡੀ ਚਿੱਤਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
@@ -2031,6 +2030,11 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'exif-gpsspeed-k' => 'ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ',
 'exif-gpsspeed-m' => 'ਮੀਲ ਪ੍ਰਤੀ ਘੰਟਾ',
 
+'exif-iimcategory-war' => 'ਯੁੱਧ, ਸੰਘਰਸ਼ ਅਤੇ ਅਸ਼ਾਂਟੀ',
+'exif-iimcategory-wea' => 'ਮੌਸਮ',
+
+'exif-urgency-normal' => 'ਸਧਾਰਨ ($1)',
+
 # External editor support
 'edit-externally' => 'ਬਾਹਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤਦੇ ਹੋਏ ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਸੰਪਾਦਨ ਕਰੋ।',
 'edit-externally-help' => '(ਜ਼ਿਆਦਾ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
@@ -2039,6 +2043,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'watchlistall2' => 'ਸਭ',
 'namespacesall' => 'ਸਭ',
 'monthsall' => 'ਸਭ',
+'limitall' => 'ਸਭ',
 
 # E-mail address confirmation
 'confirmemail' => 'ਈਮੇਲ ਐਡਰੈੱਸ ਪੁਸ਼ਟੀ',
@@ -2082,12 +2087,14 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'livepreview-ready' => 'ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...ਤਿਆਰ!',
 
 # Watchlist editor
+'watchlistedit-normal-title' => 'ਧਿਆਨਸੂਚੀ ਬਦਲੋ',
 'watchlistedit-raw-titles' => 'ਟਾਇਟਲ:',
+'watchlistedit-raw-submit' => 'ਧਿਆਨਸੂਚੀ ਨੂੰ ਅਪਡੇਟ ਕਰੋ',
 'watchlistedit-raw-added' => '{{PLURAL:$1|1 title was|$1 titles were}} ਸ਼ਾਮਲ:',
 'watchlistedit-raw-removed' => '{{PLURAL:$1|1 title was|$1 titles were}} ਹਟਾਓ:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'ਮà©\8cà¨\95à©\87 à¨®à©\81ਤਾਬà¨\95 à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਵੇਖੋ',
+'watchlisttools-view' => 'ਮà©\8cà¨\95à©\87 à¨®à©\81ਤਾਬà¨\95 à¨¬à¨¦ਲੀਆਂ ਵੇਖੋ',
 'watchlisttools-edit' => 'ਧਿਆਨਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੰਪਾਦਨ ਕਰੋ',
 'watchlisttools-raw' => 'ਕੱਚੀ ਧਿਆਨਸੂਚੀ ਸੰਪਾਦਨ ਕਰੋ',
 
@@ -2096,10 +2103,16 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Special:Version
 'version' => 'ਵਰਜਨ',
+'version-other' => 'ਹੋਰ',
+
+# Special:FilePath
+'filepath-page' => 'ਫਾਈਲ:',
+'filepath-submit' => 'ਜਾਓ',
 
 # Special:SpecialPages
-'specialpages' => 'à¨\96ਾਸ ਪੰਨੇ',
+'specialpages' => 'ਵਿਸ਼à©\87ਸ਼ ਪੰਨੇ',
 'specialpages-group-login' => 'ਲਾਗਇਨ / ਖਾਤਾ ਬਣਾਓ',
+'specialpages-group-users' => 'ਵਰਤੋਂਕਾਰਾਂ ਅਤੇ ਅਧਿਕਾਰ',
 
 # Special:BlankPage
 'blankpage' => 'ਖ਼ਾਲੀ ਸਫ਼ਾ',
@@ -2116,12 +2129,26 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|ਟੈਗ]] ਛਾਨਣੀ:',
+'tags-tag' => 'ਟੈਗ ਦਾ ਨਾਮ',
+'tags-edit' => 'ਸੰਪਾਦਨ',
 
 # HTML forms
 'htmlform-submit' => 'ਭੇਜੋ',
 'htmlform-reset' => 'ਬਦਲਾਅ ਵਾਪਸ ਲਵੋ',
 'htmlform-selectorother-other' => 'ਹੋਰ',
 
+# New logging system
+'logentry-move-move' => "$1 ਨੇ $3 ਪੰਨੇ $4 'ਤੇ ਸਥਾਨਾਂਤਰਿਤ ਕੀਤਾ",
+'logentry-newusers-newusers' => 'ਮੈਂਬਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ',
+'logentry-newusers-create' => 'ਵਰਤੋਂਕਾਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ',
+'logentry-newusers-create2' => 'ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3 $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ',
+'rightsnone' => '(ਕੋਈ ਨਹੀਂ)',
+
+# Feedback
+'feedback-subject' => 'ਵਿਸ਼ਾ:',
+'feedback-message' => 'ਸੁਨੇਹਾ:',
+'feedback-cancel' => 'ਰੱਦ ਕਰੋ',
+
 # Search suggestions
 'searchsuggest-search' => 'ਖੋਜ',
 
index 1216acf..b644558 100644 (file)
@@ -950,11 +950,12 @@ Nung ibie me, magamit ya bang kilalanan ing kekang ambag.',
 'right-userrights-interwiki' => 'I-edit la reng katulirang talagamit (user rights) da reng talagamit kareng aliwang karinan a wiki',
 'right-siteadmin' => 'Isara ya ampong ibusni ing database',
 
+# Special:Log/newusers
+'newuserlogpage' => "Tala ning pamaglalang talagamit (''User creation log'')",
+
 # User rights log
 'rightslog' => 'Tala da reng katulirang talagamit (user rights log)',
 'rightslogtext' => 'Ini tala de reng miyalilan king katulirang talagamit (user rights).',
-'rightslogentry' => 'miyalilan ya ing grupu nung nu ya kayanib i $1 manibat king $2 paras king $3',
-'rightsnone' => '(ala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'i-edit/alilan ya ing bulung a ini',
@@ -1322,9 +1323,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Pakit',
 'listusers-noresult' => 'Alang meyakit a talagamit.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Tala ning pamaglalang talagamit (''User creation log'')",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Katuliran da reng grupung talagamit (user group rights)',
 'listgrouprights-summary' => 'Ing makatuki tala (list) de reng grupung talagamit a mituldu kening wiki, ampo reng karelang katuliran king pamaglub (access rights). Ating karagdagang impormasiun tungkul king katuliran ning balang metung [[{{MediaWiki:Listgrouprights-helppage}}|keni]].',
@@ -1418,6 +1416,8 @@ Ba mong ayalilan deng pakatuldu king kekang tala ring babanten (watchlist settin
 
 Keni ka magparalang puna/komentu at maniad karagdagang saup:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'melalang',
+'changed' => 'miyalilan',
 
 # Delete
 'deletepage' => 'Buran ya ing bulung',
@@ -2345,5 +2345,6 @@ Mayari/mapasu ya ining confirmation code keng $4.',
 # New logging system
 'revdelete-restricted' => 'ipairal la reng limitasiun kareng sysop',
 'revdelete-unrestricted' => 'ilako la reng makabawal kareng sysops',
+'rightsnone' => '(ala)',
 
 );
index 022a592..e22c428 100644 (file)
@@ -551,6 +551,9 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 
 'grouppage-sysop' => '{{ns:project}}:Aménistrateus',
 
+# Special:Log/newusers
+'newuserlogpage' => "Jornal éd chés créachons d'comptes d'uzeu",
+
 # User rights log
 'rightslog' => "Jornal d'chés droés dechl uzeu",
 
@@ -743,9 +746,6 @@ Vir apré ([$2 pache]).",
 # Special:ActiveUsers
 'activeusers' => 'Lisse des ouvreus uzeus',
 
-# Special:Log/newusers
-'newuserlogpage' => "Jornal éd chés créachons d'comptes d'uzeu",
-
 # Special:ListGroupRights
 'listgrouprights-summary' => "L'pache-lo ch'est ène lisse d'chés groupes d'uzeus définis édseur ech wiki aveuc chés drouots d'intrèe achuchonnés.<br />I put y avoèr ichi d'eutes [[MediaWiki:Listgrouprights-helppage|informacions]] édseur chés drouots individuèls. ([[{{MediaWiki:Listgrouprights-helppage}}|vir]])",
 'listgrouprights-members' => '(lisse éd chés mimbes)',
index a8d240b..ab3f5ce 100644 (file)
@@ -487,8 +487,8 @@ Paesswatt fer nau: $2',
 'right-writeapi' => 'Yuus vun write API',
 'right-delete' => 'Bledder lesche',
 
-# User rights log
-'rightsnone' => '(ken)',
+# Special:Log/newusers
+'newuserlogpage' => 'Logbuch vun neie Yuuser',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'es Blatt zu lese',
@@ -668,9 +668,6 @@ Paesswatt fer nau: $2',
 'activeusers-hidebots' => 'Waddefresser verschwinne losse',
 'activeusers-hidesysops' => 'Verwalter verschwinne losse',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logbuch vun neie Yuuser',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechte vun Yuuser-Druppe',
 'listgrouprights-group' => 'Druppe',
@@ -707,6 +704,7 @@ Paesswatt fer nau: $2',
 'unwatching' => 'Nimmi watsche...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}}-Yuuser',
+'changed' => 'gennert',
 
 # Delete
 'deletepage' => 'Blatt lesche',
@@ -1012,6 +1010,9 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'htmlform-reset' => 'Enneringe losmache',
 'htmlform-selectorother-other' => 'Annere',
 
+# New logging system
+'rightsnone' => '(ken)',
+
 # Feedback
 'feedback-message' => 'Melding:',
 
index 6f3ef7c..5121c2e 100644 (file)
@@ -18,11 +18,12 @@ $fallback = 'de';
 
 $messages = array(
 # User preference toggles
-'tog-showtoolbar' => "Werkzaich zum Bearwaide zaische (dodezu braucht's JavaScript)",
+'tog-showtoolbar' => "Werkzaich zum Bearwaide zaische (dodezu brauchd's JavaScript)",
+'tog-showhiddencats' => 'Zaisch vaschdeglde Kadegorije',
 
 'underline-always' => 'Immer',
 'underline-never' => 'Garnet',
-'underline-default' => 'Des nemme, was em Broweser gsaacht hoscht.',
+'underline-default' => 'Des nemme, was em Browser gsaachd hoschd.',
 
 # Dates
 'sunday' => 'Sundaach',
@@ -49,7 +50,7 @@ $messages = array(
 'august' => 'Auguschd',
 'september' => 'Sebdember',
 'october' => 'Ogdower',
-'november' => 'November',
+'november' => 'Nowember',
 'december' => 'Dezember',
 'january-gen' => 'Jänner',
 'february-gen' => 'Fewwer',
@@ -58,10 +59,10 @@ $messages = array(
 'may-gen' => 'Mai',
 'june-gen' => 'Juni',
 'july-gen' => 'Juli',
-'august-gen' => 'Auguscht',
+'august-gen' => 'Auguschd',
 'september-gen' => 'Sebdember',
 'october-gen' => 'Ogdower',
-'november-gen' => 'November',
+'november-gen' => 'Nowember',
 'december-gen' => 'Dezember',
 'jan' => 'Jän',
 'feb' => 'Few',
@@ -82,6 +83,7 @@ $messages = array(
 'subcategories' => 'Unnerkadegorie',
 'category-media-header' => 'Medie in de Kadegorie „$1“',
 'hidden-categories' => '{{PLURAL:$1|Verschdegelde Kadegorie|Verschdegelde Kadegorije}}',
+'hidden-category-category' => 'Verschdegelde Kadegorije',
 'category-subcat-count' => '{{PLURAL:$2|Die Kategorie hot die Unnerkategorie:|{{PLURAL:$1|Die Unnerkategori isch eni vun insgsamt $2 Unnerkategorie in derre Kategorie:|S werre $1 vun insgsamt $2 Unnerkategorie in derre Kategorie aagezeicht:}}}}',
 'category-article-count' => "{{PLURAL:$2|In derre Kadegorie hot's numme die Said.|Die {{PLURAL:$1|Said|$1 Saide}} gebbt's in derre Kadegorie, vun insgsamt $2.}}",
 'listingcontinuesabbrev' => '(Forts.)',
@@ -89,6 +91,7 @@ $messages = array(
 'about' => 'Iwwer',
 'newwindow' => '(werd im e naie Fenschter uffgmacht)',
 'cancel' => 'Abbreche',
+'mypage' => 'Said',
 'mytalk' => 'Dischbediere',
 'navigation' => 'Nawigadzion',
 
@@ -106,6 +109,7 @@ $messages = array(
 'vector-view-history' => 'Dadaigschischd',
 'vector-view-view' => 'Lese',
 'actions' => 'Agzione',
+'namespaces' => 'Nomensreem',
 
 'errorpagetitle' => 'Fehler',
 'returnto' => 'Zrick zu $1.',
@@ -117,16 +121,18 @@ $messages = array(
 'searcharticle' => 'Suche',
 'history' => 'Gschichd vun de Said',
 'history_short' => 'Versione',
-'printableversion' => 'Druck-Aasicht',
+'printableversion' => 'Drugg-Aasicht',
 'permalink' => 'Permanentlink',
 'print' => 'Ausdrugge',
+'view' => 'Lese',
 'edit' => 'Bearwaide',
 'create' => 'Aaleche',
 'editthispage' => 'Die Said bearwaide',
 'delete' => 'Lesche',
 'undelete_short' => '{{PLURAL:$1|ä Ännerung|$1 Ännerunge}} widderherschdelle',
-'protect' => 'schitze',
+'protect' => 'schidze',
 'protect_change' => 'ännere',
+'protectthispage' => 'Die Said schidze',
 'unprotect' => 'Saideschudz änare',
 'newpage' => 'Naie Said',
 'talkpage' => 'Iwwer die Said dischbediere',
@@ -163,20 +169,21 @@ $messages = array(
 'privacy' => 'Dadeschuds',
 'privacypage' => 'Project:Daadeschutz',
 
-'badaccess' => 'Kää ausraichende Recht',
+'badaccess' => 'Kää ausraichende Reschd',
 
 'retrievedfrom' => 'Vun "$1"',
 'youhavenewmessages' => 'Du hoscht $1 ($2).',
-'newmessageslink' => 'naie Nochrichte',
-'newmessagesdifflink' => 'letschte Ännerung',
+'newmessageslink' => 'naie Nochrischde',
+'newmessagesdifflink' => 'ledschde Ännerung',
 'editsection' => 'bearwaide',
 'editold' => 'bearwaide',
+'viewsourceold' => 'Quelltegschd ogugge',
 'editlink' => 'bearwaide',
-'viewsourcelink' => 'Quell aagucke',
+'viewsourcelink' => 'Quell aagugge',
 'editsectionhint' => 'Abschnidd ännere: $1',
 'toc' => 'Inhald',
-'showtoc' => 'zaiche',
-'hidetoc' => 'versteggeln',
+'showtoc' => 'zaische',
+'hidetoc' => 'versteggle',
 'site-rss-feed' => '$1 RSS Feed',
 'site-atom-feed' => '$1 Atom Feed',
 'page-rss-feed' => '"$1" RSS Feed',
@@ -189,10 +196,10 @@ $messages = array(
 'nstab-media' => 'Media',
 'nstab-special' => 'Spezialsaid',
 'nstab-project' => 'Bordal',
-'nstab-image' => 'Datei',
+'nstab-image' => 'Dadei',
 'nstab-mediawiki' => 'Mitdeelung',
 'nstab-template' => 'Vorlaach',
-'nstab-help' => 'Hilfe',
+'nstab-help' => 'Hilf',
 'nstab-category' => 'Kadegorie',
 
 # General errors
@@ -210,37 +217,38 @@ S kann sai, dass es ää odder meh Zaiche drin hot, wu im Titel vun de Said nid
 
 # Login and logout pages
 'yourname' => 'Benutzername:',
-'yourpassword' => 'Passwort:',
+'yourpassword' => 'Password:',
+'yourpasswordagain' => 'Password nomol oigewe:',
 'remembermypassword' => 'Mai Passwort uff dem Computer merke (hechschtens fer $1 {{PLURAL:$1|Dach|Dach}})',
 'login' => 'Omelde',
-'nav-login-createaccount' => 'Aamelde / Benutzerkonto aaleche',
+'nav-login-createaccount' => 'Aamelde / Benudzerkondo aaleche',
 'userlogin' => 'Omelde / Benutzerkonto anleche',
 'logout' => 'Abmelde',
 'userlogout' => 'Abmelde',
-'nologinlink' => 'E Benutzerkonto aaleche',
+'nologinlink' => 'E Benutzerkondo aaleche',
 'mailmypassword' => 'Nais Passwort per E-Mail schicke',
 
 # Edit page toolbar
-'bold_sample' => 'Fette Schrift',
-'bold_tip' => 'Fette Schrift',
-'italic_sample' => 'Kursive Schrift',
-'italic_tip' => 'Kursive Schrift',
-'link_sample' => 'Stichwort',
+'bold_sample' => 'Fedde Schrifd',
+'bold_tip' => 'Fedde Schrifd',
+'italic_sample' => 'Kursive Schrifd',
+'italic_tip' => 'Kursive Schrifd',
+'link_sample' => 'Schdischword',
 'link_tip' => 'Interner Link',
-'extlink_sample' => 'http://www.example.com Linktext',
+'extlink_sample' => "http://www.example.com Ling'gtegschd",
 'extlink_tip' => 'Externer Link (uff http:// Acht gewwe)',
 'headline_sample' => 'Abschnitts-Iwwerschrift',
 'headline_tip' => 'Iwwerschrift Ewene 2',
 'nowiki_sample' => 'Gebb do en Text ai, wu nit formatiert wird',
 'nowiki_tip' => 'Wiki-Formatierunge ignoriere',
 'image_tip' => 'Bildverwais',
-'media_tip' => 'Dateilink',
+'media_tip' => 'Dadeilink',
 'sig_tip' => 'Dai Unnerschrifd mid ener Zaidaagab',
 'hr_tip' => 'Horizontale Linie (sparsam verwenne)',
 
 # Edit pages
 'summary' => 'Zammefassung:',
-'subject' => 'Betreff:',
+'subject' => 'Bedreff:',
 'minoredit' => 'Des isch e klänni Bearwaidung',
 'watchthis' => 'Die Said beowachde',
 'savearticle' => 'Said schbeichere',
@@ -261,46 +269,48 @@ Doi Ännerunge sinn no nid gschbaichert worre!",
 'editing' => 'Am $1 bearwaide',
 'editingsection' => '$1 bearwaide (Abschnitt)',
 'yourtext' => 'Doin Tegschd',
+'storedversion' => 'Gschbaischerdi Version',
 'yourdiff' => 'Unaschied',
-'copyrightwarning' => "Bitte gebb acht, dass alle Baidräch zu {{SITENAME}} unner $2 vereffentlicht werre (guck $1 fer mehr Details).
-Wenn du nit willhsct, dass deswu du gschriwwe hoscht, gänneret un kopiert werre kann, dann duu s do nit naischraiwe.<br />
-du gebbscht do au zu, dass Du des selwerscht gschriwwe hoscht orrer vun ere effentliche, fraie Quell ('''public domain''')orrer vun ere ähnliche fraie Quell her hoscht.
-'''SCHRAIB DO NIX NAI, WAS URHEWERRECHTKLICH GSCHITZT ISCH!'''",
-'templatesused' => '{{PLURAL:$1|Vorlach wu uff derre Said gebraucht werd|Vorlache wu uff derre Said gebraucht werre}}:',
-'templatesusedpreview' => '{{PLURAL:$1|Vorlach wu in derre Vorschau gebraucht werd|Vorlache wu in derre Vorschau gebraucht werre}}:',
-'template-protected' => '(gschitzt)',
-'template-semiprotected' => '(halb-gschitzt)',
+'copyrightwarning' => "Bidde gebb achd, dass alle Baidräch zu {{SITENAME}} unner $2 vereffentlischd werre (guck $1 fer mehr Details).
+Wenn du nit willschd, dass deswu du gschriwwe hoschd, gänneret un kopierd werre kann, dann duu s do nit naischraiwe.<br />
+du gebbschd do au zu, dass Du des selwerschd gschriwwe hoschd orrer vun ere effendliche, fraie Quell ('''public domain''') orrer vun ere ähnliche fraie Quell her hoschd.
+'''SCHRAIB DO NIX NAI, WAS URHEWERRECHDLICH GSCHIZD ISCH!'''",
+'templatesused' => '{{PLURAL:$1|Vorlach wu uff derre Said gbrauchd werd|Vorlache wu uff derre Said gbrauchd werre}}:',
+'templatesusedpreview' => '{{PLURAL:$1|Vorlach wu in derre Vorschau gbrauchd werd|Vorlache wu in derre Vorschau gbrauchd werre}}:',
+'template-protected' => '(gschizd)',
+'template-semiprotected' => '(halb-gschizd)',
 'hiddencategories' => 'Die Said ghert zu {{PLURAL:$1|1 versteckelte Kategorie|$1 versteckelte Kategorie}}:',
 'permissionserrorstext-withaction' => 'Du därfscht nid $2, aus {{PLURAL:$1|dem Grund|denne Grind}}:',
 'moveddeleted-notice' => 'Die Said isch gleschd worre.
 De Leschaidrach fa die Said isch do unne als Kwell aagewwe.',
 
 # History pages
-'viewpagelogs' => 'Lochbicher fer die Said aagucke',
-'currentrev-asof' => 'Aktuelle Version vun $1',
+'viewpagelogs' => 'Lochbischer fer die Said aagucke',
+'currentrev' => 'Ledschdi Änarung',
+'currentrev-asof' => 'Agduell Version vun $1',
 'revisionasof' => 'Version vun $1',
 'previousrevision' => '← Äldere Versione',
-'nextrevision' => 'Naier Version →',
-'currentrevisionlink' => 'Aktuell Version',
+'nextrevision' => 'Naiere Versione →',
+'currentrevisionlink' => 'Agduell Version',
 'cur' => 'jetzert',
-'next' => 'Negschte',
+'next' => 'Negschde',
 'last' => 'vorich',
 'histlegend' => "Du kannscht zwää Versione auswähle un verglaiche.<br />
 Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 '''({{int:last}})''' = Unnerschied zu de voriche Version, '''{{int:minoreditletter}}''' = klenni Ännerung.",
 'history-fieldset-title' => 'In de Versionsgschichd gugge',
-'histfirst' => 'Ältschte',
-'histlast' => 'Naischte',
+'histfirst' => 'Ältschde',
+'histlast' => 'Naischde',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 om $2',
 
 # Revision deletion
-'rev-delundel' => 'zaich/versteckel',
+'rev-delundel' => 'zaisch/verschdeggle',
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-radio-set' => 'Ja',
 'revdelete-radio-unset' => 'Nä',
-'revdelete-submit' => 'Uff die aussgewählt {{PLURAL:$1|Version|Versione}} owende',
+'revdelete-submit' => 'Uff die gewehld {{PLURAL:$1|Version|Versione}} owende',
 'revdel-restore' => 'Sischdbakaid ännere',
 'revdel-restore-deleted' => 'gleschdi Änarunge',
 'revdel-restore-visible' => 'sischdbari Änarunge',
@@ -312,7 +322,7 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'history-title' => 'Änarungsgschischd vun "$1"',
 'lineno' => 'Zail $1:',
 'compareselectedversions' => 'Die Versione mitenonner vergleiche',
-'editundo' => 'zerick',
+'editundo' => 'zerigg',
 
 # Search results
 'searchresults' => 'Ergebnis suche',
@@ -326,6 +336,7 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'nextn' => 'negschte {{PLURAL:$1|$1}}',
 'prevn-title' => 'Frijari $1 {{PLURAL:$1|result|Ergewnis}}',
 'nextn-title' => 'Negschdi $1 {{PLURAL:$1|result|Ergewnis}}',
+'shown-title' => 'Zaisch $1 {{PLURAL:$1|Ergewnis}} vunde Said',
 'viewprevnext' => 'Gugg ($1 {{int:pipe-separator}} $2) ($3)',
 'searchprofile-everything' => 'Alles',
 'searchprofile-articles-tooltip' => 'In $1 gugge',
@@ -339,7 +350,9 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'search-interwiki-caption' => 'Schweschterprojekt',
 'search-interwiki-default' => '$1 Ergebnis:',
 'search-interwiki-more' => '(meh)',
+'searchall' => 'alle',
 'nonefound' => "'''Hiiwais:''' S werre standardmäßich numme e Dail Namensraim durchsucht. Setz ''all:'' vor Dai Suchbegriff zum alle Saide (mit Dischbediersaide, Voalaache usw.) durchsuche odder direkt de Name vum Namensraum, wu durchsucht werre sell.",
+'search-nonefound' => 'Fa die Such hods kä Ergewnis.',
 'powersearch' => 'Erwaiterte Such',
 'powersearch-legend' => 'Erwaiterte Such',
 'powersearch-ns' => 'In de Namensraim suche:',
@@ -357,6 +370,7 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'resetprefs' => 'Oischdellunge verwerfe',
 'guesstimezone' => 'Aus em Browser iwwernemme',
 'yourrealname' => 'Birscherlischer Nome:',
+'yourlanguage' => 'Schbrooch:',
 'gender-unknown' => 'Ghoim gkalde',
 
 # Groups
@@ -366,22 +380,24 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'group-bureaucrat' => 'Birokrade',
 'group-all' => '(alle)',
 
-'group-bot-member' => 'Bot',
-'group-sysop-member' => 'Adminischdrador',
-'group-bureaucrat-member' => 'Birokrad',
+'group-bot-member' => '{{GENDER:$1|Bot}}',
+'group-sysop-member' => '{{GENDER:$1|Adminischdrador}}',
+'group-bureaucrat-member' => '{{GENDER:$1|Birokrad}}',
 
 'grouppage-sysop' => '{{ns:project}}:Adminischtratore',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Naiaameldungs-Logbuch',
+
 # User rights log
 'rightslog' => 'Benutzerrecht-Logbuch',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'die Said bearwaide',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|Ännerung|Ännerunge}}',
-'recentchanges' => 'Was zuletschd gemachd worre isch',
+'recentchanges' => 'Was zuledschd gemachd worre isch',
 'recentchanges-legend' => 'Optione vun de Aazaich',
 'recentchanges-feed-description' => 'Di letschte Ännerunge vun {{SITENAME}} in des Feed aigewwe.',
 'recentchanges-label-minor' => "S'ische glänni Beawaidung",
@@ -394,7 +410,7 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'rcshowhidemine' => 'Mai Bearwaidunge $1',
 'rclinks' => 'Zeich die letschte $1 Ännerunge in de letschte $2 Dache<br />$3',
 'diff' => 'Unnerschied',
-'hist' => 'Gschicht',
+'hist' => 'Gschichd',
 'hide' => 'vaschdeggle',
 'show' => 'zaische',
 'minoreditletter' => 'k',
@@ -418,8 +434,9 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'uploadbtn' => 'Datei hochlade',
 'uploadlogpage' => 'Dateie-Logbuch',
 'filedesc' => 'Zommefassung',
+'fileuploadsummary' => 'Zommefassung:',
 'savefile' => 'Datei schbeichere',
-'uploadedimage' => 'hot „[[$1]]“ hochglade',
+'uploadedimage' => 'hod „[[$1]]“ nuffglade',
 
 # Lock manager
 'lockmanager-notlocked' => '„$1“ hod ned uffgmachd were kenne, die isch ganed gschberd gwesd.',
@@ -429,6 +446,9 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'lockmanager-fail-openlock' => 'Die gschberd Dadai „$1“ komma ned uffmache.',
 'lockmanager-fail-releaselock' => '„$1“ konn ned fraigewe werre.',
 
+# Special:ListFiles
+'listfiles_count' => 'Versione',
+
 # File description page
 'file-anchor-link' => 'Datei',
 'filehist' => 'Dateigschischd',
@@ -438,11 +458,11 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'filehist-datetime' => 'Zaidpungd',
 'filehist-thumb' => 'Vorschaubild',
 'filehist-thumbtext' => 'Vorschaubild fer Version vum $1',
-'filehist-user' => 'Benutzer',
+'filehist-user' => 'Benudzer',
 'filehist-dimensions' => 'Moß',
 'filehist-comment' => 'Kommentar',
 'imagelinks' => 'Dadaivawendung',
-'linkstoimage' => 'Die {{PLURAL:$1|Said verwaist|$1 Saire verwaise}} uff die Datei:',
+'linkstoimage' => 'Die {{PLURAL:$1|Said verwaisd|$1 Saide verwaise}} uff die Datei:',
 'sharedupload' => 'Die Datei isch vun $1 un s kann sai, dass se ach vun annere Projekt gebraucht werd.',
 'uploadnewversion-linktext' => 'E naiere Version vun derre Datei hochlade',
 
@@ -490,9 +510,6 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 # Special:LinkSearch
 'linksearch' => 'Externe Links',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Naiaameldungs-Logbuch',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Midgliederlischd)',
 
@@ -503,6 +520,7 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 # Watchlist
 'watchlist' => 'Beowachdungslischd',
 'mywatchlist' => 'Beowachdungslischd',
+'watchlistfor2' => 'Vun $1 $2',
 'addedwatchtext' => "Die Said \"[[:\$1]]\" isch zu Dainer [[Special:Watchlist|Beowachdungslischt]] zugefiecht worre.
 Zukimftiche Ännerunge an derre Said un de Dischbediersaid, wu dezu ghert, werre doo aagezaicht, un d Said werd '''fett''' aagezaicht in de [[Special:RecentChanges|Letschte Ännerunge]] fer dass es ääfacher isch zum finne.",
 'removedwatchtext' => 'D Said "[[:$1]]" isch aus [[Special:Watchlist|Dainer Beowachdungslischt]] rausgenumme worre.',
@@ -534,11 +552,11 @@ Guck $2 fer e Lischt vun de letschte Leschunge.',
 'deletereasonotherlist' => 'Annere Grund',
 
 # Rollback
-'rollbacklink' => 'Zericksetze',
+'rollbacklink' => 'Zeriggsetze',
 
 # Protect
 'protectlogpage' => 'Saideschutz-Logbuch',
-'protectedarticle' => 'hot "[[$1]]" gschitzt',
+'protectedarticle' => 'hot "[[$1]]" gschizd',
 'modifiedarticleprotection' => 'hot de Schutzstatus vun "[[$1]]" gännert',
 'protectcomment' => 'Grund:',
 'protectexpiry' => 'Bis:',
@@ -547,7 +565,7 @@ Guck $2 fer e Lischt vun de letschte Leschunge.',
 'protect-text' => "Du kannscht de Schutzstatus vun de Said '''$1''' aagucke un ännere.",
 'protect-locked-access' => "Dai Benutzerkonto hot ken Recht zum de Schutzstatus vun ener Said ze ännere.
 Do hot s di aktuelle Aistellunge vun de Said '''$1''':",
-'protect-cascadeon' => 'Die Said isch gschitzt, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.
+'protect-cascadeon' => 'Die Said isch gschizd, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.
 Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uff d Kaskadesperrung.',
 'protect-default' => 'Alle Benutzer erlääwe',
 'protect-fallback' => '«$1»-Berechdichung nedich',
@@ -555,7 +573,7 @@ Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uf
 'protect-level-sysop' => 'Numme Adminischtratore',
 'protect-summary-cascade' => 'Kaskade',
 'protect-expiring' => 'bis $1 (UTC)',
-'protect-cascade' => 'Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrt.',
+'protect-cascade' => 'Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrd.',
 'protect-cantedit' => 'Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.',
 'restriction-type' => 'Berechdichung:',
 'restriction-level' => 'Schutzewene:',
@@ -662,7 +680,7 @@ Bitte duu se vun Hand zammefiehre.'''",
 'movetalk' => 'Dischbediersaid, wu dezu ghert, verschiewe',
 'movelogpage' => 'Verschiewungs-Logbuch',
 'movereason' => 'Grund:',
-'revertmove' => 'Zerick verschiewe',
+'revertmove' => 'Zerigg verschiewe',
 'delete_and_move' => 'Lesche un Verschiewe',
 'delete_and_move_confirm' => 'Ja, Said lesche',
 
@@ -677,7 +695,7 @@ Bitte duu se vun Hand zammefiehre.'''",
 'import-interwiki-submit' => 'Impordiere',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Dai Benutzersaid',
+'tooltip-pt-userpage' => 'Dai Benudzersaid',
 'tooltip-pt-mytalk' => 'Dai Dischbedier-Said',
 'tooltip-pt-preferences' => 'Dai Aistellunge',
 'tooltip-pt-watchlist' => 'D Lischt vun Saide, die wu du beowachde dusch',
@@ -688,10 +706,10 @@ Bitte duu se vun Hand zammefiehre.'''",
 'tooltip-ca-edit' => 'Du kannschd die Said bearwaide.
 Bidde nemmde Vorschau-Knobb vorm Schbaischere',
 'tooltip-ca-addsection' => 'E naie Abschnitt aaleche',
-'tooltip-ca-viewsource' => 'Die Said isch gschitzt.
-Du kannscht awwer de Quelltext aagucke',
+'tooltip-ca-viewsource' => 'Die Said isch gschizd.
+Du kannscht awwer de Quelltegschd aagucke',
 'tooltip-ca-history' => 'Ledschde Versione vun derre Said',
-'tooltip-ca-protect' => 'Die Said schitze',
+'tooltip-ca-protect' => 'Die Said schidze',
 'tooltip-ca-delete' => 'Die Said lesche',
 'tooltip-ca-move' => 'Die Said verschiewe',
 'tooltip-ca-watch' => 'Die Said zu Dainere Beowachdungslischt zufieche',
@@ -705,9 +723,9 @@ Du kannscht awwer de Quelltext aagucke',
 'tooltip-n-portal' => 'Iwwers Brojegd, wude duu kannschd, wu ebbes finne duschd',
 'tooltip-n-currentevents' => 'hinnergundsinformatione finne iwwer naie Eraichnis',
 'tooltip-n-recentchanges' => 'D Lischd vun de ledschde Ännerunge in dem Wiki',
-'tooltip-n-randompage' => 'E zufälliche Said lade',
+'tooltip-n-randompage' => 'E zufällisch Said lade',
 'tooltip-n-help' => 'De Ort zum rausfinne',
-'tooltip-t-whatlinkshere' => 'Lischt vun alle Wikisaide, wu do her verlinkt sinn',
+'tooltip-t-whatlinkshere' => 'Lischd vun alle Wikisaide, wu do her verlingd sinn',
 'tooltip-t-recentchangeslinked' => 'Letschde Ännerunge in Saide, wu vun do verlinkt sin',
 'tooltip-feed-rss' => 'RSS feed fer die Said',
 'tooltip-feed-atom' => 'Atom feed fer die Said',
@@ -730,9 +748,9 @@ Du kannscht awwer de Quelltext aagucke',
 'tooltip-diff' => 'Guck, welle Ännerunge Du im Text gmacht hoscht',
 'tooltip-compareselectedversions' => 'D Unnerschied zwische denne zwai ausgwehlte Versione aagucke',
 'tooltip-watch' => 'Die Said zu Dainer Beowachdunglischd zufieche',
-'tooltip-rollback' => '„Zericksetze“ machd alle Bearwaidunge vum ledschde Bearwaider rickgängich',
-'tooltip-undo' => '„Zerick“ macht numme die Ännerung rickgängich un zaicht d Vorschau aa.
-Du kannschd e Grund in dr Zammfassung aagewwe',
+'tooltip-rollback' => "„Zeriggsetze“ machd alle Bearwaidunge vum ledschde Bearwaider rigg'gängisch",
+'tooltip-undo' => "„Zerigg“ machd numme die Ännerung rigg'gängich un zaichd d Vorschau aa.
+Du kannschd e Grund in dr Zammfassung aagewwe",
 
 # Browsing diffs
 'previousdiff' => '← Ältere Bearwaidung',
@@ -795,10 +813,16 @@ Annere Medadaade sinn noamalawais verschdegld.
 
 # Special:SpecialPages
 'specialpages' => 'Spezialsaide',
+'specialpages-group-other' => 'Onare bsundare Saide',
+'specialpages-group-pagetools' => 'Wergzaisch fa Saide',
+'specialpages-group-wiki' => 'Daade un Wergzaisch',
 
 # Special:Tags
 'tags-edit' => 'bearwaide',
 
+# New logging system
+'rightsnone' => '(-)',
+
 # Feedback
 'feedback-close' => 'Erledischd',
 
index 32b496c..562583a 100644 (file)
@@ -809,6 +809,7 @@ Odczekaj chwilę zanim ponowisz próbę.',
 # E-mail sending
 'php-mail-error-unknown' => 'Wystąpił nieznany błąd w funkcji PHP mail()',
 'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
+'user-mail-no-body' => 'Próbowano wysłać e-mail o psutej lub krótkiej treści.',
 
 # Change password dialog
 'resetpass' => 'Zmień hasło',
@@ -1600,15 +1601,13 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'right-sendemail' => 'Wysyłanie e‐maili do innych użytkowników',
 'right-passwordreset' => 'Sprawdzanie treści e‐maila o resetowaniu hasła',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nowi użytkownicy',
+'newuserlogpagetext' => 'To jest rejestr ostatnio utworzonych kont użytkowników',
+
 # User rights log
 'rightslog' => 'Uprawnienia',
 'rightslogtext' => 'Rejestr zmian uprawnień użytkowników.',
-'rightslogentry' => 'zmienił przynależność $1 do grup ($2 → $3)',
-'rightslogentry-autopromote' => 'automatycznie zmienił przynależność ($2 → $3)',
-'logentry-rights-rights' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup',
-'logentry-rights-autopromote' => '$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)',
-'rightsnone' => 'brak',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'przeglądania tej strony',
@@ -2004,6 +2003,7 @@ Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
 'uploadnewversion-linktext' => 'Załaduj nowszą wersję tego pliku',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'współdzielone zasoby',
+'filepage.css' => '/* Styl CSS tutaj zamieszczony jest dołączany do strony pliku, także na innych wiki */',
 'upload-disallowed-here' => 'Nie możesz nadpisać tego pliku.',
 
 # File reversion
@@ -2261,10 +2261,6 @@ Obsługiwane protokoły: <code>$1</code> (jeśli nie podano, domyślny to http:/
 'activeusers-hidesysops' => 'Ukryj administratorów',
 'activeusers-noresult' => 'Nie odnaleziono żadnego użytkownika.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nowi użytkownicy',
-'newuserlogpagetext' => 'To jest rejestr ostatnio utworzonych kont użytkowników',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Uprawnienia grup użytkowników',
 'listgrouprights-summary' => 'Poniżej znajduje się spis zdefiniowanych na tej wiki grup użytkowników, z wyszczególnieniem przydzielonych im uprawnień.
@@ -2396,6 +2392,8 @@ $UNWATCHURL
 
 Pomoc
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'utworzona',
+'changed' => 'zmieniona',
 
 # Delete
 'deletepage' => 'Usuń stronę',
@@ -2467,6 +2465,7 @@ Wszystkie aktywne zabezpieczenia odnajdziesz na liście [[Special:ProtectedPages
 'prot_1movedto2' => 'stronę [[$1]] przeniósł do [[$2]]',
 'protect-badnamespace-title' => 'Przestrzeń nazw, w której nie można zabezpieczać stron',
 'protect-badnamespace-text' => 'Stron w tej przestrzeni nazw nie można zabezpieczać.',
+'protect-norestrictiontypes-title' => 'Nieblokowalna strona',
 'protect-legend' => 'Potwierdź zabezpieczenie',
 'protectcomment' => 'Powód',
 'protectexpiry' => 'Czas wygaśnięcia',
@@ -2970,6 +2969,7 @@ Brak katalogu dla plików tymczasowych.',
 'import-error-interwiki' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest zarezerwowana do linków zewnętrznych (interwiki).',
 'import-error-special' => 'Strona „$1” nie została zaimportowana, ponieważ należy do specjalnej przestrzeni nazw, która nie zezwala na strony.',
 'import-error-invalid' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest nieprawidłowa.',
+'import-error-unserialize' => 'Wersja $2 strony "$1" nie może zostać odserializowana. Wersja używa modelu treści $3 zserializowanego jako $4',
 'import-options-wrong' => '{{PLURAL:$2|Niepoprawna opcja|Niepoprawne opcje}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Wskazana strona główna jest niepoprawna.',
 'import-rootpage-nosubpage' => 'Przestrzeń nazw "$1" strony głównej nie dopuszcza stron podrzędnych.',
@@ -3076,6 +3076,8 @@ Pozwala na wpisanie powodu w opisie zmian.',
 'print.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd wydruku */',
 'handheld.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd na urządzeniach kieszonkowych skórki ustawionej w zmiennej $wgHandheldStyle */',
 'noscript.css' => '/* Umieszczony tu arkusz stylów CSS będzie wykorzystywany dla użytkowników z wyłączoną obsługą JavaScript */',
+'group-autoconfirmed.css' => '/* CSS tutaj umieszczony będzie dotyczyć tylko automatycznie zatwierdzonych użytkowników */',
+'group-bot.css' => '/* CSS tutaj umieszczony będzie obowiązywał tylko dla botów */',
 
 # Scripts
 'common.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */',
@@ -4054,6 +4056,10 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'logentry-newusers-create2' => 'Konto użytkownika $3 zostało utworzone przez użytkownika $1',
 'logentry-newusers-autocreate' => '$1 automatycznie tworzy konto użytkownika',
 'newuserlog-byemail' => 'hasło zostało wysłane e‐mailem',
+'logentry-rights-rights' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup',
+'logentry-rights-autopromote' => '$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)',
+'rightsnone' => 'brak',
 
 # Feedback
 'feedback-bugornote' => 'Jeśli jesteś {{GENDER:|gotów|gotowa}} szczegółowo opisać problem techniczny proszę [$1 zgłoś błąd].
index 041ed62..b5bf0aa 100644 (file)
@@ -74,7 +74,7 @@ $messages = array(
 'tog-externaleditor' => "Dovré coma stàndard n'editor estern (mach për espert, a-i é dabzògn d'ampostassion speciaj dzora a sò ordinator. [//www.mediawiki.org/wiki/Manual:External_editors Për savèjne ëd pi.])",
 'tog-externaldiff' => "Dovré për stàndard un programa comparator estern (mach për espert, a-i é dabzògn d'ampostassion speciaj ansima a sò ordinator [//www.mediawiki.org/wiki/Manual:External_editors Për savèjne ëd pi.])",
 'tog-showjumplinks' => 'Dovré j\'anliure d\'acessibilità dla sòrt "Va a"',
-'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (a-i va JavaScript e a l'é mach sperimental)",
+'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (a-i va JavaScript) (sperimental)",
 'tog-forceeditsummary' => "Ciama conferma se ël somari dla modìfica a l'é veujd",
 'tog-watchlisthideown' => 'Stërma mie modìfiche ant la ròba che im ten-o sot euj',
 'tog-watchlisthidebots' => 'Stërma le modìfiche fàite daj trigomiro ant la lista dle ròbe che im ten-o sot euj',
@@ -175,6 +175,7 @@ $messages = array(
 'newwindow' => '(as deurb ant na fnestra neuva)',
 'cancel' => 'Scancela',
 'moredotdotdot' => 'Dë pì...',
+'morenotlisted' => 'Autr pa listà...',
 'mypage' => 'Pàgina',
 'mytalk' => 'Ciaciarade',
 'anontalk' => "Ciaciarade për st'adrëssa IP-sì",
@@ -547,6 +548,7 @@ Për piasì speta prima ëd prové torna.",
 # E-mail 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.',
 
 # Change password dialog
 'resetpass' => 'Cambia la ciav',
@@ -1333,15 +1335,13 @@ Costa anformassion a sarà pùblica.",
 'right-sendemail' => "Mandé un mëssagi an pòsta eletrònica a j'àutri utent",
 'right-passwordreset' => 'Vëdde ij mëssagi ëd pòsta eletrònica ëd riampostassion dle ciav',
 
+# Special:Log/newusers
+'newuserlogpage' => "Registr dla creassion dj'utent",
+'newuserlogpagetext' => "Sossì a l'é un registr andova ch'as marco le creassion dj'utent.",
+
 # User rights log
 'rightslog' => "Argistr dij drit ëd j'utent",
 'rightslogtext' => "Costa a l'é na lista dij cambiament aj drit ëd j'utent.",
-'rightslogentry' => "a l'ha tramudà $1 da 'nt la partìa $2 a la partìa $3",
-'rightslogentry-autopromote' => "a l'é stàit automaticament promovù da $2 a $3",
-'logentry-rights-rights' => "$1 a l'ha tramudà l'apartenesa a la partìa për $3 da $4 a $5",
-'logentry-rights-rights-legacy' => "$1 a l'ha tramudà l'apartenensa a la partìa për $3",
-'logentry-rights-autopromote' => "$1 a l'é stàit automaticament promovù da $4 a $5",
-'rightsnone' => '(gnun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lese sta pàgina-sì',
@@ -1473,7 +1473,7 @@ Beiché la [[Special:NewFiles|galarìa dj'archivi neuv]] për na presentassion p
 'filetype-unwanted-type' => "'''\".\$1\"''' a l'é na sòrt d'archivi ch'as pija nen ëd bon-a veuja.
 {{PLURAL:\$3|La sòrt preferìa a l'é|Le sòrt preferìe a son}} \$2.",
 'filetype-banned-type' => "'''\".\$1\"''' {{PLURAL:\$4|a l'é na sòrt d'archivi proibìa|a son ëd sòrt d'archivi proibìe}}.
-{{PLURAL:\$3|Sòrt d'archivi consentìa a l'é|Sòrt d'archivi consentìe a son}} \$2.",
+{{PLURAL:\$3|La sòrt d'archivi consentìa a l'é|Le sòrt d'archivi consentìe a son}} \$2.",
 'filetype-missing' => "A l'archivi a-j manca l'estension (pr'esempi \".jpg\").",
 'empty-file' => "L'archivi ch'a l'ha mandà a l'era veuid.",
 'file-too-large' => "L'archivi ch'a l'ha mandà a l'era tròp gròss.",
@@ -1570,7 +1570,7 @@ $1",
 Për piasì, ch'as butà an comunicassion con n'[[Special:ListUsers/sysop|aministrator]].",
 'upload-misc-error' => "Eror nen identificà antramentr ch'as cariava",
 'upload-misc-error-text' => "A l'é staie n'eror nen identificà dëmentrè ch'as cariava chèich-còs.
-Për piasì, ch'a varda che soa anliura a sia bon-a e che a l'arsponda e peuj ch'a preuva torna.
+Për piasì, ch'a varda che soa anliura a sia bon-a e che a sponda e peuj ch'a preuva torna.
 Se a-i riva sossì n'àotra vira, ch'as buta an comunicassion con n'[[Special:ListUsers/sysop|aministrator]].",
 'upload-too-many-redirects' => "L'adrëssa dl'aragnà a l'avìa tròpe ridiression",
 'upload-unknown-size' => 'Dimension pa conossùa',
@@ -1668,10 +1668,10 @@ Për na sicurëssa otimal, img_auth.php a l'é disabilità.",
 'http-bad-status' => "A l'é staje un problema durant l'arcesta HTTP: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-'upload-curl-error6' => "L'anliura a l'arspond pa",
+'upload-curl-error6' => "L'anliura a spond pa",
 'upload-curl-error6-text' => "L'anliura che a l'ha butà a marcia pa. Për piasì, ch'a contròla che st'anliura a sia scrita giusta e che ël sit a marcia.",
 'upload-curl-error28' => "A l'é finìje ël temp ch'as peul dovresse për carié",
-'upload-curl-error28-text' => "Ël sit a-i buta tròp temp a arsponde. Për piasì, ch'a contròla che a l'é an pé, ch'a speta na minuta e peuj che a torna a prové. A peul esse che a-j ven-a a taj serne un moment che ës sit a sia nen tant carià ëd tràfich.",
+'upload-curl-error28-text' => "Ël sit a-i buta tròp temp a sponde. Për piasì, ch'a contròla che a l'é an pé, ch'a speta na minuta e peuj che a torna a prové. A peul esse che a-j ven-a a taj serne un moment che ës sit a sia nen tant carià ëd tràfich.",
 
 'license' => 'Licensa:',
 'license-header' => 'Licensa',
@@ -1992,10 +1992,6 @@ A-i é dabzògn almanch d\'un domini a livel pi àut, për esempi "*.org".<br />
 'activeusers-hidesysops' => "Stërmé j'aministrator",
 'activeusers-noresult' => 'Pa gnun utent trovà.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Registr dla creassion dj'utent",
-'newuserlogpagetext' => "Sossì a l'é un registr andova ch'as marco le creassion dj'utent.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Drit dël grup d'utent",
 'listgrouprights-summary' => "Ambelessì a-i é na lista dle partìe d'utent definìe ansima a costa wiki, con ij sò drit d'acess associà.
@@ -2132,6 +2128,8 @@ $UNWATCHURL
 
 Comunicassion ëd servissi e pì d\'agiut:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creà',
+'changed' => 'modificà',
 
 # Delete
 'deletepage' => 'Scancelé la pàgina',
@@ -2201,6 +2199,8 @@ Ch'a varda la [[Special:ProtectedPages|Lista dle pàgine protegiùe]] për la li
 'prot_1movedto2' => '[[$1]] tramudà a [[$2]]',
 'protect-badnamespace-title' => 'Spassi nominal pa protegìbil',
 'protect-badnamespace-text' => 'Le pàgine an cost ëspassi nominal-sì a peulo pa esse protegiùe.',
+'protect-norestrictiontypes-text' => 'Sta pagina a peul pa esse protegiùa përchè a-i son gnun-e sòrt ëd restrission disponìbij.',
+'protect-norestrictiontypes-title' => 'Pagina pa protegìbila',
 'protect-legend' => 'Che an conferma la protession',
 'protectcomment' => 'Rason:',
 'protectexpiry' => 'Scadensa:',
@@ -2215,9 +2215,9 @@ Ambelessì a-i son le regolassion corente për la pàgina '''$1''':",
 Ambelessì a-i son j'ampostassion atuaj për la pàgina '''$1''':",
 'protect-cascadeon' => "Sta pàgina për adess a l'é blocà përchè a-i intra ant {{PLURAL:$1|la pàgina sì-sota, ch'a l'ha|le-pàgine sì sota, ch'a l'han}} na protession a sàut anvisca. A peul cambie-je sò livel ëd protession a sta pàgina-sì ma lòn a tochërà pa la protession a sàut.",
 'protect-default' => "Autorisé tùit j'utent",
-'protect-fallback' => 'A-i va ël përmess «$1»',
-'protect-level-autoconfirmed' => "Bloca j'utent neuv e coj nen registrà",
-'protect-level-sysop' => "mach për j'aministrator",
+'protect-fallback' => "Përmëtt mach a j'utent con ël përmess «$1»",
+'protect-level-autoconfirmed' => "Përmëtt mach j'utent autoconfirmà",
+'protect-level-sysop' => "Përmëtt mach a j'aministrator",
 'protect-summary-cascade' => 'a sàut',
 'protect-expiring' => 'scadensa: $1 (UTC)',
 'protect-expiring-local' => 'a finiss ai $1',
@@ -2863,6 +2863,7 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-magic-words' => '{{PLURAL:$1|Paròla màgica|Paròle màgiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorìa|Categorìe}} stërmà ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|stamp contnù|stamp contnù}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagina|Pagine}} transcludùe dzor ($1)',
 'pageinfo-toolboxlink' => 'Anformassion an sla pàgina',
 'pageinfo-redirectsto' => 'Ridiression-a a',
 'pageinfo-redirectsto-info' => 'anformassion',
@@ -2871,6 +2872,10 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-protect-cascading' => 'Le protession a son a cascada da sì',
 'pageinfo-protect-cascading-yes' => 'É!',
 'pageinfo-protect-cascading-from' => 'Le protession a son a cascada da',
+'pageinfo-category-info' => 'Anformassion ëd categorìa',
+'pageinfo-category-pages' => 'Nùmer ëd pàgine',
+'pageinfo-category-subcats' => 'Nùmer ëd sotcategorìe',
+'pageinfo-category-files' => "Nùmer d'archivi",
 
 # Patrolling
 'markaspatrolleddiff' => 'Marché coma verificà',
@@ -2947,6 +2952,8 @@ An fasend-lo marcé ansima a sò ordinator chiel a podrìa porteje ëd dann a s
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minute}}',
 'hours' => '{{PLURAL:$1|$1 ora|$1 ore}}',
 'days' => '{{PLURAL:$1|$1 di|$1 di}}',
+'months' => '{{PLURAL:$1|$1 mèis}}',
+'years' => '{{PLURAL:$1|$1 ann|$1 agn}}',
 'ago' => '$1 fa',
 'just-now' => 'pròpi adess',
 
@@ -3518,8 +3525,7 @@ Ch'a preuva an manera sòlita.",
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Le modìfiche pì neuve ëd $1 {{PLURAL:$1|second}} a podrìo nen ess-ie ant sta lista-sì.',
-'lag-warn-high' => "Për via che la màchina serventa a tarda a dene d'arspòsta, le modìfiche fàite men che $1 {{PLURAL:$1|second}} fa
-a podrìo ëdcò nen ess-ie ant sta lista-sì.",
+'lag-warn-high' => "Për via che la màchina serventa a tarda a dene 'd rispòste, le modìfiche fàite men che $1 {{PLURAL:$1|second}} fa a podrìo ëdcò nen ess-ie ant sta lista-sì.",
 
 # Watchlist editor
 'watchlistedit-numitems' => "A l'é antramentr ch'a ten sot-euj {{PLURAL:$1|1 tìtol|$1 tìtoj}}, nen contand le pàgine ëd discussion.",
@@ -3734,6 +3740,10 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'logentry-newusers-create2' => "Ël cont utent $3 a l'é stàit creà da $1",
 'logentry-newusers-autocreate' => "Ël cont $1 a l'é stàit creà an automàtich",
 'newuserlog-byemail' => 'ciav spedìa për pòsta eletrònica',
+'logentry-rights-rights' => "$1 a l'ha tramudà l'apartenesa a la partìa për $3 da $4 a $5",
+'logentry-rights-rights-legacy' => "$1 a l'ha tramudà l'apartenensa a la partìa për $3",
+'logentry-rights-autopromote' => "$1 a l'é stàit automaticament promovù da $4 a $5",
+'rightsnone' => '(gnun)',
 
 # Feedback
 'feedback-bugornote' => "S'a l'é pront a descrive un problema técnich an detaj, për piasì ch'a [$1 signala un bigat]. 
@@ -3774,25 +3784,25 @@ Dësnò, a peul dovré ël formolari semplificà sì-sota. Sò coment a sarà gi
 'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|a l'é na sòrt d'archivi proibìa|a son ëd sòrt d'archivi proibìe}}. {{PLURAL:$3|La sòrt d'archivi consentìa a l'é|Le sòrt d'archivi consentìe a son}} $2.",
 'api-error-filetype-missing' => "L'archivi a l'é sensa estension.",
 'api-error-hookaborted' => "La modìfica ch'a l'ha provà a fé a l'é stàita blocà dal gancio ëd n'estension.",
-'api-error-http' => 'Eror antern: as peul pa coleghesse al sërvent.',
+'api-error-http' => 'Eror antern: As peul pa coleghesse al servent.',
 'api-error-illegal-filename' => "Ël nòm dl'archivi a l'é nen consentì.",
-'api-error-internal-error' => "Eror antern: quaicòs a l'é andàit mal con ël tratament ëd tò cariagi an sla wiki.",
+'api-error-internal-error' => "Eror antern: Cheicòs a l'é andàit mal con ël tratament ëd soa amportassion an sla wiki.",
 'api-error-invalid-file-key' => 'Eror antern: archivi pa trovà ant la memòria a temp.',
 'api-error-missingparam' => "Eror antern: paràmetr mancant ant l'arcesta.",
 'api-error-missingresult' => "Eror antern: as peul pa determiné se la còpia a l'é andàita bin.",
 'api-error-mustbeloggedin' => "A dev esse intrà ant ël sistema për carié dj'archivi.",
 'api-error-mustbeposted' => "Eror antern: L'arcesta a l'ha da manca d'HTTP POST.",
-'api-error-noimageinfo' => "Ël càrigh a l'é andàit bin, ma ël sërvent a l'ha dane gnun-e anformassion an sl'archivi.",
-'api-error-nomodule' => 'Eror antern: Gnun mòdoj ëd cariagi ampostà.',
-'api-error-ok-but-empty' => 'Eror antern: Gnun-a arspòste dal sërvent.',
+'api-error-noimageinfo' => "Ël cariament a l'é andàit bin, ma ël servent a l'ha dane gnun-e anformassion an sl'archivi.",
+'api-error-nomodule' => 'Eror antern: gnun mòdoj ëd caria ampostà.',
+'api-error-ok-but-empty' => 'Eror antern: Gnun-a rispòsta dal servent.',
 'api-error-overwrite' => "Dzorascrive ansima a n'archivi esistent a l'é nen përmëttù.",
-'api-error-stashfailed' => "Eror antern: ël sërvent a l'ha pa podù memorisé l'archivi a temp.",
-'api-error-timeout' => "Ël sërvent a l'ha pa arspondù ant ël temp spetà.",
+'api-error-stashfailed' => "Eror antern: ël servent a l'ha pa podù memorisé l'archivi a temp.",
+'api-error-timeout' => "Ël servent a l'ha pa rëspondù ant ël temp ëspetà.",
 'api-error-unclassified' => "A l'é capitaje n'eror nen conossù.",
-'api-error-unknown-code' => 'Eror sconossù: "$1"',
-'api-error-unknown-error' => "Eror antern: quaicòs a l'é andàit mal quand a l'é provasse a carié tò archivi.",
+'api-error-unknown-code' => 'Eror sconossù: «$1».',
+'api-error-unknown-error' => "Eror antern: Cheicòs a l'é andàit mal quand a l'é provasse a carié sò archivi.",
 'api-error-unknown-warning' => 'Avis pa conossù: $1',
-'api-error-unknownerror' => 'Eror sconossù: "$1".',
+'api-error-unknownerror' => 'Eror sconossù: «$1».',
 'api-error-uploaddisabled' => "Ël cariagi a l'é disabilità su sta wiki.",
 'api-error-verification-error' => "Cost archivi a peul esse danegià, o avèj l'estension sbalià.",
 
index 7bc53af..5ed26d0 100644 (file)
@@ -1261,12 +1261,13 @@ $1",
 'right-sendemail' => 'دوجے ورتن والیاں نوں ای-میل کرو',
 'right-passwordreset' => 'کنجی بدلی ای-میلاں نوں وکھاؤ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ورتاوا بنان آلی لاگ',
+'newuserlogpagetext' => 'اے ورتن والا بنان دی لاگ اے۔',
+
 # User rights log
 'rightslog' => 'ورتن والے دے حقاں دی لاگ',
 'rightslogtext' => 'ورتن حقاں چ تبدیلیاں دی اے لاگ اے۔',
-'rightslogentry' => 'ٹولی ممرشپ $1 لئی $2 توں $3 تک بدلو۔',
-'rightslogentry-autopromote' => '$2 توں اپنے آپ $3 تک ودایا گیا۔',
-'rightsnone' => '(کوئی وی نئیں)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'اس صفحے نوں پڑھو',
@@ -1889,10 +1890,6 @@ $1",
 'activeusers-hidesysops' => 'مکھۓ لکاؤ',
 'activeusers-noresult' => 'کوئی ورتن والا نئیں لبیا۔',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ورتاوا بنان آلی لاگ',
-'newuserlogpagetext' => 'اے ورتن والا بنان دی لاگ اے۔',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ورتن ٹرلی حق',
 'listgrouprights-summary' => 'تھلے اک لسٹ اے ورتن ٹولیاں دی ای وکی تے، اپنے رلدے حقاں نال۔ 
@@ -2022,6 +2019,8 @@ $UNWATCHURL
 
 فیڈبیک تے ہور مدد لئی:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'بن گیا',
+'changed' => 'بدلیا',
 
 # Delete
 'deletepage' => 'صفہ مٹاؤ',
@@ -3533,6 +3532,7 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 'logentry-newusers-create2' => '$1 {{جنس:$2|بنایا}} {{جنس:$4|اک ورتن کھاتہ}} $3',
 'logentry-newusers-autocreate' => 'کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔',
 'newuserlog-byemail' => 'کنجی ای-میل راہ پیج دتی گئی۔',
+'rightsnone' => '(کوئی وی نئیں)',
 
 # Feedback
 'feedback-bugornote' => 'اگر تسیں اک تکنیکی مسلے نوں  پوری طراں دسن لئی تیار او تے فیر مہربانی کرکے [$1 بگ بارے دسو]۔  ںئیں تے تسیں تھلے دتا گیا فارم ورتو۔ تواڈی گل صفہ "[$3 $2]" تے جڑے گی،  تواڈے ورتن والے ناں تے براؤزر جیہڑا تسیں ورت رۓ او۔',
index 455e78f..88b7195 100644 (file)
@@ -704,9 +704,11 @@ $messages = array(
 'right-import' => "Έμπαζμαν σελιδίων ασ' άλλα βίκι",
 'right-siteadmin' => 'Ασπάλισον κι άνοιξον τη βάση δογμενίων',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Αρχείον ποισιματίων λογαρίων χρήστε',
+
 # User rights log
 'rightslog' => 'Αρχείον δικαιωματίων',
-'rightsnone' => '(τιδέν)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'δεάβασον αβούτεν την σελίδαν',
@@ -941,9 +943,6 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'Δείξον',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Αρχείον ποισιματίων λογαρίων χρήστε',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ομάδαν',
 'listgrouprights-rights' => 'Δικαιώματα',
@@ -978,6 +977,8 @@ $messages = array(
 
 'enotif_impersonal_salutation' => '{{SITENAME}} χρήστες',
 'enotif_anon_editor' => 'ανώνυμον χρήστες $1',
+'created' => 'έντον',
+'changed' => 'ελλάγεν',
 
 # Delete
 'deletepage' => 'Σβήσον τη σελίδαν',
@@ -1437,6 +1438,9 @@ $messages = array(
 'htmlform-reset' => "Κλώσον τ'αλλαγάς",
 'htmlform-selectorother-other' => 'Άλλον',
 
+# New logging system
+'rightsnone' => '(τιδέν)',
+
 # Search suggestions
 'searchsuggest-search' => 'Αράεμαν',
 
index f9f5cd3..e81e4fa 100644 (file)
@@ -1040,11 +1040,13 @@ Tū mazzi dīgi etrīnktun dātun kitēimans drāugautwei sen tin pra tērpautaj
 'right-override-export-depth' => 'Ekspōrtis pāusans ēmpiri sen pāusans prei kawīdans tenēi autenginna, ērgi gilluwan stēisan 5 autengīnsenin',
 'right-sendemail' => 'Tenginnais e-mailin kitēimans tērpautajans',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nāunai tērpautajai',
+'newuserlogpagetext' => 'Sta ast registerin stēisan nāunai teīkatan rekkenan stēisan tērpautajan',
+
 # User rights log
 'rightslog' => 'Registerin stēisan tērpautajan enwarīnsenin',
 'rightslogtext' => 'Sta ast registerin stēisan tērpautajan ewarīnsenin kitawīdinsnan.',
-'rightslogentry' => 'ast kitawīdinuns(si) $1 perlānksnan prei gruppins ($2 → $3)',
-'rightsnone' => '(nisātausna)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaitātun šin pāusan',
@@ -1525,10 +1527,6 @@ Ebšlūzitai prōtokulai: <code>$1</code>',
 'activeusers-hidesysops' => 'Kliptinais perwaldītajans',
 'activeusers-noresult' => 'Ni aupalā di tērpautajans',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nāunai tērpautajai',
-'newuserlogpagetext' => 'Sta ast registerin stēisan nāunai teīkatan rekkenan stēisan tērpautajan',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Tērpautajan gruppin enwarīnsenei',
 'listgrouprights-summary' => 'Zemmais ast listi stēisan tērpautajan gruppin definītan en šissei wiki sen enwarīnsenins preipeisātan tenēimans.
@@ -1609,6 +1607,8 @@ Eraīna šisse pāusas ēnturas kitawīdinsna anga diskusiōnis pāusas sēitan
 'enotif_lastvisited' => 'Wīdais en $1 wissans kitawīdinsnans ezze Twajjai panzdauman kāimalukisenin.',
 'enotif_lastdiff' => 'Wīdais en $1 šan kitawīdisnan.',
 'enotif_anon_editor' => 'anōnims tērpautajs $1',
+'created' => 'teīktan',
+'changed' => 'kitawīdintan',
 
 # Delete
 'deletepage' => 'Āupausinais pāusan',
@@ -2708,5 +2708,6 @@ Enpeisāis zūrbrukes pabilīsnan šlāit "{{ns:file}}:" prefiksan.',
 'revdelete-restricted' => 'ensadinnais arāikinsenins per perwaldītajans',
 'revdelete-unrestricted' => 'āupausinais arāikinsenins per perwaldītajans',
 'newuserlog-byemail' => 'kliptaswīrds tengīntan pra e-mail',
+'rightsnone' => '(nisātausna)',
 
 );
index 8172c6f..33ab6f8 100644 (file)
@@ -1167,10 +1167,13 @@ $1',
 'right-userrights-interwiki' => 'په نورو ويکي ګانو د نورو کارنانو  کارن-رښتې سمول',
 'right-sendemail' => 'نورو کارنانو ته برېښليک لېږل',
 
+# Special:Log/newusers
+'newuserlogpage' => 'د کارن-نوم د جوړېدو يادښت',
+'newuserlogpagetext' => 'دا د کارن-نوم د جوړېدو يادښت دی',
+
 # User rights log
 'rightslog' => 'د کارن د رښتو يادښت',
 'rightslogtext' => 'دا د کارن رښتو د بدلونونو يو يادښت دی',
-'rightsnone' => '(هېڅ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'همدا مخ لوستل',
@@ -1583,10 +1586,6 @@ $1',
 'activeusers-hidesysops' => 'پازوالان پټول',
 'activeusers-noresult' => 'کارن و نه موندل شو.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'د کارن-نوم د جوړېدو يادښت',
-'newuserlogpagetext' => 'دا د کارن-نوم د جوړېدو يادښت دی',
-
 # Special:ListGroupRights
 'listgrouprights' => 'د کارن ډلو رښتې',
 'listgrouprights-group' => 'ډله',
@@ -1709,6 +1708,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 انګېرنې او نورې مرستې:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'جوړ شو',
+'changed' => 'بدلېدلی',
 
 # Delete
 'deletepage' => 'مخ ړنګول',
@@ -2675,6 +2676,7 @@ $5
 'logentry-newusers-create' => 'د $1 کارن ګڼون جوړ شو',
 'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول جوړ شو',
 'newuserlog-byemail' => 'پټنوم مو برېښليک ته درولېږه',
+'rightsnone' => '(هېڅ)',
 
 # Feedback
 'feedback-subject' => 'سکالو:',
index 6431cf4..63e8d72 100644 (file)
@@ -34,6 +34,7 @@
  * @author MetalBrasil
  * @author Minh Nguyen
  * @author Nuno Tavares
+ * @author Opraco
  * @author Paulo Juntas
  * @author Pedroca cerebral
  * @author Rafael Vargas
@@ -1089,8 +1090,10 @@ Ela parece ter sido eliminada.',
 'edit-already-exists' => 'Não foi possível criar uma página nova.
 Ela já existia.',
 'defaultmessagetext' => 'Texto da mensagem padrão',
+'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
 
 # Content models
+'content-model-wikitext' => 'wikitexto',
 'content-model-text' => 'texto simples',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
@@ -1467,9 +1470,9 @@ Esta operação não pode ser desfeita.',
 'prefs-emailconfirm-label' => 'Confirmação do endereço:',
 'prefs-textboxsize' => 'Tamanho da janela de edição',
 'youremail' => 'Correio electrónico:',
-'username' => 'Nome de utilizador:',
+'username' => 'Nome de {{GENDER:$1|utilizador|utilizadora}}:',
 'uid' => 'Número de identificação:',
-'prefs-memberingroups' => 'Membro {{PLURAL:$1|do grupo|dos grupos}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:',
 'prefs-registration' => 'Hora de registo:',
 'yourrealname' => 'Nome verdadeiro:',
 'yourlanguage' => 'Língua:',
@@ -1618,13 +1621,13 @@ Esta informação será pública.',
 'right-sendemail' => 'Enviar correio electrónico a outros utilizadores',
 'right-passwordreset' => 'Ver emails de reposição de palavras-chave',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registo de criação de utilizadores',
+'newuserlogpagetext' => 'Este é um registo de novas contas de utilizador',
+
 # User rights log
 'rightslog' => 'Registo de privilégios de utilizador',
 'rightslogtext' => 'Este é um registo de mudanças nos privilégios dos utilizadores.',
-'rightslogentry' => 'alterou grupos de $1 (de $2 para $3)',
-'rightslogentry-autopromote' => 'foi automaticamente promovido de $2 para $3',
-'logentry-rights-rights' => '$1 modificou os privilégios do utilizador  $3  de  $4  para $5',
-'rightsnone' => '(nenhum)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta página',
@@ -2279,10 +2282,6 @@ Protocolos suportados: <code>$1</code> (não adicione nenhum destes na sua pesqu
 'activeusers-hidesysops' => 'Esconder administradores',
 'activeusers-noresult' => 'Nenhum utilizador encontrado.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registo de criação de utilizadores',
-'newuserlogpagetext' => 'Este é um registo de novas contas de utilizador',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Privilégios dos grupos de utilizadores',
 'listgrouprights-summary' => 'A seguinte lista contém os grupos de utilizadores definidos nesta wiki, com os respectivos privilégios de acesso.
@@ -2381,12 +2380,9 @@ O nome desta página passará a aparecer a '''negrito''' na lista de [[Special:R
 'enotif_lastvisited' => 'Consulte $1 para todas as alterações efectuadas desde a sua última visita.',
 'enotif_lastdiff' => 'Consulte $1 para ver esta alteração.',
 'enotif_anon_editor' => 'utilizador anónimo $1',
-'enotif_body' => 'Caro(a) $WATCHINGUSERNAME,
-
-
-A página $PAGETITLE da {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR; consulte $PAGETITLE_URL para ver a versão actual.
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
 
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumo da edição: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2411,6 +2407,8 @@ $UNWATCHURL
 
 Para comentários e pedidos de ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criada',
+'changed' => 'alterada',
 
 # Delete
 'deletepage' => 'Eliminar página',
@@ -2504,7 +2502,7 @@ Pode alterar o nível de protecção desta página, mas isso não afectará a pr
 'protect-summary-cascade' => 'em cascata',
 'protect-expiring' => 'expira a $1 (UTC)',
 'protect-expiring-local' => 'expira a $1',
-'protect-expiry-indefinite' => 'tempo indefinido',
+'protect-expiry-indefinite' => 'indefinidamente',
 'protect-cascade' => 'Proteja quaisquer páginas que estejam incluídas nesta (protecção em cascata)',
 'protect-cantedit' => 'Não pode alterar o nível de protecção desta página, porque não tem permissão para editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2564,7 +2562,8 @@ Pode ter usado um link incorrecto ou talvez a revisão tenha sido restaurada ou
 'undeletedrevisions' => '$1 {{PLURAL:$1|edição restaurada|edições restauradas}}',
 'undeletedrevisions-files' => '$1 {{PLURAL:$2|edição restaurada|edições restauradas}} e $2 {{PLURAL:$2|ficheiro restaurado|ficheiros restaurados}}',
 'undeletedfiles' => '{{PLURAL:$1|ficheiro restaurado|$1 ficheiros restaurados}}',
-'cannotundelete' => 'Restauração falhada; alguém talvez já restaurou a página.',
+'cannotundelete' => 'Restauração falhada:
+$1',
 'undeletedpage' => "'''$1 foi restaurada'''
 
 Consulte o [[Special:Log/delete|registo de eliminações]] para um registo das eliminações e restaurações mais recentes.",
@@ -2867,6 +2866,7 @@ não é possível mover uma página para ela mesma.',
 'immobile-target-namespace-iw' => 'Um link interwikis não é um destino válido para uma movimentação de página.',
 'immobile-source-page' => 'Esta página não pode ser movida.',
 'immobile-target-page' => 'Não é possível mover para esse título de destino.',
+'bad-target-model' => 'O destino pretendido usa um modelo de conteúdo diferente. Não é possível converter de $1 para $2.',
 'imagenocrossnamespace' => 'Não é possível mover imagem para espaço nominal que não de imagens',
 'nonfile-cannot-move-to-file' => 'Não é possível mover algo que não é um ficheiro para o espaço nominal de ficheiros',
 'imagetypemismatch' => 'A extensão do novo ficheiro não corresponde ao seu tipo',
@@ -3132,6 +3132,7 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'pageinfo-display-title' => 'Exibir título',
 'pageinfo-length' => 'Tamanho da página (em bytes)',
 'pageinfo-article-id' => 'ID da página',
+'pageinfo-language' => 'Idioma do conteúdo da página',
 'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
 'pageinfo-robot-index' => 'Indexável',
 'pageinfo-robot-noindex' => 'Não indexável',
@@ -3241,6 +3242,8 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'minutes' => '{{PLURAL:$1|um minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|uma hora|$1 horas}}',
 'days' => '{{PLURAL:$1|um dia|$1 dias}}',
+'months' => '{{PLURAL:$1|1 mês|$1 meses}}',
+'years' => '{{PLURAL:$1|1 ano|$1 anos}}',
 'ago' => '$1 atrás',
 'just-now' => 'agora mesmo',
 
@@ -3990,8 +3993,8 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'revdelete-uname-unhid' => 'utilizador não oculto',
 'revdelete-restricted' => 'restrições a administradores aplicadas',
 'revdelete-unrestricted' => 'restrições a administradores removidas',
-'logentry-move-move' => '$1 moveu página $3 para $4',
-'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redireccionamento',
+'logentry-move-move' => '$1 moveu página $3 para $4',
+'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redireccionamento',
 'logentry-move-move_redir' => '$1 moveu a página $3 para $4 através de um redireccionamento',
 'logentry-move-move_redir-noredirect' => '$1 moveu a página $3 para $4 sem um redireccionamento',
 'logentry-patrol-patrol' => '$1 marcou a revisão $4 da página $3 como patrulhada',
@@ -4001,6 +4004,8 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'logentry-newusers-create2' => 'A conta de utilizador $3 foi criada por $1',
 'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticamente',
 'newuserlog-byemail' => 'palavra-chave enviada por correio-electrónico',
+'logentry-rights-rights' => '$1 modificou os privilégios do utilizador  $3  de  $4  para $5',
+'rightsnone' => '(nenhum)',
 
 # Feedback
 'feedback-bugornote' => 'Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].
index 718b687..fafccb0 100644 (file)
@@ -41,6 +41,7 @@
  * @author ManoDbo
  * @author McDutchie
  * @author MetalBrasil
+ * @author Opraco
  * @author Pedroca cerebral
  * @author Ppena
  * @author Rafael Vargas
@@ -577,7 +578,7 @@ Veja a [[Special:Version|página sobre a versão do sistema]].',
 'youhavenewmessages' => 'Você tem $1 ($2).',
 'newmessageslink' => 'novas mensagens',
 'newmessagesdifflink' => 'última alteração',
-'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|outros usuários}} ($2)',
+'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)',
 'youhavenewmessagesmanyusers' => 'Você tem $1 de muitos usuários ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|últimas alterações}}',
@@ -743,7 +744,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 'userlogin' => 'Entrar / criar conta',
 'userloginnocreate' => 'Entrar',
 'logout' => 'Sair',
-'userlogout' => 'Desconectar',
+'userlogout' => 'Sair',
 'notloggedin' => 'Não autenticado',
 'nologin' => 'Não possui uma conta? $1.',
 'nologinlink' => 'Criar uma conta',
@@ -1615,15 +1616,13 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'right-sendemail' => 'Enviar email a outros usuários',
 'right-passwordreset' => 'Ver todos os e-mails de reposição de senhas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de criação de usuários',
+'newuserlogpagetext' => 'Este é um registro de novas contas de usuário',
+
 # User rights log
 'rightslog' => 'Registro de privilégios de usuário',
 'rightslogtext' => 'Este é um registro de mudanças nos privilégios de usuários.',
-'rightslogentry' => 'alterou os grupos de privilégios {{GENDER:$1|do usuário|da usuária|de usuário para}} $1 (de $2 para $3)',
-'rightslogentry-autopromote' => 'foi automaticamente promovido de $2 para $3',
-'logentry-rights-rights' => '$1 alterou os grupos de usuário de $3 de $4 para $5',
-'logentry-rights-rights-legacy' => '$1 alterou os grupos de $3',
-'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
-'rightsnone' => '(nenhum)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta página',
@@ -2282,10 +2281,6 @@ Protocolos suportados: <code>$1</code> (o padrão é http://).',
 'activeusers-hidesysops' => 'Esconder administradores',
 'activeusers-noresult' => 'Nenhum usuário encontrado.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de criação de usuários',
-'newuserlogpagetext' => 'Este é um registro de novas contas de usuário',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Privilégios de grupo de usuários',
 'listgrouprights-summary' => 'O que segue é uma lista dos grupos de usuários definidos neste wiki, com os seus privilégios de acessos associados.
@@ -2394,7 +2389,7 @@ Futuras modificações em tal página e páginas de discussão relacionadas ser
 'enotif_lastvisited' => 'Consulte $1 para todas as alterações efetuadas desde a sua última visita.',
 'enotif_lastdiff' => 'Acesse $1 para ver esta alteração.',
 'enotif_anon_editor' => 'usuário anônimo $1',
-'enotif_body' => 'Caro(a) $WATCHINGUSERNAME,
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
 
 $PAGEINTRO $NEWPAGE
 
@@ -2421,6 +2416,8 @@ $UNWATCHURL
 
 Para comentários e pedidos de ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criada',
+'changed' => 'alterada',
 
 # Delete
 'deletepage' => 'Eliminar página',
@@ -2512,7 +2509,7 @@ Esta é a configuração atual para a página '''$1''':",
 'protect-summary-cascade' => 'p. progressiva',
 'protect-expiring' => 'expira em $1 (UTC)',
 'protect-expiring-local' => 'expira $1',
-'protect-expiry-indefinite' => 'tempo indefinido',
+'protect-expiry-indefinite' => 'indefinidamente',
 'protect-cascade' => '"Proteção progressiva" - proteja quaisquer páginas que estejam incluídas nesta.',
 'protect-cantedit' => 'Você não pode alterar o nível de proteção desta página uma vez que você não se encontra habilitado a editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -3144,9 +3141,9 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 'pageinfo-recent-authors' => 'Número recente de autores distintos',
 'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
-'pageinfo-templates' => '{{PLURAL:$1|predefinição transcluída|predefinições transcluídas}}',
+'pageinfo-templates' => '{{PLURAL:$1|Predefinição transcluída|Predefinições transcluídas ($1)}}',
 'pageinfo-toolboxlink' => 'Informações da página',
-'pageinfo-redirectsto' => 'Redirecionar para',
+'pageinfo-redirectsto' => 'Redireciona para',
 'pageinfo-redirectsto-info' => 'informações',
 'pageinfo-contentpage' => 'Contado como uma página de conteúdo',
 'pageinfo-contentpage-yes' => 'Sim',
@@ -3987,17 +3984,21 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'revdelete-uname-unhid' => 'nome de usuário não oculto',
 'revdelete-restricted' => 'restrições a administradores aplicadas',
 'revdelete-unrestricted' => 'restrições a administradores removidas',
-'logentry-move-move' => '$1 moveu página $3 para $4',
-'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redirecionamento',
+'logentry-move-move' => '$1 moveu página $3 para $4',
+'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redirecionamento',
 'logentry-move-move_redir' => '$1 moveu a página $3 para $4 através de um redirecionamento',
 'logentry-move-move_redir-noredirect' => '$1 moveu a página $3 para $4 sem um redirecionamento',
 'logentry-patrol-patrol' => '$1 marcou a revisão $4 da página $3 como patrulhada',
 'logentry-patrol-patrol-auto' => '$1 marcou automaticamente a revisão $4 da página $3 como patrulhada',
 'logentry-newusers-newusers' => 'A conta de usuário $1 foi criada',
 'logentry-newusers-create' => 'A conta de usuário $1 foi criada',
-'logentry-newusers-create2' => 'A conta de usuário $1 foi criada por $3',
+'logentry-newusers-create2' => 'A conta de usuário $3 foi criada por $1',
 'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticamente',
 'newuserlog-byemail' => 'senha enviada por correio-eletrônico',
+'logentry-rights-rights' => '$1 alterou os grupos de usuário de $3 de $4 para $5',
+'logentry-rights-rights-legacy' => '$1 alterou os grupos de $3',
+'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
+'rightsnone' => '(nenhum)',
 
 # Feedback
 'feedback-bugornote' => 'Se você está preparado para descrever detalhadamente um problema técnico, [$1 relate um bug].
index a992044..506a9f9 100644 (file)
@@ -76,6 +76,7 @@
  * @author Meno25
  * @author Metalhead64
  * @author MichaelFrey
+ * @author Mido
  * @author Mihai
  * @author Minh Nguyen
  * @author Mormegil
@@ -294,7 +295,8 @@ This option means "underline links as in your user skin or your browser", there
 'feb' => 'Abbreviation of February, the second month of the Gregorian calendar',
 'mar' => 'Abbreviation of March, the third month of the Gregorian calendar',
 'apr' => 'Abbreviation of April, the fourth month of the Gregorian calendar',
-'may' => 'Abbreviation of May, the fifth month of the Gregorian calendar',
+'may' => 'Abbreviation of May, the fifth month of the Gregorian calendar.
+{{Identical|May}}',
 'jun' => 'Abbreviation of June, the sixth month of the Gregorian calendar',
 'jul' => 'Abbreviation of July, the seventh month of the Gregorian calendar',
 'aug' => 'Abbreviation of August, the eighth month of the Gregorian calendar',
@@ -331,7 +333,8 @@ See http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for
 'index-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where pages with the <nowiki>__INDEX__</nowiki> behaviour switch are listed. For description of this behaviour switch see [//www.mediawiki.org/wiki/Help:Magic_words#Behavior_switches mediawiki].',
 'noindex-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where pages with the <nowiki>__NOINDEX__</nowiki> behaviour switch are listed. For description of this behaviour switch see [//www.mediawiki.org/wiki/Help:Magic_words#Behavior_switches mediawiki].',
 'broken-file-category' => 'Name of [[mw:Help:Tracking categories|tracking category]] where pages that embed files that do not exist ("broken images") are listed.',
-'categoryviewer-pagedlinks' => 'The pagination links in category viewer. Parameters:
+'categoryviewer-pagedlinks' => '{{Optional}}
+The pagination links in category viewer. Parameters:
 * $1 is the previous link,
 * $2 is the next link',
 
@@ -344,11 +347,20 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec
 
 {{Identical|Content page}}",
 'newwindow' => 'Below the edit form, next to "{{msg-mw|Edithelp}}".',
-'cancel' => 'Message shown below the edit form, and if you click on it, you stop with editing the page and go back to the normal page view.
-
+'cancel' => '{{doc-actionlink}}
+Message shown below the edit form, and if you click on it, you stop with editing the page and go back to the normal page view.
 {{Identical|Cancel}}',
-'moredotdotdot' => '{{Identical|More...}}',
-'mypage' => "A text for the link to the user's user page in the links at the top of the page.",
+'moredotdotdot' => 'Used as "More..." link for {{msg-mw|pageinfo-transclusions}} field, in the "templates used on this page" list.
+
+Similar to {{msg-mw|morenotlisted}}.
+{{Identical|More...}}',
+'morenotlisted' => 'An indication that more of a templates list is not shown.
+
+Used as "More..." link for {{msg-mw|pageinfo-templates}} field.
+
+Similar to {{msg-mw|moredotdotdot}}.',
+'mypage' => "A text for the link to the user's user page in the links at the top of the page.
+{{Identical|Page}}",
 'mytalk' => 'In the personal URLs page section - right upper corner.
 
 Used as link title in your personal toolbox.
@@ -481,7 +493,7 @@ See also:
 
 {{Identical|Create}}',
 'editthispage' => 'This is the "edit" link as used in the skins Classic/Standard, Cologne Blue and Nostalgia. See {{msg|create-this-page}} for when the page does not exist.',
-'create-this-page' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for the link leading to the edit form on pages that have not yet been created. See {{msg|editthispage}} for when the page already exists.
+'create-this-page' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for the link leading to the edit form on pages that have not yet been created. See {{msg-mw|editthispage}} for when the page already exists.
 {{Identical|Createpage}}',
 'delete' => 'Name of the Delete tab shown for admins. Should be in the infinitive mood.
 
@@ -559,8 +571,7 @@ See also [[MediaWiki:Lastmodifiedatby/{{SUBPAGENAME}}]].',
 'viewcount' => 'Used as page-view counter.',
 'protectedpage' => "This message is displayed when trying to edit a page you can't edit because it has been protected.
 
-*{{msg-mw|protectedpage}}
-*{{msg-mw|protectedpagetext}}",
+This message is the title for the message {{msg-mw|protectedpagetext}}.",
 'jumpto' => '"Jump to" navigation links. Hidden by default in monobook skin. The format is: {{int:jumpto}} [[MediaWiki:Jumptonavigation/{{SUBPAGENAME}}|{{int:jumptonavigation}}]], [[MediaWiki:Jumptosearch/{{SUBPAGENAME}}|{{int:jumptosearch}}]].',
 'jumptonavigation' => 'Part of the "jump to" navigation links. Hidden by default in monobook skin. The format is: [[MediaWiki:Jumpto/{{SUBPAGENAME}}|{{int:jumpto}}]] {{int:jumptonavigation}}, [[MediaWiki:Jumptosearch/{{SUBPAGENAME}}|{{int:jumptosearch}}]].
 
@@ -599,7 +610,7 @@ See also:
 * {{msg-mw|Currentevents-url}}
 * {{msg-mw|Accesskey-n-currentevents}}
 * {{msg-mw|Tooltip-n-currentevents}}',
-'currentevents-url' => "Target page of ''{{Mediawiki:currentevents}}'' in the sidebar. See also {{msg|currentevents}}.
+'currentevents-url' => "Target page of ''CurrentEvents'' in the sidebar. See also {{msg-mw|currentevents}}.
 {{doc-important|Do not translate the \"<tt>Project:</tt>\" part.}}",
 'disclaimers' => 'Used as display name for the link to [[{{MediaWiki:Disclaimerpage}}]] shown at the bottom of every page on the wiki. Example [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].',
 'disclaimerpage' => 'Used as page for that contains the site disclaimer. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
@@ -607,7 +618,7 @@ See also:
 'edithelp' => 'This is the text that appears on the editing help link that is near the bottom of the editing page',
 'edithelppage' => 'The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.
 {{doc-important|Do not change the "<tt>Help:</tt>" part.}}',
-'helppage' => 'The link destination used by default in the sidebar, and in {{msg|noarticletext}}.
+'helppage' => 'The link destination used by default in the sidebar, and in {{msg-mw|noarticletext}}.
 {{doc-important|Do not change the "<tt>Help:</tt>" part.}}
 {{Identical|HelpContent}}',
 'mainpage' => 'Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!
@@ -622,7 +633,8 @@ See also:
 See also:
 * {{msg-mw|Mainpage-description}}
 * {{msg-mw|Accesskey-n-mainpage-description}}
-* {{msg-mw|Tooltip-n-mainpage-description}}',
+* {{msg-mw|Tooltip-n-mainpage-description}}
+{{Identical|Main page}}',
 'policy-url' => 'Description: The URL of the project page describing the policies of the wiki. This is shown below every page (the left link).
 {{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
 'portal' => "Display name for the 'Community portal', shown in the sidebar menu of all pages. The target page is meant to be a portal for users where useful links are to be found about the wiki's operation.
@@ -655,8 +667,8 @@ See also:
 'versionrequiredtext' => 'This message is not used in the MediaWiki core, but was introduced with the reason that it could be useful for extensions. See also {{msg|versionrequired}}.',
 
 'ok' => '{{Identical|OK}}',
-'pagetitle' => "{{doc-important|You most probably do not need to translate this message.}}
-
+'pagetitle' => "{{Optional}}
+{{doc-important|You most probably do not need to translate this message.}}
 Do '''not''' replace SITENAME with a translation of Wikipedia or some encycopedic additions. The message has to be neutral for all projects.",
 'pagetitle-view-mainpage' => '{{optional}}',
 'backlinksubtitle' => '{{optional}}
@@ -708,8 +720,19 @@ The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUB
 'hidetoc' => 'This is the link used to hide the table of contents
 
 {{Identical|Hide}}',
-'collapsible-collapse' => 'This is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)',
-'collapsible-expand' => 'This is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)',
+'collapsible-collapse' => '{{Doc-actionlink}}
+This is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)
+
+See also:
+* {{msg-mw|Collapsible-expand}}',
+'collapsible-expand' => '{{Doc-actionlink}}
+This is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)
+
+See also:
+* {{msg-mw|Collapsible-collapse}}
+
+See the following example:
+{{Identical|Expand}}',
 'thisisdeleted' => 'Message shown on a deleted page when the user has the undelete right. $1 is a link to [[Special:Undelete]], with {{msg-mw|restorelink}} as the text. See also {{msg-mw|viewdeleted}}.',
 'viewdeleted' => 'Message shown on a deleted page when the user does not have the undelete right (but has the deletedhistory right). $1 is a link to [[Special:Undelete]], with {{msg-mw|restorelink}} as the text. See also {{msg-mw|thisisdeleted}}.',
 'restorelink' => "This text is always displayed in conjunction with the {{msg-mw|thisisdeleted}} message (View or restore $1?). The user will see
@@ -849,12 +872,12 @@ This error is shown when trying to open a special page which does not exist, e.g
 * $2: Content of
 *# {{msg-mw|Missingarticle-rev}} - Permalink with invalid revision#
 *# {{msg-mw|Missingarticle-diff}} - Diff with invalid revision#",
-'missingarticle-rev' => 'Parameter $2 of {{msg|Missing-article}}: It is shown after the articlename.
+'missingarticle-rev' => 'Parameter $2 of {{msg-mw|Missing-article}}: It is shown after the articlename.
 
 * $1: revision# of the requested id
 
 [http://translatewiki.net/w/i.php?title=Translating:Tasks&oldid=371789000 Click here] to see an example of such an error message.',
-'missingarticle-diff' => 'Parameter $2 of {{msg|Missing-article}}: It is shown after the articlename.
+'missingarticle-diff' => 'Parameter $2 of {{msg-mw|Missing-article}}: It is shown after the articlename.
 
 * $1: revision# of the old id
 * $2: revision# of the id build the diff with.
@@ -922,8 +945,7 @@ See also:
 'actionthrottledtext' => 'Used as error message. Read it in combination with {{msg-mw|actionthrottled}}.',
 'protectedpagetext' => "This message is displayed when trying to edit a page you can't edit because it has been protected.
 
-*{{msg-mw|protectedpage}}
-*{{msg-mw|protectedpagetext}}",
+The title for this message is {{msg-mw|protectedpage}}.",
 'viewsourcetext' => 'The text shown when displaying the source of a page that the user has no permission to edit',
 'viewyourtext' => 'Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page',
 'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.
@@ -952,7 +974,8 @@ See also {{msg-mw|protectedinterface}}.',
 'invalidtitle-unknownnamespace' => 'Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.
 * $1 is the namespace number
 * $2 is the part of the title after the namespace (e.g. SomeName for the page User:SomeName)',
-'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
+'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.
+{{Identical|Not logged in}}',
 'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
 
 # Virus scanner
@@ -982,14 +1005,14 @@ See also {{msg-mw|protectedinterface}}.',
 'yourdomainname' => 'Used as label for listbox.',
 'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.',
 'externaldberror' => 'This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.',
-'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg|nav-login-createaccount}} is shown there).
+'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there).
 
 See also:
 * {{msg-mw|Login}}
 * {{msg-mw|Accesskey-pt-anonlogin}}
 * {{msg-mw|Tooltip-pt-anonlogin}}
 {{Identical|Log in}}",
-'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg|login}} is shown.
+'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg-mw|login}} is shown.
 {{identical|Log in / create account}}",
 'loginprompt' => 'A small notice in the log in form.',
 'userlogin' => 'Name of special page [[Special:UserLogin]] where a user can log in or click to create a user account.
@@ -1004,7 +1027,8 @@ See also:
 * {{msg-mw|Accesskey-pt-logout}}
 * {{msg-mw|Tooltip-pt-logout}}
 {{Identical|Log out}}',
-'userlogout' => '{{Identical|Log out}}',
+'userlogout' => '{{Doc-actionlink}}
+{{Identical|Log out}}',
 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
 
 {{Identical|Not logged in}}',
@@ -1040,8 +1064,8 @@ Defaults to '''nocookieslogin''' ({{int:nocookieslogin}})",
 'loginsuccess' => 'The content of the page saying that you are logged in. The title of the page is "[[MediaWiki:Loginsuccesstitle/{{SUBPAGENAME}}|{{int:loginsuccesstitle}}]]". $1 is the name of the logged in user.
 
 <nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is supported.',
-'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg|nosuchusershort}} is displayed.',
-'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg|nosuchusershort}} is displayed.",
+'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg-mw|nosuchusershort}} is displayed.',
+'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg-mw|nosuchusershort}} is displayed.",
 'nouserspecified' => 'Used as error message when username to fetch is not specified.',
 'login-userblocked' => 'This message supports GENDER, username is available in $1.',
 'wrongpassword' => 'Used as error message when the provided password is wrong.',
@@ -1112,6 +1136,7 @@ See also:
 # E-mail sending
 'php-mail-error-unknown' => 'Used as error message when <code>mail()</code> returned empty error message.',
 'user-mail-no-addy' => 'This is the error message in case an e-mail could not be sent because there was no e-mail address to send it to.',
+'user-mail-no-body' => 'This is the error message in case an e-mail has an empty or unreasonably short body',
 
 # Change password dialog
 'resetpass' => 'The caption of [[Special:ChangePassword]]
@@ -1173,21 +1198,18 @@ Parameters:
 'passwordreset-emailsent' => 'Used in [[Special:PasswordReset]].
 
 See also:
-* {{msg-mw|Passwordreset-emailsent}}
 * {{msg-mw|Passwordreset-emailsent-capture}}
 * {{msg-mw|Passwordreset-emailerror-capture}}',
 'passwordreset-emailsent-capture' => 'Used in [[Special:PasswordReset]].
 
 See also:
 * {{msg-mw|Passwordreset-emailsent}}
-* {{msg-mw|Passwordreset-emailsent-capture}}
 * {{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
 See also:
 * {{msg-mw|Passwordreset-emailsent}}
-* {{msg-mw|Passwordreset-emailsent-capture}}
-* {{msg-mw|Passwordreset-emailerror-capture}}',
+* {{msg-mw|Passwordreset-emailsent-capture}}',
 
 # Special:ChangeEmail
 'changeemail' => 'Title of [[Special:ChangeEmail|special page]].',
@@ -1267,7 +1289,7 @@ See also:
 * {{msg-mw|Accesskey-watch}}
 * {{msg-mw|Tooltip-watch}}
 {{Identical|Watch this page}}',
-'savearticle' => 'Text on the Save page button. See also {{msg|showpreview}} and {{msg|showdiff}} for the other buttons.
+'savearticle' => 'Text on the Save page button. See also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons.
 
 See also:
 * {{msg-mw|Savearticle}}
@@ -1276,7 +1298,7 @@ See also:
 'preview' => 'The title of the Preview page shown after clicking the "Show preview" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.
 
 {{Identical|Preview}}',
-'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg|showdiff}} and {{msg|savearticle}} for the other buttons.
+'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg-mw|showdiff}} and {{msg-mw|savearticle}} for the other buttons.
 
 See also:
 * {{msg-mw|Showpreview}}
@@ -1291,11 +1313,12 @@ See also:
 * {{msg-mw|Tooltip-diff}}',
 'anoneditwarning' => 'Shown when editing a page anonymously.
 See also:
-* {{msg-mw|Anoneditwarning}}
+* {{msg-mw|Sf autoedit anoneditwarning}}
+* {{msg-mw|Wikibase-anonymouseditwarning-property}}
+* {{msg-mw|Wikibase-anonymouseditwarning-item}}
 * {{msg-mw|Anonpreviewwarning}}',
 'anonpreviewwarning' => 'See also:
-* {{msg-mw|Anoneditwarning}}
-* {{msg-mw|Anonpreviewwarning}}',
+* {{msg-mw|Anoneditwarning}}',
 'missingsummary' => 'The text "edit summary" is in {{msg-mw|summary}}.
 The text "Save" is in {{msg-mw|savearticle}}.',
 'missingcommenttext' => 'This message is shown, when the textbox by a new-section is empty.',
@@ -1340,8 +1363,9 @@ See also:
 'confirmedittext' => 'Used as error message.',
 'nosuchsectiontitle' => 'Used as error message when the user has attempted to edit a nonexistent section.',
 'nosuchsectiontext' => 'This message is displayed when a user tries to edit a section that does not exist.',
-'loginreqtitle' => 'Used as title of error message. See also:
-* {{msg-mw|loginreqtitle}}
+'loginreqtitle' => 'Used as title of error message.
+
+See also:
 * {{msg-mw|permissionserrors}}',
 'loginreqlink' => 'Take a look on inflection. Used as parameter in {{msg-mw|loginreqpagetext}}, {{msg-mw|whitelistedittext}}, {{msg-mw|watchlistanontext‎}} and {{msg-mw|Confirmemail needlogin}}.
 
@@ -1384,7 +1408,10 @@ Example: [http://translatewiki.net/w/i.php?title=Project:News&oldid=9999999 Perm
 'userinvalidcssjstitle' => '* $1 - skin name',
 'updated' => '{{Identical|Updated}}',
 'previewnote' => 'Note displayed when clicking on Show preview',
-'continue-editing' => 'A link to the beginning of the editing textarea on the same page. Displayed after {{msg-mw|previewnote}}.',
+'continue-editing' => '{{doc-actionlink}}
+A link to the beginning of the editing textarea on the same page.
+
+Displayed after {{msg-mw|previewnote}}.',
 'previewconflict' => 'Used in Preview page.',
 'session_fail_preview' => 'Error message in Preview page.
 
@@ -1411,20 +1438,18 @@ See also:
 'editingsection' => 'This message displays at the top of the page when a user is editing a page section. Parameters:
 * $1 - page name
 See also:
-* {{msg-mw|Editingsection}}
 * {{msg-mw|Editingcomment}}',
 'editingcomment' => 'This message displays at the top of the page when a user is creating a new section. Parameters:
 * $1 - page name
 See also:
-* {{msg-mw|Editingsection}}
-* {{msg-mw|Editingcomment}}',
+* {{msg-mw|Editingsection}}',
 'editconflict' => 'Used as title of error message. Parameters:
 * $1 - page title',
 'explainconflict' => 'Appears at the top of a page when there is an edit conflict.',
 'yourtext' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
 
 Also used in Edit Conflict page; the diff between {{msg-mw|yourtext}} and {{msg-mw|storedversion}}.',
-'storedversion' => 'This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version that has not been stored which is shown at the bottom of the page.',
+'storedversion' => 'This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version {{msg-mw|yourtext}} that has not been stored which is shown at the bottom of the page.',
 'nonunicodebrowser' => 'Used as warning when editing page.',
 'editingold' => 'Used as warning when editing page.',
 'yourdiff' => '',
@@ -1462,9 +1487,10 @@ See also:
 * {{msg-mw|Nocreatetext}}',
 'sectioneditnotsupported-title' => 'Page title of special page, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [http://meta.wikimedia.org/wiki/Help:Section_editing#Section_editing meta].',
 'sectioneditnotsupported-text' => 'I think this is the text of an error message, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [http://meta.wikimedia.org/wiki/Help:Section_editing#Section_editing meta].',
-'permissionserrors' => 'Used as title of error message. See also:
-* {{msg-mw|loginreqtitle}}
-* {{msg-mw|permissionserrors}}',
+'permissionserrors' => 'Used as title of error message.
+
+See also:
+* {{msg-mw|loginreqtitle}}',
 'permissionserrorstext' => "This message is \"without action\" version of {{msg-mw|Permissionserrorstext-withaction}}.
 * \$1 is the number of reasons that were found why ''the action'' cannot be performed.",
 'permissionserrorstext-withaction' => 'This message is "with action" version of {{msg-mw|Permissionserrorstext}}.
@@ -1479,7 +1505,6 @@ Please report at [[Support]] if you are unable to properly translate this messag
 'edit-hook-aborted' => 'Used as error message.
 
 See also:
-* {{msg-mw|edit-hook-aborted}}
 * {{msg-mw|edit-gone-missing}}
 * {{msg-mw|edit-conflict}}
 * {{msg-mw|edit-no-change}}
@@ -1488,7 +1513,6 @@ See also:
 
 See also:
 * {{msg-mw|edit-hook-aborted}}
-* {{msg-mw|edit-gone-missing}}
 * {{msg-mw|edit-conflict}}
 * {{msg-mw|edit-no-change}}
 * {{msg-mw|edit-already-exists}}',
@@ -1497,7 +1521,6 @@ See also:
 See also:
 * {{msg-mw|edit-hook-aborted}}
 * {{msg-mw|edit-gone-missing}}
-* {{msg-mw|edit-conflict}}
 * {{msg-mw|edit-no-change}}
 * {{msg-mw|edit-already-exists}}",
 'edit-no-change' => 'Used as error message.
@@ -1506,7 +1529,6 @@ See also:
 * {{msg-mw|edit-hook-aborted}}
 * {{msg-mw|edit-gone-missing}}
 * {{msg-mw|edit-conflict}}
-* {{msg-mw|edit-no-change}}
 * {{msg-mw|edit-already-exists}}',
 'edit-already-exists' => 'Used as error message.
 
@@ -1514,8 +1536,7 @@ See also:
 * {{msg-mw|edit-hook-aborted}}
 * {{msg-mw|edit-gone-missing}}
 * {{msg-mw|edit-conflict}}
-* {{msg-mw|edit-no-change}}
-* {{msg-mw|edit-already-exists}}',
+* {{msg-mw|edit-no-change}}',
 'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking “Show changes” when creating a new page in the MediaWiki: namespace',
 'content-failed-to-parse' => "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.
 *$1 – content model ({{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}})
@@ -1555,35 +1576,29 @@ This message is substituted in:
 See also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].
 
 See also:
-* {{msg-mw|Expensive-parserfunction-warning}}
 * {{msg-mw|Expensive-parserfunction-category}}',
 'expensive-parserfunction-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if they contain too many calls to expensive parser functions.
 
 See also:
-* {{msg-mw|Expensive-parserfunction-warning}}
-* {{msg-mw|Expensive-parserfunction-category}}',
+* {{msg-mw|Expensive-parserfunction-warning}}',
 'post-expand-template-inclusion-warning' => 'When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.
 
 
 See also:
-* {{msg-mw|Post-expand-template-inclusion-warning}}
 * {{msg-mw|Post-expand-template-inclusion-category}}',
 'post-expand-template-inclusion-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the expanded size of the templates they contain exceeds the limit.
 When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.
 
 See also:
-* {{msg-mw|Post-expand-template-inclusion-warning}}
-* {{msg-mw|Post-expand-template-inclusion-category}}',
+* {{msg-mw|Post-expand-template-inclusion-warning}}',
 'post-expand-template-argument-warning' => 'Used as warning in parser limitation.
 
 See also:
-* {{msg-mw|Post-expand-template-argument-warning}}
 * {{msg-mw|Post-expand-template-argument-category}}',
 'post-expand-template-argument-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if they contain omitted template arguments.
 
 See also:
-* {{msg-mw|Post-expand-template-argument-warning}}
-* {{msg-mw|Post-expand-template-argument-category}}',
+* {{msg-mw|Post-expand-template-argument-warning}}',
 'parser-template-loop-warning' => '* $1 - page title',
 'parser-template-recursion-depth-warning' => '* $1 - limit value of recursion depth',
 'language-converter-depth-warning' => 'Error message shown when a page uses too deeply nested language conversion syntax
@@ -1640,7 +1655,8 @@ Also used as title of error message when the feed is empty. See [{{canonicalurl:
 
 See the error message:
 * {{msg-mw|history-feed-empty}}',
-'currentrev' => '{{Identical|Current revision}}',
+'currentrev' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
+{{Identical|Current revision}}',
 'currentrev-asof' => 'Used on a difference page when comparing the current versions of a page with each other. See {{msg-mw|Revisionasof}} for the message for non-current version.
 * $1 is a date and time
 * $2 is a date (optional)
@@ -1658,11 +1674,9 @@ See the error message:
 * (optional) $5: time of revision
 * (optional) $6: author of revision, for GENDER use',
 'previousrevision' => 'See also:
-* {{msg-mw|Previousrevision}}
 * {{msg-mw|Nextrevision}}',
 'nextrevision' => 'See also:
-* {{msg-mw|Previousrevision}}
-* {{msg-mw|Nextrevision}}',
+* {{msg-mw|Previousrevision}}',
 'currentrevisionlink' => '{{Identical|Current revision}}',
 'cur' => 'Link in page history',
 'next' => 'Link in page history
@@ -1707,63 +1721,31 @@ See [{{canonicalurl:x|feed=atom&action=history}} example].',
 'rev-deleted-comment' => 'Apparently this can also be about the reason of a log action, not only an edit summary. See also:
 *{{msg-mw|revdelete-hide-comment}}',
 'rev-deleted-user' => 'See also:
-* {{msg-mw|Rev-deleted-user}}
 * {{msg-mw|Rev-deleted-event}}',
 'rev-deleted-event' => 'See also:
-* {{msg-mw|Rev-deleted-user}}
-* {{msg-mw|Rev-deleted-event}}',
+* {{msg-mw|Rev-deleted-user}}',
 'rev-deleted-user-contribs' => 'Part of revision deletion.',
-'rev-deleted-text-permission' => 'See also:
-* {{msg-mw|Rev-deleted-text-permission}}
-* {{msg-mw|Rev-deleted-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-view}}',
-'rev-deleted-text-unhide' => '* $1 - a HTML link to the revision
-See also:
-* {{msg-mw|Rev-deleted-text-permission}}
-* {{msg-mw|Rev-deleted-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-view}}',
-'rev-suppressed-text-unhide' => '* $1 - a HTML link to the revision
-See also:
-* {{msg-mw|Rev-deleted-text-permission}}
-* {{msg-mw|Rev-deleted-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-view}}',
+'rev-deleted-text-permission' => '{{Related|Rev-deleted-text}}',
+'rev-deleted-text-unhide' => 'Parameters:
+* $1 - a HTML link to the revision
+{{Related|Rev-deleted-text}}',
+'rev-suppressed-text-unhide' => 'Parameters:
+* $1 - a HTML link to the revision
+{{Related|Rev-deleted-text}}',
 'rev-deleted-text-view' => 'I believe this is an error message which appears if a user tries to view a past revision of a page, where the revision has been hidden from view, although later revisions of the page still exist.',
-'rev-suppressed-text-view' => 'See also:
-* {{msg-mw|Rev-deleted-text-permission}}
-* {{msg-mw|Rev-deleted-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-unhide}}
-* {{msg-mw|Rev-suppressed-text-view}}',
+'rev-suppressed-text-view' => '{{Related|Rev-deleted-text}}',
 'rev-deleted-no-diff' => 'See also:
-* {{msg-mw|Rev-deleted-no-diff}}
 * {{msg-mw|Rev-suppressed-no-diff}}',
 'rev-suppressed-no-diff' => 'See also:
-* {{msg-mw|Rev-deleted-no-diff}}
-* {{msg-mw|Rev-suppressed-no-diff}}',
-'rev-deleted-unhide-diff' => '* $1 - a HTML link to the diff
-See also:
-* {{msg-mw|Rev-suppressed-unhide-diff}}
-* {{msg-mw|Rev-deleted-unhide-diff}}
-* {{msg-mw|Rev-suppressed-diff-view}}
-* {{msg-mw|Rev-deleted-diff-view}}',
-'rev-suppressed-unhide-diff' => '* $1 - a HTML link to the diff
-See also:
-* {{msg-mw|Rev-suppressed-unhide-diff}}
-* {{msg-mw|Rev-deleted-unhide-diff}}
-* {{msg-mw|Rev-suppressed-diff-view}}
-* {{msg-mw|Rev-deleted-diff-view}}',
-'rev-deleted-diff-view' => 'See also:
-* {{msg-mw|Rev-suppressed-unhide-diff}}
-* {{msg-mw|Rev-deleted-unhide-diff}}
-* {{msg-mw|Rev-suppressed-diff-view}}
-* {{msg-mw|Rev-deleted-diff-view}}',
-'rev-suppressed-diff-view' => 'See also:
-* {{msg-mw|Rev-suppressed-unhide-diff}}
-* {{msg-mw|Rev-deleted-unhide-diff}}
-* {{msg-mw|Rev-suppressed-diff-view}}
-* {{msg-mw|Rev-deleted-diff-view}}',
+* {{msg-mw|Rev-deleted-no-diff}}',
+'rev-deleted-unhide-diff' => 'Parameters:
+* $1 - a HTML link to the diff
+{{Related|Rev-deleted-diff}}',
+'rev-suppressed-unhide-diff' => 'Parameters:
+* $1 - a HTML link to the diff
+{{Related|Rev-deleted-diff}}',
+'rev-deleted-diff-view' => '{{Related|Rev-deleted-diff}}',
+'rev-suppressed-diff-view' => '{{Related|Rev-deleted-diff}}',
 'rev-delundel' => 'Link in page history for oversight (see also {{msg-mw|rev-showdeleted}})',
 'rev-showdeleted' => 'Link in page history for oversight (see also {{msg-mw|rev-delundel}})
 {{Identical|Show}}',
@@ -1772,17 +1754,13 @@ It is the page title of [[Special:RevisionDelete]].',
 'revdelete-nooldid-title' => '{{RevisionDelete}}',
 'revdelete-nooldid-text' => '{{RevisionDelete}}',
 'revdelete-nologtype-title' => 'See also:
-* {{msg-mw|Revdelete-nologtype-title}}
 * {{msg-mw|Revdelete-nologtype-text}}',
 'revdelete-nologtype-text' => 'See also:
-* {{msg-mw|Revdelete-nologtype-title}}
-* {{msg-mw|Revdelete-nologtype-text}}',
+* {{msg-mw|Revdelete-nologtype-title}}',
 'revdelete-nologid-title' => 'See also:
-* {{msg-mw|Revdelete-nologid-title}}
 * {{msg-mw|Revdelete-nologid-text}}',
 'revdelete-nologid-text' => 'See also:
-* {{msg-mw|Revdelete-nologid-title}}
-* {{msg-mw|Revdelete-nologid-text}}',
+* {{msg-mw|Revdelete-nologid-title}}',
 'revdelete-no-file' => 'Used as error message in [[Special:RevisionDelete]].',
 'revdelete-show-file-confirm' => 'A confirmation message shown on Special:Revisiondelete when the request does not contain a valid token (e.g. when a user clicks a link received in mail).
 
@@ -1804,13 +1782,11 @@ This is the introduction explaining the feature.',
 
 See also:
 * {{msg-mw|Revdelete-suppress}}
-* {{msg-mw|Revdelete-suppress-text}}
-* {{msg-mw|Revdelete-confirm}}',
+* {{msg-mw|Revdelete-suppress-text}}',
 'revdelete-suppress-text' => 'Used as usage text in [[Special:RevisionDelete]].
 
 See also:
 * {{msg-mw|Revdelete-suppress}}
-* {{msg-mw|Revdelete-suppress-text}}
 * {{msg-mw|Revdelete-confirm}}',
 'revdelete-legend' => '{{RevisionDelete}}
 Used as legend for the form.
@@ -1833,21 +1809,27 @@ See also:
 'revdelete-hide-restricted' => 'Option for oversight.',
 'revdelete-radio-same' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
-There are three radio buttons in each row, and the captions above each column read {{msg-mw|Revdelete-radio-same}}, {{msg-mw|Revdelete-radio-set}}, and {{msg-mw|Revdelete-radio-unset}}.',
+There are three radio buttons in each row, and the captions above each column read:
+* {{msg-mw|Revdelete-radio-same}}
+* {{msg-mw|Revdelete-radio-set}}
+* {{msg-mw|Revdelete-radio-unset}}',
 'revdelete-radio-set' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
-There are three radio buttons in each row, and the captions above each column read {{msg-mw|Revdelete-radio-same}}, {{msg-mw|Revdelete-radio-set}}, and {{msg-mw|Revdelete-radio-unset}}.
-
+There are three radio buttons in each row, and the captions above each column read:
+* {{msg-mw|Revdelete-radio-same}}
+* {{msg-mw|Revdelete-radio-set}}
+* {{msg-mw|Revdelete-radio-unset}}
 {{Identical|Yes}}',
 'revdelete-radio-unset' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
-There are three radio buttons in each row, and the captions above each column read {{msg-mw|Revdelete-radio-same}}, {{msg-mw|Revdelete-radio-set}}, and {{msg-mw|Revdelete-radio-unset}}.
-
+There are three radio buttons in each row, and the captions above each column read:
+* {{msg-mw|Revdelete-radio-same}}
+* {{msg-mw|Revdelete-radio-set}}
+* {{msg-mw|Revdelete-radio-unset}}
 {{Identical|No}}',
 'revdelete-suppress' => 'Option for oversight; used in [[Special:RevisionDelete]].
 
 See also:
-* {{msg-mw|Revdelete-suppress}}
 * {{msg-mw|Revdelete-suppress-text}}
 * {{msg-mw|Revdelete-confirm}}',
 'revdelete-unsuppress' => '{{RevisionDelete}}',
@@ -1965,7 +1947,6 @@ Title of the suppression log. Shown in the drop down menu at [[Special:log]] and
 'mergehistory-header' => 'Used as header for Merge form in [[Special:MergeHistory]].
 
 See also:
-* {{msg-mw|mergehistory-header}}
 * {{msg-mw|mergehistory-box}}
 * {{msg-mw|mergehistory-from}}
 * {{msg-mw|mergehistory-into}}
@@ -1974,7 +1955,6 @@ See also:
 
 See also:
 * {{msg-mw|mergehistory-header}}
-* {{msg-mw|mergehistory-box}}
 * {{msg-mw|mergehistory-from}}
 * {{msg-mw|mergehistory-into}}
 * {{msg-mw|mergehistory-go}}',
@@ -1983,7 +1963,6 @@ See also:
 See also:
 * {{msg-mw|mergehistory-header}}
 * {{msg-mw|mergehistory-box}}
-* {{msg-mw|mergehistory-from}}
 * {{msg-mw|mergehistory-into}}
 * {{msg-mw|mergehistory-go}}',
 'mergehistory-into' => 'Used as label for the Merge form in [[Special:MergeHistory]].
@@ -1992,7 +1971,6 @@ See also:
 * {{msg-mw|mergehistory-header}}
 * {{msg-mw|mergehistory-box}}
 * {{msg-mw|mergehistory-from}}
-* {{msg-mw|mergehistory-into}}
 * {{msg-mw|mergehistory-go}}',
 'mergehistory-list' => 'Used as section header in [[Special:MergeHistory]].',
 'mergehistory-merge' => 'Used in [[Special:MergeHistory]].
@@ -2004,8 +1982,7 @@ See also:
 * {{msg-mw|mergehistory-header}}
 * {{msg-mw|mergehistory-box}}
 * {{msg-mw|mergehistory-from}}
-* {{msg-mw|mergehistory-into}}
-* {{msg-mw|mergehistory-go}}',
+* {{msg-mw|mergehistory-into}}',
 'mergehistory-submit' => 'Used as label for Submit button in [[Special:MergeHistory]].',
 'mergehistory-empty' => 'Used in [[Special:MergeHistory]].',
 'mergehistory-success' => 'Used in [[Special:MergeHistory]].
@@ -2017,7 +1994,6 @@ See also:
 * $1 - source page title
 See also:
 * {{msg-mw|mergehistory-invalid-source}}
-* {{msg-mw|mergehistory-no-source}}
 * {{msg-mw|mergehistory-invalid-destination}}
 * {{msg-mw|mergehistory-no-destination}}
 * {{msg-mw|mergehistory-same-destination}}',
@@ -2027,12 +2003,10 @@ See also:
 * {{msg-mw|mergehistory-invalid-source}}
 * {{msg-mw|mergehistory-no-source}}
 * {{msg-mw|mergehistory-invalid-destination}}
-* {{msg-mw|mergehistory-no-destination}}
 * {{msg-mw|mergehistory-same-destination}}',
 'mergehistory-invalid-source' => 'Used as error message in [[Special:MergeHistory]].
 
 See also:
-* {{msg-mw|mergehistory-invalid-source}}
 * {{msg-mw|mergehistory-no-source}}
 * {{msg-mw|mergehistory-invalid-destination}}
 * {{msg-mw|mergehistory-no-destination}}
@@ -2042,7 +2016,6 @@ See also:
 See also:
 * {{msg-mw|mergehistory-invalid-source}}
 * {{msg-mw|mergehistory-no-source}}
-* {{msg-mw|mergehistory-invalid-destination}}
 * {{msg-mw|mergehistory-no-destination}}
 * {{msg-mw|mergehistory-same-destination}}',
 'mergehistory-autocomment' => 'This message is used as an edit summary when a redirect is automatically created after an entire page history is merged into another page history, and the user who did the merge wrote no comment.
@@ -2060,10 +2033,10 @@ See also:
 * {{msg-mw|mergehistory-invalid-source}}
 * {{msg-mw|mergehistory-no-source}}
 * {{msg-mw|mergehistory-invalid-destination}}
-* {{msg-mw|mergehistory-no-destination}}
-* {{msg-mw|mergehistory-same-destination}}',
+* {{msg-mw|mergehistory-no-destination}}',
 'mergehistory-reason' => '{{Identical|Reason}}',
-'mergehistory-revisionrow' => 'A revision row in the merge history page. Parameters:
+'mergehistory-revisionrow' => '{{Optional}}
+A revision row in the merge history page. Parameters:
 * $1 is a radio button to indicate a merge point,
 * $2 is a link to the last revision of a page ({{msg-mw|last}}),
 * $3 is a page link,
@@ -2167,9 +2140,9 @@ Viewprevnext is sometimes preceded by the {{msg-mw|Showingresults}} or {{msg-mw|
 'searchmenu-legend' => '{{Identical|Search options}}',
 'searchmenu-exists' => 'An option shown in a menu beside search form offering a link to the existing page having the specified title (when using the default MediaWiki search engine).',
 'searchmenu-new' => 'An option shown in a menu beside search form offering a red link to the not yet existing page having the specified title (when using the default MediaWiki search engine).',
-'searchhelp-url' => '{{Identical|HelpContent}}
-Description: The URL of the search help page.
-{{doc-important|Do not change the "<tt>Help:</tt>" part.}}',
+'searchhelp-url' => 'Description: The URL of the search help page.
+{{doc-important|Do not change the "<tt>Help:</tt>" part.}}
+{{Identical|HelpContent}}',
 'searchmenu-prefix' => '{{doc-important|Do not translate "Special:PrefixIndex"}}
 Parameters:
 * $1 - prefix string',
@@ -2245,26 +2218,23 @@ $1 is the relevance of this result in per cent.
 'search-interwiki-caption' => 'Used in [[Special:Search]], when showing search results from other wikis.',
 'search-interwiki-default' => '* $1 is the hostname of the remote wiki from where the additional results listed below are returned',
 'search-interwiki-more' => '{{Identical|More}}',
-'search-relatedarticle' => '{{Identical|Related}}
-
-This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]',
+'search-relatedarticle' => 'This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]
+{{Identical|Related}}',
 'mwsuggest-disable' => "The text of an option on the 'search options' tab of a user's Preferences.",
 'searcheverything-enable' => 'Used in [[Special:Preferences]], tab “Search”.',
-'searchrelated' => '{{Identical|Related}}
-
-This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]',
+'searchrelated' => 'This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]
+{{Identical|Related}}',
 'searchall' => '{{Identical|All}}',
-'showingresults' => 'This message is used on some special pages such as [[Special:WantedCategories]].
+'showingresults' => 'This message is used on some special pages such as [[Special:WantedCategories]]. Parameters:
 *$1 is the total number of results in the batch shown.
 *$2 is the number of the first item listed.
 See also:
-* {{msg-mw|Showingresults}}
 * {{msg-mw|Showingresultsnum}}',
-'showingresultsnum' => '* $2 - the first number in the batch of results
+'showingresultsnum' => 'Parameters:
+* $2 - the first number in the batch of results
 * $3 - the number of results on the page
 See also:
-* {{msg-mw|Showingresults}}
-* {{msg-mw|Showingresultsnum}}',
+* {{msg-mw|Showingresults}}',
 'showingresultsheader' => 'Used in search results of [[Special:Search]].',
 'nonefound' => 'This message appears on the search results page if no results are found.
 {{doc-important|Do not translate "all:".}}',
@@ -2284,7 +2254,10 @@ See also:
 'powersearch-togglenone' => '"None" refers to namespaces. It is used in Advanced search: http://translatewiki.net/w/i.php?title=Special:Search&advanced=1
 {{Identical|None}}',
 'search-external' => 'Legend of the fieldset for the input form when the internal search is disabled. Inside the fieldset [[MediaWiki:Searchdisabled]] and [[MediaWiki:Googlesearch]] is shown.',
-'searchdisabled' => 'Shown on [[Special:Search]] when the internal search is disabled.',
+'searchdisabled' => '{{doc-singularthey}}
+In this sentence, "their indexes" refers to "Google\'s indexes".
+
+Shown on [[Special:Search]] when the internal search is disabled.',
 
 # Quickbar
 'qbsettings' => 'The title of the section in [[Special:Preferences]], only shown when using the skins "Standard/Classic" or "Cologne Blue". The quicbar is the same as the sidebar.',
@@ -2305,7 +2278,7 @@ See also:
 * {{msg-mw|Mypreferences}}
 * {{msg-mw|Accesskey-pt-preferences}}
 * {{msg-mw|Tooltip-pt-preferences}}
-{{Identical|My preferences}}',
+{{Identical|Preferences}}',
 'prefs-edits' => 'In user preferences.',
 'prefsnologin' => '{{Identical|Not logged in}}',
 'prefsnologintext' => '* $1 - URI for "returnto" argument',
@@ -2313,8 +2286,8 @@ See also:
 {{Identical|Change password}}",
 'prefs-skin' => 'Used in user preferences.
 {{Identical|Skin}}',
-'skin-preview' => 'The link beside each skin name in [[Special:Preferences|your user preferences]], tab "skin".
-
+'skin-preview' => '{{doc-actionlink}}
+The link beside each skin name in [[Special:Preferences|your user preferences]], tab "skin".
 {{Identical|Preview}}',
 'datedefault' => 'Used as checkbox label in [[Special:Preferences#mw-prefsection-datetime|user preferences]], {{msg-mw|prefs-datetime}} tab.
 
@@ -2327,7 +2300,8 @@ This message indicates {{msg-mw|prefs-dateformat}} is default (= not specified).
 'prefs-rc' => 'Used in user preferences.
 
 {{Identical|Recent changes}}',
-'prefs-watchlist' => 'Used in user preferences.',
+'prefs-watchlist' => 'Used in user preferences.
+{{Identical|My watchlist}}',
 'prefs-watchlist-days' => 'Used in [[Special:Preferences]], tab "Watchlist".',
 'prefs-watchlist-days-max' => 'Shown as hint in [[Special:Preferences]], tab "Watchlist"',
 'prefs-watchlist-edits' => 'Used in [[Special:Preferences]], tab "Watchlist".',
@@ -2388,118 +2362,28 @@ This option lets your time zone setting use the one that is used on the wiki (of
 'timezoneoffset' => "Text next to input box in [[Special:Preferences]], tab 'date and time', section 'timezone'.",
 'servertime' => 'Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].',
 'guesstimezone' => 'Option to fill in the timezone from the browser setting',
-'timezoneregion-africa' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-america' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-antarctica' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-arctic' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-asia' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-atlantic' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-australia' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-europe' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-indian' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
-'timezoneregion-pacific' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab. See also:
-* {{msg-mw|Timezoneregion-africa}}
-* {{msg-mw|Timezoneregion-america}}
-* {{msg-mw|Timezoneregion-antarctica}}
-* {{msg-mw|Timezoneregion-arctic}}
-* {{msg-mw|Timezoneregion-asia}}
-* {{msg-mw|Timezoneregion-atlantic}}
-* {{msg-mw|Timezoneregion-australia}}
-* {{msg-mw|Timezoneregion-europe}}
-* {{msg-mw|Timezoneregion-indian}}
-* {{msg-mw|Timezoneregion-pacific}}',
+'timezoneregion-africa' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-america' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-antarctica' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-arctic' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-asia' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-atlantic' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-australia' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-europe' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-indian' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-pacific' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
 'allowemail' => 'Used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.',
-'prefs-searchoptions' => '{{Identical|Search options}}',
+'prefs-searchoptions' => '{{Identical|Search}}',
 'prefs-namespaces' => "{{Identical|Namespaces}}
 Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]",
 'defaultns' => 'Used in [[Special:Preferences]], tab "Search".',
@@ -2545,10 +2429,10 @@ Used in [[Special:Preferences]]. Parameters are:
 'badsiglength' => 'Warning message that is displayed on [[Special:Preferences]] when trying to save a signature that is too long. Parameter $1 is the maximum number of characters that is allowed in a signature (multi-byte characters are counted as one character).',
 'yourgender' => 'Used in [[Special:Preferences]], first tab.
 {{Identical|Gender}}',
-'gender-unknown' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|gender}} prompt. Choosing it indicates that the grammatical gender of the user name is not to be made public, cannot be determined, or matches none of the other choices preset in the select.',
-'gender-male' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|gender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "male" for those languages having a "normal" male grammatical gender.
+'gender-unknown' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name is not to be made public, cannot be determined, or matches none of the other choices preset in the select.',
+'gender-male' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "male" for those languages having a "normal" male grammatical gender.
 {{Identical|Male}}',
-'gender-female' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|gender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "female" for those languages having a "normal" female grammatical gender.
+'gender-female' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "female" for those languages having a "normal" female grammatical gender.
 {{Identical|Female}}',
 'prefs-help-gender' => 'Used as additional description for {{msg-mw|yourgender}} field in [[Special:Preferences]], section {{msg-mw|prefs-info}}.',
 'email' => '{{Identical|E-mail}}',
@@ -2620,8 +2504,9 @@ Used in [[Special:Preferences]], tab "Watchlist". The display options refer to:
 'editinguser' => 'Appears on [[Special:UserRights]]. Parameters:
 * $1 is a username
 * $2 are user tool links. Example: "(Talk | contribs | block | send e-mail)".',
-'userrights-editusergroup' => '{{Identical|Edit user groups}}. Parameter:
-* $1 is a username - optional, can be used for GENDER',
+'userrights-editusergroup' => 'Parameter:
+* $1 is a username - optional, can be used for GENDER
+{{Identical|Edit user groups}}',
 'saveusergroups' => 'Button text when editing user groups',
 'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
 
@@ -2699,15 +2584,16 @@ Basic right to read any page.',
 'right-edit' => '{{doc-right|edit}}
 Basic right to edit pages that are not protected.',
 'right-createpage' => '{{doc-right|createpage}}
-Basic right to create pages. The right to edit discussion/talk pages is {{msg|right-createtalk|pl=yes}}.',
+Basic right to create pages. The right to edit discussion/talk pages is {{msg-mw|right-createtalk}}.',
 'right-createtalk' => '{{doc-right|createtalk}}
-Basic right to create discussion/talk pages. The right to edit other pages is {{msg|right-createpage|pl=yes}}.',
+Basic right to create discussion/talk pages. The right to edit other pages is {{msg-mw|right-createpage}}.',
 'right-createaccount' => '{{doc-right|createaccount}}
 The right to [[Special:CreateAccount|create a user account]].',
 'right-minoredit' => '{{doc-right|minoredit}}
-The right to use the "This is a minor edit" checkbox. See {{msg|minoredit|pl=yes}} for the message used for that checkbox.',
+The right to use the "This is a minor edit" checkbox. See {{msg-mw|minoredit}} for the message used for that checkbox.',
 'right-move' => '{{doc-right|move}}
-The right to move any page that is not protected from moving.',
+The right to move any page that is not protected from moving.
+{{Identical|Move page}}',
 'right-move-subpages' => '{{doc-right|move-subpages}}',
 'right-move-rootuserpages' => '{{doc-right|move-rootuserpages}}',
 'right-movefile' => '{{doc-right|movefile}}',
@@ -2715,11 +2601,24 @@ The right to move any page that is not protected from moving.',
 'right-upload' => '{{doc-right|upload}}
 The right to [[Special:Upload|upload]] a file (this includes images, media, audio, ...).',
 'right-reupload' => '{{doc-right|reupload}}
-The right to upload a file under a file name that already exists. Related messages: {{msg|right-upload|pl=yes}}, {{msg|right-reupload-own|pl=yes}} and {{msg|right-reupload-shared|pl=yes}}.',
+The right to upload a file under a file name that already exists.
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload-own}}
+* {{msg-mw|right-reupload-shared}}',
 'right-reupload-own' => '{{doc-right|reupload-own}}
-Right to upload a file under a file name that already exists, and that the same user has uploaded. Related messages: {{msg|right-upload|pl=yes}} and {{msg|right-reupload|pl=yes}}.',
+Right to upload a file under a file name that already exists, and that the same user has uploaded.
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload}}',
 'right-reupload-shared' => '{{doc-right|reupload-shared}}
-The right to upload a file locally under a file name that already exists in a shared database (for example Commons). Related messages: {{msg|right-upload|pl=yes}} and {{msg|right-reupload|pl=yes}}.',
+The right to upload a file locally under a file name that already exists in a shared database (for example Commons).
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload}}',
 'right-upload_by_url' => '{{doc-right|upload by url}}',
 'right-purge' => '{{doc-right|purge}}
 The right to use <tt>&action=purge</tt> in the URL, without needing to confirm it (by default, anonymous users need to confirm it).',
@@ -2728,66 +2627,67 @@ If your account is older than [[mw:Manual:\$wgAutoConfirmAge|wgAutoConfirmAge]]
 If you are in that group, you have (by default) the '''right \"autoconfirmed\"'''. With this right, you can for example <!-- I think this right includes more things --> edit semi-protected pages.",
 'right-bot' => '{{doc-right|bot}}',
 'right-nominornewtalk' => '{{doc-right|nominornewtalk}}
-If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg|right-minoredit|pl=yes}}), the user will not get a notification "You have new messages".',
+If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg-mw|right-minoredit}}), the user will not get a notification "You have new messages".',
 'right-apihighlimits' => '{{doc-right|apihighlimits}}',
 'right-writeapi' => '{{doc-right|writeapi}}',
 'right-delete' => '{{doc-right|delete}}',
 'right-bigdelete' => '{{doc-right|bigdelete}}',
 'right-deletelogentry' => '{{doc-right|deletelogentry}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-sysop|pl=yes}}, although this right is disabled by default.
+It can be given to the group {{msg-mw|group-sysop}}, although this right is disabled by default.
 
-See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+See also:
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deleterevision}}',
 'right-deleterevision' => '{{doc-right|deleterevision}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-sysop|pl=yes}}, although this right is disabled by default.
+It can be given to the group {{msg-mw|group-sysop}}, although this right is disabled by default.
 
 See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}',
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deletelogentry}}',
 'right-deletedhistory' => '{{doc-right|deletedhistory}}',
 'right-deletedtext' => '{{doc-right|deletedtext}}',
 'right-browsearchive' => '{{doc-right|browsearchive}}',
 'right-undelete' => '{{doc-right|undelete}}',
 'right-suppressrevision' => '{{doc-right|suppressrevision}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
 
-See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+See also:
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
 'right-suppressionlog' => '{{doc-right|suppressionlog}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
 
 See also
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
 'right-block' => '{{doc-right|block}}',
 'right-blockemail' => '{{doc-right|blockemail}}',
 'right-hideuser' => '{{doc-right|hideuser}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
 
 See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
 'right-ipblock-exempt' => '{{doc-right|ipblock-exempt}}
 This user automatically bypasses IP blocks, auto-blocks and range blocks - so I presume - but I am uncertain',
 'right-proxyunbannable' => '{{doc-right|proxyunbannable}}',
-'right-unblockself' => '{{doc-right|unblockself}}',
+'right-unblockself' => '{{doc-right|unblockself}}
+{{doc-singularthey}}',
 'right-protect' => '{{doc-right|protect}}',
 'right-editprotected' => '{{doc-right|editprotected}}',
 'right-editinterface' => '{{doc-right|editinterface}}',
@@ -2814,45 +2714,16 @@ The rate limits have no effect on the groups that have this right. Rate limits i
 'right-sendemail' => '{{doc-right|sendemail}}',
 'right-passwordreset' => '{{doc-right|passwordreset}}',
 
+# Special:Log/newusers
+'newuserlogpage' => '{{doc-logpage}}
+
+Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].',
+'newuserlogpagetext' => 'Part of the "Newuserlog" extension. It is the description you can see on [[Special:Log/newusers]].',
+
 # User rights log
 'rightslog' => '{{doc-logpage}}
 In [[Special:Log]]',
 'rightslogtext' => 'Text in [[Special:Log/rights]].',
-'rightslogentry' => 'This message is displayed in the [[Special:Log/rights|User Rights Log]] when a bureaucrat changes the user groups for a user.
-
-* Parameter $1 is the username
-* Parameters $2 and $3 are lists of user groups or {{msg-mw|Rightsnone}}
-
-The name of the bureaucrat who did this task appears before this message.
-
-Similar to {{msg-mw|Gur-rightslog-entry}}',
-'rightslogentry-autopromote' => 'This message is displayed in the [[Special:Log/rights|User Rights Log]] when a user is automatically promoted to a user group.
-
-Parameters:
-* $2 is a comma separated list of old user groups or {{msg-mw|Rightsnone}}
-* $3 is a comma separated list of new user groups',
-'logentry-rights-rights' => '*$1 - username
-*$2 - (see below)
-*$3 - username
-*$4 - list of user groups or {{msg-mw|Rightsnone}}
-*$5 - list of user groups or {{msg-mw|Rightsnone}}
-----
-{{Logentry}}',
-'logentry-rights-rights-legacy' => '*$1 - username
-*$2 - (see below)
-*$3 - username
-----
-{{Logentry}}',
-'logentry-rights-autopromote' => '*$1 - username
-*$2 - (see below)
-*$3 - (see below)
-*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
-*$5 - comma separated list of new user groups
-----
-{{Logentry}}',
-'rightsnone' => 'Default rights for registered users.
-
-{{Identical|None}}',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '{{Doc-action|read}}',
@@ -2935,7 +2806,8 @@ Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
 {{Identical|$1 bots}}",
 'rcshowhideliu' => 'Option text in [[Special:RecentChanges]]',
 'rcshowhideanons' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
+* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.
+{{Identical|Anonymous user}}",
 'rcshowhidepatr' => "Option text in [[Special:RecentChanges]]. Parameters:
 * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
 'rcshowhidemine' => "Option text in [[Special:RecentChanges]]. Parameters:
@@ -2947,10 +2819,18 @@ Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
 List elements are separated by {{msg-mw|pipe-separator}} each. Each list element is, or contains, a link.",
 'diff' => 'Short form of "differences". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...',
 'hist' => 'Short form of "history". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...',
-'hide' => 'Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]]
+'hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].
 
+See also:
+* {{msg-mw|Show}}
 {{Identical|Hide}}',
-'show' => '{{Identical|Show}}',
+'show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].
+
+See also:
+* {{msg-mw|Hide}}
+{{Identical|Show}}',
 'minoreditletter' => "Very short form of \"'''minor edit'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]], [[Special:Contributions]] and history pages.",
 'newpageletter' => "Very short form of \"'''new page'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]] and [[Special:Contributions]].",
 'boteditletter' => 'Abbreviation of "bot". Appears in [[Special:RecentChanges]] and [[Special:Watchlist]].',
@@ -2970,11 +2850,9 @@ Does not work under $wgMiserMode ([[mwr:48986|r48986]]).',
 'rc-change-size-new' => 'Tooltip when hovering a change list diff size. The tooltip shows the resulting new size in bytes.',
 'newsectionsummary' => 'Default summary when adding a new section to a page.',
 'rc-enhanced-expand' => 'See also:
-* {{msg-mw|Rc-enhanced-expand}}
 * {{msg-mw|Rc-enhanced-hide}}',
 'rc-enhanced-hide' => 'See also:
-* {{msg-mw|Rc-enhanced-expand}}
-* {{msg-mw|Rc-enhanced-hide}}',
+* {{msg-mw|Rc-enhanced-expand}}',
 'rc-old-title' => 'Text that shows the original title of a page, $1 is the original title text',
 
 # Recent changes linked
@@ -3343,16 +3221,15 @@ See also:
 'filewasdeleted' => 'This warning is shown when trying to upload a file that does not exist, but has previously been deleted.
 Parameters:
 * $1 is a link to the deletion log, with the text from {{msg|deletionlog}}.',
-'filename-bad-prefix' => "Used as warning in [[Special:Upload]]. Parameters:
+'filename-bad-prefix' => 'Used as warning in [[Special:Upload]]. Parameters:
 * $1 - prefix
 See also:
 * {{msg-mw|fileexists}}
 * {{msg-mw|filepageexists}}
 * {{msg-mw|fileexists-extension}}
-* {{msg-mw|fileexists-thumbnail-yes',}}
+* {{msg-mw|fileexists-thumbnail-yes}}
 * {{msg-mw|file-thumbnail-no}}
-* {{msg-mw|filename-bad-prefix}}
-* {{msg-mw|filewasdeleted}}",
+* {{msg-mw|filewasdeleted}}',
 'filename-prefix-blacklist' => "{{optional}}
 Do not translate the file name prefixes before the hash mark (#). Leave all the wiki markup, including the spaces, as is. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.",
 'upload-success-subj' => 'Used as message subject which is posted on the user talk page.
@@ -3461,33 +3338,14 @@ See also:
 * $1 is a file path
 * $2 is a file path.',
 'backend-fail-opentemp' => 'Used as error message.
-
-See also:
-* {{msg-mw|Backend-fail-opentemp}}
-* {{msg-mw|Backend-fail-writetemp}}
-* {{msg-mw|Backend-fail-closetemp}}
-* {{msg-mw|Backend-fail-read}}',
+{{Related|Backend-fail}}',
 'backend-fail-writetemp' => 'Used as error message.
-
-See also:
-* {{msg-mw|Backend-fail-opentemp}}
-* {{msg-mw|Backend-fail-writetemp}}
-* {{msg-mw|Backend-fail-closetemp}}
-* {{msg-mw|Backend-fail-read}}',
+{{Related|Backend-fail}}',
 'backend-fail-closetemp' => 'Used as error message.
-
-See also:
-* {{msg-mw|Backend-fail-opentemp}}
-* {{msg-mw|Backend-fail-writetemp}}
-* {{msg-mw|Backend-fail-closetemp}}
-* {{msg-mw|Backend-fail-read}}',
+{{Related|Backend-fail}}',
 'backend-fail-read' => 'Used as error message. Parameters:
 * $1 - filename
-See also:
-* {{msg-mw|Backend-fail-opentemp}}
-* {{msg-mw|Backend-fail-writetemp}}
-* {{msg-mw|Backend-fail-closetemp}}
-* {{msg-mw|Backend-fail-read}}',
+{{Related|Backend-fail}}',
 'backend-fail-create' => 'Parameters:
 * $1 is a filename.',
 'backend-fail-maxsize' => '* $1 - destination storage path
@@ -3543,7 +3401,6 @@ A "[http://en.wikipedia.org/wiki/File_locking#Lock_files lock file]" signals by
 'zip-file-open-error' => 'Used as ZIP error message.
 
 See also:
-* {{msg-mw|Zip-file-open-error}}
 * {{msg-mw|Zip-wrong-format}}
 * {{msg-mw|Zip-bad}}
 * {{msg-mw|Zip-unsupported}}',
@@ -3551,7 +3408,6 @@ See also:
 
 See also:
 * {{msg-mw|Zip-file-open-error}}
-* {{msg-mw|Zip-wrong-format}}
 * {{msg-mw|Zip-bad}}
 * {{msg-mw|Zip-unsupported}}',
 'zip-bad' => 'Used as ZIP error message.
@@ -3559,7 +3415,6 @@ See also:
 See also:
 * {{msg-mw|Zip-file-open-error}}
 * {{msg-mw|Zip-wrong-format}}
-* {{msg-mw|Zip-bad}}
 * {{msg-mw|Zip-unsupported}}',
 'zip-unsupported' => "Used as ZIP error message.
 
@@ -3568,8 +3423,7 @@ Perhaps translations of 'software' can be used instead of 'features' and 'unders
 See also:
 * {{msg-mw|Zip-file-open-error}}
 * {{msg-mw|Zip-wrong-format}}
-* {{msg-mw|Zip-bad}}
-* {{msg-mw|Zip-unsupported}}",
+* {{msg-mw|Zip-bad}}",
 
 # Special:UploadStash
 'uploadstash' => 'Used as page title in [[Special:UploadStash]].',
@@ -3611,7 +3465,6 @@ If \'scheme\' is difficult to translate, then you could use \'prefix\' instead.'
 'http-request-error' => 'Used as error message when executing HTTP request.
 
 See also:
-* {{msg-mw|Http-request-error}}
 * {{msg-mw|Http-read-error}}
 * {{msg-mw|Http-host-unreachable|6}}
 * {{msg-mw|Http-timed-out|28}}',
@@ -3619,7 +3472,6 @@ See also:
 
 See also:
 * {{msg-mw|Http-request-error}}
-* {{msg-mw|Http-read-error}}
 * {{msg-mw|Http-host-unreachable|6}}
 * {{msg-mw|Http-timed-out|28}}',
 'http-timed-out' => 'Used as error message when executing HTTP request.
@@ -3627,8 +3479,7 @@ See also:
 See also:
 * {{msg-mw|Http-request-error}}
 * {{msg-mw|Http-read-error}}
-* {{msg-mw|Http-host-unreachable|6}}
-* {{msg-mw|Http-timed-out|28}}',
+* {{msg-mw|Http-host-unreachable|6}}',
 'http-curl-error' => 'Used as curl error message when the error is other than known messages.
 * $1 - error code; not URL
 Known messages are:
@@ -3639,7 +3490,6 @@ Known messages are:
 See also:
 * {{msg-mw|Http-request-error}}
 * {{msg-mw|Http-read-error}}
-* {{msg-mw|Http-host-unreachable|6}}
 * {{msg-mw|Http-timed-out|28}}',
 'http-bad-status' => '$1 is an HTTP error code (e.g. 404), $2 is the HTTP error message (e.g. File Not Found)',
 
@@ -3950,7 +3800,7 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec
 'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
 'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
 'double-redirect-fixed-move' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after a page move. See also {{msg|fix-double-redirects}}.',
-'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg|double-redirect-fixed-move}}.',
+'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg-mw|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg-mw|double-redirect-fixed-move}}.',
 'double-redirect-fixer' => "This is the '''username''' of the user who updates the double redirects after a page move. A user is created with this username, so it is perhaps better to not change this message too often. See also {{msg|double-redirect-fixed-move}} and {{msg|fix-double-redirects}}.",
 
 'brokenredirects' => 'Name of [[Special:BrokenRedirects]] displayed in [[Special:SpecialPages]]',
@@ -4064,7 +3914,8 @@ The title is {{msg-mw|nopagetitle}}.
 See also:
 * {{msg-mw|Nopagetitle|title}}
 * {{msg-mw|Nopagetext|text}}',
-'pager-newer-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
+'pager-newer-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.
+{{Identical|Newer}}",
 'pager-older-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the first argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
 'suppress' => '{{Identical|Oversight}}',
 'querypage-disabled' => "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
@@ -4137,7 +3988,7 @@ Title of [[Special:Log]].',
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => 'Message notifying they are watching a cached page. $1 is a duration (ie "1 hour and 30 minutes")',
-'cachedspecial-viewing-cached-ts' => 'Message notifying they are watching a cached page.',
+'cachedspecial-viewing-cached-ts' => 'Message notifying they are watching a cached page. This is a message displayed on special pages (contaning lists of pages with certain properties) that are served from the cache, as opposed to having been compiled run-time. This means that the displayed data may differ from the current situation.',
 'cachedspecial-refresh-now' => 'Link text pointing to the most recent version of the page.',
 
 # Special:Categories
@@ -4217,12 +4068,6 @@ See also:
 * {{msg-mw|activeusers-hidebots|label for checkbox}}',
 'activeusers-noresult' => 'identical with {{msg-mw|listusers-noresult}}',
 
-# Special:Log/newusers
-'newuserlogpage' => '{{doc-logpage}}
-
-Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].',
-'newuserlogpagetext' => 'Part of the "Newuserlog" extension. It is the description you can see on [[Special:Log/newusers]].',
-
 # Special:ListGroupRights
 'listgrouprights' => 'The name of the special page [[Special:ListGroupRights]].',
 'listgrouprights-summary' => 'The description used on [[Special:ListGroupRights]].',
@@ -4249,35 +4094,19 @@ See also {{msg|listgrouprights-removegroup}}.',
 * $2 is the number of group names in $1.
 See also {{msg|listgrouprights-addgroup}}.',
 'listgrouprights-addgroup-all' => 'Used on [[Special:ListGroupRights]].
-
-See also:
-* {{msg-mw|Listgrouprights-addgroup-all}}
-* {{msg-mw|Listgrouprights-removegroup-all}}
-* {{msg-mw|Listgrouprights-addgroup-self-all}}
-* {{msg-mw|Listgrouprights-removegroup-self-all}}',
+{{Related|Listgrouprights}}',
 'listgrouprights-removegroup-all' => 'Used on [[Special:ListGroupRights]].
-
-See also:
-* {{msg-mw|Listgrouprights-addgroup-all}}
-* {{msg-mw|Listgrouprights-removegroup-all}}
-* {{msg-mw|Listgrouprights-addgroup-self-all}}
-* {{msg-mw|Listgrouprights-removegroup-self-all}}',
+{{Related|Listgrouprights}}',
 'listgrouprights-addgroup-self' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 are the group names.
 * $2 is the number of group names in $1.',
 'listgrouprights-removegroup-self' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 are the group names.
 * $2 is the number of group names in $1.',
-'listgrouprights-addgroup-self-all' => 'See also:
-* {{msg-mw|Listgrouprights-addgroup-all}}
-* {{msg-mw|Listgrouprights-removegroup-all}}
-* {{msg-mw|Listgrouprights-addgroup-self-all}}
-* {{msg-mw|Listgrouprights-removegroup-self-all}}',
-'listgrouprights-removegroup-self-all' => 'See also:
-* {{msg-mw|Listgrouprights-addgroup-all}}
-* {{msg-mw|Listgrouprights-removegroup-all}}
-* {{msg-mw|Listgrouprights-addgroup-self-all}}
-* {{msg-mw|Listgrouprights-removegroup-self-all}}',
+'listgrouprights-addgroup-self-all' => 'Used on [[Special:ListGroupRights]].
+{{Related|Listgrouprights}}',
+'listgrouprights-removegroup-self-all' => 'Used on [[Special:ListGroupRights]].
+{{Related|Listgrouprights}}',
 
 # E-mail user
 'mailnologin' => 'Used in [[Special:EmailUser]].
@@ -4362,9 +4191,12 @@ See also:
 'watchlistanontext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
 'watchnologin' => '{{Identical|Not logged in}}',
 'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.',
-'addedwatchtext' => 'Explanation shown when clicking on the {{msg|watch}} tab. See also {{msg|addedwatch}}.',
+'addedwatchtext' => 'Explanation shown when clicking on the {{msg-mw|watch}} tab.
+
+See also {{msg-mw|addedwatch}}.',
 'removedwatchtext' => "After a page has been removed from a user's watchlist by clicking the {{msg|unwatch}} tab at the top of an article, this message appears just below the title of the article. $1 is the title of the article. See also {{msg|removedwatch}} and {{msg|addedwatchtext}}.",
-'watch' => 'Name of the Watch tab. Should be in the imperative mood.
+'watch' => '{{doc-actionlink}}
+Name of the Watch tab. Should be in the imperative mood.
 
 See also:
 * {{msg-mw|Watch}}
@@ -4376,7 +4208,8 @@ See also:
 * {{msg-mw|Unwatchthispage|link text}}
 * {{msg-mw|Notanarticle|error message}}
 {{Identical|Watch this page}}',
-'unwatch' => 'Label of "Unwatch" tab.
+'unwatch' => '{{doc-actionlink}}
+Label of "Unwatch" tab.
 
 See also:
 * {{msg-mw|Unwatch}}
@@ -4385,7 +4218,6 @@ See also:
 'unwatchthispage' => 'Used as link text.
 
 See also:
-* {{msg-mw|Unatchthispage|link text}}
 * {{msg-mw|Watchthispage|link text}}
 * {{msg-mw|Notanarticle|error message}}',
 'notanarticle' => "A 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
@@ -4414,11 +4246,9 @@ See also:
 * {{msg-mw|enotif reset|Submit button text}}',
 'wlheader-showupdated' => 'This message shows up near top of users watchlist page.',
 'watchmethod-recent' => 'See also:
-* {{msg-mw|Watchmethod-recent}}
 * {{msg-mw|Watchmethod-list}}',
 'watchmethod-list' => 'See also:
-* {{msg-mw|Watchmethod-recent}}
-* {{msg-mw|Watchmethod-list}}',
+* {{msg-mw|Watchmethod-recent}}',
 'watchlistcontains' => '* $1 - number of pages in your watchlist',
 'wlnote' => 'Used on [[Special:Watchlist]] when the maximum number of days is specified.
 Similar to {{msg-mw|rcnote}} which is used on [[Special:RecentChanges]].
@@ -4441,7 +4271,13 @@ See also:
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Text displayed when clicked on the watch tab: [[MediaWiki:Watch/{{SUBPAGENAME}}|{{int:watch}}]]. It means the wiki is adding that page to your watchlist.',
 'unwatching' => 'Text displayed when clicked on the unwatch tab: [[MediaWiki:Unwatch/{{SUBPAGENAME}}|{{int:unwatch}}]]. It means the wiki is removing that page from your watchlist.',
-'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed. See also {{msg|addedwatchtext}}. and {{msg|addedwatchtext}}. This message is used raw and should not contain wikitext.',
+'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed.
+
+This message is used raw and should not contain wikitext.
+
+See also:
+* {{msg-mw|addedwatchtext}}
+* {{msg-mw|addedwatchtext}}',
 
 'enotif_reset' => "Used in [[Special:Watchlist]].
 
@@ -4496,7 +4332,7 @@ See also:
 **{{msg-mw|enotif body intro deleted}}
 **{{msg-mw|enotif body intro created}}
 **{{msg-mw|enotif body intro moved}}
-**{{msg-mw|enotif body intro restored}} 
+**{{msg-mw|enotif body intro restored}}
 **{{msg-mw|enotif body intro changed}} (for all the other cases).
 *$NEWPAGE consists of either
 **if the page is new (in older releases), {{msg-mw|enotif newpagetext}}
@@ -4505,6 +4341,7 @@ See also:
 ***a newline
 ***{{msg-mw|enotif lastvisited}}
 *$PAGEEDITOR_EMAIL and $PAGEEDITOR_WIKI are links respectively to the e-mail user special page and user page for the user who performed the action.
+*$PAGEEDITOR is the username of the user who performed the action.
 
 The subject of the e-mail is one of the following messages:
 *{{msg-mw|enotif subject deleted}}
@@ -4512,6 +4349,14 @@ The subject of the e-mail is one of the following messages:
 *{{msg-mw|enotif subject moved}}
 *{{msg-mw|enotif subject restored}}
 *{{msg-mw|enotif subject changed}}',
+'created' => '{{Optional}}
+Possible value for $CHANGEDORCREATED in the following messages:
+* {{msg-mw|enotif_subject}}
+* {{msg-mw|enotif_body}}',
+'changed' => '{{Optional}}
+Possible value for $CHANGEDORCREATED in the following messages:
+* {{msg|enotif_subject}}
+* {{msg|enotif_body}}',
 
 # Delete
 'confirm' => 'Submit button text for protection confirmation
@@ -4543,8 +4388,10 @@ The name of the deletion log. Used as heading on [[Special:Log/delete]] and in t
 
 {{Identical|Deletion log}}',
 'dellogpagetext' => 'Text in [[Special:Log/delete]].',
-'deletionlog' => 'This message is used to link to the deletion log as parameter $1 of {{msg|Filewasdeleted}}, as parameter $2 of {{msg|deletedtext}}, and in log lines on [[Special:DeletedContributions]].
-
+'deletionlog' => 'This message is used to link to the deletion log:
+* Used as parameter $1 of {{msg-mw|Filewasdeleted}}
+* Used as parameter $2 of {{msg-mw|deletedtext}}
+* Used in log lines on [[Special:DeletedContributions]].
 {{Identical|Deletion log}}',
 'reverted' => '{{Identical|Revert}}',
 'deletecomment' => '{{Identical|Reason}}',
@@ -4554,31 +4401,40 @@ The name of the deletion log. Used as heading on [[Special:Log/delete]] and in t
 <pre>* Group
 ** Common delete reason
 ** ...</pre>',
-'delete-edit-reasonlist' => 'Shown beneath the page deletion form on the right side. It is a link to [[MediaWiki:Deletereason-dropdown]]. See also {{msg|Ipb-edit-dropdown}} and {{msg|Protect-edit-reasonlist}}.
+'delete-edit-reasonlist' => 'Shown beneath the page deletion form on the right side. It is a link to {{msg-mw|Deletereason-dropdown|notext=1}}.
 
+See also:
+* {{msg-mw|Ipb-edit-dropdown}}
+* {{msg-mw|Protect-edit-reasonlist}}.
 {{Identical|Edit delete reasons}}',
-'delete-toobig' => '* $1 - the upper limit of number of revisions
+'delete-toobig' => 'Parameters:
+* $1 - the upper limit of number of revisions
 See also:
-* {{msg-mw|Delete-toobig}}
 * {{msg-mw|Delete-warning-toobig}}',
-'delete-warning-toobig' => '* $1 - the upper limit of number of revisions
+'delete-warning-toobig' => 'Parameters:
+* $1 - the upper limit of number of revisions
 See also:
-* {{msg-mw|Delete-toobig}}
-* {{msg-mw|Delete-warning-toobig}}',
+* {{msg-mw|Delete-toobig}}',
 
 # Rollback
 'rollback' => '{{Identical|Rollback}}',
 'rollback_short' => '{{Identical|Rollback}}',
 'rollbacklink' => '{{Identical|Rollback}}
-This link text appears on the recent changes page to users who have the "rollback" right.  It is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.
-This message has a tooltip {{msg-mw|tooltip-rollback}}',
-'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. This link is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.  See also {{msg-mw|rollbacklink}}.
+This link text appears on the recent changes page to users who have the "rollback" right.
+This message has a tooltip {{msg-mw|tooltip-rollback}}
+
+{{Doc-actionlink}}',
+'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.
 * $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
 
-The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}',
+The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}
+
+{{Doc-actionlink}}',
 'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
 
-When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.',
+When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.
+
+{{Doc-actionlink}}',
 'rollbackfailed' => '{{Identical|Rollback}}',
 'cantrollback' => 'Used as error message when rolling back.
 
@@ -4627,6 +4483,8 @@ Example:
 'prot_1movedto2' => 'Message description: [[mw:Manual:Interface/1movedto2]]',
 'protect-badnamespace-title' => 'Title of error page when trying to access action=protect on a non-protectable namespace (currently this only for the MediaWiki: namespace).',
 'protect-badnamespace-text' => 'Content of the error page that goes with {{msg-mw|protect-badnamespace-title}}.',
+'protect-norestrictiontypes-text' => "Content of the error page in case there aren't any restriction types (like edit or create) available.",
+'protect-norestrictiontypes-title' => "Page title in case there aren't any restriction types (like edit or create) available ($1 represents the page title).",
 'protect-legend' => 'Legend of the fieldset around the input form of the protection form.',
 'protectcomment' => '{{Identical|Reason}}',
 'protectexpiry' => '{{Identical|Expires}}',
@@ -4654,16 +4512,17 @@ See example: [http://translatewiki.net/w/i.php?title=Main_Page&action=info]',
 'protect-level-sysop' => 'Used as protect level.
 
 See example: [http://translatewiki.net/w/i.php?title=Main_Page&action=info]',
+'protect-summary-desc' => '{{Optional}}
+Used in edit summary for description of a protecting restriction.
+* $1 is action, taken from restriction-*
+* $2 is restriction, taken from protect-level-*
+* $3 is {{msg-mw|protect-expiring}} or {{msg-mw|protect-expiry-indefinite}}',
 'protect-summary-cascade' => 'Used in edit summary when cascade protecting a page. Appears in protection log. See [[Special:Log]] and [[m:Special:Log]].
 
 Also used in [[Special:ProtectedPages]] when a page is cascade protected. See example: [[m:Special:ProtectedPages]].<br />
 See also:
 *{{msg-mw|Restriction-level-sysop}}
 *{{msg-mw|Restriction-level-autoconfirmed}}',
-'protect-summary-desc' => 'Used in edit summary for description of a protecting restriction.
-* $1 is action, taken from restriction-*
-* $2 is restriction, taken from protect-level-*
-* $3 is {{msg-mw|protect-expiring}} or {{msg-mw|protect-expiry-indefinite}}',
 'protect-expiring' => 'Used in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
 * $1 is a date and time
 * $2 is a date (optional)
@@ -4689,7 +4548,11 @@ See also:
 
 <tt><nowiki>* Groupname</nowiki></tt> - defines a new group<br />
 <tt><nowiki>** Reason</nowiki></tt> - defines a reason in this group',
-'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to [[MediaWiki:Protect-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Ipb-edit-dropdown}}.',
+'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to {{msg-mw|Protect-dropdown|notext=1}}.
+
+See also:
+* {{msg-mw|Delete-edit-reasonlist}}
+* {{msg-mw|Ipb-edit-dropdown}}',
 'protect-expiry-options' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
 
 Options for the duration of the page protection. Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.",
@@ -4714,19 +4577,19 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 # Restriction levels
 'restriction-level-sysop' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level' and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
 
-*{{msg-mw|Restriction-level-sysop}}
+See also:
 *{{msg-mw|Restriction-level-autoconfirmed}}
 *{{msg-mw|Restriction-level-all}}",
 'restriction-level-autoconfirmed' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level', and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
 
+See also:
 *{{msg-mw|Restriction-level-sysop}}
-*{{msg-mw|Restriction-level-autoconfirmed}}
 *{{msg-mw|Restriction-level-all}}",
 'restriction-level-all' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level'. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
 
+See also:
 *{{msg-mw|Restriction-level-sysop}}
-*{{msg-mw|Restriction-level-autoconfirmed}}
-*{{msg-mw|Restriction-level-all}}",
+*{{msg-mw|Restriction-level-autoconfirmed}}",
 
 # Undelete
 'undelete' => 'Name of special page for admins as displayed in [[Special:SpecialPages]].
@@ -4749,21 +4612,18 @@ See also:
 'undeletehistory' => 'Used in [[Special:Undelete]].
 
 See also:
-* {{msg-mw|Undeletehistory}}
 * {{msg-mw|Undeleterevdel}}
 * {{msg-mw|Undeletehistorynoadmin}}',
 'undeleterevdel' => 'Used in [[Special:Undelete]].
 
 See also:
 * {{msg-mw|Undeletehistory}}
-* {{msg-mw|Undeleterevdel}}
 * {{msg-mw|Undeletehistorynoadmin}}',
 'undeletehistorynoadmin' => 'Used in [[Special:Undelete]].
 
 See also:
 * {{msg-mw|Undeletehistory}}
-* {{msg-mw|Undeleterevdel}}
-* {{msg-mw|Undeletehistorynoadmin}}',
+* {{msg-mw|Undeleterevdel}}',
 'undelete-revision' => 'Shown in "View and restore deleted pages" ([[Special:Undelete/$1]]).
 
 * $1: deleted page name
@@ -4789,21 +4649,18 @@ See also:
 * $1 - number of revisions
 See also:
 * {{msg-mw|Undeletedrevisions-files}}
-* {{msg-mw|Undeletedrevisions}}
 * {{msg-mw|Undeletedfiles}}',
 'undeletedrevisions-files' => 'Used as reason in the log entry. Parameters:
 * $1 - number of revisions
 * $2 - number of files
 See also:
-* {{msg-mw|Undeletedrevisions-files}}
 * {{msg-mw|Undeletedrevisions}}
 * {{msg-mw|Undeletedfiles}}',
 'undeletedfiles' => 'Used as reason in the log entry. Parameters:
 * $1 - number of files
 See also:
 * {{msg-mw|Undeletedrevisions-files}}
-* {{msg-mw|Undeletedrevisions}}
-* {{msg-mw|Undeletedfiles}}',
+* {{msg-mw|Undeletedrevisions}}',
 'cannotundelete' => 'Message shown when undeletion failed for some reason.
 * <code>$1</code> is the combined wikitext of messages for all errors that caused the failure.',
 'undeletedpage' => '* $1 - page title',
@@ -4811,7 +4668,6 @@ See also:
 'undelete-search-title' => 'Page title when showing the search form in [[Special:Undelete]].
 
 See also:
-* {{msg-mw|undelete-search-title}}
 * {{msg-mw|undelete-search-box}}
 * {{msg-mw|undelete-search-prefix}}
 * {{msg-mw|undelete-search-submit}}',
@@ -4819,7 +4675,6 @@ See also:
 
 See also:
 * {{msg-mw|undelete-search-title}}
-* {{msg-mw|undelete-search-box}}
 * {{msg-mw|undelete-search-prefix}}
 * {{msg-mw|undelete-search-submit}}',
 'undelete-search-prefix' => 'Used as label for the input box in [[Special:Undelete]].
@@ -4827,7 +4682,6 @@ See also:
 See also:
 * {{msg-mw|undelete-search-title}}
 * {{msg-mw|undelete-search-box}}
-* {{msg-mw|undelete-search-prefix}}
 * {{msg-mw|undelete-search-submit}}',
 'undelete-search-submit' => 'Used as Submit button text in Search form on [[Special:Undelete]].
 
@@ -4835,7 +4689,6 @@ See also:
 * {{msg-mw|undelete-search-title}}
 * {{msg-mw|undelete-search-box}}
 * {{msg-mw|undelete-search-prefix}}
-* {{msg-mw|undelete-search-submit}}
 {{Identical|Search}}',
 'undelete-no-results' => 'Used as Search result in [[Special:Undelete]].',
 'undelete-filename-mismatch' => '* $1 - date and time',
@@ -4856,7 +4709,8 @@ See also:
 
 {{identical|Are you sure you want to view the deleted revision of the file...}}',
 'undelete-show-file-submit' => '{{Identical|Yes}}',
-'undelete-revisionrow' => "A revision row in the undelete page. Parameters:
+'undelete-revisionrow' => "{{Optional}}
+A revision row in the undelete page. Parameters:
 * $1 is a checkBox to indicate whether to restore this specific revision
 * $2 is a link to the revision
 * $3 is a link to the last revision of a page ({{msg-mw|last}})
@@ -4866,7 +4720,8 @@ See also:
 * $7 is the revision comment",
 
 # Namespace form on various pages
-'namespace' => 'This message is located at [[Special:Contributions]].',
+'namespace' => 'This message is located at [[Special:Contributions]].
+{{Identical|Namespace}}',
 'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]].
 
 This message means "Invert selection of namespace".
@@ -4896,11 +4751,12 @@ See also:
 * {{msg-mw|Mycontris}}
 * {{msg-mw|Accesskey-pt-mycontris}}
 * {{msg-mw|Tooltip-pt-mycontris}}',
-'contribsub2' => 'Contributions for "user" (links)',
+'contribsub2' => 'Contributions for "user" (links)
+{{Identical|For $1}}',
 'nocontribs' => 'Optional parameter: $1 is the user name',
 'uctop' => 'This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (top)',
-'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg|year}}.',
-'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg|month}}.',
+'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.',
+'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg-mw|month}}.',
 
 'sp-contributions-newbies' => 'Text of radio button on special page [[Special:Contributions]].',
 'sp-contributions-newbies-sub' => "Note at the top of the page of results for a search on [[Special:Contributions]] where 'Show contributions for new accounts only' has been selected.",
@@ -4992,8 +4848,7 @@ Anon version: {{msg-mw|Sp-contributions-blocked-notice-anon}}',
 'sp-contributions-blocked-notice-anon' => 'Same as {{msg-mw|Sp-contributions-blocked-notice}} but for anonymous users.',
 'sp-contributions-search' => 'Used on [[Special:Contributions]]',
 'sp-contributions-username' => 'This message appears whenever someone requests [[Special:Contributions]].
-
-{{Identical/IP address or username}}',
+{{Identical|IP address or username}}',
 'sp-contributions-toponly' => '"top revision" means the "latest revision"',
 'sp-contributions-submit' => '{{Identical|Search}}',
 'sp-contributions-explain' => '{{optional}}',
@@ -5061,7 +4916,7 @@ See also:
 'blockip-legend' => 'Legend/Header for the fieldset around the input form of [[Special:Block]].
 
 {{Identical|Block user}}',
-'ipadressorusername' => '{{Identical/IP address or username}}',
+'ipadressorusername' => '{{Identical|IP address or username}}',
 'ipbexpiry' => '{{Identical|Expiry}}',
 'ipbreason' => 'Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].
 
@@ -5088,7 +4943,8 @@ See also:
 * {{msg-mw|ipbwatchuser}}
 * {{msg-mw|ipb-hardblock}}
 {{Identical|Prevent user from sending e-mail}}',
-'ipbenableautoblock' => 'Used as label for checkbox in [[Special:Block]].
+'ipbenableautoblock' => '{{doc-singularthey}}
+Used as label for checkbox in [[Special:Block]].
 
 See also:
 * {{msg-mw|ipbemailban}}
@@ -5129,7 +4985,7 @@ See also:
 * {{msg-mw|ipbhidename}}
 * {{msg-mw|ipbwatchuser}}
 * {{msg-mw|ipb-hardblock}}',
-'ipb-change-block' => 'Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg|ipb-needreblock}}.',
+'ipb-change-block' => 'Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg-mw|ipb-needreblock}}.',
 'ipb-confirm' => 'Used as hidden field in the form on [[Special:Block]].',
 'badipaddress' => 'An error message shown when one entered an invalid IP address in blocking page.',
 'blockipsuccesssub' => 'Used as page title in [[Special:Block]].
@@ -5141,7 +4997,11 @@ The title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.
 
 Parameters:
 * $1 - username, can be used for GENDER',
-'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to [[MediaWiki:Ipbreason-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Protect-edit-reasonlist}}.',
+'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.
+
+See also:
+* {{msg-mw|Delete-edit-reasonlist}}
+* {{msg-mw|Protect-edit-reasonlist}}',
 'ipb-unblock-addr' => 'Used in [[Special:Block]].
 * $1 - target username',
 'ipb-blocklist-contribs' => 'Used in [[Special:Block]].
@@ -5153,23 +5013,21 @@ Parameters:
 * Click "unblock" for any block (but you can only see "unblock" if you have administrator rights)
 * It is now the button below the form',
 'unblocked' => '{{doc-important|Do not translate the namespace "User:".}}
+Parameters:
 * $1 - the IP address or username that was unblocked
 See also:
-* {{msg-mw|Unblocked}}
 * {{msg-mw|Unblocked-range}}
 * {{msg-mw|Unblocked-id}}',
-'unblocked-range' => 'Shown when successfully lifting a rangeblock, so do not link to contributions.
-* $1 - the range that was unblocked.
+'unblocked-range' => 'Shown when successfully lifting a rangeblock, so do not link to contributions. Parameters:
+* $1 - the range that was unblocked
 See also:
 * {{msg-mw|Unblocked}}
-* {{msg-mw|Unblocked-range}}
 * {{msg-mw|Unblocked-id}}',
-'unblocked-id' => 'Used in [[Special:Unblock]].
+'unblocked-id' => 'Used in [[Special:Unblock]]. Parameters:
 * $1 - autoblock ID
 See also:
 * {{msg-mw|Unblocked}}
-* {{msg-mw|Unblocked-range}}
-* {{msg-mw|Unblocked-id}}',
+* {{msg-mw|Unblocked-range}}',
 'ipblocklist' => 'Title of [[Special:Ipblocklist]].',
 'ipblocklist-legend' => 'Used as legend of the form in [[Special:BlockList]].
 
@@ -5177,35 +5035,15 @@ See also:
 * {{msg-mw|Ipblocklist-legend}}
 * {{msg-mw|Ipblocklist-submit}}',
 'blocklist-userblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
-
-See also:
-* {{msg-mw|Blocklist-userblocks}}
-* {{msg-mw|Blocklist-tempblocks}}
-* {{msg-mw|Blocklist-addressblocks}}
-* {{msg-mw|Blocklist-rangeblocks}}',
+{{Related|Blocklist-blocks}}',
 'blocklist-tempblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
-
-See also:
-* {{msg-mw|Blocklist-userblocks}}
-* {{msg-mw|Blocklist-tempblocks}}
-* {{msg-mw|Blocklist-addressblocks}}
-* {{msg-mw|Blocklist-rangeblocks}}',
+{{Related|Blocklist-blocks}}',
 'blocklist-addressblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
-
-See also:
-* {{msg-mw|Blocklist-userblocks}}
-* {{msg-mw|Blocklist-tempblocks}}
-* {{msg-mw|Blocklist-addressblocks}}
-* {{msg-mw|Blocklist-rangeblocks}}',
+{{Related|Blocklist-blocks}}',
 'blocklist-rangeblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
 
 For an explanation of "range blocks", see http://www.mediawiki.org/wiki/Help:Range_blocks
-
-See also:
-* {{msg-mw|Blocklist-userblocks}}
-* {{msg-mw|Blocklist-tempblocks}}
-* {{msg-mw|Blocklist-addressblocks}}
-* {{msg-mw|Blocklist-rangeblocks}}',
+{{Related|Blocklist-blocks}}',
 'blocklist-timestamp' => 'This is a column header for dates and times in the table on the page [[Special:BlockList]].
 {{Identical|Timestamp}}',
 'blocklist-target' => 'The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].',
@@ -5465,13 +5303,11 @@ See also:
 'lockconfirm' => 'Used as label for checkbox in the form on [[Special:LockDB]].
 
 See also:
-* {{msg-mw|Lockconfirm}}
 * {{msg-mw|Unlockconfirm}}',
 'unlockconfirm' => 'Used as label for checkbox in the form on [[Special:UnlockDB]].
 
 See also:
-* {{msg-mw|Lockconfirm}}
-* {{msg-mw|Unlockconfirm}}',
+* {{msg-mw|Lockconfirm}}',
 'lockbtn' => 'The submit button on the special page [[Special:LockDB]].
 
 See also:
@@ -5548,8 +5384,14 @@ See also:
 
 Special pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}
 
-See also {{msg-mw|Movepagetext-noredirectfixer|notext=1}}',
-'movepagetext-noredirectfixer' => 'A variant of {{msg-mw|Movepagetext|notext=1}} displayed when the automatic redirect fixer is not enabled.',
+See also:
+* {{msg-mw|Movepagetext-noredirectfixer}}',
+'movepagetext-noredirectfixer' => "A variant of the following message ''Movepagetext'' displayed when the automatic redirect fixer is not enabled.
+
+Special pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}
+
+See also:
+* {{msg-mw|Movepagetext}}",
 'movepagetalktext' => "Text on the special 'Move page'. This text only appears if the talk page is not empty.",
 'movearticle' => 'The text before the name of the page that you are moving. Can be translated as "Page that is going to be moved". Used in [[Special:MovePage]].
 
@@ -5568,36 +5410,36 @@ See also:
 'movenologin' => '{{Identical|Not logged in}}',
 'movenologintext' => "Text of message on special page 'Permissions Errors', which appears when somebody tries to move a page without being logged in.
 
+See also:
 * {{msg-mw|cant-move-user-page}}
 * {{msg-mw|cant-move-to-user-page}}
 * {{msg-mw|movenotallowedfile}}
-* {{msg-mw|movenotallowed}}
-* {{msg-mw|movenologintext}}",
+* {{msg-mw|movenotallowed}}",
 'movenotallowed' => 'Used as error message.
 
+See also:
 * {{msg-mw|cant-move-user-page}}
 * {{msg-mw|cant-move-to-user-page}}
 * {{msg-mw|movenotallowedfile}}
-* {{msg-mw|movenotallowed}}
 * {{msg-mw|movenologintext}}',
 'movenotallowedfile' => 'Used as error message.
 
+See also:
 * {{msg-mw|cant-move-user-page}}
 * {{msg-mw|cant-move-to-user-page}}
-* {{msg-mw|movenotallowedfile}}
 * {{msg-mw|movenotallowed}}
 * {{msg-mw|movenologintext}}',
 'cant-move-user-page' => 'Used as error message.
 
-* {{msg-mw|cant-move-user-page}}
+See also:
 * {{msg-mw|cant-move-to-user-page}}
 * {{msg-mw|movenotallowedfile}}
 * {{msg-mw|movenotallowed}}
 * {{msg-mw|movenologintext}}',
 'cant-move-to-user-page' => 'Used as error message.
 
+See also:
 * {{msg-mw|cant-move-user-page}}
-* {{msg-mw|cant-move-to-user-page}}
 * {{msg-mw|movenotallowedfile}}
 * {{msg-mw|movenotallowed}}
 * {{msg-mw|movenologintext}}',
@@ -5891,7 +5733,7 @@ Tooltip shown when hovering over a little sign of a thumb image, to go to the im
 The reason $1 is one of the following messages:
 * {{msg-mw|Thumbnail-dest-create}}
 * {{msg-mw|Thumbnail dest directory}}
-* {{msg-mw|Thumbnai invalid params}}
+* {{msg-mw|Thumbnail invalid params}}
 * {{msg-mw|Djvu no xml}}
 * {{msg-mw|Djvu page error}}
 * {{msg-mw|Svg-long-error}}
@@ -5906,12 +5748,10 @@ See also:
 
 See also:
 * {{msg-mw|Thumbnail error}}
-* {{msg-mw|Djvu no xml}}
 * {{msg-mw|Djvu page error}}',
 'thumbnail-temp-create' => 'Used as thumbnail error message.
 
 See also:
-* {{msg-mw|Thumbnail-temp-create}}
 * {{msg-mw|Thumbnail-dest-create}}
 * {{msg-mw|Thumbnail invalid params}}
 * {{msg-mw|Thumbnail dest directory}}',
@@ -5920,7 +5760,6 @@ See also:
 See also:
 * {{msg-mw|Thumbnail error}}
 * {{msg-mw|Thumbnail-temp-create}}
-* {{msg-mw|Thumbnail-dest-create}}
 * {{msg-mw|Thumbnail invalid params}}
 * {{msg-mw|Thumbnail dest directory}}',
 'thumbnail_invalid_params' => 'Used as thumbnail error message.
@@ -5928,7 +5767,6 @@ See also:
 See also:
 * {{msg-mw|Thumbnail-temp-create}}
 * {{msg-mw|Thumbnail-dest-create}}
-* {{msg-mw|Thumbnail invalid params}}
 * {{msg-mw|Thumbnail dest directory}}',
 'thumbnail_dest_directory' => 'Used as thumbnail error message.
 
@@ -5936,8 +5774,7 @@ See also:
 * {{msg-mw|Thumbnail error}}
 * {{msg-mw|Thumbnail-temp-create}}
 * {{msg-mw|Thumbnail-dest-create}}
-* {{msg-mw|Thumbnail invalid params}}
-* {{msg-mw|Thumbnail dest directory}}',
+* {{msg-mw|Thumbnail invalid params}}',
 'thumbnail_image-type' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}',
 'thumbnail_gd-library' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}.
 *$1 is a function name of the GD library',
@@ -5952,7 +5789,6 @@ See also:
 'import-interwiki-history' => 'This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.
 
 See also:
-* {{msg-mw|Import-interwiki-history}}
 * {{msg-mw|Import-interwiki-templates}}
 * {{msg-mw|Import-interwiki-namespace}}
 * {{msg-mw|Import-comment}}
@@ -5962,7 +5798,6 @@ See also:
 
 See also:
 * {{msg-mw|Import-interwiki-history}}
-* {{msg-mw|Import-interwiki-templates}}
 * {{msg-mw|Import-interwiki-namespace}}
 * {{msg-mw|Import-comment}}
 * {{msg-mw|Import-interwiki-rootpage}}
@@ -5975,14 +5810,12 @@ See also:
 * {{msg-mw|Import-interwiki-namespace}}
 * {{msg-mw|Import-comment}}
 * {{msg-mw|Import-interwiki-rootpage}}
-* {{msg-mw|Import-interwiki-submit}}
 {{Identical|Import}}',
 'import-interwiki-namespace' => 'Used as label in Import form on [[Special:Import]].
 
 See also:
 * {{msg-mw|Import-interwiki-history}}
 * {{msg-mw|Import-interwiki-templates}}
-* {{msg-mw|Import-interwiki-namespace}}
 * {{msg-mw|Import-comment}}
 * {{msg-mw|Import-interwiki-rootpage}}
 * {{msg-mw|Import-interwiki-submit}}',
@@ -5993,7 +5826,6 @@ See also:
 * {{msg-mw|Import-interwiki-templates}}
 * {{msg-mw|Import-interwiki-namespace}}
 * {{msg-mw|Import-comment}}
-* {{msg-mw|Import-interwiki-rootpage}}
 * {{msg-mw|Import-interwiki-submit}}',
 'import-upload-filename' => 'Used on [[Special:Import]] as label for upload of an XML file containing the pages to import.',
 'import-comment' => 'Used as label for input box in [[Special:Import]].
@@ -6002,14 +5834,12 @@ See also:
 * {{msg-mw|Import-interwiki-history}}
 * {{msg-mw|Import-interwiki-templates}}
 * {{msg-mw|Import-interwiki-namespace}}
-* {{msg-mw|Import-comment}}
 * {{msg-mw|Import-interwiki-rootpage}}
 * {{msg-mw|Import-interwiki-submit}}',
 'importtext' => 'Used in the Import form on [[Special:Import]].',
 'importstart' => 'Used in [[Special:Import]].
 
 See also:
-* {{msg-mw|Importstart}}
 * {{msg-mw|Importsuccess}}
 * {{msg-mw|Importfailed}}',
 'import-revision-count' => '* $1 - number of revisions, success count',
@@ -6019,8 +5849,7 @@ See also:
 * $1 - import source
 See also:
 * {{msg-mw|Importstart}}
-* {{msg-mw|Importsuccess}}
-* {{msg-mw|Importfailed}}',
+* {{msg-mw|Importsuccess}}',
 'importunknownsource' => 'Used as error message in [[Special:Import]].
 
 See also:
@@ -6037,13 +5866,11 @@ See also:
 
 See also:
 * {{msg-mw|Importstart}}
-* {{msg-mw|Importsuccess}}
 * {{msg-mw|Importfailed}}',
 'importnosources' => 'Used in [[Special:Import]] instead of the Import form.',
 'importnofile' => 'Used as error message when importing from file.
 
 See also:
-* {{msg-mw|importnofile}}
 * {{msg-mw|importuploaderrorsize}}
 * {{msg-mw|importuploaderrorpartial}}
 * {{msg-mw|importuploaderrortemp}}',
@@ -6051,7 +5878,6 @@ See also:
 
 See also:
 * {{msg-mw|importnofile}}
-* {{msg-mw|importuploaderrorsize}}
 * {{msg-mw|importuploaderrorpartial}}
 * {{msg-mw|importuploaderrortemp}}',
 'importuploaderrorpartial' => 'Used as error message when importing from file.
@@ -6059,15 +5885,13 @@ See also:
 See also:
 * {{msg-mw|importnofile}}
 * {{msg-mw|importuploaderrorsize}}
-* {{msg-mw|importuploaderrorpartial}}
 * {{msg-mw|importuploaderrortemp}}',
 'importuploaderrortemp' => 'Used as error message when importing from file.
 
 See also:
 * {{msg-mw|importnofile}}
 * {{msg-mw|importuploaderrorsize}}
-* {{msg-mw|importuploaderrorpartial}}
-* {{msg-mw|importuploaderrortemp}}',
+* {{msg-mw|importuploaderrorpartial}}',
 'import-noarticle' => 'Used as error message when importing from interwiki.
 
 See also:
@@ -6084,7 +5908,8 @@ See also:
 Import failed: XML import parse failure at line 1, col 1 (byte 3; "- <mediawiki xml"): Empty document',
 'import-upload' => 'Used on [[Special:Import]].
 
-Related messages: {{msg|right-importupload|pl=yes}} (the user right for this).',
+Related messages:
+* {{msg-mw|right-importupload}} (the user right for this)',
 'import-token-mismatch' => 'Used as error message in [[Special:Import]].
 
 See also:
@@ -6180,7 +6005,7 @@ See also:
 * {{msg-mw|Mypreferences}}
 * {{msg-mw|Accesskey-pt-preferences}}
 * {{msg-mw|Tooltip-pt-preferences}}
-{{Identical|My preferences}}',
+{{Identical|Preferences}}',
 'tooltip-pt-watchlist' => 'Tooltip shown when hovering over the {{msg-mw|Mywatchlist}} link in your personal toolbox (upper right side).
 
 See also:
@@ -6329,7 +6154,7 @@ See also:
 * {{msg-mw|Currentevents-url}}
 * {{msg-mw|Accesskey-n-currentevents}}
 * {{msg-mw|Tooltip-n-currentevents}}',
-'tooltip-n-recentchanges' => 'The tooltip when hovering over the {{msg-mw|Recehtchanges}} link in the sidebar going to the special page [[Special:RecentChanges]].
+'tooltip-n-recentchanges' => 'The tooltip when hovering over the {{msg-mw|Recentchanges}} link in the sidebar going to the special page [[Special:RecentChanges]].
 
 See also:
 * {{msg-mw|Recentchanges}}
@@ -6510,13 +6335,13 @@ See also:
 * {{msg-mw|Accesskey-watch}}
 * {{msg-mw|Tooltip-watch}}
 {{Identical|Add this page to your watchlist}}',
-'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).
+'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg-mw|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).
 
 See also:
 * {{msg-mw|Watchlistedit-normal-submit}}
 * {{msg-mw|Accesskey-watchlistedit-normal-submit}}
 * {{msg-mw|Tooltip-watchlistedit-normal-submit}}',
-'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).
+'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg-mw|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).
 
 See also:
 * {{msg-mw|Watchlistedit-raw-submit}}
@@ -6646,7 +6471,6 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'spamprotectiontitle' => 'Used as page title when the edit contains spam.
 
 See also:
-* {{msg-mw|Spamprotectiontitle|title}}
 * {{msg-mw|Spamprotectiontext|text}}
 * {{msg-mw|Spamprotectionmatch|if matched}}
 * {{msg-mw|Yourdiff}}
@@ -6655,7 +6479,6 @@ See also:
 
 See also:
 * {{msg-mw|Spamprotectiontitle|title}}
-* {{msg-mw|Spamprotectiontext|text}}
 * {{msg-mw|Spamprotectionmatch|if matched}}
 * {{msg-mw|Yourdiff}}
 * {{msg-mw|Yourtext}}',
@@ -6664,7 +6487,6 @@ See also:
 See also:
 * {{msg-mw|Spamprotectiontitle|title}}
 * {{msg-mw|Spamprotectiontext|text}}
-* {{msg-mw|Spamprotectionmatch|if matched}}
 * {{msg-mw|Yourdiff}}
 * {{msg-mw|Yourtext}}',
 'spam_reverting' => 'Edit summary for spam cleanup script. Used when a page is reverted because all later revisions contained a particular link. Parameters:
@@ -6690,15 +6512,16 @@ See also:
 'pageinfo-robot-policy' => 'The search engine status of the page.
 *{{msg-mw|Pageinfo-robot-index}}
 *{{msg-mw|Pageinfo-robot-noindex}}',
-'pageinfo-robot-index' => 'An indication that the page is indexable.',
-'pageinfo-robot-noindex' => 'An indication that the page is not indexable.',
+'pageinfo-robot-index' => 'An indication that the page is indexable by search engines, that is listed in their search results.',
+'pageinfo-robot-noindex' => 'An indication that the page is not indexable (that is, is not listed on the results page of a search engine).',
 'pageinfo-views' => 'The number of times the page has been viewed.',
 'pageinfo-watchers' => 'The number of users watching the page.',
 'pageinfo-redirects-name' => "The number of redirects to the page.
 
 Used as link text, linked to '{{int:Whatlinkshere-title}}' page ([[Special:WhatLinksHere]]).",
-'pageinfo-redirects-value' => 'Parameters:
-* $1 is the number of redirects to the page.',
+'pageinfo-redirects-value' => '{{Optional}}
+Parameters:
+* $1 - the number of redirects to the page',
 'pageinfo-subpages-name' => "The number of subpages of the page.
 
 Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]).",
@@ -6719,10 +6542,17 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 'pageinfo-hidden-categories' => 'The list of hidden categories on the page. Parameters:
 * $1 is the number of hidden categories on the page.',
 'pageinfo-templates' => 'The list of templates transcluded within the page. Parameters:
-* $1 is the number of templates transcluded within the page.',
+* $1 is the number of templates transcluded within the current page.
+See also:
+* {{msg-mw|Pageinfo-transclusions}}',
+'pageinfo-transclusions' => 'The list of pages on which this page is transcluded. Parameters:
+* $1 is the number of pages the current page is transcluded on.
+See also:
+* {{msg-mw|Pageinfo-templates}}',
 'pageinfo-toolboxlink' => "Information link for the page (like 'What links here', but to action=info for the current page instead)",
-'pageinfo-redirectsto' => 'Key for the row shown if this page is a redirect.',
-'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.',
+'pageinfo-redirectsto' => 'Key for the row shown if this page is a redirect. Verb. See [http://en.wikipedia.org/w/index.php?title=Main_page&action=info example].',
+'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.
+{{Identical|Info}}',
 'pageinfo-contentpage' => 'Key for the row shown on [{{fullurl:News|action=info}} action=info] if this page is [[mw:Manual:Article count|counted as a content page]]',
 'pageinfo-contentpage-yes' => 'Yes, this page is a content page',
 'pageinfo-protect-cascading' => 'Key for the row which shows whether this page has cascading protection enabled
@@ -6732,6 +6562,16 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 *{{msg-mw|Pageinfo-protect-cascading}}
 *{{msg-mw|Pageinfo-protect-cascading-yes}}',
 'pageinfo-protect-cascading-from' => 'Key for a list of pages where protections are cascading from',
+'pageinfo-category-info' => 'Showed on the page displaying information about the current page (add "?action=info" to the URL)',
+'pageinfo-category-pages' => 'See also:
+* {{msg-mw|Pageinfo-category-subcats}}
+* {{msg-mw|Pageinfo-category-files}}',
+'pageinfo-category-subcats' => 'See also:
+* {{msg-mw|Pageinfo-category-pages}}
+* {{msg-mw|Pageinfo-category-files}}',
+'pageinfo-category-files' => 'See also:
+* {{msg-mw|Pageinfo-category-pages}}
+* {{msg-mw|Pageinfo-category-subcats}}',
 
 # Skin names
 'skinname-standard' => '{{optional}}
@@ -6746,53 +6586,50 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 'skinname-vector' => '{{optional}}',
 
 # Patrolling
-'markaspatrolleddiff' => 'See also:
-* {{msg-mw|Markaspatrolleddiff}}
-* {{msg-mw|Markaspatrolledtext}}',
-'markaspatrolledtext' => 'See also:
-* {{msg-mw|Markaspatrolleddiff}}
-* {{msg-mw|Markaspatrolledtext}}',
-'markedaspatrolled' => 'Used as page title.
-
-The text for this message is {{msg-mw|Markedaspatrolledtext}}.',
-'markedaspatrolledtext' => 'The page title for this message is {{msg-mw|Markedaspatrolled}}.
-
-{{Identical|Markedaspatrolled}}',
-'rcpatroldisabled' => 'Used as title of error message when marking RecentChange as patrolled.
-
+'markaspatrolleddiff' => '{{doc-actionlink}}
 See also:
-* {{msg-mw|Rcpatroldisabled|title}}
-* {{msg-mw|Rcpatroldisabledtext|text}}
-* {{msg-mw|Markedaspatrollederror-noautopatrol}}',
-'rcpatroldisabledtext' => 'Used as error message when marking RecentChange as patrolled.
-
-See also:
-* {{msg-mw|Rcpatroldisabled|title}}
-* {{msg-mw|Rcpatroldisabledtext|text}}
-* {{msg-mw|Markedaspatrollederror-noautopatrol}}',
-'markedaspatrollederror' => 'Used as title of error message.
-
-See also:
-* {{msg-mw|Markedaspatrollederror|title}}
-* {{msg-mw|Markedaspatrollederrortext|text}}',
-'markedaspatrollederrortext' => 'Used as error message.
-
+* {{msg-mw|Markaspatrolledtext}}',
+'markaspatrolledtext' => '{{doc-actionlink}}
+See also:
+* {{msg-mw|Markaspatrolleddiff}}',
+'markedaspatrolled' => 'Used as title of the message {{msg-mw|Markedaspatrolledtext}}, when marking a change as patrolled.
+{{Related|Markedaspatrolled}}',
+'markedaspatrolledtext' => 'Used when marking a change as patrolled.
+
+The title for this message is {{msg-mw|Markedaspatrolled}}.
+{{Related|Markedaspatrolled}}',
+'rcpatroldisabled' => 'Used as title of the error message {{msg-mw|Rcpatroldisabledtext}}, when marking a change as patrolled.
+{{Related|Markedaspatrolled}}',
+'rcpatroldisabledtext' => 'Used as the error message when marking a change as patrolled.
+
+The title for this error message is {{msg-mw|Rcpatroldisabled}}.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollederror' => 'Used as title of the following error messages:
+* {{msg-mw|Markedaspatrollederrortext}}
+* {{msg-mw|Markedaspatrollederror-noautopatrol}}
+This message is used when marking a change as patrolled.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollederrortext' => 'Used as the error message when marking a change as patrolled.
+
+The title for this error message is {{msg-mw|Markedaspatrollederror}}.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollederror-noautopatrol' => 'Used as error message when marking a change as patrolled.
+
+The title for this error message is {{msg-mw|Markedaspatrollederror}}.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollednotify' => 'Notification shown after the user has marked a change as patrolled successfully. Parameters:
+* $1 - the page title
 See also:
-* {{msg-mw|Markedaspatrollederror|title}}
-* {{msg-mw|Markedaspatrollederrortext|text}}',
-'markedaspatrollederror-noautopatrol' => 'Used as error message when marking RecentChange as patrolled.
+* {{msg-mw|Markedaspatrollederrornotify}} - error message on failure',
+'markedaspatrollederrornotify' => 'Notification shown after the user has failed to mark a change as patrolled.
 
 See also:
-* {{msg-mw|Rcpatroldisabled|title}}
-* {{msg-mw|Rcpatroldisabledtext|text}}
-* {{msg-mw|Markedaspatrollederror-noautopatrol}}',
-'markedaspatrollednotify' => 'Notification shown after a change has been marked as patrolled, $1 is the page title',
-'markedaspatrollederrornotify' => 'Notification shown after marking a change as patrolled failed',
+* {{msg-mw|Markedaspatrollednotify}} - notification on success',
 
 # Patrol log
 'patrol-log-page' => '{{doc-logpage}}',
 'patrol-log-header' => 'Text that appears above the log entries on the [[Special:log|patrol log]].',
-'log-show-hide-patrol' => '* $1 is one of {{msg|show}} or {{msg|hide}}',
+'log-show-hide-patrol' => '* $1 is one of {{msg-mw|show}} or {{msg-mw|hide}}',
 
 # Image deletion
 'deletedrevision' => '* $1 - archive name of old image',
@@ -6939,7 +6776,8 @@ Part of variable $1 in {{msg-mw|Ago}}',
 
 See also {{msg-mw|Minutes-abbrev}}
 
-Part of variable $1 in {{msg-mw|Ago}}',
+Part of variable $1 in {{msg-mw|Ago}}.
+{{Identical|Minute}}',
 'hours' => 'Full word for "hours". $1 is the number of hours.
 
 See also {{msg-mw|Hours-abbrev}}
@@ -6964,7 +6802,6 @@ Part of variable $1 in {{msg-mw|Ago}}',
 *{{msg-mw|Days}}
 *{{msg-mw|Months}}
 *{{msg-mw|Years}}',
-
 'just-now' => 'Phrase for indicating something happened just now.',
 
 # Bad image list
@@ -7089,28 +6926,12 @@ Similar to "metadata-langitem" but for the case where a multilingual property ha
 'exif-compression' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 This field labels what the compression of the image is. It is commonly seen in Tiff images. It uses messages like {{msg-mw|exif-compression-1}} for the value. http://en.wikipedia.org/wiki/TIFF#TIFF_Compression_Tag has information about this field.
-
-See also:
-* {{msg-mw|Exif-compression}}
-* {{msg-mw|Exif-compression-1}}
-* {{msg-mw|Exif-compression-2}}
-* {{msg-mw|Exif-compression-3}}
-* {{msg-mw|Exif-compression-4}}',
+{{Related|Exif-compression}}',
 'exif-photometricinterpretation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-orientation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 For specific information on the orientation tag, see http://sylvana.net/jpegcrop/exif_orientation.html
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-samplesperpixel' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-planarconfiguration' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
@@ -7120,11 +6941,7 @@ See also:
 * {{msg-mw|Exif-planarconfiguration-2}}',
 'exif-ycbcrsubsampling' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-ycbcrpositioning' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
-
-See also:
-* {{msg-mw|Exif-ycbcrpositioning}}
-* {{msg-mw|Exif-ycbcrpositioning-1}}
-* {{msg-mw|Exif-ycbcrpositioning-2}}',
+{{Related|Exif-ycbcrpositioning}}',
 'exif-xresolution' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 This is the horizontal resolution in either dots/inch or dots/cm.',
@@ -7192,16 +7009,7 @@ See also:
 'exif-componentsconfiguration' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 This contains how the information in the picture is stored. This is most commonly Y, Cr, Cb to specify luma, red, blue. RGB is also possible to specify Red, Green, Blue.
-
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+{{Related|Exif-componentsconfiguration}}',
 'exif-compressedbitsperpixel' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-pixelydimension' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-pixelxdimension' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
@@ -7245,18 +7053,7 @@ Exif is a format for storing metadata in image files. See this [http://en.wikipe
 'exif-exposureprogram' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 How the camera figured out what exposure to use. (If it was manually set, if its optimizing for fast shutter speed, etc).
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}',
+{{Related|Exif-exposureprogram}}',
 'exif-spectralsensitivity' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 How sensitive each channel (colour) of the photo is to light. This tag is almost never used.',
@@ -7286,16 +7083,7 @@ The subject of a photograph is the person or thing on which the camera focuses.
 'exif-meteringmode' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See [http://en.wikipedia.org/wiki/Metering_mode Wikipedia article] on metering mode.
-
-See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}',
+{{Related|Exif-meteringmode}}',
 'exif-lightsource' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 {{Related|Exif-lightsource}}',
 'exif-flash' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
@@ -7328,23 +7116,13 @@ Indicates the number of pixels in the image width (X) direction per FocalPlaneRe
 'exif-focalplaneresolutionunit' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See also:
-* {{msg-mw|Exif-focalplaneresolutionunit}}
 * {{msg-mw|Exif-focalplaneresolutionunit-2}}',
 'exif-subjectlocation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 Same as {{msg-mw|exif-subjectarea}} but only ever has two numbers as a value.',
 'exif-exposureindex' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-sensingmethod' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
-
-See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}',
+{{Related|Exif-sensingmethod}}',
 'exif-filesource' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 Determines if the image was recorded by a digital camera adhering to DSC standard (which is almost all digital cameras).',
@@ -7366,12 +7144,7 @@ See also:
 'exif-exposuremode' => "Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See also Wikipedia on [http://en.wikipedia.org/wiki/Exposure_(photography) exposure in photography]. This tag shows if the photo's exposure was manually set or automatically determined.
-
-See also:
-* {{msg-mw|Exif-exposuremode}}
-* {{msg-mw|Exif-exposuremode-0}}
-* {{msg-mw|Exif-exposuremode-1}}
-* {{msg-mw|Exif-exposuremode-2}}",
+{{Related|Exif-exposuremode}}",
 'exif-whitebalance' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See also Wikipedia on [http://en.wikipedia.org/wiki/Color_balance color balance].
@@ -7386,133 +7159,39 @@ See also Wikipedia on [http://en.wikipedia.org/wiki/Digital_zoom digital zoom].'
 'exif-focallengthin35mmfilm' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See also Wikipedia on [http://en.wikipedia.org/wiki/Focal_length#In_photography focal length].',
-'exif-scenecapturetype' => 'See also:
-* {{msg-mw|Exif-scenecapturetype}}
-* {{msg-mw|Exif-scenecapturetype-0}}
-* {{msg-mw|Exif-scenecapturetype-1}}
-* {{msg-mw|Exif-scenecapturetype-2}}
-* {{msg-mw|Exif-scenecapturetype-3}}',
+'exif-scenecapturetype' => '{{Related|Exif-scenecapturetype}}',
 'exif-gaincontrol' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
-
-See also:
-* {{msg-mw|Exif-gaincontrol}}
-* {{msg-mw|Exif-gaincontrol-0}} - no gain at all
-* {{msg-mw|Exif-gaincontrol-1}} - some more brightness
-* {{msg-mw|Exif-gaincontrol-2}} - much more brightness
-* {{msg-mw|Exif-gaincontrol-3}} - some less brightness (seems to be uncommon in photography)
-* {{msg-mw|Exif-gaincontrol-4}} - much less brightness (seems to be uncommon in photography)',
-'exif-contrast' => 'See also:
-* {{msg-mw|Exif-contrast}}
-* {{msg-mw|Exif-contrast-0}}
-* {{msg-mw|Exif-contrast-1}}
-* {{msg-mw|Exif-contrast-2}}',
-'exif-saturation' => 'See also:
-* {{msg-mw|Exif-saturation}}
-* {{msg-mw|Exif-saturation-0}}
-* {{msg-mw|Exif-saturation-1}}
-* {{msg-mw|Exif-saturation-2}}',
-'exif-sharpness' => 'See also:
-* {{msg-mw|Exif-sharpness}}
-* {{msg-mw|Exif-sharpness-0}}
-* {{msg-mw|Exif-sharpness-1}}
-* {{msg-mw|Exif-sharpness-2}}',
-'exif-subjectdistancerange' => 'See also:
-* {{msg-mw|Exif-subjectdistancerange}}
-* {{msg-mw|Exif-subjectdistancerange-0}}
-* {{msg-mw|Exif-subjectdistancerange-1}}
-* {{msg-mw|Exif-subjectdistancerange-2}}
-* {{msg-mw|Exif-subjectdistancerange-3}}',
+{{Related|Exif-gaincontrol}}',
+'exif-contrast' => '{{Related|Exif-contrast}}',
+'exif-saturation' => '{{Related|Exif-saturation}}',
+'exif-sharpness' => '{{Related|Exif-sharpness}}',
+'exif-subjectdistancerange' => '{{Related|Exif-subjectdistancerange}}',
 'exif-imageuniqueid' => 'A unique identifier for the image in the form of a 128-bit hexadecimal string. See http://www.exif.org/Exif2-2.PDF for details on exif properties.',
 'exif-gpsversionid' => 'Version of the GPS IFD used to store location information. This is usually 2.2.0.0',
 'exif-gpslatituderef' => 'In older versions of mediawiki this referred to if the latitude was North or South. This is no longer used in modern versions of mediawiki except for when using a foreign image repository that is using an older version of mediawiki since the information is now contained in {{msg-mw|exif-gpslatitude}}.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}
-See also:
-* {{msg-mw|Exif-gpsdestlatituderef}}
-* {{msg-mw|Exif-gpsdestlongituderef}}
-* {{msg-mw|Exif-gpslatituderef}}
-* {{msg-mw|Exif-gpslongituderef}}',
+{{Related|Exif-gpslatitude}}',
 'exif-gpslatitude' => 'The latitude of the location from where the picture was taken from.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}',
+{{Related|Exif-gpslatitude}}',
 'exif-gpslongituderef' => 'Same as {{msg-mw|exif-gpslatituderef}} but for longitude.
 
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}
-See also:
-* {{msg-mw|Exif-gpsdestlatituderef}}
-* {{msg-mw|Exif-gpsdestlongituderef}}
-* {{msg-mw|Exif-gpslatituderef}}
-* {{msg-mw|Exif-gpslongituderef}}',
+{{Related|Exif-gpslatitude}}',
 'exif-gpslongitude' => 'The longitude of the location from where the picture was taken from.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}
-{{Identical|Longitude}}',
+{{Related|Exif-gpslatitude}}',
 'exif-gpsaltituderef' => 'No longer used except for when using foreign image repository with old version of mediawiki. 0 for above sea level, 1 for below sea level.',
 'exif-gpsaltitude' => 'Altitude in meters that the image was taken at.',
 'exif-gpstimestamp' => 'Time (does not include date) that GPS measurement was taken, in UTC. Since often this is at the same time as photo was taken, this is sometimes more reliable than {{msg-mw|exif-datetimeoriginal}}.',
 'exif-gpsstatus' => 'See also:
-* {{msg-mw|Exif-gpsstatus}}
 * {{msg-mw|Exif-gpsstatus-a}}
 * {{msg-mw|Exif-gpsstatus-v}}',
 'exif-gpsmeasuremode' => 'Is the measurement 2D (latitude and longitude) or 3D (latitude, longitude, and altitude).
 
 See also:
-* {{msg-mw|Exif-gpsmeasuremode}}
 * {{msg-mw|Exif-gpsmeasuremode-2}}
 * {{msg-mw|Exif-gpsmeasuremode-3}}',
 'exif-gpsdop' => 'How accurate the GPS information is. See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-
-See also:
-* {{msg-mw|Exif-gpsdop}}
-* {{msg-mw|Exif-gpsdop-excellent}}
-* {{msg-mw|Exif-gpsdop-good}}
-* {{msg-mw|Exif-gpsdop-moderate}}
-* {{msg-mw|Exif-gpsdop-fair}}
-* {{msg-mw|Exif-gpsdop-poor}}',
-'exif-gpsspeedref' => 'See also:
-* {{msg-mw|Exif-gpsspeed}}
-* {{msg-mw|Exif-gpsspeedref}}
-* {{msg-mw|Exif-gpsspeed-k}}
-* {{msg-mw|Exif-gpsspeed-m}}
-* {{msg-mw|Exif-gpsspeed-n}}',
-'exif-gpsspeed' => 'See also:
-* {{msg-mw|Exif-gpsspeed}}
-* {{msg-mw|Exif-gpsspeedref}}
-* {{msg-mw|Exif-gpsspeed-k}}
-* {{msg-mw|Exif-gpsspeed-m}}
-* {{msg-mw|Exif-gpsspeed-n}}',
+{{Related|Exif-gpsdop}}',
+'exif-gpsspeedref' => '{{Related|Exif-gpsspeed}}',
+'exif-gpsspeed' => '{{Related|Exif-gpsspeed}}',
 'exif-gpstrackref' => 'See also:
 * {{msg-mw|Exif-gpstrack}}
 * {{msg-mw|Exif-gpsimgdirection}}
@@ -7537,21 +7216,13 @@ See also:
 * {{msg-mw|Exif-gpsimgdirectionref}}
 * {{msg-mw|Exif-gpsdestbearing}}
 * {{msg-mw|Exif-gpsdestbearingref}}',
-'exif-gpsdestlatituderef' => 'See also:
-* {{msg-mw|Exif-gpsdestlatituderef}}
-* {{msg-mw|Exif-gpsdestlongituderef}}
-* {{msg-mw|Exif-gpslatituderef}}
-* {{msg-mw|Exif-gpslongituderef}}',
+'exif-gpsdestlatituderef' => '{{Related|Exif-gpslatitude}}',
 'exif-gpsdestlatitude' => 'The latitude of the location shown in the picture, if it is different from latitude of the camera location. See {{msg-mw|exif-gpslatitude}}.
-
+{{Related|Exif-gpslatitude}}
 {{Identical|Latitude}}',
-'exif-gpsdestlongituderef' => 'See also:
-* {{msg-mw|Exif-gpsdestlatituderef}}
-* {{msg-mw|Exif-gpsdestlongituderef}}
-* {{msg-mw|Exif-gpslatituderef}}
-* {{msg-mw|Exif-gpslongituderef}}',
+'exif-gpsdestlongituderef' => '{{Related|Exif-gpslatitude}}',
 'exif-gpsdestlongitude' => 'The longitude of the location shown in the picture, if it is different from longitude of the camera location. See {{msg-mw|exif-gpslongitude}}.
-
+{{Related|Exif-gpslatitude}}
 {{Identical|Longitude}}',
 'exif-gpsdestbearingref' => 'See also:
 * {{msg-mw|Exif-gpstrack}}
@@ -7566,19 +7237,8 @@ See also:
 * {{msg-mw|Exif-gpsimgdirectionref}}
 * {{msg-mw|Exif-gpsdestbearingref}}',
 'exif-gpsdestdistanceref' => 'I think "reference" stands for "unit". See {{msg-mw|Exif-gpsspeedref}}
-
-See also:
-* {{msg-mw|Exif-gpsdestdistance}}
-* {{msg-mw|Exif-gpsdestdistanceref}}
-* {{msg-mw|Exif-gpsdestdistance-k}}
-* {{msg-mw|Exif-gpsdestdistance-m}}
-* {{msg-mw|Exif-gpsdestdistance-n}}',
-'exif-gpsdestdistance' => 'See also:
-* {{msg-mw|Exif-gpsdestdistance}}
-* {{msg-mw|Exif-gpsdestdistanceref}}
-* {{msg-mw|Exif-gpsdestdistance-k}}
-* {{msg-mw|Exif-gpsdestdistance-m}}
-* {{msg-mw|Exif-gpsdestdistance-n}}',
+{{Related|Exif-gpsdestdistance}}',
+'exif-gpsdestdistance' => '{{Related|Exif-gpsdestdistance}}',
 'exif-gpsdatestamp' => 'Date (does not generally include time unless recorded in XMP) that GPS measurement was taken, in UTC. Since often this is at the same date as photo was taken, this is sometimes more reliable than {{msg-mw|exif-datetimeoriginal}}.',
 'exif-coordinate-format' => '{{optional}} For formatting GPS latitude coordinates. $1 is degrees, $2 is minutes, $3 is seconds (up to two decimal places), $4 is direction (N, S, W, or E), $5 is coordinate as a single positive or negative real number.',
 'exif-jpegfilecomment' => 'This is not a true exif tag, but the contents of the JPEG COM segment. This often contains a file source, but can potentially contain any comment about the file. This is similar to {{msg-mw|exif-usercomment}}, {{msg-mw|exif-pngfilecomment}}, and {{msg-mw|exif-giffilecomment}}.',
@@ -7615,20 +7275,13 @@ This is who originally owned the image (a person, stock photo agency, etc). This
 {{Identical|Source}}',
 'exif-editstatus' => 'Editorial status of image. This is more intended for use with people making news papers. This denotes whether the image is on the main page, is part of a correction, etc. See 2:07 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 'exif-urgency' => 'Urgency. How urgent this image is. 1 is very urgent, 5 is normal, 8 is  very low priority.
-
-See also:
-* {{msg-mw|Exif-urgency}}
-* {{msg-mw|Exif-urgency-normal}}
-* {{msg-mw|Exif-urgency-low}}
-* {{msg-mw|Exif-urgency-high}}
-* {{msg-mw|Exif-urgency-other}}',
+{{Related|Exif-urgency}}',
 'exif-fixtureidentifier' => 'Fixture name. Identifies frequently occuring object data, for example a regular column in a news paper.',
 'exif-locationdest' => 'Full printable name of location.',
 'exif-locationdestcode' => 'Code of location depicted. Typically this is an ISO country code, but the IPTC-iim standard also defines other codes like XSP for outer space. See appendix D (and tag 2:100) of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 'exif-objectcycle' => 'Time of day that media is intended for. Either morning only, evening only, or all day. Typically only used for news related things that might only be broadcast at a specific time of day.
 
 See also:
-* {{msg-mw|Exif-objectcycle}}
 * {{msg-mw|Exif-objectcycle-a}}
 * {{msg-mw|Exif-objectcycle-p}}
 * {{msg-mw|Exif-objectcycle-b}}',
@@ -7702,30 +7355,10 @@ Note, not all fields are guaranteed to be present, some may be empty strings.',
 *$2 is one of 17 broad categories that the code falls into. For example any code starting with 15 has the contents of {{msg-mw|exif-iimcategory-spo}} for $2.',
 
 # EXIF attributes
-'exif-compression-1' => 'See also:
-* {{msg-mw|Exif-compression}}
-* {{msg-mw|Exif-compression-1}}
-* {{msg-mw|Exif-compression-2}}
-* {{msg-mw|Exif-compression-3}}
-* {{msg-mw|Exif-compression-4}}',
-'exif-compression-2' => 'See also:
-* {{msg-mw|Exif-compression}}
-* {{msg-mw|Exif-compression-1}}
-* {{msg-mw|Exif-compression-2}}
-* {{msg-mw|Exif-compression-3}}
-* {{msg-mw|Exif-compression-4}}',
-'exif-compression-3' => 'See also:
-* {{msg-mw|Exif-compression}}
-* {{msg-mw|Exif-compression-1}}
-* {{msg-mw|Exif-compression-2}}
-* {{msg-mw|Exif-compression-3}}
-* {{msg-mw|Exif-compression-4}}',
-'exif-compression-4' => 'See also:
-* {{msg-mw|Exif-compression}}
-* {{msg-mw|Exif-compression-1}}
-* {{msg-mw|Exif-compression-2}}
-* {{msg-mw|Exif-compression-3}}
-* {{msg-mw|Exif-compression-4}}',
+'exif-compression-1' => '{{Related|Exif-compression}}',
+'exif-compression-2' => '{{Related|Exif-compression}}',
+'exif-compression-3' => '{{Related|Exif-compression}}',
+'exif-compression-4' => '{{Related|Exif-compression}}',
 'exif-compression-5' => '{{optional}}
 Lempel-Ziv & Welch algorithm',
 'exif-compression-6' => '{{optional}}',
@@ -7741,111 +7374,31 @@ Lempel-Ziv & Welch algorithm',
 'exif-photometricinterpretation-2' => '{{optional}}',
 'exif-photometricinterpretation-6' => '{{optional}}',
 
-'exif-orientation-1' => '{{Identical|Normal}}
-0th row: top; 0th column: left
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+'exif-orientation-1' => '0th row: top; 0th column: left
+{{Related|Exif-orientation}}
+{{Identical|Normal}}',
 'exif-orientation-2' => '0th row: top; 0th column: right
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-orientation-3' => '0th row: bottom; 0th column: right
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-orientation-4' => '0th row: bottom; 0th column: left
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-orientation-5' => '0th row: left; 0th column: top
 
 CCW is an abbreviation for counter-clockwise
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-orientation-6' => '0th row: right; 0th column: top
 
 CCW is an abbreviation for counter-clockwise.
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-orientation-7' => '0th row: right; 0th column: bottom
 
 CW is an abbreviation for clockwise
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 'exif-orientation-8' => '0th row: left; 0th column: bottom
 
 CW is an abbreviation for clockwise.
-
-See also:
-* {{msg-mw|Exif-orientation}}
-* {{msg-mw|Exif-orientation-1}}
-* {{msg-mw|Exif-orientation-2}}
-* {{msg-mw|Exif-orientation-3}}
-* {{msg-mw|Exif-orientation-4}}
-* {{msg-mw|Exif-orientation-5}}
-* {{msg-mw|Exif-orientation-6}}
-* {{msg-mw|Exif-orientation-7}}
-* {{msg-mw|Exif-orientation-8}}',
+{{Related|Exif-orientation}}',
 
 'exif-planarconfiguration-1' => 'See also:
 * {{msg-mw|Exif-planarconfiguration}}
@@ -7873,257 +7426,48 @@ See also:
 * {{msg-mw|Exif-colorspace-1|optional}}
 * {{msg-mw|Exif-colorspace-65535}}',
 
-'exif-componentsconfiguration-0' => 'See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+'exif-componentsconfiguration-0' => '{{Related|Exif-componentsconfiguration}}',
 'exif-componentsconfiguration-1' => '{{optional}}
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+{{Related|Exif-componentsconfiguration}}',
 'exif-componentsconfiguration-2' => '{{optional}}
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+{{Related|Exif-componentsconfiguration}}',
 'exif-componentsconfiguration-3' => '{{optional}}
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+{{Related|Exif-componentsconfiguration}}',
 'exif-componentsconfiguration-4' => '{{optional}}
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+{{Related|Exif-componentsconfiguration}}',
 'exif-componentsconfiguration-5' => '{{optional}}
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
+{{Related|Exif-componentsconfiguration}}',
 'exif-componentsconfiguration-6' => '{{optional}}
-See also:
-* {{msg-mw|Exif-componentsconfiguration}}
-* {{msg-mw|Exif-componentsconfiguration-0}}
-* {{msg-mw|Exif-componentsconfiguration-1|optional}}
-* {{msg-mw|Exif-componentsconfiguration-2|optional}}
-* {{msg-mw|Exif-componentsconfiguration-3|optional}}
-* {{msg-mw|Exif-componentsconfiguration-4|optional}}
-* {{msg-mw|Exif-componentsconfiguration-5|optional}}
-* {{msg-mw|Exif-componentsconfiguration-6|optional}}',
-
-'exif-exposureprogram-0' => 'See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}',
-'exif-exposureprogram-1' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-componentsconfiguration}}',
 
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}",
-'exif-exposureprogram-2' => 'See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}',
+'exif-exposureprogram-0' => '{{Related|Exif-exposureprogram}}',
+'exif-exposureprogram-1' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-exposureprogram}}",
+'exif-exposureprogram-2' => '{{Related|Exif-exposureprogram}}',
 'exif-exposureprogram-3' => 'One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article for a definition of the term [http://en.wikipedia.org/wiki/Aperture_priority aperture priority].
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}',
+{{Related|Exif-exposureprogram}}',
 'exif-exposureprogram-4' => 'One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article for a definition of the term [http://en.wikipedia.org/wiki/Shutter_priority shutter priority].
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}',
+{{Related|Exif-exposureprogram}}',
 'exif-exposureprogram-5' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}",
+{{Related|Exif-exposureprogram}}",
 'exif-exposureprogram-6' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}",
+{{Related|Exif-exposureprogram}}",
 'exif-exposureprogram-7' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}",
+{{Related|Exif-exposureprogram}}",
 'exif-exposureprogram-8' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
-
-See also:
-* {{msg-mw|Exif-exposureprogram}}
-* {{msg-mw|Exif-exposureprogram-0}}
-* {{msg-mw|Exif-exposureprogram-1}}
-* {{msg-mw|Exif-exposureprogram-2}}
-* {{msg-mw|Exif-exposureprogram-3}}
-* {{msg-mw|Exif-exposureprogram-4}}
-* {{msg-mw|Exif-exposureprogram-5}}
-* {{msg-mw|Exif-exposureprogram-6}}
-* {{msg-mw|Exif-exposureprogram-7}}
-* {{msg-mw|Exif-exposureprogram-8}}",
+{{Related|Exif-exposureprogram}}",
 
 'exif-subjectdistance-value' => '$1 is a distance measured in metres. The value can, and usually does, include decimal places.',
 
-'exif-meteringmode-0' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}
+'exif-meteringmode-0' => '{{Related|Exif-meteringmode}}
 {{Identical|Unknown}}',
-'exif-meteringmode-1' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}
+'exif-meteringmode-1' => '{{Related|Exif-meteringmode}}
 {{Identical|Average}}',
-'exif-meteringmode-2' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}',
-'exif-meteringmode-3' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}',
-'exif-meteringmode-4' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}',
-'exif-meteringmode-5' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}',
-'exif-meteringmode-6' => 'See also:
-* {{msg-mw|Exif-meteringmode}}
-* {{msg-mw|Exif-meteringmode-0}}
-* {{msg-mw|Exif-meteringmode-1}}
-* {{msg-mw|Exif-meteringmode-2}}
-* {{msg-mw|Exif-meteringmode-3}}
-* {{msg-mw|Exif-meteringmode-4}}
-* {{msg-mw|Exif-meteringmode-5}}
-* {{msg-mw|Exif-meteringmode-6}}',
+'exif-meteringmode-2' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-3' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-4' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-5' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-6' => '{{Related|Exif-meteringmode}}',
 'exif-meteringmode-255' => '{{Identical|Other}}',
 
 'exif-lightsource-0' => '{{Identical|Unknown}}
@@ -8206,76 +7550,17 @@ See also:
 'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 
 'exif-focalplaneresolutionunit-2' => 'See also:
-* {{msg-mw|Exif-focalplaneresolutionunit}}
-* {{msg-mw|Exif-focalplaneresolutionunit-2}}',
+* {{msg-mw|Exif-focalplaneresolutionunit}}',
 
-'exif-sensingmethod-1' => 'See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}',
-'exif-sensingmethod-2' => 'See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}',
-'exif-sensingmethod-3' => 'See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}',
-'exif-sensingmethod-4' => 'See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}',
+'exif-sensingmethod-1' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-2' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-3' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-4' => '{{Related|Exif-sensingmethod}}',
 'exif-sensingmethod-5' => "''Color sequential'' means, that the three base colors are measured one after another (i.e. the sensor is first measuring red, than green, than blue).
-
-See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}",
-'exif-sensingmethod-7' => 'See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}',
+{{Related|Exif-sensingmethod}}",
+'exif-sensingmethod-7' => '{{Related|Exif-sensingmethod}}',
 'exif-sensingmethod-8' => "''Color sequential'' means, that the three base colors are measured one after another (i.e. the sensor is first measuring red, than green, than blue).
-
-See also:
-* {{msg-mw|Exif-sensingmethod}}
-* {{msg-mw|Exif-sensingmethod-1}}
-* {{msg-mw|Exif-sensingmethod-2}}
-* {{msg-mw|Exif-sensingmethod-3}}
-* {{msg-mw|Exif-sensingmethod-4}}
-* {{msg-mw|Exif-sensingmethod-5}}
-* {{msg-mw|Exif-sensingmethod-7}}
-* {{msg-mw|Exif-sensingmethod-8}}",
+{{Related|Exif-sensingmethod}}",
 
 'exif-filesource-3' => '{{optional}}',
 
@@ -8292,23 +7577,10 @@ See also:
 * {{msg-mw|Exif-customrendered-0}}
 * {{msg-mw|Exif-customrendered-1}}',
 
-'exif-exposuremode-0' => 'See also:
-* {{msg-mw|Exif-exposuremode}}
-* {{msg-mw|Exif-exposuremode-0}}
-* {{msg-mw|Exif-exposuremode-1}}
-* {{msg-mw|Exif-exposuremode-2}}',
-'exif-exposuremode-1' => 'See also:
-* {{msg-mw|Exif-exposuremode}}
-* {{msg-mw|Exif-exposuremode-0}}
-* {{msg-mw|Exif-exposuremode-1}}
-* {{msg-mw|Exif-exposuremode-2}}',
+'exif-exposuremode-0' => '{{Related|Exif-exposuremode}}',
+'exif-exposuremode-1' => '{{Related|Exif-exposuremode}}',
 'exif-exposuremode-2' => "A type of exposure mode shown as part of the metadata on image description pages. The Wikipedia article on [http://en.wikipedia.org/wiki/Bracketing#Exposure_bracketing bracketing] says that 'auto bracket' is a camera exposure setting which automatically takes a series of pictures at slightly different light exposures.
-
-See also:
-* {{msg-mw|Exif-exposuremode}}
-* {{msg-mw|Exif-exposuremode-0}}
-* {{msg-mw|Exif-exposuremode-1}}
-* {{msg-mw|Exif-exposuremode-2}}",
+{{Related|Exif-exposuremode}}",
 
 'exif-whitebalance-0' => 'See also:
 * {{msg-mw|Exif-whitebalance}}
@@ -8319,338 +7591,122 @@ See also:
 * {{msg-mw|Exif-whitebalance-0}}
 * {{msg-mw|Exif-whitebalance-1}}',
 
-'exif-scenecapturetype-0' => 'See also:
-* {{msg-mw|Exif-scenecapturetype}}
-* {{msg-mw|Exif-scenecapturetype-0}}
-* {{msg-mw|Exif-scenecapturetype-1}}
-* {{msg-mw|Exif-scenecapturetype-2}}
-* {{msg-mw|Exif-scenecapturetype-3}}
+'exif-scenecapturetype-0' => '{{Related|Exif-scenecapturetype}}
 {{Identical|Standard}}',
-'exif-scenecapturetype-1' => 'See also:
-* {{msg-mw|Exif-scenecapturetype}}
-* {{msg-mw|Exif-scenecapturetype-0}}
-* {{msg-mw|Exif-scenecapturetype-1}}
-* {{msg-mw|Exif-scenecapturetype-2}}
-* {{msg-mw|Exif-scenecapturetype-3}}',
-'exif-scenecapturetype-2' => 'See also:
-* {{msg-mw|Exif-scenecapturetype}}
-* {{msg-mw|Exif-scenecapturetype-0}}
-* {{msg-mw|Exif-scenecapturetype-1}}
-* {{msg-mw|Exif-scenecapturetype-2}}
-* {{msg-mw|Exif-scenecapturetype-3}}',
-'exif-scenecapturetype-3' => 'See also:
-* {{msg-mw|Exif-scenecapturetype}}
-* {{msg-mw|Exif-scenecapturetype-0}}
-* {{msg-mw|Exif-scenecapturetype-1}}
-* {{msg-mw|Exif-scenecapturetype-2}}
-* {{msg-mw|Exif-scenecapturetype-3}}',
+'exif-scenecapturetype-1' => '{{Related|Exif-scenecapturetype}}',
+'exif-scenecapturetype-2' => '{{Related|Exif-scenecapturetype}}',
+'exif-scenecapturetype-3' => '{{Related|Exif-scenecapturetype}}',
 
 'exif-gaincontrol-0' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
-
-See also:
-* {{msg-mw|Exif-gaincontrol}}
-* {{msg-mw|Exif-gaincontrol-0}} - no gain at all
-* {{msg-mw|Exif-gaincontrol-1}} - some more brightness
-* {{msg-mw|Exif-gaincontrol-2}} - much more brightness
-* {{msg-mw|Exif-gaincontrol-3}} - some less brightness (seems to be uncommon in photography)
-* {{msg-mw|Exif-gaincontrol-4}} - much less brightness (seems to be uncommon in photography)
+{{Related|Exif-gaincontrol}}
 {{Identical|None}}',
 'exif-gaincontrol-1' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
-
-See also:
-* {{msg-mw|Exif-gaincontrol}}
-* {{msg-mw|Exif-gaincontrol-0}} - no gain at all
-* {{msg-mw|Exif-gaincontrol-1}} - some more brightness
-* {{msg-mw|Exif-gaincontrol-2}} - much more brightness
-* {{msg-mw|Exif-gaincontrol-3}} - some less brightness (seems to be uncommon in photography)
-* {{msg-mw|Exif-gaincontrol-4}} - much less brightness (seems to be uncommon in photography)',
+{{Related|Exif-gaincontrol}}',
 'exif-gaincontrol-2' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
-
-See also:
-* {{msg-mw|Exif-gaincontrol}}
-* {{msg-mw|Exif-gaincontrol-0}} - no gain at all
-* {{msg-mw|Exif-gaincontrol-1}} - some more brightness
-* {{msg-mw|Exif-gaincontrol-2}} - much more brightness
-* {{msg-mw|Exif-gaincontrol-3}} - some less brightness (seems to be uncommon in photography)
-* {{msg-mw|Exif-gaincontrol-4}} - much less brightness (seems to be uncommon in photography)',
+{{Related|Exif-gaincontrol}}',
 'exif-gaincontrol-3' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
-
-See also:
-* {{msg-mw|Exif-gaincontrol}}
-* {{msg-mw|Exif-gaincontrol-0}} - no gain at all
-* {{msg-mw|Exif-gaincontrol-1}} - some more brightness
-* {{msg-mw|Exif-gaincontrol-2}} - much more brightness
-* {{msg-mw|Exif-gaincontrol-3}} - some less brightness (seems to be uncommon in photography)
-* {{msg-mw|Exif-gaincontrol-4}} - much less brightness (seems to be uncommon in photography)',
+{{Related|Exif-gaincontrol}}',
 'exif-gaincontrol-4' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}',
 
-See also:
-* {{msg-mw|Exif-gaincontrol}}
-* {{msg-mw|Exif-gaincontrol-0}} - no gain at all
-* {{msg-mw|Exif-gaincontrol-1}} - some more brightness
-* {{msg-mw|Exif-gaincontrol-2}} - much more brightness
-* {{msg-mw|Exif-gaincontrol-3}} - some less brightness (seems to be uncommon in photography)
-* {{msg-mw|Exif-gaincontrol-4}} - much less brightness (seems to be uncommon in photography)',
-
-'exif-contrast-0' => 'See also:
-* {{msg-mw|Exif-contrast}}
-* {{msg-mw|Exif-contrast-0}}
-* {{msg-mw|Exif-contrast-1}}
-* {{msg-mw|Exif-contrast-2}}
+'exif-contrast-0' => '{{Related|Exif-contrast}}
 {{Identical|Normal}}',
-'exif-contrast-1' => 'See also:
-* {{msg-mw|Exif-contrast}}
-* {{msg-mw|Exif-contrast-0}}
-* {{msg-mw|Exif-contrast-1}}
-* {{msg-mw|Exif-contrast-2}}
+'exif-contrast-1' => '{{Related|Exif-contrast}}
 {{Identical|Soft}}',
-'exif-contrast-2' => 'See also:
-* {{msg-mw|Exif-contrast}}
-* {{msg-mw|Exif-contrast-0}}
-* {{msg-mw|Exif-contrast-1}}
-* {{msg-mw|Exif-contrast-2}}
+'exif-contrast-2' => '{{Related|Exif-contrast}}
 {{Identical|Hard}}',
 
-'exif-saturation-0' => 'See also:
-* {{msg-mw|Exif-saturation}}
-* {{msg-mw|Exif-saturation-0}}
-* {{msg-mw|Exif-saturation-1}}
-* {{msg-mw|Exif-saturation-2}}
+'exif-saturation-0' => '{{Related|Exif-saturation}}
 {{Identical|Normal}}',
-'exif-saturation-1' => 'See also:
-* {{msg-mw|Exif-saturation}}
-* {{msg-mw|Exif-saturation-0}}
-* {{msg-mw|Exif-saturation-1}}
-* {{msg-mw|Exif-saturation-2}}',
+'exif-saturation-1' => '{{Related|Exif-saturation}}',
 'exif-saturation-2' => 'Color saturation in picture EXIF data
+{{Related|Exif-saturation}}',
 
-See also:
-* {{msg-mw|Exif-saturation}}
-* {{msg-mw|Exif-saturation-0}}
-* {{msg-mw|Exif-saturation-1}}
-* {{msg-mw|Exif-saturation-2}}',
-
-'exif-sharpness-0' => 'See also:
-* {{msg-mw|Exif-sharpness}}
-* {{msg-mw|Exif-sharpness-0}}
-* {{msg-mw|Exif-sharpness-1}}
-* {{msg-mw|Exif-sharpness-2}}
+'exif-sharpness-0' => '{{Related|Exif-sharpness}}
 {{Identical|Normal}}',
-'exif-sharpness-1' => 'See also:
-* {{msg-mw|Exif-sharpness}}
-* {{msg-mw|Exif-sharpness-0}}
-* {{msg-mw|Exif-sharpness-1}}
-* {{msg-mw|Exif-sharpness-2}}
+'exif-sharpness-1' => '{{Related|Exif-sharpness}}
 {{Identical|Soft}}',
-'exif-sharpness-2' => 'See also:
-* {{msg-mw|Exif-sharpness}}
-* {{msg-mw|Exif-sharpness-0}}
-* {{msg-mw|Exif-sharpness-1}}
-* {{msg-mw|Exif-sharpness-2}}
+'exif-sharpness-2' => '{{Related|Exif-sharpness}}
 {{Identical|Hard}}',
 
-'exif-subjectdistancerange-0' => 'See also:
-* {{msg-mw|Exif-subjectdistancerange}}
-* {{msg-mw|Exif-subjectdistancerange-0}}
-* {{msg-mw|Exif-subjectdistancerange-1}}
-* {{msg-mw|Exif-subjectdistancerange-2}}
-* {{msg-mw|Exif-subjectdistancerange-3}}
+'exif-subjectdistancerange-0' => '{{Related|Exif-subjectdistancerange}}
 {{Identical|Unknown}}',
 'exif-subjectdistancerange-1' => 'Macro view is close-up photography. See [http://en.wikipedia.org/wiki/Macro_photography Wikipedia].
-
-See also:
-* {{msg|Exif-subjectdistancerange-0}}
-* {{msg|Exif-subjectdistancerange-1}}
-* {{msg|Exif-subjectdistancerange-2}}
-* {{msg|Exif-subjectdistancerange-3}}',
-'exif-subjectdistancerange-2' => 'See also:
-* {{msg-mw|Exif-subjectdistancerange}}
-* {{msg-mw|Exif-subjectdistancerange-0}}
-* {{msg-mw|Exif-subjectdistancerange-1}}
-* {{msg-mw|Exif-subjectdistancerange-2}}
-* {{msg-mw|Exif-subjectdistancerange-3}}',
-'exif-subjectdistancerange-3' => 'See also:
-* {{msg-mw|Exif-subjectdistancerange}}
-* {{msg-mw|Exif-subjectdistancerange-0}}
-* {{msg-mw|Exif-subjectdistancerange-1}}
-* {{msg-mw|Exif-subjectdistancerange-2}}
-* {{msg-mw|Exif-subjectdistancerange-3}}',
+{{Related|Exif-subjectdistancerange}}',
+'exif-subjectdistancerange-2' => '{{Related|Exif-subjectdistancerange}}',
+'exif-subjectdistancerange-3' => '{{Related|Exif-subjectdistancerange}}',
 
 # Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
 'exif-gpslatitude-n' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}',
+{{Related|Exif-gpslatitude}}',
 'exif-gpslatitude-s' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}',
+{{Related|Exif-gpslatitude}}',
 
 # Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
 'exif-gpslongitude-e' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}',
+{{Related|Exif-gpslatitude}}',
 'exif-gpslongitude-w' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
-
-See also:
-* {{msg-mw|Exif-gpslatitude}}
-* {{msg-mw|Exif-gpslatituderef}}
-** {{msg-mw|Exif-gpslatitude-n}}
-** {{msg-mw|Exif-gpslatitude-s}}
-* {{msg-mw|Exif-gpslongitude}}
-* {{msg-mw|Exif-gpslongituderef}}
-** {{msg-mw|Exif-gpslongitude-e}}
-** {{msg-mw|Exif-gpslongitude-w}}',
+{{Related|Exif-gpslatitude}}',
 
 # Pseudotags used for GPSAltitudeRef
 'exif-gpsaltitude-above-sealevel' => 'Used as GPS Altitude in Exif data. Parameters:
 * $1 - altitude above sea level (in meters)
 See also:
-* {{msg-mw|Exif-gpsaltitude-above-sealevel}}
 * {{msg-mw|Exif-gpsaltitude-below-sealevel}}',
 'exif-gpsaltitude-below-sealevel' => 'Used as GPS Altitude in Exif data. Parameters:
 * $1 - altitude below sea level (in meters)
 See also:
-* {{msg-mw|Exif-gpsaltitude-above-sealevel}}
-* {{msg-mw|Exif-gpsaltitude-below-sealevel}}',
+* {{msg-mw|Exif-gpsaltitude-above-sealevel}}',
 
 'exif-gpsstatus-a' => 'See also:
 * {{msg-mw|Exif-gpsstatus}}
-* {{msg-mw|Exif-gpsstatus-a}}
 * {{msg-mw|Exif-gpsstatus-v}}',
 'exif-gpsstatus-v' => 'See also:
 * {{msg-mw|Exif-gpsstatus}}
-* {{msg-mw|Exif-gpsstatus-a}}
-* {{msg-mw|Exif-gpsstatus-v}}',
+* {{msg-mw|Exif-gpsstatus-a}}',
 
 'exif-gpsmeasuremode-2' => 'Only latitude and longitude recorded, no altitude.
 
 See also:
 * {{msg-mw|Exif-gpsmeasuremode}}
-* {{msg-mw|Exif-gpsmeasuremode-2}}
 * {{msg-mw|Exif-gpsmeasuremode-3}}',
 'exif-gpsmeasuremode-3' => 'Latitude, longitude, and altitude recorded.
 
 See also:
 * {{msg-mw|Exif-gpsmeasuremode}}
-* {{msg-mw|Exif-gpsmeasuremode-2}}
-* {{msg-mw|Exif-gpsmeasuremode-3}}',
+* {{msg-mw|Exif-gpsmeasuremode-2}}',
 
 # Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-k' => 'See also:
-* {{msg-mw|Exif-gpsspeed}}
-* {{msg-mw|Exif-gpsspeedref}}
-* {{msg-mw|Exif-gpsspeed-k}}
-* {{msg-mw|Exif-gpsspeed-m}}
-* {{msg-mw|Exif-gpsspeed-n}}',
-'exif-gpsspeed-m' => 'See also:
-* {{msg-mw|Exif-gpsspeed}}
-* {{msg-mw|Exif-gpsspeedref}}
-* {{msg-mw|Exif-gpsspeed-k}}
-* {{msg-mw|Exif-gpsspeed-m}}
-* {{msg-mw|Exif-gpsspeed-n}}',
+'exif-gpsspeed-k' => '{{Related|Exif-gpsspeed}}',
+'exif-gpsspeed-m' => '{{Related|Exif-gpsspeed}}',
 'exif-gpsspeed-n' => "Knots: ''Knot'' is a unit of speed on water used for ships, etc., equal to one nautical mile per hour.
-
-See also:
-* {{msg-mw|Exif-gpsspeed}}
-* {{msg-mw|Exif-gpsspeedref}}
-* {{msg-mw|Exif-gpsspeed-k}}
-* {{msg-mw|Exif-gpsspeed-m}}
-* {{msg-mw|Exif-gpsspeed-n}}",
+{{Related|Exif-gpsspeed}}",
 
 # Pseudotags used for GPSDestDistanceRef
-'exif-gpsdestdistance-k' => 'See also:
-* {{msg-mw|Exif-gpsdestdistance}}
-* {{msg-mw|Exif-gpsdestdistanceref}}
-* {{msg-mw|Exif-gpsdestdistance-k}}
-* {{msg-mw|Exif-gpsdestdistance-m}}
-* {{msg-mw|Exif-gpsdestdistance-n}}',
-'exif-gpsdestdistance-m' => 'See also:
-* {{msg-mw|Exif-gpsdestdistance}}
-* {{msg-mw|Exif-gpsdestdistanceref}}
-* {{msg-mw|Exif-gpsdestdistance-k}}
-* {{msg-mw|Exif-gpsdestdistance-m}}
-* {{msg-mw|Exif-gpsdestdistance-n}}',
-'exif-gpsdestdistance-n' => 'See also:
-* {{msg-mw|Exif-gpsdestdistance}}
-* {{msg-mw|Exif-gpsdestdistanceref}}
-* {{msg-mw|Exif-gpsdestdistance-k}}
-* {{msg-mw|Exif-gpsdestdistance-m}}
-* {{msg-mw|Exif-gpsdestdistance-n}}',
-
-'exif-gpsdop-excellent' => '$1 is the actual HDOP/PDOP value (less than or equal to 2 for excellent). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-
-See also:
-* {{msg-mw|Exif-gpsdop}}
-* {{msg-mw|Exif-gpsdop-excellent}}
-* {{msg-mw|Exif-gpsdop-good}}
-* {{msg-mw|Exif-gpsdop-moderate}}
-* {{msg-mw|Exif-gpsdop-fair}}
-* {{msg-mw|Exif-gpsdop-poor}}',
-'exif-gpsdop-good' => '$1 is the actual HDOP/PDOP value (2-5 for good). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-
-See also:
-* {{msg-mw|Exif-gpsdop}}
-* {{msg-mw|Exif-gpsdop-excellent}}
-* {{msg-mw|Exif-gpsdop-good}}
-* {{msg-mw|Exif-gpsdop-moderate}}
-* {{msg-mw|Exif-gpsdop-fair}}
-* {{msg-mw|Exif-gpsdop-poor}}',
-'exif-gpsdop-moderate' => '$1 is the actual HDOP/PDOP value (5-10 for moderate). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-
-See also:
-* {{msg-mw|Exif-gpsdop}}
-* {{msg-mw|Exif-gpsdop-excellent}}
-* {{msg-mw|Exif-gpsdop-good}}
-* {{msg-mw|Exif-gpsdop-moderate}}
-* {{msg-mw|Exif-gpsdop-fair}}
-* {{msg-mw|Exif-gpsdop-poor}}',
-'exif-gpsdop-fair' => '$1 is the actual HDOP/PDOP value (10-20 for fair). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-
-See also:
-* {{msg-mw|Exif-gpsdop}}
-* {{msg-mw|Exif-gpsdop-excellent}}
-* {{msg-mw|Exif-gpsdop-good}}
-* {{msg-mw|Exif-gpsdop-moderate}}
-* {{msg-mw|Exif-gpsdop-fair}}
-* {{msg-mw|Exif-gpsdop-poor}}',
-'exif-gpsdop-poor' => '$1 is the actual HDOP/PDOP value (greater than 20 for poor). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-
-See also:
-* {{msg-mw|Exif-gpsdop}}
-* {{msg-mw|Exif-gpsdop-excellent}}
-* {{msg-mw|Exif-gpsdop-good}}
-* {{msg-mw|Exif-gpsdop-moderate}}
-* {{msg-mw|Exif-gpsdop-fair}}
-* {{msg-mw|Exif-gpsdop-poor}}',
+'exif-gpsdestdistance-k' => '{{Related|Exif-gpsdestdistance}}',
+'exif-gpsdestdistance-m' => '{{Related|Exif-gpsdestdistance}}',
+'exif-gpsdestdistance-n' => '{{Related|Exif-gpsdestdistance}}',
+
+'exif-gpsdop-excellent' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (less than or equal to 2 for excellent). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-good' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (2-5 for good). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-moderate' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (5-10 for moderate). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-fair' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (10-20 for fair). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-poor' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (greater than 20 for poor). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
 
 'exif-objectcycle-a' => 'Morning only (a is for AM).
 
 See also:
 * {{msg-mw|Exif-objectcycle}}
-* {{msg-mw|Exif-objectcycle-a}}
 * {{msg-mw|Exif-objectcycle-p}}
 * {{msg-mw|Exif-objectcycle-b}}',
 'exif-objectcycle-p' => 'Evening only (p is for PM).
@@ -8658,37 +7714,25 @@ See also:
 See also:
 * {{msg-mw|Exif-objectcycle}}
 * {{msg-mw|Exif-objectcycle-a}}
-* {{msg-mw|Exif-objectcycle-p}}
 * {{msg-mw|Exif-objectcycle-b}}',
 'exif-objectcycle-b' => 'Both morning and evening (b is for both).
 
 See also:
 * {{msg-mw|Exif-objectcycle}}
 * {{msg-mw|Exif-objectcycle-a}}
-* {{msg-mw|Exif-objectcycle-p}}
-* {{msg-mw|Exif-objectcycle-b}}',
+* {{msg-mw|Exif-objectcycle-p}}',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'See also:
-* {{msg-mw|Exif-gpsdirection-t}}
 * {{msg-mw|Exif-gpsdirection-m}}',
 'exif-gpsdirection-m' => 'See also:
-* {{msg-mw|Exif-gpsdirection-t}}
-* {{msg-mw|Exif-gpsdirection-m}}',
+* {{msg-mw|Exif-gpsdirection-t}}',
 
 'exif-ycbcrpositioning-1' => 'If the Chrominance samples are centered with respect to the Luminance samples.
-
-See also:
-* {{msg-mw|Exif-ycbcrpositioning}}
-* {{msg-mw|Exif-ycbcrpositioning-1}}
-* {{msg-mw|Exif-ycbcrpositioning-2}}',
+{{Related|Exif-ycbcrpositioning}}',
 'exif-ycbcrpositioning-2' => 'If the Chrominance samples are on top of to the Luminance samples.
 See: http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrpositioning.html
-
-See also:
-* {{msg-mw|Exif-ycbcrpositioning}}
-* {{msg-mw|Exif-ycbcrpositioning-1}}
-* {{msg-mw|Exif-ycbcrpositioning-2}}',
+{{Related|Exif-ycbcrpositioning}}',
 
 'exif-dc-contributor' => 'People who helped make the resource, but are secondary in contribution to the author.',
 'exif-dc-coverage' => '"The extent or scope of the resource" see dc:coverage in http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
@@ -8730,36 +7774,16 @@ $1 is maxaperture in APEX units (APEX aperture units = 2log<sub>2</sub>(f-number
 
 'exif-urgency-normal' => 'Parameters:
 * $1 - numeric priority (aka 5 for normal)
-See also:
-* {{msg-mw|Exif-urgency}}
-* {{msg-mw|Exif-urgency-normal}}
-* {{msg-mw|Exif-urgency-low}}
-* {{msg-mw|Exif-urgency-high}}
-* {{msg-mw|Exif-urgency-other}}',
+{{Related|Exif-urgency}}',
 'exif-urgency-low' => 'Parameters:
 * $1 - numeric priority (6-8 for low)
-See also:
-* {{msg-mw|Exif-urgency}}
-* {{msg-mw|Exif-urgency-normal}}
-* {{msg-mw|Exif-urgency-low}}
-* {{msg-mw|Exif-urgency-high}}
-* {{msg-mw|Exif-urgency-other}}',
+{{Related|Exif-urgency}}',
 'exif-urgency-high' => 'Parameters:
 * $1 - numeric priority (1-4 for high)
-See also:
-* {{msg-mw|Exif-urgency}}
-* {{msg-mw|Exif-urgency-normal}}
-* {{msg-mw|Exif-urgency-low}}
-* {{msg-mw|Exif-urgency-high}}
-* {{msg-mw|Exif-urgency-other}}',
+{{Related|Exif-urgency}}',
 'exif-urgency-other' => 'Parameters:
 * $1 - numeric priority. Most specs define 0 and 9 to either be reserved or not allowed. However the exiftool documentation defines 0 to be reserved and 9 to be user-defined priority.
-See also:
-* {{msg-mw|Exif-urgency}}
-* {{msg-mw|Exif-urgency-normal}}
-* {{msg-mw|Exif-urgency-low}}
-* {{msg-mw|Exif-urgency-high}}
-* {{msg-mw|Exif-urgency-other}}',
+{{Related|Exif-urgency}}',
 
 # External editor support
 'edit-externally' => 'Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
@@ -8897,6 +7921,7 @@ Most languages use a space, but some Asian languages, such as Thai and Chinese,
 'ellipsis' => '{{optional}}',
 'percent' => '{{optional}}',
 'parentheses' => '{{optional}}',
+'brackets' => '{{Optional}}',
 
 # Multipage image navigation
 'imgmultipageprev' => '{{Identical|Previous page}}',
@@ -9036,10 +8061,21 @@ See also:
 'watchlistedit-raw-removed' => 'Message on [[Special:EditWatchlist/raw]]. The message appears after at least 1 message is deleted from the raw watchlist.',
 
 # Watchlist editing tools
-'watchlisttools-view' => '[[Special:Watchlist]]: Navigation link under the title. See also {{msg|watchlisttools-edit}} and {{msg|watchlisttools-raw}}.',
-'watchlisttools-edit' => '[[Special:Watchlist]]: Navigation link under the title. See also {{msg|watchlisttools-view}} and {{msg|watchlisttools-raw}}.',
-'watchlisttools-raw' => '[[Special:Watchlist]]: Navigation link under the title. See also {{msg|watchlisttools-view}} and {{msg|watchlisttools-edit}}.
+'watchlisttools-view' => '[[Special:Watchlist]]: Navigation link under the title.
+
+See also:
+* {{msg|watchlisttools-edit}}
+* {{msg|watchlisttools-raw}}',
+'watchlisttools-edit' => '[[Special:Watchlist]]: Navigation link under the title.
 
+See also:
+* {{msg|watchlisttools-view}}
+* {{msg|watchlisttools-raw}}',
+'watchlisttools-raw' => '[[Special:Watchlist]]: Navigation link under the title.
+
+See also:
+* {{msg-mw|watchlisttools-view}}
+* {{msg-mw|watchlisttools-edit}}
 {{Identical|Edit raw watchlist}}',
 
 # Iranian month names
@@ -9209,8 +8245,10 @@ This message is followed by the list of installed software (MediaWiki, PHP and M
 'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
 See also {{msg-mw|Version-entrypoints}}',
 'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
-'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
-'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
+'version-entrypoints-articlepath' => '{{Optional}}
+A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
+'version-entrypoints-scriptpath' => '{{Optional}}
+A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
 
 # Special:FilePath
 'filepath' => 'Legend of fieldset around input box in [[Special:FilePath]].',
@@ -9327,7 +8365,8 @@ Used on [[Special:Tags]]. Verb. Used as display text on a link to create/edit a
 'dberr-info' => 'This message does not allow any wiki nor html markup.
 * $1 - database server name',
 'dberr-usegoogle' => 'This message does not allow any wiki nor html markup.',
-'dberr-outofdate' => "In this sentence, '''their''' indexes refers to '''Google's''' indexes. This message does not allow any wiki nor html markup.",
+'dberr-outofdate' => "{{doc-singularthey}}
+In this sentence, '''their''' indexes refers to '''Google's''' indexes. This message does not allow any wiki nor html markup.",
 'dberr-cachederror' => 'Used as error message at the bottom of the page.',
 
 # HTML forms
@@ -9492,6 +8531,28 @@ $4 is the name of the target user.',
 
 $4 is the gender of the target user.',
 'newuserlog-byemail' => 'Used as reason in [[Special:Log/newusers]].',
+'logentry-rights-rights' => '*$1 - username
+*$2 - (see below)
+*$3 - username
+*$4 - list of user groups or {{msg-mw|Rightsnone}}
+*$5 - list of user groups or {{msg-mw|Rightsnone}}
+----
+{{Logentry}}',
+'logentry-rights-rights-legacy' => '*$1 - username
+*$2 - (see below)
+*$3 - username
+----
+{{Logentry}}',
+'logentry-rights-autopromote' => '*$1 - username
+*$2 - (see below)
+*$3 - (see below)
+*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
+*$5 - comma separated list of new user groups
+----
+{{Logentry}}',
+'rightsnone' => 'Default rights for registered users.
+
+{{Identical|None}}',
 
 # Feedback
 'feedback-bugornote' => 'When feedback dialog box is opened, this introductory message in small print explains the options to report a bug or add simple feedback. We expect that people in a hurry will not read this.',
@@ -9560,6 +8621,7 @@ $4 is the gender of the target user.',
 'api-error-ok-but-empty' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-overwrite' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-stashfailed' => 'API error message that can be used for client side localisation of API errors.',
+'api-error-publishfailed' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-timeout' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-unclassified' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-unknown-code' => 'API error message that can be used for client side localisation of API errors. Parameters:
@@ -9573,86 +8635,15 @@ $4 is the gender of the target user.',
 'api-error-verification-error' => 'The word "extension" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.',
 
 # Durations
-'duration-seconds' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-minutes' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-hours' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-days' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-weeks' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-years' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-decades' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-centuries' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
-'duration-millennia' => '* {{msg-mw|Duration-seconds}}
-* {{msg-mw|Duration-minutes}}
-* {{msg-mw|Duration-hours}}
-* {{msg-mw|Duration-days}}
-* {{msg-mw|Duration-weeks}}
-* {{msg-mw|Duration-years}}
-* {{msg-mw|Duration-decades}}
-* {{msg-mw|Duration-centuries}}
-* {{msg-mw|Duration-millennia}}',
+'duration-seconds' => '{{Related|Duration}}',
+'duration-minutes' => '{{Related|Duration}}
+{{Identical|Minute}}',
+'duration-hours' => '{{Related|Duration}}',
+'duration-days' => '{{Related|Duration}}',
+'duration-weeks' => '{{Related|Duration}}',
+'duration-years' => '{{Related|Duration}}',
+'duration-decades' => '{{Related|Duration}}',
+'duration-centuries' => '{{Related|Duration}}',
+'duration-millennia' => '{{Related|Duration}}',
 
 );
index b376a00..3c2be5f 100644 (file)
@@ -314,7 +314,7 @@ $messages = array(
 
 'underline-always' => "Hayk'appas",
 'underline-never' => "Mana hayk'appas",
-'underline-default' => "Wamp'unap kikinmanta chanin",
+'underline-default' => "Qarap icha wamp'unap kikinmanta chanin",
 
 # Font style option in Special:Preferences
 'editfont-style' => "Llamk'apuy k'itichapi sanampa rik'chakuynin:",
@@ -637,7 +637,7 @@ Tapuna: $2',
 'viewsource-title' => "$1 sutiyuq p'anqap pukyu qillqanta qhaway",
 'actionthrottled' => "Rurayniykiqa hark'asqam",
 'actionthrottledtext' => "Spam nisqa millay rurayta hark'anapaq, manam saqillasunkichu kayta nisyu kutikunata rurayta ratulla mit'api. Nisyutam ruraykachanki. Ama hina kaspa, huk minutukunamanta musuqmanta ruraykachay.",
-'protectedpagetext' => "Kay p'anqaqa llamk'apuymanta amachasqam.",
+'protectedpagetext' => "Kay p'anqaqa llamk'apuymanta hukchaymantapas amachasqam.",
 'viewsourcetext' => "Kay p'anqap pukyu qillqantam qhawayta iskaychaytapas atinki:",
 'viewyourtext' => "'''Qampa llamk'apusqayki'''p pukyu qillqantam qhawayta iskaychaytapas atinki:",
 'protectedinterface' => "Kay p'anqapiqa wakichintinpa uyapuranpaq qillqam. Wandalismu nisqamanta amachasqam kachkan.
@@ -669,6 +669,7 @@ Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
 'logouttext' => "'''Llamk'apuy tiyayniykiqa puchukasqañam.'''
 
 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!',
 'yourname' => 'Ruraq sutiyki:',
 'yourpassword' => 'Yaykuna rimayki',
 'yourpasswordagain' => 'Yaykuna rimaykita kutipayay',
@@ -1001,6 +1002,7 @@ Qullusqachá.",
 'edit-already-exists' => "Manam atinichu musuq p'anqata kamariyta.
 Kachkañam.",
 'defaultmessagetext' => 'Ñawpaq qillqa',
+'invalid-content-data' => 'Samiqmanta willaykunaqa manam allinchu',
 
 # Content models
 'content-model-wikitext' => 'wiki qillqa',
@@ -1362,9 +1364,9 @@ Chaytataq manam kutichiyta atinkichu.",
 'prefs-emailconfirm-label' => 'E-chaskita takyachiy:',
 'prefs-textboxsize' => "Llamk'apuna wintanap chhikan kaynin",
 'youremail' => 'E-chaski imamaytayki',
-'username' => 'Ruraqpa sutin:',
-'uid' => 'Ruraqpa ID-nin:',
-'prefs-memberingroups' => 'Kay {{PLURAL:$1|huñuman|huñukunaman}} kapuq:',
+'username' => '{{GENDER:$1|Ruraqpa sutin}}:',
+'uid' => '{{GENDER:$1|Ruraqpa}} ID-nin:',
+'prefs-memberingroups' => 'Kay {{PLURAL:$1|huñuman|huñukunaman}} {{GENDER:$2|kapuq}}:',
 'prefs-registration' => "Hallch'ay pacha:",
 'yourrealname' => 'Chiqap sutiyki*',
 'yourlanguage' => 'Rimay',
@@ -1511,12 +1513,13 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'right-sendemail' => 'Huk ruraqkunaman e-chaskita kachay',
 'right-passwordreset' => 'Yaykuna rima kutichina e-chaskikunata qhaway',
 
+# Special:Log/newusers
+'newuserlogpage' => "Rakiquna kamariy hallch'a",
+'newuserlogpagetext' => "Kayqa ruraqkunap rakiqunankunata kamariymanta hallch'am.",
+
 # User rights log
 'rightslog' => 'Ruraqpa hayñinkunap hukyasqankuna',
 'rightslogtext' => "Kayqa hayñi hukchasqa hallch'aymi.",
-'rightslogentry' => 'hukchan $1-pa hayñinkunata $2-manta $3-man',
-'rightslogentry-autopromote' => 'kikinmanta $2-manta $3-manmi ñawpanchisqa',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "kay p'anqata ñawiriy",
@@ -1878,6 +1881,7 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun
 'uploadnewversion-linktext' => 'Kay willañiqi ñaqha musuqchasqata churkuy',
 'shared-repo-from' => '$1-manta',
 'shared-repo' => 'rakinakusqa qullqa',
+'upload-disallowed-here' => 'Manam atinkichu kay willañiqita huknachayta.',
 
 # File reversion
 'filerevert' => '$1-ta kutichiy',
@@ -1968,7 +1972,7 @@ P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam
 'double-redirect-fixed-maintenance' => '[[$1]]-manta [[$2]]-man iskaylla pusapunata allinchaspa.',
 'double-redirect-fixer' => 'Pusapuna allinchaq',
 
-'brokenredirects' => 'Panta pusapunakuna',
+'brokenredirects' => "P'akisqa pusapunakuna",
 'brokenredirectstext' => "Kay pusapuna p'anqakunaqa mana kachkaq p'anqakunamanmi pusapuchkan:",
 'brokenredirects-edit' => "llamk'apuy",
 'brokenredirects-delete' => 'qulluy',
@@ -1983,6 +1987,7 @@ P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|katiguriya|katiguriyakuna}}',
+'ninterwikis' => '{{PLURAL:$1|huk wikipura|$1 wikipura}}',
 'nlinks' => "$1 {{PLURAL:$1|t'inki|t'inkikuna}}",
 'nmembers' => '$1 {{PLURAL:$1|qillqa|qillqakuna}}',
 'nrevisions' => "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}}",
@@ -2011,6 +2016,7 @@ P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam
 'mostlinkedtemplates' => "Lliwmanta aswan t'inkimuqniyuq plantillakuna",
 'mostcategories' => "Lliwmanta aswan katiguriyayuq p'anqakuna",
 'mostimages' => "Lliwmanta astawan llamk'achisqa rikchakuna",
+'mostinterwikis' => "Lliwmanta aswan wikipurayuq p'anqakuna",
 'mostrevisions' => 'Lliwmanta aswan hukchasqayuq qillqakuna',
 'prefixindex' => "Tukuy p'anqakuna ñawpa k'askaqchayuq",
 'prefixindex-namespace' => "Tukuy qallarina k'askaqniyuq p'anqakuna ($1 suti k'itipi)",
@@ -2064,6 +2070,7 @@ Ama hina kaspa musyariy, huk llika tiyaykunachá chiqalla t'inkimun huk rikchap
 Rikuyniykitaqa k'ullkuchaytam atinki hallch'a layata, ruraqpa sutinta (uchuy icha hatun sanampakunata musyaq) icha chayachisqa p'anqata (uchuy icha hatun sanampakunata musyaq) akllaspa.",
 'logempty' => "Manam hallch'asqakuna kachkanchu.",
 'log-title-wildcard' => "Kaywan qallariq p'anqa sutikunata maskay",
+'showhideselectedlogentries' => "Akllasqa hallch'asqakunata rikuchiy/pakay",
 
 # Special:AllPages
 'allpages' => "Tukuy p'anqakuna",
@@ -2109,7 +2116,7 @@ Rikuyniykitaqa k'ullkuchaytam atinki hallch'a layata, ruraqpa sutinta (uchuy ich
 'linksearch-ok' => 'Maskay',
 'linksearch-text' => 'Ima rantipas sananchawanpas maskayta saqillasunkim, ahinataq "*.wikipedia.org".
 Hawa kaq duminyullapas kanam, ahinataq "*.org".<br />
-Q\'imichisqa tantari qillqa: <code>$1</code> (maskaspaykiqa kaykunamanta ama mayqintapas yapaychu).',
+Q\'imichisqa tantari {{PLURAL:$2|qillqa|qillqakuna}}: <code>$1</code> (mana mayqintapas akllaptiykiqa, http:// nisqam kanqa).',
 'linksearch-line' => "$1-man $2-manta t'inkimusqa",
 'linksearch-error' => 'Ima rantipas sananchaqa (* ?) tiyaypa qallariyninpim kanman chaylla.',
 
@@ -2128,10 +2135,6 @@ Q\'imichisqa tantari qillqa: <code>$1</code> (maskaspaykiqa kaykunamanta ama may
 'activeusers-hidesysops' => 'Kamachiqkunata pakay',
 'activeusers-noresult' => 'Ruraqkunataqa manam tarinichu.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Rakiquna kamariy hallch'a",
-'newuserlogpagetext' => "Kayqa ruraqkunap rakiqunankunata kamariymanta hallch'am.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ruraq huñup hayñinkuna',
 'listgrouprights-summary' => "Kay qatiq sutisuyupiqa kay wikipi sut'ichasqa ruraq huñukunatam, kikinpa chayamuna hayñinkunatawan rikunki.
@@ -2155,8 +2158,10 @@ Chay kikinkunap hayñinkunamanta astawan ñawirinaykipaqqa [[{{MediaWiki:Listgro
 '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',
+'emailuser-title-target' => 'Kay {{GENDER:$1|ruraqman}} e-chaskita kachay',
+'emailuser-title-notarget' => 'E-chaski kay ruraqman:',
 'emailpage' => 'E-chaski kay ruraqman:',
-'emailpagetext' => "Kay hunt'ana p'anqatam llamk'achiyta atinki e-chaskita kachanaykipaq.
+'emailpagetext' => "Kay uranpi kaq hunt'ana p'anqatam llamk'achiyta atinki kay {{GENDER:$1|ruraqman}} e-chaskita kachanaykipaq.
 Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamaytaqa paqarinqa kachasqayki e-chaskipi chaskiqpa kutichisunaykita atinanpaq.",
 'usermailererror' => 'Chaski llikaqa pantasqatam kutichimurqan:',
 'defemailsubject' => '{{SITENAME}} p\'anqamanta chaski "$1" sutiyuq ruraqmanta',
@@ -2188,14 +2193,14 @@ Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamayta
 
 # Watchlist
 'watchlist' => "Watiqasqa p'anqakuna",
-'mywatchlist' => 'Watiqasqaykuna',
+'mywatchlist' => "Watiqasqay p'anqakuna",
 'watchlistfor2' => '$1-paq $2',
 'nowatchlist' => 'Manam watiqasqakunachu kachkan.',
 'watchlistanontext' => 'Ama hina kaspa, $1 watiqana sutisuyuykipi imakunatapas qhawanaykipaq icha hukchanaykipaq.',
 'watchnologin' => 'Manam yaykurqankichu',
 'watchnologintext' => '[[Special:UserLogin|Yaykunaykim]] tiyan watiqana sutisuyuykita hukchanaykipaq.',
 'addwatch' => 'Watiqasqaykunaman yapay',
-'addedwatchtext' => "Kunanqa «[[:\$1]]» sutiyuq p'anqa [[Special:Watchlist|watiqanykipim]] kachkañam. Chay p'anqapi rimachinanpipas hukchanakunaqa kay watiqana p'anqapim rikunki. Watiqasqayki p'anqaqa [[Special:RecentChanges|ñaqha hukchasqakunapi]] '''yanasapa''' qillqasqa rikuchisqa kanqa aswan sikllalla tarinaykipaq. <p>Manaña watiqayta munaptiykiqa, uma siq'ipi \"amaña watiqaychu\" ñit'iy.",
+'addedwatchtext' => "Kunanqa \"[[:\$1]]\" sutiyuq p'anqa [[Special:Watchlist|watiqasqayki p'anqakunaman]] yapasqañam. Chay p'anqapi rimanakuy p'anqanpipas hukchanakunata kay watiqana p'anqapim rikunki.",
 'removewatch' => 'Watiqasqaykunamanta qichuy',
 'removedwatchtext' => '"[[:$1]]" sutiyuq p\'anqaqa [[Special:Watchlist|watiqasqaykikunamanta]] qichusqam.',
 'watch' => 'Watiqay',
@@ -2224,14 +2229,22 @@ Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamayta
 'enotif_mailer' => '{{SITENAME}}pa chaski musyachina sirwiqnin',
 'enotif_reset' => "Tukuy p'anqakunata watukusqakama sananchay",
 'enotif_impersonal_salutation' => '{{SITENAME}}pa ruraqnin',
+'enotif_subject_deleted' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam qullurqañam",
+'enotif_subject_created' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam kamarirqañam",
+'enotif_subject_moved' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam astarqañam",
+'enotif_subject_restored' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam qullusqamanta paqarichirqañam",
+'enotif_subject_changed' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam hukcharqañam",
+'enotif_body_intro_deleted' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi qullurqañam, kaypi qhaway: $3.',
+'enotif_body_intro_created' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi kamarirqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
+'enotif_body_intro_moved' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi astarqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
+'enotif_body_intro_restored' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam qullusqamanta $PAGEEDITDATE p\'unchawpi paqarichirqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
+'enotif_body_intro_changed' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi hukcharqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
 'enotif_lastvisited' => "$1 sutiyuq p'anqata qhaway qayna watukamusqaykimantapacha tukuy hukchasqakunata rikunaykipaq.",
 'enotif_lastdiff' => "$1 sutiyuq p'anqata qhaway kay hukchasqata rikunaykipaq.",
 'enotif_anon_editor' => 'sutinnaq ruraq $1',
 'enotif_body' => 'Munakusqa $WATCHINGUSERNAME,
 
-{{SITENAME}}pi $PAGETITLE sutiyuq p\'anqataqa $PAGEEDITOR sutiyuq ruraqmi $CHANGEDORCREATED $PAGEEDITDATE pachapi, $PAGETITLE_URL sutiyuq p\'anqata qhaway kunan hukchasqata rikunaykipaq.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Llamk\'apuqpa willasqan: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2239,7 +2252,7 @@ Llamk\'apuqta tapuy:
 e-chaski: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Kay p\'anqata mana musuqmanta watukamuptiykiqa, manam huk hukchasqakunamanta willasqaykichu. Tukuy watiqasqayki p\'anqakunapaq musyachina sananchakunatapas kutichiytam atinkiman.
+Kay p\'anqata mana musuqmanta watukamuptiykiqa, manam huk ruraykunamanta willasqaykichu. Tukuy watiqasqayki p\'anqakunapaq musyachina sananchakunatapas kutichiytam atinkiman.
 
              Tukuy sunquwan, {{SITENAME}}pa e-chaski musyachina llikan
 
@@ -2255,6 +2268,8 @@ $UNWATCHURL
 
 Yanapasunaykipaq:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kamarirqan',
+'changed' => 'hukchasqa',
 
 # Delete
 'deletepage' => "Kay p'anqata qulluy",
@@ -2291,6 +2306,8 @@ $2 nisqa p\'anqata qhaway ñaqha qullusqakunata rikunaykipaq.',
 'rollback' => 'Hukchasqakunata kutichiy',
 'rollback_short' => 'Kutichiy',
 'rollbacklink' => 'Kutichiy',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|hukchasqata}} kutichiy',
+'rollbacklinkcount-morethan' => '$1-manta aswan {{PLURAL:$1|hukchasqakunata}} kutichiy',
 'rollbackfailed' => 'Manam kutichiyta atinchu',
 'cantrollback' => "Manam atinichu llamk'apusqata kutichiyta; qhipaq kaq llamk'apuqqa kay p'anqap hukllam ruraqnin.",
 'alreadyrolled' => "Manam atinichu [[User:$2|$2]]-pa ([[User talk:$2|rimanakuy]]) [[$1]] nisqa qhipaq llamk'apusqanta kutichiyta; pipas kay p'anqataqa llamk'apurqunñam icha kutichirqunñam.
@@ -2319,6 +2336,8 @@ Ama hina kaspa, llika wamp'unaykipi \"Ñawpaqman\" (\"Back\") ñit'ispa ñawpaq
 'prot_1movedto2' => '«[[$1]]» «[[$2]]»-man astasqa',
 'protect-badnamespace-title' => "Mana amachanalla suti k'iti",
 'protect-badnamespace-text' => "Kay suti k'iti kaq p'anqakunaqa manam amachanallachu.",
+'protect-norestrictiontypes-text' => "Kay p'anqaqa manam amachanapaqchu, saywachana rikch'aqkuna (llamk'apuna icha kamarina hina) mana kaptinmi.",
+'protect-norestrictiontypes-title' => "Mana amachana p'anqa",
 'protect-legend' => 'Amachayta takyachiy',
 'protectcomment' => 'Kayrayku:',
 'protectexpiry' => 'Amachaypa puchukaynin',
@@ -2333,8 +2352,8 @@ Kay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
 Kay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
 'protect-cascadeon' => "Kay p'anqaqa amachasqam kachkan, kay phaqchalla amachasqa {{PLURAL:$1|p'anqapi|p'anqakunapi}} ch'aqtasqa kaspanmi. Kay p'anqap amachasqa kachkayninta hukchaytam atinki, hinaspapas manam phaqcha nisqa amachasqa kaynintachu hukchanki.",
 'protect-default' => 'Tukuy ruraqkunapaq',
-'protect-fallback' => '"$1" saqillanam',
-'protect-level-autoconfirmed' => 'Mana llullu rakiqunayuq ruraqkunallapaq',
+'protect-fallback' => '"$1" saqillanayuq ruraqkunallapaq',
+'protect-level-autoconfirmed' => 'Kikin rakiqunayuq ruraqkunallapaq',
 'protect-level-sysop' => 'Kamachiqkunallapaq',
 'protect-summary-cascade' => "''phaqcha'' nisqapi",
 'protect-expiring' => 'puchukanqa $1 (UTC)',
@@ -2427,7 +2446,7 @@ $1',
 'blanknamespace' => '(Uma)',
 
 # Contributions
-'contributions' => "Ruraqpa llamk'apusqankuna",
+'contributions' => "{{GENDER:$1|Ruraqpa}} llamk'apusqankuna",
 'contributions-title' => "$1 sutiyuq ruraqpa llamk'apusqankuna",
 'mycontris' => "Llamk'apusqaykuna",
 'contribsub2' => '$1 ($2)',
@@ -2469,7 +2488,7 @@ Qhipaq hark'ay hallch'a yaykuchisqatam kay qatiqpi rikunki:",
 'whatlinkshere-hideredirs' => '$1 pusapunakuna',
 'whatlinkshere-hidetrans' => "$1 plantilla ch'aqtanakuna",
 'whatlinkshere-hidelinks' => "$1 t'inkikuna",
-'whatlinkshere-hideimages' => "$1 rikcha t'inkikuna",
+'whatlinkshere-hideimages' => "$1 rikchaman t'inkikuna",
 'whatlinkshere-filters' => "Ch'illchinakuna",
 
 # Block/unblock
@@ -2615,14 +2634,14 @@ 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 iskaylla pusapuna p'anqakunata allinchallay. Ama panta t'inkimuqkunata saqiychu.
+'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.
 
 
 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.
 
-<b>PAQTATAQ!</b>
+'''Paqtataq!'''
 Kay astayqa ancha riqsisqa p'anqata hatun mana suyapusqa hukchaymi kayta atinman;
 ama hina kaspa, yuyarillay imachus kay astanaykita saqispa tukunata atinman.",
 'movepagetext-noredirectfixer' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas musuq sutiman astasqa kanqa.
@@ -2687,6 +2706,7 @@ Tukuna p\'anqaqa ("[[:$1]]") kachkañam. Astanapaq qulluyta munankichu?',
 'immobile-target-namespace-iw' => "Wikipura t'inkiqa p'anqa astanapaq manam allin taripanachu.",
 'immobile-source-page' => "Kay p'anqaqa manam astanallachu.",
 'immobile-target-page' => 'Manam atinichu chay taripana sutiman astayta.',
+'bad-target-model' => "Munakusqa taripanaqa wakin samiq qatillanayuqmi. Manam atinichu $1-manta $2-man t'ikrayta.",
 'imagenocrossnamespace' => "Manam atinichu p'anqata astayta mana willañiqipaq suti k'itiman",
 'nonfile-cannot-move-to-file' => "Manam atinichu mana willañiqi kaqta astayta willañiqipaq suti k'itiman",
 'imagetypemismatch' => "Willañiqip musuq mast'arinanqa kay layapaq manam allinchu",
@@ -2765,6 +2785,7 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'import-interwiki-templates' => 'Tukuy plantillakunapas',
 'import-interwiki-submit' => 'Hawamanta chaskiy',
 'import-interwiki-namespace' => "Kay suti k'itiman churay:",
+'import-interwiki-rootpage' => "Taripana saphi p'anqa (akllanalla):",
 'import-upload-filename' => 'Willañiqip sutin:',
 'import-comment' => 'Willayniyki:',
 'importtext' => "Ama hina kaspa, willañiqita qallariy wikimanta [[Special:Export|hawaman quna llamk'anawan]] hawaman quy antañiqiqniykipi waqaychaspa, chaymantataq kaypi churkuy.",
@@ -2796,6 +2817,9 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'import-error-interwiki' => '"$1" sutiyuq p\'anqaqa hawamanta manam chaskisqachu, sutin wikipura (interwiki) nisqapaq hallch\'asqa kaptinmi.',
 'import-error-special' => '"$1" sutiyuq p\'anqaqa hawamanta manam chaskisqachu, mana p\'anqapaq kaq sapaq suti k\'itiman kapuspanmi.',
 'import-error-invalid' => '"$1" sutiyuq p\'anqaqa hawamanta manam chaskisqachu, sutin mana allin kaptinmi.',
+'import-options-wrong' => 'Pantasqa {{PLURAL:$2|akllasqa|akllasqakuna}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "Qusqa saphi p'anqaqa manam allin sutichu.",
+'import-rootpage-nosubpage' => 'Saphi p\'anqap "$1" sutisuyunpiqa urin p\'anqakuna manam kanqachu.',
 
 # Import log
 'importlogpage' => "Hawamanta chaskiy hallch'a",
@@ -2930,24 +2954,46 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'spambot_username' => 'MediaWiki-ta spam nisqamanta pichay',
 'spam_reverting' => "Qhipaq kaq mana $1-man t'inkimuqniyuq llamk'apusqaman kutichispa",
 'spam_blanking' => "Tukuy llamk'apusqakunaqa $1-manmi t'inkimuq, ch'usaqchaspa",
+'spam_deleting' => "Tukuy musuqchasqakunaqa $1-manmi t'inkimun, qulluspa",
 
 # Info page
 'pageinfo-title' => '"$1" sutiyuq p\'anqamanta willay',
+'pageinfo-header-basic' => 'Tiksi willaykuna',
 'pageinfo-header-edits' => "Llamk'apusqakunap wiñay kawsaynin",
+'pageinfo-header-restrictions' => "P'anqap amachaynin",
+'pageinfo-header-properties' => "P'anqap kaqninkuna",
+'pageinfo-display-title' => "P'anqa sutita rikuchiy",
+'pageinfo-default-sort' => 'Kikinmanta ñiqichana llawi',
+'pageinfo-length' => "P'anqap chhikan (byte)",
+'pageinfo-article-id' => "P'anqap ID-nin",
+'pageinfo-language' => "P'anqap rimaynin",
+'pageinfo-robot-policy' => 'Maskana kuyuchinap kachkaynin',
+'pageinfo-robot-index' => 'Maskana yuyarinapaqpas',
+'pageinfo-robot-noindex' => 'Mana maskana yuyarinapaq',
 'pageinfo-views' => "Hayk'a qhawaykuna",
 'pageinfo-watchers' => "P'anqata hayk'a watiqaqkuna",
+'pageinfo-redirects-name' => "Kay p'anqaman pusampuqkuna",
+'pageinfo-subpages-name' => "Kay p'anqap urin p'anqankuna",
 '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-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)",
+'pageinfo-transclusions' => "Kaypi ch'aqtasqa {{PLURAL:$1|p'anqa|p'anqakuna}} ($1)",
 'pageinfo-toolboxlink' => "P'anqamanta willakuna",
 'pageinfo-redirectsto' => 'Kayman pusampun:',
 'pageinfo-redirectsto-info' => 'willachikuy',
 'pageinfo-contentpage' => "Samiqniyuq p'anqa hinam chaninchasqa",
 'pageinfo-contentpage-yes' => 'Arí',
 'pageinfo-protect-cascading-yes' => 'Arí',
+'pageinfo-category-info' => 'Katiguriyamanta willaykuna',
+'pageinfo-category-pages' => "Hayk'a p'anqakuna",
+'pageinfo-category-subcats' => "Hayk'a urin katiguriyakuna",
+'pageinfo-category-files' => "Hayk'a willañiqikuna",
 
 # Patrolling
 'markaspatrolleddiff' => 'Qhawakipasqaman sananchay',
@@ -2959,6 +3005,8 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'markedaspatrollederror' => 'Manam atinichu qhawakipasqaman sananchayta',
 'markedaspatrollederrortext' => "Huk llamk'apusqata akllanaykim tiyan qhawakipasqaman sananchanaykipaq.",
 'markedaspatrollederror-noautopatrol' => "Manam saqillasunkichu qampa llamk'apusqaykikunata qhawakipasqaman sananchayta.",
+'markedaspatrollednotify' => "Kay $1 sutiyuq p'anqapi hukchasqaqa qhawakipasqa nisqa sananchasqañam.",
+'markedaspatrollederrornotify' => 'Qhawakipasqa niyqa manam aypanchu.',
 
 # Patrol log
 'patrol-log-page' => "Qhawakipay hallch'a",
@@ -2991,6 +3039,8 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.",
 'file-info-size-pages' => "$1 × $2 iñu, willañiqip chhikan kaynin: $3; MIME laya: $4, $5 {{PLURAL:$5|p'anqa|p'anqa}}",
 'file-nohires' => 'Manam kanchu aswan huyakuyuq rikcha.',
 'svg-long-desc' => 'SVG willañiqi, rimasqakama $1 × $2 iñuyuq, willañiqip chhikan kaynin: $3',
+'svg-long-desc-animated' => 'Kuyuchisqa SVG willañiqi, rimasqakama $1 × $2 iñuyuq, willañiqip chhikan kaynin: $3',
+'svg-long-error' => 'Mana allin SVG willañiqi: $1',
 'show-big-image' => 'Qallariy huyaku',
 'show-big-image-preview' => 'Kay ñawpaq qhawariypa chhikan kaynin: $1.',
 'show-big-image-other' => 'Huk {{PLURAL:$2|huyaku|huyakukuna}}: $1.',
@@ -3018,7 +3068,10 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.",
 'minutes' => '{{PLURAL:$1|huk minutu|$1 minutu}}',
 'hours' => '{{PLURAL:$1|huk ura|$1 ura}}',
 'days' => "{{PLURAL:$1|huk p'unchaw|$1 p'unchaw}}",
+'months' => '{{PLURAL:$1|huk killa|$1 killa}}',
+'years' => '{{PLURAL:$1|huk wata|$1 wata}}',
 'ago' => '$1 ñaqha',
+'just-now' => 'kunallan',
 
 # Bad image list
 'bad_image_list' => "Chantaqa kay hinam:
@@ -3748,11 +3801,12 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 'logentry-move-move_redir-noredirect' => "$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man pusapunata huknachaspa mana pusapunata saqispa",
 'logentry-patrol-patrol' => "$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam patrullasqa nispa sananchan",
 'logentry-patrol-patrol-auto' => "$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam kikinmanta patrullasqa nispa sananchan",
-'logentry-newusers-newusers' => '$1 sutiyuq ruraqqa rakiqunatam kamarin',
-'logentry-newusers-create' => '$1 sutiyuq ruraqqa rakiqunatam kamarin',
-'logentry-newusers-create2' => '$1 sutiyuq ruraqqa rakiqunatam kamarin $3',
+'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-autocreate' => '$1 sutiyuq rakiqunaqa kikinmanta kamarisqam',
 'newuserlog-byemail' => 'e-chaskiwan kachasqa yaykuna rima',
+'rightsnone' => '(-)',
 
 # Feedback
 'feedback-bugornote' => "Allwiyapi sasachakuymanta imaymanachanta willayta munaspaykiqa, [\$1 pantasqamanta willay].
index a2c2820..1585ced 100644 (file)
@@ -348,11 +348,12 @@ Shina kakpika, shuk rurakka ña pankata pichankacha.',
 'viewsource' => 'Pukyu killkata rikuna',
 'actionthrottled' => 'Rurayta harkashka',
 'actionthrottledtext' => 'Spam rurashpa nalli runakunaka ama yapata chaskikuna kachankapak, mana chayta kutin ñapash rurana ushapankichu. Ama shinachu kapay, ashata shuyashpa  (wakin minutoskuna) kutin rurapay.',
-'protectedpagetext' => 'Kay pankata ama shukchinkapak harkashkami kan.',
+'protectedpagetext' => 'Kay pankaka ama shukchinkapak harkashkami kan.',
 'viewsourcetext' => 'Kay pankapak wiki killkayta rikunata, ishkachinatapash ushapankimi.',
 'protectedinterface' => 'Kay pankaka kapak willaykunata charinmi, ama nalli runakunaka kaypi killkankapak harkashkami kapan.',
 
 # Login and logout pages
+'welcomeuser' => '¡Alli shamushka, $1!',
 'yourname' => 'Rurak shuti:',
 'yourpassword' => 'Yaykunkapak rimay:',
 'yourpasswordagain' => 'Yaykunapak rimayta kutin killkapay:',
@@ -525,6 +526,9 @@ Shuk rurakkunaka kikinpa e-chaski ''dirección''ta mana yachankachu.",
 
 'grouppage-sysop' => '{{ns:project}}:Kamachik',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rurakkununata kamaykunapa kamu',
+
 # User rights log
 'rightslog' => 'Rurakpa hayñikunapa kamu',
 
@@ -640,9 +644,6 @@ Shuk rurakkunaka kikinpa e-chaski ''dirección''ta mana yachankachu.",
 'linksearch' => 'hawaman tinkikunata maskana',
 'linksearch-line' => '$1 pankaka $2-manta tinkishkami kan',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rurakkununata kamaykunapa kamu',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Kay tantanakuypa rurakkunapa shutikuna)',
 
@@ -686,9 +687,9 @@ $2 rikpika, ima pankakunaka pichashkami kan yachakupanki.',
 'protect_expiry_invalid' => "''Ima pachakaman'' mana alli nishkami.",
 'protect_expiry_old' => "''Ima pachakaman'' mana alli nishkami : kay pachaka ñawpak pachapi kapanmi !",
 'protect-default' => 'Rukuy runakunaman ari nipay',
-'protect-fallback' => '«$1» hayñita mutsupanki',
-'protect-level-autoconfirmed' => 'Mushuk rurakkunata mana shutiyuk rurakkunatapash wichkana',
-'protect-level-sysop' => 'Kipukamayukkunalla',
+'protect-fallback' => '«$1» hayñiyuk rurakkunallapak',
+'protect-level-autoconfirmed' => 'Kikin shutiyuk rurakkunallapak',
+'protect-level-sysop' => 'Kipukamayukkunallapak',
 'protect-expiring' => '$1 (UTC) pachakaman',
 'restriction-type' => 'Hayñi:',
 
@@ -702,7 +703,7 @@ $2 rikpika, ima pankakunaka pichashkami kan yachakupanki.',
 'blanknamespace' => 'Kapak',
 
 # Contributions
-'contributions' => 'Kay rurakpa killkaykuna',
+'contributions' => '{{GENDER:$1|Kay rurakpa}} killkaykuna',
 'contributions-title' => '$1 shutiyuq rurakpa killkaykuna',
 'mycontris' => 'Nukapak killkaykuna',
 'contribsub2' => '$1 ($2)',
index 9cc078e..79dbea3 100644 (file)
@@ -379,6 +379,9 @@ Lezenda: '''({{int:cur}})''' = difarenzi cun la versiòn d'adès; '''({{int:last
 
 'grouppage-sysop' => '{{ns:project}}:Aministradór',
 
+# Special:Log/newusers
+'newuserlogpage' => "Regèstar d'j nov",
+
 # User rights log
 'rightslog' => "Dirètt d'j navigador",
 
@@ -470,9 +473,6 @@ $1 {{PLURAL:$1|elemént|elemént}}',
 # Special:LinkSearch
 'linksearch' => 'Ghènz int ê web',
 
-# Special:Log/newusers
-'newuserlogpage' => "Regèstar d'j nov",
-
 # Special:ListGroupRights
 'listgrouprights-members' => "(Lèsta d'j mèmbar)",
 
index 072b14a..d9b8e65 100644 (file)
@@ -1353,15 +1353,13 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'right-sendemail' => 'Trametter e-mails ad auters utilisaders',
 'right-passwordreset' => "Vesair l'e-mail per redefinir pleds-clav",
 
+# Special:Log/newusers
+'newuserlogpage' => "Log d'utilisaders creads",
+'newuserlogpagetext' => "Quai è il log dals contos d'utilisader ch'èn vegnids creads.",
+
 # User rights log
 'rightslog' => "Log dals dretgs d'utilisader",
 'rightslogtext' => "Quai è il log da las midadas en ils dretgs d'utilisaders.",
-'rightslogentry' => 'midar la commembranza da $1 davent da $2 a $3',
-'rightslogentry-autopromote' => 'è vegnì promovì automaticamain da $2 $3',
-'logentry-rights-rights' => '$1 ha midà la commembranza da gruppas per $3 da $4 a $5',
-'logentry-rights-rights-legacy' => '$1 ha midà la commembranza da gruppas per $3',
-'logentry-rights-autopromote' => '$1 è vegnì promovì automaticamain da $4 a $5',
-'rightsnone' => '(nagins)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leger questa pagina',
@@ -2006,10 +2004,6 @@ Dovra almain ina top-level domain, per exempel "*.org".<br />
 'activeusers-hidesysops' => 'Zuppentar administraturs',
 'activeusers-noresult' => 'Chattà nagins utilisaders.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Log d'utilisaders creads",
-'newuserlogpagetext' => "Quai è il log dals contos d'utilisader ch'èn vegnids creads.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dretgs da las gruppas d'utilisaders",
 'listgrouprights-summary' => "Sutvart vegn mussada ina glista da las gruppas d'utilisaders sin questa wiki cun ils dretgs d'access associads.
@@ -2145,6 +2139,8 @@ $UNWATCHURL
 
 Resuns ed agid chattas qua:
 {{fullurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'midada',
 
 # Delete
 'deletepage' => 'Stizzar la pagina',
@@ -3731,6 +3727,10 @@ Questa pagina ha actualmain difficultads tecnicas.',
 'logentry-newusers-create2' => 'Il conto $3 è vegnì creà da $1',
 'logentry-newusers-autocreate' => 'Il conto $1 è vegnì creà automaticamain',
 'newuserlog-byemail' => 'tramess il pled-clav per e-mail',
+'logentry-rights-rights' => '$1 ha midà la commembranza da gruppas per $3 da $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha midà la commembranza da gruppas per $3',
+'logentry-rights-autopromote' => '$1 è vegnì promovì automaticamain da $4 a $5',
+'rightsnone' => '(nagins)',
 
 # Feedback
 'feedback-bugornote' => 'Sche ti vuls descriver detagliadamain in problem techic, lura [$1 rapporta in bug].
index e570c3f..0ef9e67 100644 (file)
@@ -434,6 +434,7 @@ pe titlul secțiunii (JavaScript)',
 'newwindow' => '(se deschide într-o fereastră nouă)',
 'cancel' => 'Revocare',
 'moredotdotdot' => 'Mai mult…',
+'morenotlisted' => 'Mai multe nu sunt enumerate...',
 'mypage' => 'Pagină',
 'mytalk' => 'Discuții',
 'anontalk' => 'Discuția pentru această adresă IP',
@@ -807,6 +808,7 @@ Vă rugăm să așteptați până să mai încercați.',
 # E-mail sending
 'php-mail-error-unknown' => 'Eroare necunoscută în funcția PHP mail()',
 'user-mail-no-addy' => 'S-a încercat trimiterea e-mailului fără o adresă de e-mail.',
+'user-mail-no-body' => 'S-a încercat trimiterea unui e-mail fără conținut sau nejustificat de scurt.',
 
 # Change password dialog
 'resetpass' => 'Modifică parola',
@@ -1600,15 +1602,13 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'right-sendemail' => 'Trimite e-mail altor utilizatori',
 'right-passwordreset' => 'Vizualizează e-mailurile de reinițializare a parolelor',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jurnal utilizatori noi',
+'newuserlogpagetext' => 'Acesta este jurnalul creărilor conturilor de utilizator.',
+
 # User rights log
 'rightslog' => 'Jurnal permisiuni de utilizator',
 'rightslogtext' => 'Acest jurnal cuprinde modificările permisiunilor utilizatorilor.',
-'rightslogentry' => 'a schimbat permisiunile pentru $1 de la $2 la $3',
-'rightslogentry-autopromote' => 'a fost promovat în mod automat de la $2 la $3',
-'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',
-'rightsnone' => '(niciunul)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'citiți această pagină',
@@ -2257,10 +2257,6 @@ Necesită cel puțin un domeniu de nivel superior, cum ar fi „*.org”.<br />
 'activeusers-hidesysops' => 'Ascunde administratorii',
 'activeusers-noresult' => 'Niciun utilizator găsit.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jurnal utilizatori noi',
-'newuserlogpagetext' => 'Acesta este jurnalul creărilor conturilor de utilizator.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Permisiuni grupuri de utilizatori',
 'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definite în acest wiki, împreună cu permisiunile de acces asociate.
@@ -2394,6 +2390,8 @@ $UNWATCHURL
 
 Asistență și suport:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creată',
+'changed' => 'modificată',
 
 # Delete
 'deletepage' => 'Șterge pagina',
@@ -2462,6 +2460,8 @@ Consultați [[Special:ProtectedPages|indexul paginilor protejate]] pentru o list
 'prot_1movedto2' => 'a mutat [[$1]] la [[$2]]',
 'protect-badnamespace-title' => 'Spațiu de nume neprotejabil',
 'protect-badnamespace-text' => 'Paginile din acest spațiu de nume nu pot fi protejate.',
+'protect-norestrictiontypes-text' => 'Această pagină nu poate fi protejată întrucât nu există niciun tip de restricție disponibil.',
+'protect-norestrictiontypes-title' => 'Pagină neprotejabilă',
 'protect-legend' => 'Confirmă protejare',
 'protectcomment' => 'Motiv:',
 'protectexpiry' => 'Expiră:',
@@ -2478,9 +2478,9 @@ Aici sunt setările curente pentru pagina '''$1''':",
 'protect-cascadeon' => 'Această pagină este protejată deoarece este inclusă în {{PLURAL:$1|următoarea pagină, ce are|următoarele pagini ce au}} activată protejarea la modificare în cascadă.
 Puteți schimba nivelul de protejare al acestei pagini, dar asta nu va afecta protecția în cascadă.',
 'protect-default' => 'Permis pentru toți utilizatorii',
-'protect-fallback' => 'Cere permisiunea "$1"',
-'protect-level-autoconfirmed' => 'Blochează utilizatorii noi și neînregistrați',
-'protect-level-sysop' => 'Numai administratorii',
+'protect-fallback' => 'Autorizat doar pentru utilizatorii cu permisiunea „$1”',
+'protect-level-autoconfirmed' => 'Autorizat doar pentru utilizatorii autoconfirmați',
+'protect-level-sysop' => 'Autorizat doar pentru administratori',
 'protect-summary-cascade' => 'în cascadă',
 'protect-expiring' => 'expiră $1 (UTC)',
 'protect-expiring-local' => 'expiră la $1',
@@ -2785,8 +2785,7 @@ nu uitați să verificați dacă nu există redirecționări [[Special:DoubleRed
 
 Vă rugăm să rețineți că sunteți responsabil(ă) pentru a face legăturile vechi să rămână valide.
 
-Rețineți că pagina '''nu va fi redenumită''' dacă există deja o pagină cu noul titlu, în afara cazurilor în care cea din urmă nu are conținut sau este deja
-o redirecționare; în plus, aceasta nu trebuie să aibă un istoric de modificări.
+Rețineți că pagina '''nu va fi redenumită''' dacă există deja o pagină cu noul titlu, în afara cazului în care cea din urmă este deja o redirecționare; în plus, aceasta nu trebuie să aibă un istoric de modificări.
 Cu alte cuvinte, veți putea redenumi înapoi o pagină pe care ați redenumit-o greșit, dar nu veți putea suprascrie o pagină validă existentă prin redenumirea alteia.
 
 '''ATENȚIE!'''
@@ -3130,6 +3129,7 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-magic-words' => '{{PLURAL:$1|Cuvânt magic|Cuvinte magice}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Format inclus|Formate incluse}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagină transclusă|Pagini transcluse}} din ($1)',
 'pageinfo-toolboxlink' => 'Informații despre pagină',
 'pageinfo-redirectsto' => 'Redirecționează către',
 'pageinfo-redirectsto-info' => 'info',
@@ -3138,6 +3138,10 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-protect-cascading' => 'Protecțiile provin în cascadă de aici',
 'pageinfo-protect-cascading-yes' => 'Da',
 'pageinfo-protect-cascading-from' => 'Protecțiile provin în cascadă de la',
+'pageinfo-category-info' => 'Informații despre categorie',
+'pageinfo-category-pages' => 'Număr de pagini',
+'pageinfo-category-subcats' => 'Număr de subcategorii',
+'pageinfo-category-files' => 'Număr de fișiere',
 
 # Skin names
 'skinname-standard' => 'Clasic',
@@ -3226,6 +3230,8 @@ Executându-l, sistemul dvs. poate fi compromis.",
 'minutes' => '{{PLURAL:$1|un minut|$1 minute|$1 de minute}}',
 'hours' => '{{PLURAL:$1|o oră|$1 ore|$1 de ore}}',
 'days' => '{{PLURAL:$1|o zi|$1 zile|$1 de zile}}',
+'months' => '{{PLURAL:$1|$1 lună|$1 luni|$1 de luni}}',
+'years' => '{{PLURAL:$1|$1 an|$1 ani|$1 de ani}}',
 'ago' => '$1 în urmă',
 'just-now' => 'Chiar acum',
 
@@ -3976,6 +3982,10 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'logentry-newusers-create2' => 'Contul de utilizator $3 a fost creat de către $1',
 'logentry-newusers-autocreate' => 'Contul $1 a fost creat în mod automat',
 'newuserlog-byemail' => 'parola trimisă prin e-mail',
+'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',
+'rightsnone' => '(niciunul)',
 
 # Feedback
 'feedback-bugornote' => 'Dacă sunteți pregătit să descrieți o problemă tehnică în detaliu vă rugăm să [$1 raportați un bug].
@@ -4029,6 +4039,7 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'api-error-ok-but-empty' => 'Eroare internă: niciun răspuns de la server.',
 'api-error-overwrite' => 'Nu este permisă suprascrierea unui fișier existent.',
 'api-error-stashfailed' => 'Eroare internă: serverul nu a putut stoca fișierul temporar.',
+'api-error-publishfailed' => 'Eroare internă: serverul nu a putut publica fișierul temporar.',
 'api-error-timeout' => 'Serverul nu a răspuns în timp util.',
 'api-error-unclassified' => 'A apărut o eroare necunoscută.',
 'api-error-unknown-code' => 'Eroare necunoscută: „$1”',
diff --git a/languages/messages/MessagesRoa_rup.php b/languages/messages/MessagesRoa_rup.php
deleted file mode 100644 (file)
index d05aa0c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/** Aromanian (Armãneashce)
- *
- * ISO 639-3 code 'rup' should be used. This is code is maintained for backward
- * compatilibity.
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-$fallback = 'rup';
index 6221bcc..1ca5108 100644 (file)
@@ -163,6 +163,7 @@ $messages = array(
 'newwindow' => "(iapre jndr'à 'na fenestra nova)",
 'cancel' => 'Scangìlle',
 'moredotdotdot' => 'De cchiù...',
+'morenotlisted' => "Otre non jndr'à l'elenghe...",
 'mypage' => "'A pàgena meje",
 'mytalk' => "'Ngazzaminde mie",
 'anontalk' => "'Ngazzaminde pe quiste IP",
@@ -556,6 +557,7 @@ Pe piacere vide c'aspitte 'nu picche de timbe apprime de pruvà 'n'otra vote.",
 # E-mail sending
 'php-mail-error-unknown' => "Errore scanusciute jndr'à funzione PHP mail()",
 'user-mail-no-addy' => "E' pruvate a mannà 'na mail senze 'u 'ndirizze mail",
+'user-mail-no-body' => "Pruvate a mannà 'na mail cu 'nu cuèrpe vacande o troppe curte.",
 
 # Change password dialog
 'resetpass' => "Cange 'a password",
@@ -788,10 +790,10 @@ Tu ne stè promitte ca quidde ca scrive tu, o lè scritte cu 'u penziere tue o l
 '''NO REGGISTRA' FATIJE CUPERTE DA 'U COPYRIGHT SENZA PERMESSE! NO FA STUDECARIE!'''",
 'longpageerror' => "'''ERRORE: 'U teste ca tu vuè ccu reggistre è luenghe {{PLURAL:$1|'nu kilobyte|$1 kilobyte}}, invece 'u limite massime jè de {{PLURAL:$2|'nu kilobyte|$2 kilobyte}}.'''
 Non ge puè reggistrà sta pàggene.",
-'readonlywarning' => "'''FA ATTENZIO': 'U database ha state bloccate pe manutenziona, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.'''
-Tu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tue e pò cchiù tarde le reggistre sus 'a Uicchi.
+'readonlywarning' => "'''FA ATTENZIO': 'U database ha state bloccate pe manutenzione, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.'''
+Tu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tune e pò cchiù tarde le reggistre sus 'a Uicchi.
 
-L'amministratore ca ha bloccate 'u database ha scritte stu mutive: $1",
+L'amministratore ca ha bloccate 'u database ha date stu mutive: $1",
 'protectedpagewarning' => "'''ATTENZIO': Sta pàgene ha state bloccate e allore sulamende le utinde cu le privilegge de ''sysop'' ponne cangiarle.'''
 L'urteme archivie de le trasute ha state previste aqquà sotte pe referimende:",
 'semiprotectedpagewarning' => "'''Fà attenzione:''' Sta pàgene ha state bloccate accussì sulamende l'utinde reggistrete ponne fà cangiaminde.
@@ -1365,15 +1367,13 @@ Ce tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
 'right-sendemail' => "Manne 'a mail a otre utinde",
 'right-passwordreset' => "Vide l'e-mail de azzeramende d'a passuord",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Archivije de ccreazione de le utinde',
+'newuserlogpagetext' => "Quiste ète l'archivije de le creazziune de l'utinde.",
+
 # User rights log
 'rightslog' => "Archivie de le diritte de l'utende",
 'rightslogtext' => "Quiste jè 'n'archivije pe le cangiaminde de le deritte de l'utinde.",
-'rightslogentry' => "membre d'u gruppe cangete pe $1 da $2 a $3",
-'rightslogentry-autopromote' => 'ha state promosse automaticamende da $2 a $3',
-'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',
-'rightsnone' => '(ninde)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ligge sta pàgene',
@@ -2037,10 +2037,6 @@ Onne abbesogne almene de \'nu dominie de levèlle ierte, pe esembie "*.org". <br
 'activeusers-hidesysops' => 'Scunne le amministrature',
 'activeusers-noresult' => 'Nisciune utende acchiate.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Archivije de ccreazione de le utinde',
-'newuserlogpagetext' => "Quiste ète l'archivije de le creazziune de l'utinde.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Deritte de le gruppe utinde',
 'listgrouprights-summary' => "'A liste ca ste vide ète 'na liste de le gruppe utinde ccreiate sus a sta Uicchi, cu le lore deritte d'accesse associate.
@@ -2179,6 +2175,8 @@ Pe scangellà 'a pàgene da 'a liste de le pàggene condrollate, vè vide
 
 Segnalaziune e otre assistenze:
 {{canonicalurl:{{MediaWiki:Helppage}}}}",
+'created' => 'ccrejete',
+'changed' => 'cangete',
 
 # Delete
 'deletepage' => "Scangille 'a pàgene",
@@ -2252,6 +2250,8 @@ Vide 'a [[Special:ProtectedPages|liste de le pàggene prutette]] pa liste de le
 'prot_1movedto2' => "[[$1]] spustete jndr'à [[$2]]",
 'protect-badnamespace-title' => 'Namespace none proteggibbele',
 'protect-badnamespace-text' => "Le pàggene jndr'à stu namespace non ge ponne essere prutette.",
+'protect-norestrictiontypes-text' => 'Sta pàggene non ge pò essere protette purcé non ge stonne tipe de restriziune disponibbile.',
+'protect-norestrictiontypes-title' => 'Pàgene non proteggibbele',
 'protect-legend' => "Conferme 'a protezione",
 'protectcomment' => 'Mutive:',
 'protectexpiry' => 'More:',
@@ -2268,9 +2268,9 @@ Chiste sonde le configuraziune corrende p'a pàgene '''$1''':",
 'protect-cascadeon' => "Sta pàgene mò jè  prutette purcè jè ingluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzechete.
 Tu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
 'protect-default' => "Permitte a tutte l'utinde",
-'protect-fallback' => 'Richieste \'u permesse "$1"',
-'protect-level-autoconfirmed' => "Blocche l'utinde nuève e chidde non reggistrete",
-'protect-level-sysop' => 'Sulamende pe le Sysops',
+'protect-fallback' => 'Richieste d\'u permesse "$1"',
+'protect-level-autoconfirmed' => "Blocche l'utinde nuève e chidde non reggistrate",
+'protect-level-sysop' => 'Sulamende pe le Amministrature',
 'protect-summary-cascade' => 'a caschete',
 'protect-expiring' => "more 'u $1 (UTC)",
 'protect-expiring-local' => "scade 'u $1",
@@ -2574,18 +2574,18 @@ Pe bloccà o sbloccà 'u database quiste abbesogne de essere scritte da 'nu web
 # Move page
 'move-page' => 'Spuèste $1',
 'move-page-legend' => "Spuèste 'a pàgene",
-'movepagetext' => "Ausanne 'u form aqquà sotte ste cange 'u nome d'a pàgene, spustanne tutte a storia soje sus a 'u nome néve.
-U' vecchie titele devènde 'nu ridirezionamende sus 'a pàgena nove.
-Tu puè aggiornà 'u ridirezionamende ca apponde da 'u titele automaticamende.
-Ce tu no fece ninde condrolle ca non ccreje [[Special:DoubleRedirects|doppie ridirezionaminde ]] o [[Special:BrokenRedirects|ridirezionaminde scuasciete]].
-Tu si 'u responsabbile de quidde ca cumbine, allore me raccomande fa attenzione.
+'movepagetext' => "Ausanne 'u form aqquà sotte ste cange 'u nome d'a pàgene, spustanne tutte 'a storia soje sus a 'u nome nuéve.
+U' vecchie titole devènde 'nu ridirezionamende sus 'a pàgena nove.
+Tu puè aggiornà 'u ridirezionamende ca apponde a 'u titole origgenale automaticamende.
+Ce tu no ste scacchie, sta secure de condrollà [[Special:DoubleRedirects|doppie ridirezionaminde]] o [[Special:BrokenRedirects|ridirezionaminde scuasciate]].
+Tu si 'u responsabbile de quidde ca cumbine, assicurate ca 'u collegamende condinue a appondà addò avessa scè.
 
-Vide Bbuene ca 'a pàgene non g'avene spustete ce esiste n'otra pàgene cu 'u titele nuéve, a mene ca jè vacande o jè 'na pàgene de ridirezionamende senza storie.
-Quieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha state renomenete e t'è rese conde ca è fatte 'na studecarije sovrascrevènne 'na pàgene esistende.
+Vide Bbuene ca 'a pàgene '''non''' g'avene spustate ce esiste n'otra pàgene cu 'u titole nuéve, a mene ca jè vacande o jè 'na pàgene de ridirezionamende senza storie.
+Quieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha state renomenate e t'è rese conde ca è fatte 'na studecarije sovrascrevènne 'na pàgene esistende.
 
 '''ATTENZIONE!'''
-Quiste pò essere 'nu cangiamende drastiche e inaspettete de 'na pàgene famose assaje;
-pe piacere a essere secure-secure de le conseguenze prime de procedere.",
+Quiste pò essere 'nu cangiamende drastiche e inaspettate de 'na pàgene famose assaje;
+pe piacere a essere secure-secure de le conseguenze apprime de condinuà.",
 'movepagetext-noredirectfixer' => "Ausanne 'u module aqquà sotte puè renomenà 'na pàgene, spustanne tutte 'a storia soje sotte a 'u nome nuève.
 'U titele vecchie addevende 'na pàgene de ridirezionamende a 'u titele nuève.
 Me raccomande condrolle le redirezionaminde [[Special:DoubleRedirects|a doppie]] o [[Special:BrokenRedirects|scuasciate]].
@@ -2953,6 +2953,7 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorije|Categorije}} scunnute ($1)',
 'pageinfo-templates' => 'Esclude {{PLURAL:$1|template|template}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pàgene|Pàggene}} escluse sus a ($1)',
 'pageinfo-toolboxlink' => "'Mbormaziune d'a pagene",
 'pageinfo-redirectsto' => 'Reinderizze a',
 'pageinfo-redirectsto-info' => "'Mbormazione",
@@ -2961,6 +2962,10 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-protect-cascading' => 'Protezziune vonne a cascate da aqquà',
 'pageinfo-protect-cascading-yes' => 'Sine',
 'pageinfo-protect-cascading-from' => 'Le protezziune sò a cascate da',
+'pageinfo-category-info' => "'Mbormaziune sus a 'a categorije",
+'pageinfo-category-pages' => 'Numere de pàggene',
+'pageinfo-category-subcats' => 'Numere de sottocategorije',
+'pageinfo-category-files' => 'Numere de file',
 
 # Skin names
 'skinname-standard' => 'Classeche',
@@ -3054,6 +3059,8 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'minutes' => '{{PLURAL:$1|$1 minute|$1 minute}}',
 'hours' => '{{PLURAL: $1|$1ore|$1 ore}}',
 'days' => '{{PLURAL: $1|$1 sciurne|$1 sciurne}}',
+'months' => '{{PLURAL:$1|$1 mese|$1 mise}}',
+'years' => '{{PLURAL:$1|$1 anne}}',
 'ago' => '$1 fà',
 'just-now' => 'mò mò',
 
@@ -4003,6 +4010,10 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'logentry-newusers-create2' => "$1 {{GENDER:$2|ccrejate}} {{GENDER:$4|'nu cunde utende}} $3",
 'logentry-newusers-autocreate' => "'U cunde utende $1 ha state ccrejate automaticamende",
 'newuserlog-byemail' => 'password mannete pe e-mail',
+'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',
+'rightsnone' => '(ninde)',
 
 # Feedback
 'feedback-bugornote' => "Ce tu si pronde a descrivere 'nu probbleme tecniche cu le dettaglie pe piacere [\$1 manne 'nu bug].
@@ -4056,6 +4067,7 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'api-error-ok-but-empty' => "Errore inderne: Nisciune resposte da 'u server.",
 'api-error-overwrite' => "'A sovrascritture de 'nu file ca esiste non ge se pò fà.",
 'api-error-stashfailed' => "Errore inderne: 'U server ha fallite 'a reggistrazione de le file temboranèe.",
+'api-error-publishfailed' => "Errore inderne: 'U server ha fallite 'a pubblecazione d'u file temboranèe.",
 'api-error-timeout' => "'U server non g'ave resposte jndr'à 'u tiembe ca 'u spettave.",
 'api-error-unclassified' => "'N'errore scanusciute s'a verificate",
 'api-error-unknown-code' => 'Errore scanusciute: "$1"',
index aab893e..642c35f 100644 (file)
@@ -24,6 +24,7 @@
  * @author Chilin
  * @author Claymore
  * @author Comp1089
+ * @author Cryptocoryne
  * @author DCamer
  * @author Daniyar
  * @author Dim Grits
@@ -534,6 +535,7 @@ $messages = array(
 'newwindow' => '(в новом окне)',
 'cancel' => 'Отменить',
 'moredotdotdot' => 'Далее…',
+'morenotlisted' => 'Больше ничего нету...',
 'mypage' => 'Страница',
 'mytalk' => 'Обсуждение',
 'anontalk' => 'Обсуждение для этого IP-адреса',
@@ -910,7 +912,8 @@ $2',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Неизвестная ошибка в PHP-функции mail()',
-'user-mail-no-addy' => 'Попытался отправить электронное письмо без адреса электронной почты',
+'user-mail-no-addy' => 'Пытался отправить электронное письмо без адреса электронной почты',
+'user-mail-no-body' => 'Пытался отправить электронное письмо с пустым или бессмысленно коротким содержанием.',
 
 # Change password dialog
 'resetpass' => 'Изменение пароля',
@@ -1145,7 +1148,7 @@ $2
 '''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''",
 'longpageerror' => "'''ОШИБКА: записываемый вами текст имеет размер {{PLURAL:$1|$1 килобайт|$1 килобайта|$1 килобайт}}, что больше, чем установленный предел в {{PLURAL:$2|$2 килобайт|$2 килобайта|$2 килобайт}}. Страница не может быть сохранена.'''",
 'readonlywarning' => "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''
\92озможно, Ð²Ð°Ð¼ Ñ\81ледÑ\83еÑ\82 Ñ\81оÑ\85Ñ\80аниÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ð² Ñ\84айл, Ñ\87Ñ\82обÑ\8b Ð²Ð¾Ñ\81полÑ\8cзоваÑ\82Ñ\8cÑ\81Ñ\8f Ñ\8dÑ\82им Ñ\82екÑ\81Ñ\82ом Ð¿Ð¾Ð·Ð¶е.
\92озможно, Ð²Ð°Ð¼ Ñ\81ледÑ\83еÑ\82 Ñ\81копиÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82оÑ\82 Ñ\82екÑ\81Ñ\82 Ð² Ñ\82екÑ\81Ñ\82овÑ\8bй Ñ\84айл, Ñ\87Ñ\82обÑ\8b Ñ\81оÑ\85Ñ\80аниÑ\82Ñ\8c ÐµÐ³Ð¾ Ð½Ð° Ð±Ñ\83дÑ\83Ñ\89ее.
 
 Администратор, заблокировавший базу данных, оставил следующее объяснение: $1",
 'protectedpagewarning' => "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''
@@ -1658,7 +1661,7 @@ $1",
 'right-move-subpages' => 'переименование страниц с их подстраницами',
 'right-move-rootuserpages' => 'переименование корневых страниц участников',
 'right-movefile' => 'переименование файлов',
-'right-suppressredirect' => 'не создаётся перенаправление со старого имени при переименовании страницы',
+'right-suppressredirect' => 'не создавать перенаправление со старого имени при переименовании страницы',
 'right-upload' => 'загрузка файлов',
 'right-reupload' => 'запись файлов поверх существующих',
 'right-reupload-own' => 'перезапись файлов тем же участником',
@@ -1685,14 +1688,14 @@ $1",
 'right-hideuser' => 'запрет имени участника и его сокрытие',
 'right-ipblock-exempt' => 'обход блокировок по IP, автоблокировок и блокировок диапазонов',
 'right-proxyunbannable' => 'обход автоматической блокировки прокси',
-'right-unblockself' => 'Ñ\80азблокиÑ\80ование Ñ\81ебÑ\8f Ñ\81амого',
+'right-unblockself' => 'Ñ\80азблокиÑ\80овка Ñ\81амого Ñ\81ебÑ\8f',
 'right-protect' => 'изменение уровня защиты страниц и правка защищённых страниц',
 'right-editprotected' => 'правка защищённых страниц (без каскадной защиты)',
 'right-editinterface' => 'изменение пользовательского интерфейса',
 'right-editusercssjs' => 'правка CSS- и JS-файлов других участников',
 'right-editusercss' => 'правка CSS-файлов других участников',
 'right-edituserjs' => 'правка JavaScript-файлов других участников',
-'right-rollback' => 'бÑ\8bÑ\81Ñ\82Ñ\80Ñ\8bй Ð¾Ñ\82каÑ\82 Ð¿Ñ\80авок Ð¿Ð¾Ñ\81леднего Ñ\83Ñ\87аÑ\81Ñ\82ника Ð½Ð° Ð½ÐµÐºÐ¾Ñ\82оÑ\80ой странице',
+'right-rollback' => 'бÑ\8bÑ\81Ñ\82Ñ\80Ñ\8bй Ð¾Ñ\82каÑ\82 Ð¿Ñ\80авок Ð¿Ð¾Ñ\81леднего Ñ\83Ñ\87аÑ\81Ñ\82ника Ð½Ð° Ð¾Ð¿Ñ\80еделенной странице',
 'right-markbotedits' => 'отметка откатываемых правок как правок бота',
 'right-noratelimit' => 'нет ограничений по скорости',
 'right-import' => 'импорт страниц из других вики',
@@ -1702,22 +1705,20 @@ $1",
 'right-patrolmarks' => 'просмотр отметок о патрулировании в свежих правках',
 'right-unwatchedpages' => 'просмотр списка ненаблюдаемых страниц',
 'right-mergehistory' => 'объединение историй страниц',
-'right-userrights' => 'изменение Ð¿Ñ\80ав Ð²Ñ\81еÑ\85 участников',
+'right-userrights' => 'изменение Ð²Ñ\81еÑ\85 Ð¿Ñ\80ав участников',
 'right-userrights-interwiki' => 'изменение прав участников на других вики-сайтах',
 'right-siteadmin' => 'блокировка и разблокировка базы данных',
 'right-override-export-depth' => 'экспортирование страниц, включая связанные страницы с глубиной до 5',
 'right-sendemail' => 'отправлять электронную почту другим участникам',
 'right-passwordreset' => 'просмотр электронных писем с изменением пароля',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал регистрации участников',
+'newuserlogpagetext' => 'Список недавно зарегистрировавшихся участников',
+
 # User rights log
 'rightslog' => 'Журнал прав участника',
 'rightslogtext' => 'Это журнал изменений прав участника.',
-'rightslogentry' => 'изменил членство в группах для $1 с $2 на $3',
-'rightslogentry-autopromote' => 'был автоматически переведён из $2 в $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
-'logentry-rights-autopromote' => 'Учётная запись «$1» была автоматически переведена из $4 в $5',
-'rightsnone' => '(нет)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чтение этой страницы',
@@ -2345,7 +2346,7 @@ $1',
 'linksearch-ok' => 'Найти',
 'linksearch-text' => 'Можно использовать подстановочные символы, например, <code>*.wikipedia.org</code>.
 Необходим по крайней мере домен верхнего уровня, например <code>*.org</code><br />
-Поддерживаемые протоколы: <code>$1</code> (по умолчанию подставляется http://, если протокол явно не задан).',
+Поддерживаемые {{PLURAL:$2|протокол|протоколы}}: <code>$1</code> (по умолчанию подставляется http://, если протокол явно не задан).',
 'linksearch-line' => 'Ссылка на $1 из $2',
 'linksearch-error' => 'Подстановочные символы могут использоваться только в начале адресов.',
 
@@ -2364,10 +2365,6 @@ $1',
 'activeusers-hidesysops' => 'Скрыть администраторов',
 'activeusers-noresult' => 'Не найдено участников.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал регистрации участников',
-'newuserlogpagetext' => 'Список недавно зарегистрировавшихся участников',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права групп участников',
 'listgrouprights-summary' => 'Ниже представлен список определённых в этой вики групп участников, указаны соответствующие им права доступа.
@@ -2504,6 +2501,8 @@ $UNWATCHURL
 
 Обратная связь и помощь
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'создана',
+'changed' => 'изменена',
 
 # Delete
 'deletepage' => 'Удалить страницу',
@@ -2574,6 +2573,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] переименована в [[$2]]',
 'protect-badnamespace-title' => 'Незащищаемое пространство имён',
 'protect-badnamespace-text' => 'Страницы в этом пространстве имён не могут быть защищены.',
+'protect-norestrictiontypes-text' => 'Эта страница не может быть защищена, как как для неё нет доступных типов ограничений.',
+'protect-norestrictiontypes-title' => 'Незащищаемая страница',
 'protect-legend' => 'Подтвердите установку защиты страницы',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Истекает:',
@@ -2588,9 +2589,9 @@ $UNWATCHURL
 'protect-locked-access' => "У вашей учётной записи недостаточно прав для изменения уровня защиты страницы. Текущие установки для страницы '''$1''':",
 'protect-cascadeon' => 'Эта страница защищена в связи с тем, что она включена {{PLURAL:$1|в указанную ниже страницу, на которую|в нижеследующие страницы, на которые}} установлена каскадная защита. Вы можете изменить уровень защиты этой страницы, но это не повлияет на каскадную защиту.',
 'protect-default' => 'Без защиты',
-'protect-fallback' => 'ТÑ\80ебÑ\83еÑ\82Ñ\81Ñ\8f Ñ\80азÑ\80еÑ\88ение «$1»',
-'protect-level-autoconfirmed' => 'Ð\97аÑ\89иÑ\82иÑ\82Ñ\8c Ð¾Ñ\82 Ð½Ð¾Ð²Ñ\8bÑ\85 Ð¸ Ð½ÐµÐ·Ð°Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80ованнÑ\8bÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников',
-'protect-level-sysop' => 'ТолÑ\8cко Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\8b',
+'protect-fallback' => 'РазÑ\80еÑ\88ено Ñ\82олÑ\8cко Ñ\83Ñ\87аÑ\81Ñ\82никам Ñ\81 Ð¿Ñ\80авами «$1»',
+'protect-level-autoconfirmed' => 'РазÑ\80еÑ\88ено Ñ\82олÑ\8cко Ð°Ð²Ñ\82оподÑ\82веÑ\80ждÑ\91ннÑ\8bм Ñ\83Ñ\87аÑ\81Ñ\82никам',
+'protect-level-sysop' => 'РазÑ\80еÑ\88ено Ñ\82олÑ\8cко Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ам',
 'protect-summary-cascade' => 'каскадная',
 'protect-expiring' => 'истекает $1 (UTC)',
 'protect-expiring-local' => 'истекает $1',
@@ -2883,17 +2884,17 @@ $1',
 # Move page
 'move-page' => '$1 — переименование',
 'move-page-legend' => 'Переименование страницы',
-'movepagetext' => "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
-Старое название станет перенаправлением на новое название.
+'movepagetext' => "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
+Старое название станет перенаправлением на новое.
 Вы можете автоматически обновить перенаправления, которые вели на старое название.
 Если вы этого не сделаете, пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].
-Вы отвечаете за то, что бы ссылки продолжали и далее указывают туда, куда предполагалось.
+Вы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.
 
\9eбÑ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ñ\81Ñ\82Ñ\80аниÑ\86а '''не Ð±Ñ\83деÑ\82''' Ð¿ÐµÑ\80еименована, ÐµÑ\81ли Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81 Ð½Ð¾Ð²Ñ\8bм Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ Ñ\83же Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82, ÐºÑ\80оме Ñ\81лÑ\83Ñ\87аев, ÐµÑ\81ли Ð¾Ð½Ð° Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð¿ÐµÑ\80енапÑ\80авлением Ð¸Ð»Ð¸ Ð¿Ñ\83Ñ\81Ñ\82а Ð¸ не имеет истории правок.
-Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу.
\9eбÑ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ñ\81Ñ\82Ñ\80аниÑ\86а '''не Ð±Ñ\83деÑ\82''' Ð¿ÐµÑ\80еименована, ÐµÑ\81ли Ñ\83же Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81 Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼, Ð¸Ð´ÐµÐ½Ñ\82иÑ\87нÑ\8bм Ð²Ñ\8bбÑ\80анномÑ\83, ÐºÑ\80оме Ñ\81лÑ\83Ñ\87аев, ÐºÐ¾Ð³Ð´Ð° Ñ\82акаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð¿ÐµÑ\80енапÑ\80авлением Ð¸Ð»Ð¸ Ð¿Ñ\83Ñ\81Ñ\82а, Ð¸ Ð¿Ñ\80и Ñ\8dÑ\82ом не имеет истории правок.
+Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы сделали преименование ошибочно, но вы не можете случайно затереть существующую страницу.
 
-'''ПРЕДУПРЕЖДЕНИЕ!'''
-Переименование может привести к масштабным и неожиданным изменениям для ''популярных'' страниц.
+'''Предупреждение!'''
+Переименование ''популярных'' страниц может привести к масштабным и неожиданным изменениям.
 Пожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.",
 'movepagetext-noredirectfixer' => "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
 Старое название станет перенаправлением на новое название.
@@ -3255,6 +3256,7 @@ The wiki server can't provide data in a format your client can read.",
 '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' => 'сведения',
@@ -3263,6 +3265,10 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-protect-cascading' => 'Каскадная защита отсюда',
 'pageinfo-protect-cascading-yes' => 'Да',
 'pageinfo-protect-cascading-from' => 'Каскадная защита от',
+'pageinfo-category-info' => 'Информация о категории',
+'pageinfo-category-pages' => 'Количество страниц',
+'pageinfo-category-subcats' => 'Количество подкатегорий',
+'pageinfo-category-files' => 'Количество файлов',
 
 # Skin names
 'skinname-standard' => 'Классическое',
@@ -3355,6 +3361,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 минута|$1 минуты|$1 минут}}',
 'hours' => '{{PLURAL:$1|$1 час|$1 часа|$1 часов}}',
 'days' => '{{PLURAL:$1|$1 день|$1 дня|$1 дней}}',
+'months' => '{{PLURAL:$1|$1 месяц|$1 месяца|$1 месяцев}}',
+'years' => '{{PLURAL:$1|$1 год|$1 года|$1 лет}}',
 'ago' => '$1 назад',
 'just-now' => 'только что',
 
@@ -4194,6 +4202,10 @@ MediaWiki распространяется в надежде, что она бу
 'logentry-newusers-create2' => '$1 {{GENDER:$2|создал|создала}} учётную запись для $3',
 'logentry-newusers-autocreate' => 'Автоматически создана учётная запись $1',
 'newuserlog-byemail' => 'пароль отправлен по эл. почте',
+'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
+'logentry-rights-autopromote' => 'Учётная запись «$1» была автоматически переведена из $4 в $5',
+'rightsnone' => '(нет)',
 
 # Feedback
 'feedback-bugornote' => 'Если вы готовы подробно описать техническую проблему, пожалуйста, [$1 сообщите об ошибке].
@@ -4247,6 +4259,7 @@ MediaWiki распространяется в надежде, что она бу
 'api-error-ok-but-empty' => 'Внутренняя ошибка: нет ответа от сервера.',
 'api-error-overwrite' => 'Не допускается замена существующего файла.',
 'api-error-stashfailed' => 'Внутренняя ошибка: сервер не смог сохранить временный файл.',
+'api-error-publishfailed' => 'Внутренняя ошибка: сервер не смог сохранить временный файл.',
 'api-error-timeout' => 'Сервер не отвечает в течение ожидаемого времени.',
 'api-error-unclassified' => 'Произошла неизвестная ошибка',
 'api-error-unknown-code' => 'Неизвестная ошибка: «$1»',
index 801bae6..535e695 100644 (file)
@@ -1398,15 +1398,13 @@ $1",
 'right-sendemail' => 'Посыланя пошты іншым хоснователям',
 'right-passwordreset' => 'Перезераня імейлів про зміну гесла',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Лоґ вытварянь хоснователїв',
+'newuserlogpagetext' => 'Тото є список ново реґістрованых хоснователїв.',
+
 # User rights log
 'rightslog' => 'Лоґ хосновательскых прав',
 'rightslogtext' => 'Тото є протокол зміны прав хоснователїв',
-'rightslogentry' => 'змінив членство в ґрупах про хоснователя $1 з $2 на $3',
-'rightslogentry-autopromote' => 'быв автоматічно повышеный з $2 на $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3 із $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3',
-'logentry-rights-autopromote' => '$1 было автоматічно переведено із $4 в $5',
-'rightsnone' => '(жадне)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'прочітати тоту сторінку',
@@ -2030,10 +2028,6 @@ $1',
 'activeusers-hidesysops' => 'Сховати адміністраторів',
 'activeusers-noresult' => 'Ненайдженый жаден хоснователь.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Лоґ вытварянь хоснователїв',
-'newuserlogpagetext' => 'Тото є список ново реґістрованых хоснователїв.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права ґруп хоснователїв',
 'listgrouprights-summary' => 'Тото є список ґруп хоснователїв дефінованых на тій вікіi і&nbsp;їх приступовых прав.
@@ -2169,6 +2163,8 @@ $UNWATCHURL
 
 Порада і контакт:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створена',
+'changed' => 'змінена',
 
 # Delete
 'deletepage' => 'Змазати сторінку',
@@ -3706,6 +3702,10 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'logentry-newusers-create2' => '$1 створив хосновательске конто $3',
 'logentry-newusers-autocreate' => 'Автоматічно было створене конто $1',
 'newuserlog-byemail' => 'гело послане електронічнов поштов',
+'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3 із $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3',
+'logentry-rights-autopromote' => '$1 было автоматічно переведено із $4 в $5',
+'rightsnone' => '(жадне)',
 
 # Feedback
 'feedback-bugornote' => 'Кідь сьте прирыхтованый подробно описати технічный проблем, можете [$1 наголосити хыбу].
index 871ff86..264720a 100644 (file)
@@ -1542,15 +1542,13 @@ You can still [$1 view this revision]",
 'right-sendemail' => 'अन्ययोजकेभ्यः विद्युन्मानपत्राणि प्रेषयतु ।',
 'right-passwordreset' => 'निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।',
 
+# Special:Log/newusers
+'newuserlogpage' => 'प्रयोक्तृ-सृजन-सूचिका',
+'newuserlogpagetext' => 'अयं योजकनिर्माणास्य प्रवेशः ।',
+
 # User rights log
 'rightslog' => 'प्रयोक्तृ-अधिकार-सूचिका',
 'rightslogtext' => 'अयं योजकाधिकारस्य परिवर्तनकुञ्चः ।',
-'rightslogentry' => '$2 - $3 तः $1 सामूहिकसदस्यत्वं परिवर्तितम् ।',
-'rightslogentry-autopromote' => '$2 तः $3 स्वयम् उन्नतीकृतम् ।',
-'logentry-rights-rights' => '$1 इत्ययं $3 इत्यस्य समूहसदस्यतां $4 इत्यतः परिवर्त्य $5 इत्यकरोत्',
-'logentry-rights-rights-legacy' => '$1, $3 इत्यस्मै समूहसदस्यतां पर्यवर्तयत्',
-'logentry-rights-autopromote' => '$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः',
-'rightsnone' => '(कतम)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'एतत्पुटं पठतु ।',
@@ -2188,10 +2186,6 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'activeusers-hidesysops' => 'प्रशासकान् गोपयतु ।',
 'activeusers-noresult' => 'योजकः न प्राप्तः ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोक्तृ-सृजन-सूचिका',
-'newuserlogpagetext' => 'अयं योजकनिर्माणास्य प्रवेशः ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'योजकसमूहाधिकाराः ।',
 'listgrouprights-summary' => 'अधोदत्ता विकिपरिभाषितस्य सङ्गताभिगम्यताधिकारैः सहिता योजकसमूहस्य आवली । [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]',
@@ -2300,6 +2294,8 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'enotif_lastdiff' => 'एतत्परिवर्तनं दृष्टुं $1 पश्यतु ।',
 'enotif_anon_editor' => 'अनामकः योजकः $1',
 'enotif_body' => 'आत्मीय $ अवलोकनबन्धो',
+'created' => 'सृष्टम् ।',
+'changed' => 'परिवर्तितम् ।',
 
 # Delete
 'deletepage' => 'पृष्ठं निराकरोतु।',
@@ -3851,6 +3847,10 @@ $1 इत्यनेन $3 इति पृष्ठम् $4 इत्ये
 'logentry-newusers-create2' => '$1,  $3 इति योजकलेखाम् असृजत्',
 'logentry-newusers-autocreate' => '$1 लेखा स्वयमेव सृष्टं जातम्',
 'newuserlog-byemail' => 'कूटशब्दः ईपत्रद्वारा प्रेषितः',
+'logentry-rights-rights' => '$1 इत्ययं $3 इत्यस्य समूहसदस्यतां $4 इत्यतः परिवर्त्य $5 इत्यकरोत्',
+'logentry-rights-rights-legacy' => '$1, $3 इत्यस्मै समूहसदस्यतां पर्यवर्तयत्',
+'logentry-rights-autopromote' => '$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः',
+'rightsnone' => '(कतम)',
 
 # Feedback
 'feedback-bugornote' => 'यदि भवान् कस्याश्चित् तान्त्रिकसमस्यायाः विषये विशदीकर्तुम् इच्छति तर्हि [$1 मत्कुणसञ्चिकां करोतु ।]
index adb1d88..eff6726 100644 (file)
@@ -1341,12 +1341,13 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'right-sendemail' => 'Атын кыттааччыларга эл. почтаны ыытарга',
 'right-passwordreset' => 'Киирии тылы почта нөҥүө уларытыыны көрүү',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Кыттааччылары бэлиэтиир сурунаал',
+'newuserlogpagetext' => 'Соторутааҕыта бэлиэтэммит кыттааччылар.',
+
 # User rights log
 'rightslog' => 'Кыттаачы бырааптарын сурунаала',
 'rightslogtext' => 'Бу кыттааччы бырааптарын уларыйыытын көрдөрөр сурунаал.',
-'rightslogentry' => '$1 кыттаачы киирэр бырааба $2-тан $3 уларыйда',
-'rightslogentry-autopromote' => 'мантан $2 аптамаатынан манна $3 көспүт',
-'rightsnone' => '(суох)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бу сирэйи ааҕыы',
@@ -1990,10 +1991,6 @@ $1',
 'activeusers-hidesysops' => 'Дьаһабыллары көрдөрүмэ',
 'activeusers-noresult' => 'Кыттааччылар көстүбэтилэр.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Кыттааччылары бэлиэтиир сурунаал',
-'newuserlogpagetext' => 'Соторутааҕыта бэлиэтэммит кыттааччылар.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кыттааччылар бөлөхтөрүн бырааптара',
 'listgrouprights-summary' => 'Манна бу биикигэ баар бөлөхтөр уонна кинилэр киирэр бырааптара көстөллөр.
@@ -2118,6 +2115,8 @@ $UNWATCHURL
 
 Көмөлөһүннэрэр уонна быһаартарар сир:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'айыллыбыт',
+'changed' => 'уларыппыт (уларытыллыбыт)',
 
 # Delete
 'deletepage' => 'Сирэйи сот',
@@ -3679,6 +3678,7 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'logentry-newusers-create2' => '$3 кыттааччыны $1 бэлиэтээбит',
 'logentry-newusers-autocreate' => 'Маннык аат $1 аптамаатынан бэлиэтэнилиннэ',
 'newuserlog-byemail' => 'киирии тыл эл. почтаннан ыытылынна',
+'rightsnone' => '(суох)',
 
 # Feedback
 'feedback-bugornote' => 'Туох кыһалҕаны көрсүбүккүн сиһилии суруйар кыахтаах буоллаххына, бука диэн [$1 алҕас туһунан биллэр].
index 28c1513..11346a6 100644 (file)
@@ -795,6 +795,9 @@ Amaḱ e-mail ṭhikạna do bań cabaḱa tinre onko do ko beohara',
 'right-upload' => 'Rẽtko rakabmẽ',
 'right-delete' => 'Sakamko get giḍiymẽ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Laṛcaṛićaḱ tear cạbi',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'noa sakam joṛao',
 
@@ -934,9 +937,6 @@ Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
 'listusers-submit' => 'Udugmẽ',
 'listusers-blocked' => '(Esetgea)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Laṛcaṛićaḱ tear cạbi',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Gaõta',
 'listgrouprights-rights' => 'Ạidạriko',
@@ -969,6 +969,8 @@ Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Ńeloḱ kana...',
 
+'changed' => 'Bodolena',
+
 # Delete
 'deletepage' => 'Sakam get giḍikam',
 'delete-legend' => 'Get giḍi',
index 2cf1643..94897ca 100644 (file)
@@ -772,9 +772,11 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg
 'right-undelete' => 'Restaurare una pàgina',
 'right-siteadmin' => 'Bloccare e sbloccare su database',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Usuàrios nous',
+
 # User rights log
 'rightslog' => 'Deretos de is usuàrios',
-'rightsnone' => '(nisciunu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lègher custa pàgina',
@@ -1010,9 +1012,6 @@ Dia podent essere immàgines impreadas dae àteros giassos cun unu ligàmine dir
 'activeusers-hidebots' => 'Cua bots',
 'activeusers-hidesysops' => 'Cua amministradores',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Usuàrios nous',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupu',
 'listgrouprights-members' => '(lista de is cumponentes)',
@@ -1063,6 +1062,7 @@ Is mudàntzias de custa pàgina e de sa pàgina de cuntierras sua ant a bennere
 'unwatching' => 'Boghende dae sa watchlist...',
 
 'enotif_impersonal_salutation' => 'Usuàriu de {{SITENAME}}',
+'created' => 'creada',
 
 # Delete
 'deletepage' => 'Fùlia pàgina',
@@ -1550,6 +1550,7 @@ Is acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetzione
 
 # New logging system
 'newuserlog-byemail' => 'password imbiada via e-mail',
+'rightsnone' => '(nisciunu)',
 
 # Search suggestions
 'searchsuggest-search' => 'Chirca',
index 08838c1..447c5dd 100644 (file)
@@ -1231,11 +1231,13 @@ L'operazioni nun pò èssiri annullata.",
 'right-siteadmin' => 'Blocca a sblocca lu databasi',
 'right-override-export-depth' => 'Esporta pàggini cumpresi li pàggini culligati finu ô quintu liveddu',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Novi utenti',
+'newuserlogpagetext' => 'Di sècutu vènunu elincati li criazzioni di cunti novi (account).',
+
 # User rights log
 'rightslog' => "Dritti di l'utenti",
 'rightslogtext' => "Chistu è un log dî canciamenti a li dritti di l'utenti.",
-'rightslogentry' => "hà canciatu l'appartinenza di $1 dû gruppu $2 a lu gruppu $3",
-'rightsnone' => '(nuddu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lèggiri sta pàggina',
@@ -1715,10 +1717,6 @@ Protucolli suppurtati: <code>$1</code>',
 'activeusers-hidesysops' => 'Amministratura ammucciati',
 'activeusers-noresult' => 'Nussun utenti truvatu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Novi utenti',
-'newuserlogpagetext' => 'Di sècutu vènunu elincati li criazzioni di cunti novi (account).',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diritti dô gruppu utenti',
 'listgrouprights-summary' => "Ccà sutta sunnu elincati li gruppi utenti difiniti pi sta wiki, cu li dritti d'accessu assuciati a iddi. Pi sapìrinni chiossai supra li dritti, lèggiti [[{{MediaWiki:Listgrouprights-helppage}}|sta pàggina]].",
@@ -1820,6 +1818,8 @@ Pi mudificari li mpustazzioni dâ lista di l\'ussirvati spiciali, vìsita
 
 Pi dari lu tò feedback e arricèviri ultiriuri assistenza:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criatu',
+'changed' => 'canciatu',
 
 # Delete
 'deletepage' => 'Elìmina la pàggina',
@@ -2977,6 +2977,7 @@ Mèttiri lu nomu dû file senza lu prifissu "{{ns:file}}:"',
 'logentry-move-move' => '$1 spustau la pàggina $3 a $4',
 'logentry-newusers-create' => '$1 criau na utenza',
 'newuserlog-byemail' => 'password mannata via mail',
+'rightsnone' => '(nuddu)',
 
 # Search suggestions
 'searchsuggest-search' => 'Ricerca',
index 26a6c38..7630872 100644 (file)
@@ -807,6 +807,9 @@ Yer e-mail address insae revealed whin ither uisers contact ye.",
 # Rights
 'right-delete' => 'Delete pages',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uiser creation log',
+
 # User rights log
 'rightslog' => 'Uiser richts log',
 'rightslogtext' => 'This is a log o chynges tae uiser richts.',
@@ -1053,9 +1056,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Shaw',
 'listusers-blocked' => '(blockit)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uiser creation log',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(leet o members)',
 
@@ -1094,6 +1094,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_reset' => 'Merk aa pages visitit',
 'enotif_lastvisited' => 'Hae a leuk at $1 for aa chynges sin yer last visit.',
+'created' => 'creatit',
+'changed' => 'chynged',
 
 # Delete
 'deletepage' => 'Delete page',
index 7b37ec7..880e9b5 100644 (file)
@@ -713,6 +713,9 @@ $1 {{PLURAL:$1|اکر|اکرن}} کان ننڍي هوڻ گھرجي.',
 'watching' => 'ٽيٽيندي...',
 'unwatching' => 'اڻ ٽيٽيندي...',
 
+'created' => 'ٺهي چڪو',
+'changed' => 'تبديل ٿي ويو',
+
 # Delete
 'deletepage' => 'صفحو ڊاهيو',
 'confirm' => 'پڪ ڪريو',
index 3c57592..0c16f3c 100644 (file)
@@ -906,11 +906,12 @@ Cunsulthà lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rigi
 'grouppage-sysop' => '{{ns:project}}:Amministhradori',
 'grouppage-bureaucrat' => '{{ns:project}}:Buròcrati',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nobi utenti',
+
 # User rights log
 'rightslog' => 'Diritti di li utenti',
 'rightslogtext' => "Chisthu è lu rigisthru di lu mudìfigghi a li diritti assignaddi a l'utenti.",
-'rightslogentry' => "à mudìfiggaddu l'apparthinènzia di $1 da lu gruppu $2 a lu gruppu $3",
-'rightsnone' => '(nisciunu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'mudìfiggà chistha pàgina',
@@ -1241,9 +1242,6 @@ Also see [[Special:WantedCategories|wanted categories]].",
 'listusers-submit' => 'Musthra',
 'listusers-noresult' => 'Nisciun utenti curripundi a li critéri impusthaddi.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nobi utenti',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(erencu di li membri)',
 
@@ -1330,6 +1328,8 @@ Pa mudìfiggà l\'impusthazioni di la listha di l\'abbaidaddi ippiziari, visita
 
 Pa dì cosa ni pensi e dumandà assisthènzia:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criadda',
+'changed' => 'ciambadda',
 
 # Delete
 'deletepage' => 'Canzella pàgina',
@@ -2039,4 +2039,7 @@ Pa piazeri, cunfèimma chi vòi ricrià avveru chistha pàgina.",
 'htmlform-reset' => 'Annulla mudifigghi',
 'htmlform-selectorother-other' => 'Althru',
 
+# New logging system
+'rightsnone' => '(nisciunu)',
+
 );
index e485747..31bd8ea 100644 (file)
@@ -708,8 +708,6 @@ $1 {{int:pipe-separator}} $2',
 # User rights log
 'rightslog' => 'Logga geavaheaddjirievttiin',
 'rightslogtext' => 'Vuolábealde lea logga geavaheaddjirivttiid rievdadusain.',
-'rightslogentry' => 'Geavaheaddji $1 rievttit rievdaduvvoi joavkkuin $2 joavkkuide $3',
-'rightsnone' => '(eai rievttit)',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|rievdadus|rievdadusa}}',
@@ -1044,6 +1042,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'enotif_lastvisited' => 'Čujuhusas $1 leat buot rievdadusat du maŋimus geavahangearddi maŋŋá.',
 'enotif_lastdiff' => 'Rievdadus lea čujuhusas $1.',
 'enotif_anon_editor' => 'registereretkeahtes geavaheaddji $1',
+'created' => 'álggahan siiddu',
+'changed' => 'rievdadan siiddu',
 
 # Delete
 'deletepage' => 'Sihko siiddu',
@@ -1465,6 +1465,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'logentry-move-move_redir-noredirect' => '$1 sirddii siiddu $3 nammii $4 iige ráhkadan ođđasitstivrema',
 'logentry-newusers-create' => '$1 ráhkadii dovddaldaga',
 'logentry-newusers-autocreate' => 'Dovddaldat $1 ráhkaduvvui automáhtalaččat',
+'rightsnone' => '(eai rievttit)',
 
 # Search suggestions
 'searchsuggest-search' => 'Oza',
index b7b2c4f..7c4d997 100644 (file)
@@ -658,9 +658,6 @@ Informacion: (curt) = quiíxde vercion currentua,
 'grouppage-sysop' => '{{ns:project}}:Sysopam',
 'grouppage-bureaucrat' => '{{ns:project}}:Bureaucrátam',
 
-# User rights log
-'rightsnone' => '(zéro)',
-
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|quiix|quíix}}',
 'recentchanges' => 'Camjöx cmaa',
@@ -887,6 +884,8 @@ iitom e-iitomde diijömde caitóm.',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} caitom',
 'enotif_anon_editor' => 'caitom anoniimom $1',
+'created' => 'creacöx',
+'changed' => 'quiixöx',
 
 # Delete
 'deletepage' => 'Delatar páhina',
@@ -1057,4 +1056,7 @@ iitom e-iitomde diijömde caitóm.',
 # Special:SpecialPages
 'specialpages' => 'Páhinám extravám',
 
+# New logging system
+'rightsnone' => '(zéro)',
+
 );
index 32bbca1..e49f5b3 100644 (file)
@@ -876,11 +876,12 @@ Ana gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuol
 'right-read' => 'Skaitītė poslapius',
 'right-edit' => 'Keistė poslapius',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nauduotuojė kūrėma regėstros',
+
 # User rights log
 'rightslog' => 'Nauduotuoju teisiu istuorėjė',
 'rightslogtext' => 'Pateikiams nauduotuoju teisiu pakeitėmu sārašos.',
-'rightslogentry' => 'pakeista $1 gropės narīstė ėš $2 i $3. Sveikėnam!',
-'rightsnone' => '(juokiū)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'redagoutė ta poslapi',
@@ -1225,9 +1226,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Ruodītė',
 'listusers-noresult' => 'Nerast anėjuokiū nauduotuoju.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nauduotuojė kūrėma regėstros',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nauduotuoju gropiu teisės',
 'listgrouprights-group' => 'Gropė',
@@ -1287,6 +1285,8 @@ Jēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"neb
 
 'enotif_reset' => 'Pažīmietė vėsus poslapius kāp aplonkītus',
 'enotif_anon_editor' => 'anuonėminis nauduotuos $1',
+'created' => 'sokūrė',
+'changed' => 'pakeitė',
 
 # Delete
 'deletepage' => 'Trintė poslapi',
@@ -1963,5 +1963,6 @@ Tamsta tēpuogi galėt [[Special:EditWatchlist/raw|redagoutė grīnaji keravuoja
 'logentry-newusers-create2' => '$1 padėrba nauduotuojė paskīra $3',
 'logentry-newusers-autocreate' => 'Paskīra $1 bova padėrbta autuomatėškā',
 'newuserlog-byemail' => 'slaptažuodis ėšsiōsts par el. pašta',
+'rightsnone' => '(juokiū)',
 
 );
index 41de27f..4629ec4 100644 (file)
@@ -1523,15 +1523,13 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'right-sendemail' => 'Slanje e-maila drugim korisnicima',
 'right-passwordreset' => 'Pregled e-maila za obnavljanje lozinke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registar novih korisnika',
+'newuserlogpagetext' => 'Ovo je evidencija registracije novih korisnika.',
+
 # User rights log
 'rightslog' => 'Registar korisničkih prava',
 'rightslogtext' => 'Ovo je evidencija izmjene korisničkih prava.',
-'rightslogentry' => 'promjena članstva u grupi za $1 sa $2 na $3',
-'rightslogentry-autopromote' => 'je automatski unaprijeđen iz $2 u $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
-'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unaprijeđen|unaprijeđena|unaprijeđen}} iz $4 u $5',
-'rightsnone' => '(nema)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -2175,10 +2173,6 @@ Podržani protokoli: <tt>$1</tt> (zadaje http:// ako ne navedete protokol).',
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Nije pronađen korisnik.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registar novih korisnika',
-'newuserlogpagetext' => 'Ovo je evidencija registracije novih korisnika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Slijedi spisak korisničkih grupa na ovoj wiki, s njihovim pravima pristupa.
@@ -2314,6 +2308,8 @@ $UNWATCHURL
 
 Povratne informacije i daljnja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'promijenjena',
 
 # Delete
 'deletepage' => 'Izbrišite stranicu',
@@ -3890,6 +3886,10 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'logentry-newusers-create2' => 'Korisnički račun $3 {{GENDER:|je napravio|je napravila|je napravio}} $1',
 'logentry-newusers-autocreate' => 'Račun $1 je samostalno otvoren',
 'newuserlog-byemail' => 'lozinka je poslana putem e-maila',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unaprijeđen|unaprijeđena|unaprijeđen}} iz $4 u $5',
+'rightsnone' => '(nema)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].
index bc0e71e..696c4fb 100644 (file)
@@ -740,9 +740,11 @@ Izdar ad urtili ɣ isbidn n mayllan ɣ {{SITENAME}} .',
 
 'grouppage-sysop' => '{{ns:project}}: Inedbalen',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Aɣmis n willi mmurzmn imiḍan amsqdac',
+
 # User rights log
 'rightslog' => 'Anɣmas n imbddlnn izrfan n umsqdac',
-'rightsnone' => '(ḥtta yan)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Ssɣr tasna yad',
@@ -906,9 +908,6 @@ Mel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.',
 'linksearch' => 'Izdayn n brra',
 'linksearch-line' => '$1 tmmuttid z $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Aɣmis n willi mmurzmn imiḍan amsqdac',
-
 # Special:ListGroupRights
 'listgrouprights-members' => 'Umuɣ n  midn',
 
@@ -1353,5 +1352,6 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn.
 # New logging system
 'revdelete-restricted' => 'iskr aqn i indbaln',
 'revdelete-unrestricted' => 'Aqn iḥiyd i indbaln',
+'rightsnone' => '(ḥtta yan)',
 
 );
index 0b0a50e..a7909c3 100644 (file)
@@ -1481,12 +1481,13 @@ HTML ටැගයන් පිරික්සන්න.',
 'right-sendemail' => 'අනෙක් පරිශීලකයන්ට ඊ-ලිපි යවන්න',
 'right-passwordreset' => 'මුරපද යලි සැකසීම් විද්‍යුත් තැපෑලයන් නරඹන්න',
 
+# Special:Log/newusers
+'newuserlogpage' => 'පරිශීලකයන් තැනීමේ සටහන',
+'newuserlogpagetext' => 'මෙය පරිශිලකයන් තැනීම පිළිබඳ සටහනකි.',
+
 # User rights log
 'rightslog' => 'පරිශීලක හිමිකම් සටහන',
 'rightslogtext' => 'මෙය පරිශීලකයන්ගේ හිමිකම් වෙනස්වීම් පිළිබඳ ලඝු-සටහනකි.',
-'rightslogentry' => '$1 සඳහා කණ්ඩායම් සාමාජිකත්වය $2 සිට $3 දක්වා වෙනස්කෙරිණි',
-'rightslogentry-autopromote' => 'ස්වයංක්‍රීය ලෙසින් $2 සිට $3 දක්වා උසස් කරන ලදි',
-'rightsnone' => '(කිසිවක් නොමැත)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'මෙම පිටුව කියවන්න',
@@ -2118,10 +2119,6 @@ When filtered by user, only files where that user uploaded the most recent versi
 'activeusers-hidesysops' => 'පරිපාලකයින් සඟවන්න',
 'activeusers-noresult' => 'කිසිදු පරිශීලකයෙකු හමුනොවිණි.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'පරිශීලකයන් තැනීමේ සටහන',
-'newuserlogpagetext' => 'මෙය පරිශිලකයන් තැනීම පිළිබඳ සටහනකි.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'පරිශීලක කාණ්ඩ හිමිකම්',
 'listgrouprights-summary' => 'මෙම විකියේ අර්ථදක්වා ඇති පරිශීලක කාණ්ඩ ලැයිස්තුවක් ඔවුනට අදාළ ප්‍රවේශ හිමිකම්ද සමගින් මෙහි පහත ලැයිස්තුගත කොට ඇත.
@@ -2248,6 +2245,8 @@ $UNWATCHURL
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'තනන ලදි',
+'changed' => 'වෙනස්කරන ලදි',
 
 # Delete
 'deletepage' => 'පිටුව මකා දමන්න',
@@ -2335,9 +2334,9 @@ $2 ගේ අවසන් අනුවාදය වෙතට යළි වෙන
 'protect-cascadeon' => 'තීරු දර්ශන ආරක්ෂණය (cascading protection) බල ගන්වා ඇති පහත  {{PLURAL:$1|පිටුව|පිටු}} අන්තර්ගත වීම හේතුවෙන් මෙම පිටුව දැනට ආරක්ෂණයට ලක්ව ඇත.
 පිටුවෙහි ආරක්ෂණ මට්ටම ඔබ විසින් වෙනස් කල හැකි නමුදු, එම ක්‍රියාව තීරු දර්ශන ආරක්ෂණය කෙරෙහි බලපෑම් ඇති නොකරනු ඇත.',
 'protect-default' => 'සියළු පරිශිලකයන්ට ඉඩ සලසන්න',
-'protect-fallback' => '"$1" à¶\85à·\80à·\83රය à\85à·\80à·\81à·\8aâ\80\8dය à·\80à·\9a',
-'protect-level-autoconfirmed' => 'නà·\80 à·\83à·\84 à¶½à·\92යà·\8fපදà·\92à¶\82චà·\92 à·\80à·\93 à¶±à·\9cමà·\90තà·\92 à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8a à·\80à·\8fරණය à¶\9aරන්න',
-'protect-level-sysop' => 'පරà·\92පà·\8fලà¶\9aà·\80රà·\94නà·\8aට à¶´à¶¸à¶«à¶ºà·\92',
+'protect-fallback' => '"$1" à¶\85à·\80à·\83රය à·\83à·\84à·\92ත à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8aට à¶´à¶¸à¶«à¶\9aà·\8a à¶\89ඩදà·\99නà·\8aන',
+'protect-level-autoconfirmed' => 'à·\83à·\8aà·\80යà¶\82තà·\84à·\80à·\94රà·\94 à¶\9aල à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8aට à¶´à¶¸à¶«à¶\9aà·\8a à¶\89ඩදà·\99න්න',
+'protect-level-sysop' => 'පරà·\92පà·\8fලà¶\9aà·\80රà·\94නà·\8aට à¶´à¶¸à¶«à¶\9aà·\8a à¶\89ඩදà·\99නà·\8aන',
 'protect-summary-cascade' => 'තීරු දර්ශනය (cascading)',
 'protect-expiring' => 'ඉකුත් වේ  $1 (යූටීසි)',
 'protect-expiring-local' => 'කල් ඉකුත්වීම $1',
@@ -3946,6 +3945,7 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 'logentry-newusers-create2' => '$1 විසින් $3 පරිශීලක ගිණුම තනන ලදී',
 'logentry-newusers-autocreate' => '$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය',
 'newuserlog-byemail' => 'විද්‍යුත්-තැපෑලෙන් මුර-පදය යවන ලදි',
+'rightsnone' => '(කිසිවක් නොමැත)',
 
 # Feedback
 'feedback-subject' => 'විෂයය:',
diff --git a/languages/messages/MessagesSimple.php b/languages/messages/MessagesSimple.php
deleted file mode 100644 (file)
index 6d331d8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/** Simple English (Simple English)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- */
-
-$fallback = 'en';
index 0b17198..c07e914 100644 (file)
@@ -1575,15 +1575,13 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'right-sendemail' => 'Posielať e-mail ostatným používateľom',
 'right-passwordreset' => 'Prezeranie e-mailov pre znovunastavovanie hesla',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Záznam vytvorených používateľov',
+'newuserlogpagetext' => 'Toto je záznam naposledy vytvorených používateľských účtov.',
+
 # User rights log
 'rightslog' => 'Záznam používateľských práv',
 'rightslogtext' => 'Toto je záznam zmien práv používateľa.',
-'rightslogentry' => 'členstvo v skupine zmenené pre $1 z $2 na $3',
-'rightslogentry-autopromote' => 'bol automaticky povýšený z $2 na $3',
-'logentry-rights-rights' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách',
-'logentry-rights-autopromote' => '$1 {{GENDER:$2|bol automaticky povýšený|bola automaticky povýšená}} z $4 na $5',
-'rightsnone' => '(žiadne)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čítať túto stránku',
@@ -2225,10 +2223,6 @@ Podporované protokoly: <code>$1</code> (ak protokol nie je uvedený, použije s
 'activeusers-hidesysops' => 'Skryť správcov',
 'activeusers-noresult' => 'Neboli nájdení žiadni používatelia.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Záznam vytvorených používateľov',
-'newuserlogpagetext' => 'Toto je záznam naposledy vytvorených používateľských účtov.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Práva skupiny používateľov',
 'listgrouprights-summary' => 'Toto je zoznam skupín používateľov definovaných na tejto wiki a ich prístupových práv.
@@ -2351,6 +2345,8 @@ $UNWATCHURL
 
 Návrhy a ďalšia pomoc:
 {{canonicalurl:{{int:Helppage}}}}',
+'created' => 'vytvorení',
+'changed' => 'zmene',
 
 # Delete
 'deletepage' => 'Zmazať stránku',
@@ -3964,6 +3960,10 @@ Obrázky sa zobrazia v plnom rozlíšení, ostatné typy súborov sa spustia v p
 'logentry-newusers-create2' => '$1 vytvoril používateľský účet $3',
 'logentry-newusers-autocreate' => 'Automaticky bol založený účet $1',
 'newuserlog-byemail' => 'heslo poslané emailom',
+'logentry-rights-rights' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|bol automaticky povýšený|bola automaticky povýšená}} z $4 na $5',
+'rightsnone' => '(žiadne)',
 
 # Feedback
 'feedback-bugornote' => 'Ak ste pripravený podrobne popísať technický problém, prosím pošlite [$1 hlásenie o chybe]. 
index 5316679..7486c60 100644 (file)
@@ -318,6 +318,7 @@ $messages = array(
 'newwindow' => '(odpre se novo okno)',
 'cancel' => 'Prekliči',
 'moredotdotdot' => 'Več ...',
+'morenotlisted' => 'Več ni navedenih ...',
 'mypage' => 'Stran',
 'mytalk' => 'Pogovor',
 'anontalk' => 'Pogovorna stran IP',
@@ -703,6 +704,7 @@ Prosimo počakajte, preden poskusite znova.',
 # E-mail sending
 'php-mail-error-unknown' => 'Neznana napaka v funkciji PHP mail()',
 'user-mail-no-addy' => 'Poskušal poslati e-pošto brez e-poštnega naslova',
+'user-mail-no-body' => 'Poskušali ste poslati e-pošto s prazno ali nerazumno kratko vsebino.',
 
 # Change password dialog
 'resetpass' => 'Spremeni geslo',
@@ -1502,15 +1504,13 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'right-sendemail' => 'Pošiljanje e-pošte drugim uporabnikom',
 'right-passwordreset' => 'Ogled e-pošt ponastavitve gesel',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Dnevnik registracij uporabnikov',
+'newuserlogpagetext' => 'Prikazan je dnevnik nedavnih registracij novih uporabnikov.',
+
 # User rights log
 'rightslog' => 'Dnevnik uporabniških pravic',
 'rightslogtext' => 'Prikazan je dnevnik sprememb uporabniških pravic.',
-'rightslogentry' => 'je spremenil(-a) pravice uporabnika $1 iz $2 v $3',
-'rightslogentry-autopromote' => 'je bil(-a) samodejno povišan(-a) z $2 na $3',
-'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',
-'rightsnone' => '(nobeno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'branje te strani',
@@ -2169,10 +2169,6 @@ Zahtevana je vsaj najvišja domena, na primer »*.org«.<br />
 'activeusers-hidesysops' => 'Skrij administratorje',
 'activeusers-noresult' => 'Noben uporabnik ni bil najden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Dnevnik registracij uporabnikov',
-'newuserlogpagetext' => 'Prikazan je dnevnik nedavnih registracij novih uporabnikov.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pravice uporabniških skupin',
 'listgrouprights-summary' => 'Tu je na razpolago seznam uporabniških skupin na tem wikiju z navedbo dodeljenih pravic dostopa.
@@ -2307,6 +2303,8 @@ $UNWATCHURL
 
 Povratna sporočila in pomoč:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ustvaril',
+'changed' => 'spremenil',
 
 # Delete
 'deletepage' => 'Briši stran',
@@ -2377,6 +2375,8 @@ Oglejte si [[Special:ProtectedPages|seznam zaščitenih strani]] za seznam trenu
 'prot_1movedto2' => 'je prestavil(-a) [[$1]] na [[$2]]',
 'protect-badnamespace-title' => 'Nezaščitljiv imenski prostor',
 'protect-badnamespace-text' => 'Strani v tem imenskem prostoru ni mogoče zaščititi.',
+'protect-norestrictiontypes-text' => 'Strani ni mogoče zaščititi, saj zanjo ni na voljo nobena vrsta omejitve.',
+'protect-norestrictiontypes-title' => 'Stran, ki je ni mogoče zaščititi',
 'protect-legend' => 'Potrdite zaščito',
 'protectcomment' => 'Razlog:',
 'protectexpiry' => 'Poteče:',
@@ -2393,9 +2393,9 @@ Trenutne nastavitve za stran '''$1''' so:",
 'protect-cascadeon' => 'Ta stran je trenutno uaščitena, ker je vključena v {{PLURAL:$1|naslednjo stran, ki ima|naslednji strani, ki imata|naslednje strani, ki imajo|naslednjih strani, ki imajo}} vključeno kaskadno zaščito.
 Stopnjo zaščite te strani lahko spremenite, vendar to ne bo vplivalo na kaskadno zaščito.',
 'protect-default' => 'Dovoli vsem uporabnikom',
-'protect-fallback' => 'Potrebujete pravice »$1«',
-'protect-level-autoconfirmed' => 'Blokiraj nove in neregistrirane uporabnike',
-'protect-level-sysop' => 'Samo administratorji',
+'protect-fallback' => 'Dovoli samo uporabnikom s pravico »$1«',
+'protect-level-autoconfirmed' => 'Dovoli samo samodejno potrjenim uporabnikom',
+'protect-level-sysop' => 'Dovoli samo administratorjem',
 'protect-summary-cascade' => 'kaskadno',
 'protect-expiring' => 'poteče $1 (UTC)',
 'protect-expiring-local' => 'poteče $1',
@@ -2702,7 +2702,7 @@ Samodejno lahko posodobite preusmeritve, ki kažejo na dosedanji naslov.
 Če se za to ne odločite, ne pozabite preveriti vseh [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].
 Odgovorni ste, da bodo povezave še naprej kazale na prava mesta.
 
-Kjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran prazna ali preusmeritvena in brez zgodovine urejanj.
+Kjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran preusmeritev in brez zgodovine urejanj.
 To pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.
 
 '''Opozorilo!'''
@@ -3037,6 +3037,7 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Čarobna beseda|Čarobni besedi|Čarobne besede}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrita kategorija|Skriti kategoriji|Skrite kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Vključena predloga|Vključeni predlogi|Vključene predloge}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Stran, vključena|Strani, vključeni|Strani, vključene}} na ($1)',
 'pageinfo-toolboxlink' => 'Podatki o strani',
 'pageinfo-redirectsto' => 'Preusmerja na',
 'pageinfo-redirectsto-info' => 'informacije',
@@ -3045,6 +3046,10 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'pageinfo-protect-cascading' => 'Zaščite se dedujejo od tukaj',
 'pageinfo-protect-cascading-yes' => 'Da',
 'pageinfo-protect-cascading-from' => 'Zaščite se dedujejo od',
+'pageinfo-category-info' => 'Informacije o kategoriji',
+'pageinfo-category-pages' => 'Število strani',
+'pageinfo-category-subcats' => 'Število podkategorij',
+'pageinfo-category-files' => 'Število datotek',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označite kot nadzorovano',
@@ -3127,6 +3132,8 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'minutes' => '$1 {{PLURAL:$1|minuta|minuti|minute|minut}}',
 'hours' => '$1 {{PLURAL:$1|ura|uri|ure|ur}}',
 'days' => '$1 {{PLURAL:$1|dan|dneva|dnevi|dni}}',
+'months' => '$1 {{PLURAL:$1|mesec|meseca|mesece|mesecev}}',
+'years' => '$1 {{PLURAL:$1|leto|leti|leta|let}}',
 'ago' => 'pred $1',
 'just-now' => 'pravkar',
 
@@ -3892,6 +3899,10 @@ Ta stran se sooča s tehničnimi težavami.',
 'logentry-newusers-create2' => '$1 je ustvaril(-a) uporabniški račun $3',
 'logentry-newusers-autocreate' => 'Račun $1 je bil samodejno ustvarjen',
 'newuserlog-byemail' => 'geslo je bilo poslano po e-pošti',
+'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',
+'rightsnone' => '(nobeno)',
 
 # Feedback
 'feedback-bugornote' => 'Če ste pripravljeni podrobno opisati tehnično težavo, vložite [$1 poročilo o hrošču].
@@ -3945,6 +3956,7 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'api-error-ok-but-empty' => 'Notranja napaka: strežnik se ne odziva.',
 'api-error-overwrite' => 'Prepisovanje obstoječe datoteke ni dovoljeno.',
 'api-error-stashfailed' => 'Notranja napaka: strežnik ni uspel shraniti začasne datoteke.',
+'api-error-publishfailed' => 'Notranja napaka: strežnik ni uspel objaviti začasne datoteke.',
 'api-error-timeout' => 'Strežnik se ni odzval v pričakovanem času.',
 'api-error-unclassified' => 'Prišlo je do neznane napake',
 'api-error-unknown-code' => 'Neznana napaka: »$1«',
index f82193b..274ddd3 100644 (file)
@@ -956,9 +956,12 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 'right-siteadmin' => 'Datenbank sperra und entsperra',
 'right-sendemail' => 'E-Mails oa andere Nutzer senda',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neuoameldungs-Logbuch',
+'newuserlogpagetext' => 'Dies ies a Logbuch fier neu erstellte Nutzerkonten.',
+
 # User rights log
 'rightslogtext' => 'Dies ies doas Logbuch dar Änderunga dar Nutzerrechte.',
-'rightslogentry' => 'änderte de Nutzerrechte fier „$1“ vu „$2“ uff „$3“',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'de Seite zu lasa',
@@ -1359,10 +1362,6 @@ Siehe au de Liste der [[Special:WantedCategories|gewinschta Kategorien]].',
 # Special:ActiveUsers
 'activeusers-noresult' => 'Kenne Benutzer gefunda.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neuoameldungs-Logbuch',
-'newuserlogpagetext' => 'Dies ies a Logbuch fier neu erstellte Nutzerkonten.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nutzergruppen-Rechte',
 'listgrouprights-summary' => 'Dies ies anne Liste dar ei diesem Wiki definierten Nutzergruppen und dar damit verbundenen Rechte.
@@ -1458,6 +1457,7 @@ Is waan sulange kenne wettera Benachrichtigungs-E-Mails gesendet, bis du de Seit
 Im de Einstellunga denner Beobachtungsliste oazupoaßa, besuche: {{canonicalurl:{{#special:EditWatchlist}}}}
 
 Rickmeldungen und wettere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'erzeugt',
 
 # Delete
 'deletepage' => 'Seite läscha',
index 7c89a0c..d69ce96 100644 (file)
@@ -367,7 +367,7 @@ fadlan waxyar kadib ku soo noqo.',
 'protectedpagetext' => 'Boggaan  waala difaacay si aan wax looga bedelin.',
 'viewsourcetext' => 'Waad fiirin kartaa waana koobi gareen kartaa xogta boggaan:',
 'editinginterface' => "'''Digniin:''' Waxaad guda gashay inaad badesho bogga lawada arkayo wajiga hore ee qoraalka softwareka.
-Waxa uu saamayn ku yeelan doonaa boggaan habka uu wax u arko adeegsadaha iyo dhanaab adeegsadayaasha ee wikgaan.
+Waxa uu saameeyn ku yeelan doonaa boggaan habka uu wax u arko adeegsadaha iyo dhamaan adeegsadayaasha ee wikgaan.
 Si aad wax ugu kordhiso ama aad uga dhinto turjumaadda mashaariicda wikiga , fadlan adeegso [//translatewiki.net/ translatewiki.net], mashruuca gaarka ah ee MediaWiki.",
 'cascadeprotected' => 'Boggaan waxaa laga difaacay in wax laga bedelo, sababtoo ah wuxuu ka midyahay  {{PLURAL:$1|bog, oo ah |bogyaalo ah, waana}}  kuwa laga difaacay "qoraalada kaskadka ah" dooqyada woo u furanyahay:
 $2',
@@ -729,7 +729,7 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 
 # Search results
 'searchresults' => 'Natiijada raadinta (Baaris)',
-'searchresults-title' => 'Raadi natiijoojika "$1"',
+'searchresults-title' => 'Raadinta natiijooyinka "$1"',
 'searchsubtitle' => 'Waxaad raadisay \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|dhamaan bogaaga ka bilaawdo "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|dhamaan bogagga la xiriiro "$1"]])',
 'searchsubtitleinvalid' => "Waxaa raadisay '''$1'''",
 'prevn' => 'Ka horeeya {{PLURAL:$1|$1}}',
@@ -756,13 +756,14 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'search-result-category-size' => '{{PLURAL:$1|1 ka mid ah|$1 ka mid ah}} ({{PLURAL:$2|1 qeybta hoose|$2 qeybaha hoose}}, {{PLURAL:$3|1 fayl|$3 fayl-yo}})',
 'search-redirect' => '(waxaa loo toosiyay $1)',
 'search-section' => '(maqaalka $1)',
-'search-suggest' => 'Waxaa ka waday miyaa: $1',
+'search-suggest' => 'Ma waxaad ulajeeday: $1',
 'search-interwiki-default' => '$1 natiijooyinka:',
 'search-interwiki-more' => '(wax kale)',
 'search-relatedarticle' => 'La xiriiro',
 'searchrelated' => 'La xiriiro',
 'searchall' => 'Dhamaan',
 'showingresults' => "Waxaa hoos laga heley{{PLURAL:$1|'''1''' natiijo|'''$1''' natiijooyin}} ka biloow #'''$2'''.",
+'showingresultsnum' => "Hoos waxaa laga helay {{PLURAL:$3|'''1''' Natiijo|'''$3''' Natiijooyin}} Ka billow #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Natiijada  '''$1''' ee '''$3'''|Natiijooyinka '''$1 - $2'''  oo ah  '''$3'''}} ee '''$4'''",
 'search-nonefound' => 'Wax natiijo oo ka soo baxay ma jirto wixii aad raadisay',
 'powersearch' => 'Sidii aad wax uugu raadin laheed',
@@ -852,8 +853,8 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 'right-browsearchive' => 'Raadi maqaalada la tirtiray',
 'right-undelete' => 'Ha tirtirin bog',
 
-# User rights log
-'rightsnone' => '(waxna)',
+# Special:Log/newusers
+'newuserlogpage' => 'Gudagalaha Isticmaale sameeyay',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'akhri boggaan',
@@ -1011,6 +1012,8 @@ Tafaasiishiisa waxee ku qorantahay [$2 bogga tafaasiisha faylka] oo ka arki kart
 'deadendpages' => 'Boggaga aanan la daba joogin',
 'deadendpagestext' => 'Boggagaan soo socota lama xiriiraan boggaga kale ee {{SITENAME}}.',
 'protectedpages' => "Boggag la'difaacay",
+'listusers-editsonly' => 'Itus adeegsede yaasha sameeyey bedalka oo kaliya',
+'listusers-creationsort' => 'Ka dhig si ah taariikhdii la sameeyey',
 'usercreated' => '{{GENDER:$3|Sameeyay}} marka ee eheed $1 saacada $2',
 'newpages' => 'Bogyaalo cusub',
 'newpages-username' => 'Magaca gudagalka:',
@@ -1057,9 +1060,6 @@ Tafaasiishiisa waxee ku qorantahay [$2 bogga tafaasiisha faylka] oo ka arki kart
 'listusers-noresult' => 'Lama helin isticmaale.',
 'listusers-blocked' => '(waa la mamnuucay)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Gudagalaha Isticmaale sameeyay',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Inta ka mid ah liiskooda)',
 
@@ -1107,6 +1107,40 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Daawasho...',
 
+'enotif_subject_created' => '{{SITENAME}} Bogga $1 Qof ayaa sameeyey {{gender:$2|$2}}',
+'enotif_body_intro_created' => 'Bogga {{SITENAME}} ga $1 waxaa la sameeyey $PAGEEDITDATE qof {{gender:$2|$2}}, eeg $3 sida laga dhigay hadda.',
+'enotif_body_intro_changed' => 'Bogga {{SITENAME}} ga $1 waxaa la badelay $PAGEEDITDATE qof {{gender:$2|$2}}, eeg $3 sida laga dhigay hadda.',
+'enotif_lastvisited' => 'Eeg $1 Dhamaan isbedeleda ilaa goortii kuugu dambaysay.',
+'enotif_lastdiff' => 'Eeg $1 si aad u aragto bedelkaan.',
+'enotif_anon_editor' => 'Aan la qoon $1',
+'enotif_body' => 'Mudane $WATCHINGUSERNAME,
+
+$PAGEINTRO $NEWPAGE
+
+Qaybta wax laga bedelay: $PAGESUMMARY $PAGEMINOREDIT
+
+La xariirka Tafaftiraha:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Lama soo diri doono ogeysiin dambe hadii isbedel kale lagu sii sameeyo ilaa aad ka soo booqato bogga.
+Waxaad awoodaa inaad ka saarto liiska waardiyeha booga.
+
+                        Nidaamka war gelinta {{SITENAME}} ee E-mailka
+
+--
+si aad ubedesho fariinta e-mail dooqyadiisa, Booqo
+{{canonicalurl:{{#special:Preferences}}}}
+
+Si aad ubedesho liiskaada waardiyaha, Booqo
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+si aad utirtirto liiskaada waardiyaha ee gaarka ah, Booqo
+$UNWATCHURL
+
+Faalada iyo helista caawinaad dheeraad ah:
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+
 # Delete
 'confirm' => 'Xaqiiji',
 'excontent' => "qoraalka wuxuu ahaa: '$1'",
@@ -1227,6 +1261,9 @@ eeg [[Special:ProtectedPages|Liiska bogagga dhowrsoon]] liiska bogagga howlaha d
 'autoblocker' => 'Waxaa automaatik u xirista keenay in mudo dhow uu cinwaanka IP:ga isticmaalay "[[User:$1|$1]]". Sababta keentay in loo xiro $1 waa: "\'\'\'$2\'\'\'"',
 'blocklogpage' => 'Mamnuucida guda galaheeda',
 'blocklogentry' => 'la mamnuucay  [[$1]] Waqtiga uu dhacaayo neh waa $2 $3',
+'blocklogtext' => 'Halkaan waa  liiska lagu muujiyo manuuca iyo mamnuuc ka qaadista.
+Ciwaanka IP ga ee la mamnuucay so iskeedka ee aan la soo ban dhigin.
+Eeg [[Special:BlockList|Mamnuucyada]] si aad u aragto liiska mamnuucyada ee hadda shaqaynaua.',
 'unblocklogentry' => 'lama mamnuucin $1',
 'block-log-flags-anononly' => "Isticmaalayaasha aanan la'aqoonsanin oo kaliya",
 'block-log-flags-nocreate' => 'sameynta gudagalah lamaogola',
@@ -1318,6 +1355,7 @@ Waxaa fiiri kartaa cadaadkiisa',
 'tooltip-diff' => 'Fiiri waxa aad ka badashay qoraalka',
 'tooltip-compareselectedversions' => 'Fiiri sida ee u kala duwanyihiin  bedelaadka labada aad ka dooratay boggaan',
 'tooltip-watch' => 'Boggaan ku dar liiskaaga waardiyaha',
+'tooltip-watchlistedit-raw-submit' => 'Liska waardiyeha dib u howlageli',
 'tooltip-rollback' => '"Dib u soo celi" wuxuu dib boggaan ugu soo celinaa qofkii ugu danbeeyay wixii oo ku darsaday hal riix kaliya',
 'tooltip-undo' => '"Ka noqo" wuxuu dib u noqaa badalkaan wuxuuna furaa badalkii ka horeey.Wuxuu kuu fasaxaa in aad ku dartid sababta.',
 'tooltip-preferences-save' => 'Kaydi isbedelada',
@@ -1329,6 +1367,10 @@ Waxaa fiiri kartaa cadaadkiisa',
 'lastmodifiedatby' => 'Bogaan waxaa ugu dambeyntii wax laga bedelay $2, $1 kana bedelay $3.',
 'othercontribs' => 'Waxay ku saleysantahay shaqada $1.',
 
+# Info page
+'pageinfo-title' => 'Macluumaad ku saabsan "$1"',
+'pageinfo-toolboxlink' => 'Macluumad ku saabsan',
+
 # Browsing diffs
 'previousdiff' => '← bedelkii ka duqsanaa',
 'nextdiff' => 'Bedelkii ugu cusbaa →',
@@ -1375,6 +1417,9 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 # E-mail address confirmation
 'confirmemail_noemail' => 'Kuma haysatid cinwaan E-boosto sax [[Special:Preferences|isticmaala dooqiisa]].',
 
+# action=watch/unwatch
+'confirm-unwatch-top' => 'Boggaan ka saar liiskaaga waardiyaha',
+
 # Multipage image navigation
 'imgmultigo' => 'Soco!',
 
@@ -1388,6 +1433,13 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 'autosumm-replace' => 'Wuxuu qoraalka ku badalay "$1"',
 'autosumm-new' => 'Bog cusub: $1',
 
+# Watchlist editor
+'watchlistedit-normal-legend' => 'Ka saar ciwaanada liiska waardiyaha',
+'watchlistedit-normal-explain' => 'Ciwaanada ee liiskaada waardiyaha hoos ayaa lagu soo ban dhigay.
+Si aad u tirtito Ciwaanka, Godka udhow calaameey, ee guji "{{int:Watchlistedit-normal-submit}}".
+waxaad awoodaa [[Special:EditWatchlist/raw|Liiska wax ka bedel]].',
+'watchlistedit-raw-legend' => 'Badal liiska waardiyeenta ceeriinka ah',
+
 # Watchlist editing tools
 'watchlisttools-view' => 'Itusi isbedelada jiro',
 'watchlisttools-edit' => 'Fiiri iyo wax ka badal liiska waardiyaha',
@@ -1411,6 +1463,9 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 # Special:BlankPage
 'blankpage' => 'Bog masaxan',
 
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Filtaraha]] tag:',
+
 # Database error messages
 'dberr-usegoogle' => 'Waxaa baroobeen kartaa in aad ka raadiso google',
 
@@ -1418,6 +1473,9 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 'htmlform-reset' => 'Ka noqo wax bedelka',
 'htmlform-selectorother-other' => 'kuwa kale',
 
+# New logging system
+'rightsnone' => '(waxna)',
+
 # Feedback
 'feedback-message' => 'Fariinta:',
 
index 565888a..7ddf3e2 100644 (file)
@@ -1488,12 +1488,13 @@ Kjo informatë është publike.',
 'right-sendemail' => 'Dërgo e-mail tek përdoruesit e tjerë',
 'right-passwordreset' => 'Shiko e-mail-et e rivendosjes së fjalëkalimit',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Regjistri i llogarive',
+'newuserlogpagetext' => 'Ky është një regjistër i llogarive të fundit që janë hapur',
+
 # User rights log
 'rightslog' => 'Regjistri i privilegjeve të përdoruesit',
 'rightslogtext' => 'Ky është një regjistër për ndryshimet e privilegjeve të përdoruesit.',
-'rightslogentry' => 'u ndryshua anëtarësimi i grupit për $1 nga $2 tek $3',
-'rightslogentry-autopromote' => 'automatikisht u rrit në datyrë nga $2 në $3',
-'rightsnone' => '(asgjë)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lexo këtë faqe',
@@ -2120,10 +2121,6 @@ Protokolle të mbështetura: <code>$1<code> (mos shtoni ndonjërin nga këta në
 'activeusers-hidesysops' => 'Fshih administratorët',
 'activeusers-noresult' => 'Asnjë përdorues nuk u gjet.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Regjistri i llogarive',
-'newuserlogpagetext' => 'Ky është një regjistër i llogarive të fundit që janë hapur',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Grupime përdoruesish me privilegje',
 'listgrouprights-summary' => 'Më poshtë jepet grupimi i përdoruesve sipas privilegjeve që ju janë dhënë në këtë wiki. Më shumë informacion rreth privilegjeve në veçanti mund të gjendet [[{{MediaWiki:Listgrouprights-helppage}}|këtu]].',
@@ -2272,6 +2269,8 @@ $UNWATCHURL
 
 Për të na dhënë përshtypjet tuaja ose për ndihmë të mëtejshme:
 {{canonicalurl:{{MediaWiki:Helpage}}}}',
+'created' => 'u krijua',
+'changed' => 'ndryshuar',
 
 # Delete
 'deletepage' => 'Grise faqen',
@@ -3779,6 +3778,7 @@ Kjo faqe është duke përjetuar vështirësi teknike.',
 'logentry-newusers-create2' => '$1 krijoi një llogari $3',
 'logentry-newusers-autocreate' => 'Llogaria $1 u krijua automatikisht',
 'newuserlog-byemail' => 'fjalëkalimi u dërgua në postën elektronike',
+'rightsnone' => '(asgjë)',
 
 # Feedback
 'feedback-bugornote' => 'Nëse jeni gati për të përshkruar një problem teknik me detaje ju lutemi [$1 raportoni një problem].
index 96acdea..cc8cbc7 100644 (file)
@@ -779,8 +779,8 @@ $1',
 'actionthrottled' => 'Радња је успорена',
 'actionthrottledtext' => 'У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.',
 'protectedpagetext' => 'Ова страница је закључана за измене и друге радње.',
-'viewsourcetext' => 'Можете да погледате и умножите изворни текст ове странице:',
-'viewyourtext' => "Можете да погледате и умножите извор '''ваших измена''' на овој страници:",
+'viewsourcetext' => 'Можете да погледате и копирате изворни текст ове странице:',
+'viewyourtext' => "Можете да погледате и копирате извор '''ваших измена''' на овој страници:",
 'protectedinterface' => 'Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.
 Да бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.',
 'editinginterface' => "'''Упозорење:''' уређујете страницу која се користи за приказивање текста корисничког окружења.
@@ -1145,10 +1145,10 @@ $2
 '''Не шаљите радове заштићене ауторским правима без дозволе!'''",
 'longpageerror' => "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''
 Страница не може бити сачувана.",
-'readonlywarning' => "'''Упозорење: база података је закључана ради одржавања, тако да нећете моћи да сачувате измене.
\9dаÑ\98боÑ\99е Ð±Ð¸ Ð±Ð¸Ð»Ð¾ Ð´Ð° Ñ\83множиÑ\82е Ñ\82екÑ\81Ñ\82 Ñ\83 Ñ\83Ñ\80еÑ\92иваÑ\87 Ñ\82екÑ\81Ñ\82а Ð¸ Ñ\81аÑ\87Ñ\83ваÑ\82е Ð³Ð° Ð·Ð° ÐºÐ°Ñ\81ниÑ\98е.'''
+'readonlywarning' => "'''Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.
\9dаÑ\98боÑ\99е Ð±Ð¸ Ð±Ð¸Ð»Ð¾ Ð´Ð° Ñ\81аÑ\87Ñ\83ваÑ\82е Ñ\82екÑ\81Ñ\82 Ð·Ð° ÐºÐ°Ñ\81ниÑ\98е Ñ\83 Ð½ÐµÐºÐ¾Ñ\98 Ñ\82екÑ\81Ñ\82Ñ\83алноÑ\98 Ð´Ð°Ñ\82оÑ\82еÑ\86и.'''
 
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 ÐºÐ¾Ñ\98и Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ао Ð±Ð°Ð·Ñ\83 Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\98е Ð½Ð°Ð²ÐµÐ¾ следеће објашњење: $1",
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 ÐºÐ¾Ñ\98и Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ао Ð±Ð°Ð·Ñ\83 Ð´Ð°Ð¾ Ñ\98е следеће објашњење: $1",
 'protectedpagewarning' => "'''Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.'''
 Последња ставка у историји је приказана испод:",
 'semiprotectedpagewarning' => "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.
@@ -1721,15 +1721,13 @@ $1",
 'right-sendemail' => 'слање е-порука другим корисницима',
 'right-passwordreset' => 'прегледање порука за обнављање лозинке',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дневник нових корисника',
+'newuserlogpagetext' => 'Ово је историја нових корисника.',
+
 # User rights log
 'rightslog' => 'Дневник корисничких права',
 'rightslogtext' => 'Ово је дневник измена корисничких права.',
-'rightslogentry' => '{{GENDER:|је променио|је променила|је променио}} права за члана $1 из $2 у $3',
-'rightslogentry-autopromote' => 'је унапређен из $2 у $3',
-'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',
-'rightsnone' => '(ништа)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'читање ове странице',
@@ -2131,7 +2129,7 @@ $1',
 Њен опис можете да измените на [$2 одговарајућој страници].',
 'filepage-nofile' => 'Не постоји датотека с овим називом.',
 'filepage-nofile-link' => 'Не постоји датотека с овим називом, али је можете [$1 послати].',
-'uploadnewversion-linktext' => 'Пошаљи ново издање ове датотеке',
+'uploadnewversion-linktext' => 'Пошаљи нову верзију ове датотеке',
 'shared-repo-from' => 'из $1',
 'shared-repo' => 'заједничко складиште',
 'shared-repo-name-wikimediacommons' => 'Викимедијина остава',
@@ -2396,10 +2394,6 @@ $1',
 'activeusers-hidesysops' => 'Сакриј администраторе',
 'activeusers-noresult' => 'Корисник није пронађен.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник нових корисника',
-'newuserlogpagetext' => 'Ово је историја нових корисника.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права корисничких група',
 'listgrouprights-summary' => 'Следи списак корисничких група на овом викију, заједно с правима приступа.
@@ -2543,6 +2537,8 @@ $UNWATCHURL
 
 Подршка и даља помоћ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'направљена',
+'changed' => 'измењена',
 
 # Delete
 'deletepage' => 'Обриши страницу',
@@ -3087,7 +3083,7 @@ $1',
 Датуми и имена уредника ће бити сачувани.
 Све радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].',
 'import-interwiki-source' => 'Извор викија/странице:',
-'import-interwiki-history' => 'Умножи Ñ\81ве измене ове странице',
+'import-interwiki-history' => 'Ð\9aопиÑ\80аÑ\98 Ñ\81ве Ñ\81Ñ\82аÑ\80иÑ\98е измене ове странице',
 'import-interwiki-templates' => 'Укључи све шаблоне',
 'import-interwiki-submit' => 'Увези',
 'import-interwiki-namespace' => 'Одредишни именски простор:',
@@ -4338,6 +4334,10 @@ $5
 'logentry-newusers-create2' => '$1 {{GENDER:|је отворио|је отворила|је отворио}} кориснички налог $3',
 'logentry-newusers-autocreate' => 'Налог $1 је самостално отворен',
 'newuserlog-byemail' => 'лозинка је послата е-поштом',
+'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',
+'rightsnone' => '(ништа)',
 
 # Feedback
 'feedback-bugornote' => 'Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].
index 745ff40..b96a139 100644 (file)
@@ -1626,15 +1626,13 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'right-sendemail' => 'slanje e-poruka drugim korisnicima',
 'right-passwordreset' => 'pregledanje poruka za obnavljanje lozinke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Dnevnik novih korisnika',
+'newuserlogpagetext' => 'Ovo je istorija novih korisnika.',
+
 # User rights log
 'rightslog' => 'Dnevnik korisničkih prava',
 'rightslogtext' => 'Ovo je dnevnik izmena korisničkih prava.',
-'rightslogentry' => '{{GENDER:|je promenio|je promenila|je promenio}} prava za člana $1 iz $2 u $3',
-'rightslogentry-autopromote' => 'je unapređen iz $2 u $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3 iz $4 u $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
-'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unapređen|unapređena|unapređen}} iz $4 u $5',
-'rightsnone' => '(ništa)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -2300,10 +2298,6 @@ Podržani protokoli: <code>$1</code> (zadaje http:// ako ne navedete protokol).'
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Korisnik nije pronađen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Dnevnik novih korisnika',
-'newuserlogpagetext' => 'Ovo je istorija novih korisnika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Sledi spisak korisničkih grupa na ovom vikiju, zajedno s pravima pristupa.
@@ -2437,6 +2431,8 @@ $UNWATCHURL
 
 Podrška i dalja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'izmenjena',
 
 # Delete
 'deletepage' => 'Obriši stranicu',
@@ -4232,6 +4228,10 @@ Slike su prikazane u punoj veličini, a druge vrste datoteka se pokreću pomoću
 'logentry-newusers-create2' => '$1 {{GENDER:|je otvorio|je otvorila|je otvorio}} korisnički nalog $3',
 'logentry-newusers-autocreate' => 'Nalog $1 je samostalno otvoren',
 'newuserlog-byemail' => 'lozinka je poslata e-poštom',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unapređen|unapređena|unapređen}} iz $4 u $5',
+'rightsnone' => '(ništa)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].
index 9bcadf5..0b23f31 100644 (file)
@@ -727,7 +727,6 @@ A kan ben trowe efu dribi.
 
 # User rights log
 'rightslog' => 'Log buku fu kebroikiman leti',
-'rightsnone' => '(no)',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|kenki|kenki}}',
@@ -1237,4 +1236,7 @@ Trawan o kibri.
 # Special:SpecialPages
 'specialpages' => 'Spesrutu papira',
 
+# New logging system
+'rightsnone' => '(no)',
+
 );
index e090adc..e420ab3 100644 (file)
@@ -1254,12 +1254,13 @@ Ju duur maximoal $1 {{PLURAL:$1|Teeken|Teekene}} loang weese.',
 'right-sendemail' => 'E-Mails an uur Benutsere seende',
 'right-passwordreset' => 'Paaswoud fon n Benutser touräächsätte ([[Special:PasswordReset|Spezioalsiede]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Näianmäldengs-Logbouk',
+'newuserlogpagetext' => 'Dit is dät Logbouk fon näi anmäldede Benutsere.',
+
 # User rights log
 'rightslog' => 'Gjuchte-Logbouk',
 'rightslogtext' => 'Dit is dät Logbouk fon do Annerengen fon do Benutsergjuchte.',
-'rightslogentry' => 'annerde ju Gruppentouheeregaid foar „$1“ fon „$2“ ap „$3“.',
-'rightslogentry-autopromote' => 'wuud automatisk fon „$2“ ätter „$3“ touoardend',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'disse Siede tou leesen',
@@ -1828,10 +1829,6 @@ Sjuch uk ju Lieste fon do [[Special:WantedCategories|wonskede Kategorien]].',
 'activeusers-hidesysops' => 'Administratore fersteete',
 'activeusers-noresult' => 'Neen Benutsere fuunen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Näianmäldengs-Logbouk',
-'newuserlogpagetext' => 'Dit is dät Logbouk fon näi anmäldede Benutsere.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutsergruppen-Gjuchte',
 'listgrouprights-summary' => 'Dit is ne Lieste fon do in dissen Wiki definierde Benutsergruppen un do deermäd ferbuundene Gjuchte.
@@ -1959,6 +1956,8 @@ Uum ju Siede fon dien Kontrollieste tou läskjen, besäik
 $UNWATCHURL
 
 Touräächmäldengen un wiedere Hälpe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'näi anlaid',
+'changed' => 'annerd',
 
 # Delete
 'deletepage' => 'Siede läskje',
@@ -3288,6 +3287,7 @@ Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''
 'revdelete-restricted' => 'Einskränkengen jäilde uk foar Administratore',
 'revdelete-unrestricted' => 'Ienskränkengen foar Administratore wächhoald',
 'newuserlog-byemail' => 'dät Paaswoud wuud uur E-Mail fersoand',
+'rightsnone' => '(-)',
 
 # Search suggestions
 'searchsuggest-search' => 'Säik',
index 7e076d4..e3a6f93 100644 (file)
@@ -1309,12 +1309,13 @@ Mun geus anggeus teu bisa dibolaykeun.',
 'right-siteadmin' => 'Ngonci jeung muka konci databés',
 'right-sendemail' => 'Kirim surélék ka pamaké séjén',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log akun anyar',
+'newuserlogpagetext' => 'Di handap ieu béréndélan log pamaké anyar.',
+
 # User rights log
 'rightslog' => 'Log hak pamaké',
 'rightslogtext' => 'Ieu mangrupa log parobahan hak-hak pamaké.',
-'rightslogentry' => 'ngarobah kaanggotaan grup pikeun $1 tina $2 jadi $3',
-'rightslogentry-autopromote' => 'geus sacara otomatis dipromosikeun ti $2 ka $3',
-'rightsnone' => '(euweuh)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'maca ieu kaca',
@@ -1815,10 +1816,6 @@ Baca ogé [[Special:WantedCategories|kategori nu dipikabutuh]].',
 'activeusers-hidesysops' => 'Sumputkeun kuncén',
 'activeusers-noresult' => 'Teu kapendak.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log akun anyar',
-'newuserlogpagetext' => 'Di handap ieu béréndélan log pamaké anyar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hak-hak grup pamaké',
 'listgrouprights-summary' => 'Ieu mangrupa daptar jumplukan pamaké anu aya di wiki ieu, kalawan daptar hak aksés maranéhanana.
@@ -1927,6 +1924,8 @@ Pikeun ngarobah setélan dabtar awaseun anjeun, sindang ka {{SERVER}}{{localurl:
 
 Asupan jeung bantuan salajengna:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'geus dijieun',
+'changed' => 'geus robah',
 
 # Delete
 'deletepage' => 'Hapus kaca',
@@ -3044,6 +3043,7 @@ Coba ku sawangan normal.',
 'revdelete-restricted' => 'akses geus dibatesan ukur keur kuncén',
 'revdelete-unrestricted' => 'Watesan akses kuncén dihapuskeun',
 'newuserlog-byemail' => 'Sandi geus dikirim maké surélék.',
+'rightsnone' => '(euweuh)',
 
 # Feedback
 'feedback-subject' => 'Ngeunaan:',
index d54faa8..1b89b61 100644 (file)
@@ -454,6 +454,7 @@ $messages = array(
 'newwindow' => '(öppnas i ett nytt fönster)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Mer...',
+'morenotlisted' => 'Mer som inte är listad...',
 'mypage' => 'Min sida',
 'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionssida för denna IP-adress',
@@ -824,6 +825,7 @@ Vänta innan du försöker igen.',
 # E-mail sending
 'php-mail-error-unknown' => "Okänt fel i PHP's mail()-funktion",
 'user-mail-no-addy' => 'Försökte skicka e-post utan en e-postadress',
+'user-mail-no-body' => 'Försökte skicka e-post med tomt eller orimligt kort innehåll.',
 
 # Change password dialog
 'resetpass' => 'Ändra lösenord',
@@ -1613,15 +1615,13 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'right-sendemail' => 'Skicka e-post till andra användare',
 'right-passwordreset' => 'Visa e-postmeddelanden med lösenordsåterställning',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logg över nya användare',
+'newuserlogpagetext' => 'Detta är en logg över skapade användarkonton.',
+
 # User rights log
 'rightslog' => 'Användarrättighetslogg',
 'rightslogtext' => 'Detta är en logg över ändringar av användares rättigheter.',
-'rightslogentry' => 'ändrade grupptillhörighet för $1 från $2 till $3',
-'rightslogentry-autopromote' => 'befordrades automatiskt från $2 till $3',
-'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',
-'rightsnone' => '(inga)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'läsa denna sida',
@@ -2267,10 +2267,6 @@ Det krävs åtminstone en toppdomän, t.ex. "*.org".<br />
 'activeusers-hidesysops' => 'Dölj administratörer',
 'activeusers-noresult' => 'Inga användare funna.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logg över nya användare',
-'newuserlogpagetext' => 'Detta är en logg över skapade användarkonton.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Behörigheter för användargrupper',
 'listgrouprights-summary' => 'Följande lista visar vilka användargrupper som är definierade på den här wikin och vilka behörigheter grupperna har.
@@ -2406,6 +2402,8 @@ $UNWATCHURL
 
 Feedback och ytterligare hjälp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'skapad',
+'changed' => 'ändrad',
 
 # Delete
 'deletepage' => 'Ta bort sida',
@@ -2472,6 +2470,8 @@ Se [[Special:ProtectedPages|listan över skyddade sidor]] för listan över akti
 'prot_1movedto2' => 'flyttade [[$1]] till [[$2]]',
 'protect-badnamespace-title' => 'Namnrymd som inte kan skrivskyddas',
 'protect-badnamespace-text' => 'Sidor i den här namnrymden kan inte skrivskyddas.',
+'protect-norestrictiontypes-text' => 'Denna sida kan inte skyddas eftersom det inte finns några begränsningstyper tillgängliga.',
+'protect-norestrictiontypes-title' => 'Oskyddbar sida',
 'protect-legend' => 'Bekräfta skrivskydd av sida',
 'protectcomment' => 'Anledning:',
 'protectexpiry' => 'Varaktighet:',
@@ -2488,7 +2488,7 @@ Nuvarande skrivskyddsinställning för sidan '''$1''' är:",
 'protect-cascadeon' => 'Den här sidan är skrivskyddad eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som har ett kaskaderande skydd.
 Du kan ändra skyddet av den här sidan, men det påverkar inte det kaskaderande skyddet.',
 'protect-default' => 'Tillåt alla användare',
-'protect-fallback' => 'Kräver "$1"-behörighet',
+'protect-fallback' => 'Kräv "$1"-behörighet',
 'protect-level-autoconfirmed' => 'Blockera nya och oregistrerade användare',
 'protect-level-sysop' => 'Enbart administratörer',
 'protect-summary-cascade' => 'kaskaderande',
@@ -2789,7 +2789,7 @@ Du kan välja att automatiskt uppdatera omdirigeringar som leder till den gamla
 Om du väljer att inte göra det, kontrollera då att du inte skapar några [[Special:DoubleRedirects|dubbla]] eller [[Special:BrokenRedirects|trasiga omdirigeringar]].
 Du bör också se till att länkar fortsätter att peka dit de ska.
 
-Notera att sidan '''inte''' kan flyttas om det redan finns en sida under den nya sidtiteln, såvida inte den sidan är tom eller en omdirigering till den gamla titeln och saknar annan versionshistorik.
+Notera att sidan '''inte''' kan flyttas om det redan finns en sida under den nya sidtiteln, såvida inte den sidan är en omdirigering till den gamla titeln och saknar annan versionshistorik.
 Det innebär att du kan flytta tillbaks en sida om du råkar göra fel, och att du inte kan skriva över existerande sidor.
 
 '''VARNING!'''
@@ -3156,6 +3156,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiskt|Magiska}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Inkluderad mall|Inkluderade mallar}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Sida|Sidor}} mallinkluderas på ($1)',
 'pageinfo-toolboxlink' => 'Sidinformation',
 'pageinfo-redirectsto' => 'Omdirigerar till',
 'pageinfo-redirectsto-info' => 'info',
@@ -3164,6 +3165,10 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-protect-cascading' => 'Skrivskydd kaskaderar härifrån',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Skrivskydd kaskaderar från',
+'pageinfo-category-info' => 'Kategoriinformation',
+'pageinfo-category-pages' => 'Antal sidor',
+'pageinfo-category-subcats' => 'Antal underkategorier',
+'pageinfo-category-files' => 'Antal filer',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3252,6 +3257,8 @@ Om du kör den kan din dator skadas.",
 'minutes' => '{{PLURAL:$1|$1 minut|$1 minuter}}',
 'hours' => '{{PLURAL:$1|$1 timme|$1 timmar}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dagar}}',
+'months' => '{{PLURAL:$1|$1 månad|$1 månader}}',
+'years' => '{{PLURAL:$1|$1 år}}',
 'ago' => '$1 sedan',
 'just-now' => 'precis nu',
 
@@ -4010,6 +4017,10 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'logentry-newusers-create2' => 'Användarkonto $3 skapades av $1',
 'logentry-newusers-autocreate' => 'Kontot $1 skapades automatiskt',
 'newuserlog-byemail' => 'lösenord skickat med e-post',
+'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',
+'rightsnone' => '(inga)',
 
 # Feedback
 'feedback-bugornote' => 'Om du är redo att beskriva ett tekniskt problem detaljerat, var god [$1 rapporterar en bugg].
@@ -4063,6 +4074,7 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'api-error-ok-but-empty' => 'Internt fel: Inget svar från servern.',
 'api-error-overwrite' => 'Det är inte tillåtet att skriva över en befintlig fil.',
 'api-error-stashfailed' => 'Internt fel: servern kunde inte lagra temporär fil.',
+'api-error-publishfailed' => 'Internt fel: Servern kunde inte publicera temporär fil.',
 'api-error-timeout' => 'Servern svarade inte inom förväntad tid.',
 'api-error-unclassified' => 'Ett okänt fel uppstod',
 'api-error-unknown-code' => 'Okänt fel: "$1"',
index 382d200..46077e5 100644 (file)
@@ -1345,11 +1345,13 @@ Taarifa hii itakuwa wazi.',
 'right-sendemail' => 'Kutuma barua-pepe kwa watumiaji wengine',
 'right-passwordreset' => 'Onesha barua pepe zinazoweka neno la siri upya',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kumbukumbu za kuanzisha akaunti za watumiaji',
+'newuserlogpagetext' => 'Hii ni kumbukumbu ya akaunti mpya zilizosajiliwa.',
+
 # User rights log
 'rightslog' => 'Kumbukumbu za vyeo vya watumiaji',
 'rightslogtext' => 'Hii ni kumbukumbu za mabadiliko za wezo za watumiaji.',
-'rightslogentry' => 'alibadilisha wezo za $1 aliyekuwa na wezo za kundi $2 awe mwanachama wa $3',
-'rightsnone' => '(hana)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'kusoma ukurasa huu',
@@ -1922,10 +1924,6 @@ Itifaki zinazoungwa mkono: <code>$1</code> (usiongeza hizi unapotafuta).',
 'activeusers-hidesysops' => 'Ficha wakabidhi',
 'activeusers-noresult' => 'Watumiaji hawakupatikana.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kumbukumbu za kuanzisha akaunti za watumiaji',
-'newuserlogpagetext' => 'Hii ni kumbukumbu ya akaunti mpya zilizosajiliwa.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Wezo za kundi za watumiaji',
 'listgrouprights-summary' => 'Inafuata orodha ya kundi za watumiaji wa wiki hii, pamoja na maelezo ya wezo zao za kushughulika mambo.
@@ -2055,6 +2053,8 @@ $UNWATCHURL
 
 Kutoa maoni yako au kupata msaada mwingine:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'alianzisha',
+'changed' => 'alibadilisha',
 
 # Delete
 'deletepage' => 'Futa ukurasa',
@@ -2584,6 +2584,9 @@ Tafadhali jaribu tena.',
 'pageinfo-toolboxlink' => 'Maelezo ya ukurasa',
 'pageinfo-contentpage-yes' => 'Ndiyo',
 'pageinfo-protect-cascading-yes' => 'Ndiyo',
+'pageinfo-category-info' => 'Maelezo ya jamii',
+'pageinfo-category-pages' => 'Idadi ya kurasa',
+'pageinfo-category-files' => 'Idadi ya mafaili',
 
 # Image deletion
 'deletedrevision' => 'Pitio la awali lililofutwa $1',
@@ -3156,6 +3159,7 @@ Tovuti hii inapata matatatizo wakati huu.',
 'logentry-newusers-create2' => '$1 alianzisha akaunti ya mtumiaji $3',
 'logentry-newusers-autocreate' => 'Akaunti ya mtumiaji $1 ilianzishwa na mashine',
 'newuserlog-byemail' => 'neno la siri limetumwa kwa barua pepe',
+'rightsnone' => '(hana)',
 
 # Feedback
 'feedback-subject' => 'Mada:',
index cee2baf..39c5d9b 100644 (file)
@@ -1180,11 +1180,13 @@ $1',
 'right-userrights-interwiki' => 'Sprowjej uprawńyńo užytkowńikůw na zajtach inkšych Wiki',
 'right-siteadmin' => 'Zawjerańy i uodmykańy bazy danych',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nowe użytkowniki',
+'newuserlogpagetext' => 'To je rejer uostatńo utworzůnych kůnt użytkowńikůw',
+
 # User rights log
 'rightslog' => 'Uprawńyńa',
 'rightslogtext' => 'Rejer půmjyńań uprawńyń užytkowńikůw.',
-'rightslogentry' => 'půmjyńiu/a uprawńyńo užytkowńika $1 ($2 → $3)',
-'rightsnone' => 'podstawowo',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'přeglůndańo tyj zajty',
@@ -1627,10 +1629,6 @@ Uobsůgiwane protokoły: <code>$1</code>',
 'activeusers-hidesysops' => 'Schrůń adminy',
 'activeusers-noresult' => 'Ńy sům używacze.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nowe użytkowniki',
-'newuserlogpagetext' => 'To je rejer uostatńo utworzůnych kůnt użytkowńikůw',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Uprawńyńo grup użytkowńikůw',
 'listgrouprights-summary' => 'Půńiży znojdowo śe spis grup użytkowńikůw zdefińjowanych na tyj wiki, s wyszczygůlńyńym przidźelůnych im prow dostympu.
@@ -1738,6 +1736,8 @@ Kejbyś chćou půmjyńić štalowańo swojej listy zajtůw, na kere dowoš poz
 
 Pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'utwořono',
+'changed' => 'pomjyńono',
 
 # Delete
 'deletepage' => 'Wyćep artikel',
@@ -2843,5 +2843,6 @@ Naškryflej sam mjano plika bez prefiksu „{{ns:file}}:”.',
 'revdelete-restricted' => 'naštaluj uograničyńo do administratorůw',
 'revdelete-unrestricted' => 'wycofej uograničyńo do administratorůw',
 'newuserlog-byemail' => 'hasło uostało wysłane e-brifym',
+'rightsnone' => 'podstawowo',
 
 );
index e10fc87..fd63bb0 100644 (file)
@@ -873,7 +873,7 @@ $1 எனும் பயனரையோ வேறு [[{{MediaWiki:Grouppage-sy
 'currentrevisionlink' => 'நடப்பிலுள்ள திருத்தம்',
 'cur' => 'நடப்பு',
 'next' => 'அடுத்தது',
-'last' => 'à®®à¯\81நà¯\8dதà¯\88ய',
+'last' => 'à®®à¯\81நà¯\8dதிய',
 'page_first' => 'முதல்',
 'page_last' => 'கடைசி',
 'histlegend' => 'வேறுபாட்டைக் காண வேண்டிய இரண்டு பத்திப்புக்களை தெரிவுச் செய்து கீழுள்ள பொத்தானை அழுத்தவும்.<br />
@@ -1050,7 +1050,7 @@ $1",
 'notextmatches' => 'கட்டுரை உரை எதுவும் பொருந்தவில்லை',
 'prevn' => 'முன் {{PLURAL:$1|$1}}',
 'nextn' => 'அடுத்த {{PLURAL:$1|$1}}',
-'prevn-title' => 'à®®à¯\81நà¯\8dதà¯\88ய $1 {{PLURAL:$1|முடிவு|முடிவுகள்}}',
+'prevn-title' => 'à®®à¯\81நà¯\8dதிய $1 {{PLURAL:$1|முடிவு|முடிவுகள்}}',
 'nextn-title' => 'அடுத்த $1 {{PLURAL:$1|முடிவு|முடிவுகள்}}',
 'shown-title' => 'ஒரு பக்கத்திற்கு $1 {{PLURAL:$1|முடிவு|முடிவுகள்}} காட்டவும்',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) பக்கங்களைப் பார்.',
@@ -1340,12 +1340,13 @@ $1",
 'right-sendemail' => 'மற்ற பயனர்களுக்கு மின்னஞ்சல் அனுப்பு',
 'right-passwordreset' => 'கடவுச்சொல் மீட்டமை மின்னஞ்சல்களை காண்.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'பயனர் உருவாக்கம் பற்றிய குறிப்பு',
+'newuserlogpagetext' => 'இது பயனர் படைப்புகளின் பதிவு ஆகும்.',
+
 # User rights log
 'rightslog' => 'பயனர் உரிமைகள் பதிகை',
 'rightslogtext' => 'இது பயனர் உரிமைகள் தொடர்பான மாற்றங்களின் பதிகையாகும்.',
-'rightslogentry' => '$1 பயனருக்கான குழு உறுப்பியம் $2 குழுவிலிருந்து $3 குழுவிற்கு மாற்றப்பட்டது',
-'rightslogentry-autopromote' => '  $2  லிருந்து $3 க்கு தானாக உயர்ந்தது.',
-'rightsnone' => '(எதுவுமில்லை)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'இப் பக்கத்தை வாசிக்கவும்',
@@ -1708,7 +1709,7 @@ $1',
 'filerevert-defaultcomment' => '$2, $1 இல் உள்ளபடியான பதிப்புக்கு முன்நிலையாக்கப்பட்டது',
 'filerevert-submit' => 'முன்நிலையாக்கு',
 'filerevert-success' => "ஊடகம் '''[[Media:$1|$1]]''' $3, $2 இல் உள்ளபடியான $4 பதிப்புக்கு முன்நிலையாக்கப்பட்டது.",
-'filerevert-badversion' => 'à®\95à¯\81றிதà¯\8dத à®¨à¯\87à®° à®®à¯\81தà¯\8dதிரà¯\88யà¯\81à®\9fனà¯\8d à®\95à¯\82à®\9fிய à®®à¯\81நà¯\8dதà¯\88ய à®\89ளà¯\8dளà®\95 திருத்தங்கள் காணப்படவில்லை.',
+'filerevert-badversion' => 'à®\95à¯\81றிதà¯\8dத à®¨à¯\87à®° à®®à¯\81தà¯\8dதிரà¯\88யà¯\81à®\9fனà¯\8d à®\95à¯\82à®\9fிய à®®à¯\81நà¯\8dதிய à®\89ளà¯\8dளà®\95தà¯\8d திருத்தங்கள் காணப்படவில்லை.',
 
 # File deletion
 'filedelete' => '$1 கோப்பை நீக்கு',
@@ -1886,13 +1887,13 @@ $1',
 'allpages' => 'அனைத்துப் பக்கங்கள்',
 'alphaindexline' => '$1 தொடக்கம் $2 வரை',
 'nextpage' => 'அடுத்த பக்கம் ($1)',
-'prevpage' => 'à®®à¯\81நà¯\8dதà¯\88ய பக்கம் ($1)',
+'prevpage' => 'à®®à¯\81நà¯\8dதிய பக்கம் ($1)',
 'allpagesfrom' => 'அடுத்து காணப்படும் எழுத்தில் தொடங்கும் பக்கங்களை காட்டு:',
 'allpagesto' => 'இவ்வெழுத்துக்களில் முடிவடையும் பக்கங்களைக் காட்டு',
 'allarticles' => 'அனைத்துக் கட்டுரைகள்',
 'allinnamespace' => 'அனைத்து பக்கங்கள் ($1 பெயர்வெளியில்)',
 'allnotinnamespace' => 'அனைத்து பக்கங்கள் ($1 பெயர்வெளி தவிர்த்து)',
-'allpagesprev' => 'à®®à¯\81நà¯\8dதà¯\88ய',
+'allpagesprev' => 'à®®à¯\81நà¯\8dதிய',
 'allpagesnext' => 'அடுத்தது',
 'allpagessubmit' => 'செல்',
 'allpagesprefix' => 'பின்வரும் முன்னொட்டு உடைய பக்கங்களை காட்டு:',
@@ -1940,10 +1941,6 @@ $1',
 'activeusers-hidesysops' => 'நிர்வாகிகளை மறை',
 'activeusers-noresult' => 'எந்தவொரு பயனர்களும் காணப்படவில்லை.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'பயனர் உருவாக்கம் பற்றிய குறிப்பு',
-'newuserlogpagetext' => 'இது பயனர் படைப்புகளின் பதிவு ஆகும்.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'பயனர் குழு உரிமைகள்',
 'listgrouprights-key' => '<span class="listgrouprights-granted">உரிமை வழங்கப்பட்டது</span>
@@ -2065,6 +2062,8 @@ $NEWPAGE
 
 பின்னூட்டம், மேலதிக உதவிகளுக்கு:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'தொடக்கப்பட்டது',
+'changed' => 'மாற்றப்பட்டது',
 
 # Delete
 'deletepage' => 'பக்கத்தை நீக்கு',
@@ -2202,7 +2201,7 @@ $NEWPAGE
 நீக்கப்பட்ட திருத்தங்களின் வாசகங்களை நிர்வாகிகள் மட்டுமே காணமுடியும்.',
 'undelete-revision' => '$3 செய்த $1 பக்கத்தின் ($4, $5 இல் உள்ளபடியான) நீக்கப்பட்ட திருத்தம்:',
 'undeleterevision-missing' => 'செல்லுபடியற்ற அல்லது காணப்படாத திருத்தம். நீங்கள் இங்கே வந்த இணைப்பு பழுதுள்ளதாக இருக்கலாம் அல்லது குறித்த திருத்தம் பரணிலிருந்து நீக்கப்பட்டோ அல்லது மீட்கபட்டோ இருக்கலாம்.',
-'undelete-nodiff' => 'à®®à¯\81நà¯\8dதà¯\88ய திருத்தங்கள் காணப்படவில்லை.',
+'undelete-nodiff' => 'à®®à¯\81நà¯\8dதிய திருத்தங்கள் காணப்படவில்லை.',
 'undeletebtn' => 'மீட்டெடு',
 'undeletelink' => 'பார்க்க/மீட்டெடு',
 'undeleteviewlink' => 'பார்வையிடு',
@@ -2248,8 +2247,8 @@ $1',
 'contribsub2' => '$1 பயனரின் ($2)',
 'nocontribs' => 'இந்த நிபந்தனையுடன் ஒத்துப்போகும் வகையில் மாற்றங்களெதுவும் காணப்படவில்லை.',
 'uctop' => '(மேல்)',
-'month' => 'மாதமà¯\8d à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதà¯\88ய:',
-'year' => 'à®\86ணà¯\8dà®\9fà¯\81 à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதà¯\88ய:',
+'month' => 'மாதமà¯\8d à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதிய:',
+'year' => 'à®\86ணà¯\8dà®\9fà¯\81 à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதிய:',
 
 'sp-contributions-newbies' => 'புதிய கணக்குகளின் பங்களிப்புகளை மட்டும் காட்டு',
 'sp-contributions-newbies-sub' => 'புதிய கணக்குகளுக்கு',
@@ -2279,7 +2278,7 @@ $1',
 'isredirect' => 'வழிமாற்றுப் பக்கம்',
 'istemplate' => 'உள்ளிடப்பட்டுள்ளது',
 'isimage' => 'கோப்பு இணைப்பு',
-'whatlinkshere-prev' => '{{PLURAL:$1|à®®à¯\81நà¯\8dதà¯\88ய|à®®à¯\81நà¯\8dதà¯\88ய $1}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|à®®à¯\81நà¯\8dதிய|à®®à¯\81நà¯\8dதிய $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|அடுத்த|அடுத்த $1}}',
 'whatlinkshere-links' => '← இணைப்புக்கள்',
 'whatlinkshere-hideredirs' => 'வழிமாற்றுகளை $1',
@@ -2785,7 +2784,7 @@ $1',
 'filedelete-archive-read-only' => 'வழங்கனால் பரண் அடைவு "$1" எழுதப்படமுடியாது.',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à®®à¯\81நà¯\8dதà¯\88ய தொகுப்பு',
+'previousdiff' => 'â\86\90 à®®à¯\81நà¯\8dதிய தொகுப்பு',
 'nextdiff' => 'அடுத்த தொகுப்பு →',
 
 # Media information
@@ -3331,7 +3330,7 @@ $5
 'confirm-unwatch-top' => 'இப்பக்கத்தை உங்கள்  கவனிப்புப் பட்டியலிருந்து நீக்கா வேண்டுமா?',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 à®®à¯\81நà¯\8dதà¯\88ய பக்கம்',
+'imgmultipageprev' => 'â\86\90 à®®à¯\81நà¯\8dதிய பக்கம்',
 'imgmultipagenext' => 'அடுத்தப் பக்கம் →',
 'imgmultigo' => 'செல்!',
 'imgmultigoto' => 'பக்கம் $1இற்கு செல்க',
@@ -3340,7 +3339,7 @@ $5
 'ascending_abbrev' => 'ஏறு',
 'descending_abbrev' => 'இறங்கு',
 'table_pager_next' => 'அடுத்த பக்கம்',
-'table_pager_prev' => 'à®®à¯\81நà¯\8dதà¯\88ய பக்கம்',
+'table_pager_prev' => 'à®®à¯\81நà¯\8dதிய பக்கம்',
 'table_pager_first' => 'முதலாவது பக்கம்',
 'table_pager_last' => 'கடைசி பக்கம்',
 'table_pager_limit' => 'ஒரு பக்கத்துக்கு $1 உள்ளடக்கங்களைக் காட்டு',
@@ -3559,6 +3558,7 @@ $5
 'logentry-newusers-create2' => '$3 பயனர் கணக்கினை $1 உருவாக்கினார்',
 'logentry-newusers-autocreate' => 'கணக்கு  $1   தானாக    உருவாக்கப்பட்டது',
 'newuserlog-byemail' => 'மின்னஞ்சல் மூலம் கடவுச்சொல் அனுப்பப்பட்டுவிட்டது',
+'rightsnone' => '(எதுவுமில்லை)',
 
 # Feedback
 'feedback-bugornote' => 'நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1  ஒரு bug பற்றி கூறு].
index 8dd1913..6fad2e8 100644 (file)
@@ -635,6 +635,9 @@ $messages = array(
 'right-delete' => 'ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ',
 'right-undelete' => 'ಪುಟೊನ್ ಮಾಜಾವಡೆ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ಸದಸ್ಯ ರಚನೆ ಲಾಗ್',
+
 # User rights log
 'rightslog' => 'ಸದಸ್ಯೆರ್ನ ಹಕ್ಕು ದಾಖಲೆ',
 
@@ -771,9 +774,6 @@ $messages = array(
 'allarticles' => 'ಪೂರಾ ಲೇಖನೊಲು',
 'allpagessubmit' => 'ಪೋ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ಸದಸ್ಯ ರಚನೆ ಲಾಗ್',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ಸದಸ್ಯೆರ್ನ ಪಟ್ಟಿ)',
 
index bbbdbae..f1b9bba 100644 (file)
@@ -1391,11 +1391,13 @@ $1",
 'right-sendemail' => 'ఇతర వాడుకరులకు ఈ-మెయిలు పంపించగలగడం',
 'right-passwordreset' => 'సంకేతపదాన్ని పునరుద్ధరించిన ఈ-మెయిళ్ళు',
 
+# Special:Log/newusers
+'newuserlogpage' => 'కొత్త వాడుకరుల చిట్టా',
+'newuserlogpagetext' => 'ఇది వాడుకరి నమోదుల చిట్టా.',
+
 # User rights log
 'rightslog' => 'వాడుకరుల హక్కుల మార్పుల చిట్టా',
 'rightslogtext' => 'ఇది వాడుకరుల హక్కులకు జరిగిన మార్పుల చిట్టా.',
-'rightslogentry' => '$1 గారి సభ్యత్వ గుంపును $2 నుండి $3 కి మార్చారు',
-'rightsnone' => '(ఏమీలేవు)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ఈ పేజీని చదవండి',
@@ -1968,10 +1970,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'activeusers-hidesysops' => 'నిర్వాహకులను దాచు',
 'activeusers-noresult' => 'వాడుకరులెవరూ లేరు.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'కొత్త వాడుకరుల చిట్టా',
-'newuserlogpagetext' => 'ఇది వాడుకరి నమోదుల చిట్టా.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'వాడుకరి గుంపుల హక్కులు',
 'listgrouprights-summary' => 'కింది జాబితాలో ఈ వికీలో నిర్వచించిన వాడుకరి గుంపులు, వాటికి సంబంధించిన హక్కులు ఉన్నాయి.
@@ -2093,6 +2091,8 @@ $UNWATCHURL కి వెళ్ళండి.
 
 మీ అభిప్రాయాలు చెప్పేందుకు మరియు మరింత సహాయానికై:
 {{canonicalurl:{{MediaWiki:helppage}}}}',
+'created' => 'సృష్టించారు',
+'changed' => 'మార్చారు',
 
 # Delete
 'deletepage' => 'పేజీని తొలగించు',
@@ -3522,6 +3522,7 @@ $5
 'logentry-newusers-create2' => '$1  వాడుకరి ఖాతా $3ను సృష్టించారు',
 'logentry-newusers-autocreate' => '$1 ఖాతాను ఆటోమెటిగ్గా సృష్టించారు',
 'newuserlog-byemail' => 'ఈ-మెయిలులో సంకేతపదం పంపించాం',
+'rightsnone' => '(ఏమీలేవు)',
 
 # Feedback
 'feedback-subject' => 'విషయం:',
index 8eeee27..b614b9f 100644 (file)
@@ -481,11 +481,13 @@ Ita-nia mudansa la armazenadu seidauk!",
 'right-userrights' => "Edita priviléjiu uza-na'in hotu",
 'right-userrights-interwiki' => "Edita priviléjiu uza-na'in iha wiki seluk sira",
 
+# Special:Log/newusers
+'newuserlogpage' => "Lista kria uza-na'in",
+'newuserlogpagetext' => "Ne'e lista kria uza-na'in.",
+
 # User rights log
 'rightslog' => "Lista mudansa priviléjiu uza-na'in",
 'rightslogtext' => "Ne'e lista mudansa priviléjiu uza-na'in sira nian.",
-'rightslogentry' => 'muda grupu "$1" nian husi "$2" ba "$3"',
-'rightsnone' => '(mamuk)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "lee pájina ne'e",
@@ -627,10 +629,6 @@ Ita-nia mudansa la armazenadu seidauk!",
 'activeusers-hidebots' => 'Subar bot sira',
 'activeusers-hidesysops' => 'Subar administradór sira',
 
-# Special:Log/newusers
-'newuserlogpage' => "Lista kria uza-na'in",
-'newuserlogpagetext' => "Ne'e lista kria uza-na'in.",
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupu',
 'listgrouprights-rights' => 'Priviléjiu',
@@ -658,6 +656,8 @@ Ita-nia mudansa la armazenadu seidauk!",
 'unwatching' => 'La hateke...',
 
 'enotif_impersonal_salutation' => "Uza-na'in {{SITENAME}} nian",
+'created' => 'kria ona',
+'changed' => 'muda ona',
 
 # Delete
 'deletepage' => 'Halakon pájina',
@@ -975,4 +975,7 @@ Ligasaun seluk iha liña - ne'e pájina sira iha ne'ebé bele inklui imajen aat.
 # Database error messages
 'dberr-header' => "Wiki ne'e iha problema",
 
+# New logging system
+'rightsnone' => '(mamuk)',
+
 );
index 89b3401..3b58018 100644 (file)
@@ -1005,11 +1005,13 @@ $1',
 'right-userrights-interwiki' => 'Вироиши ихтиёроти корбарии корбарони дигар викиҳо',
 'right-siteadmin' => 'Бастн ва боз кардани пойгоҳи дода',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Гузориши эҷоди корбар',
+'newuserlogpagetext' => 'Ин гузориш аз номҳои корбарии тозасохташуда аст.',
+
 # User rights log
 'rightslog' => 'Гузориши ихтиёроти корбар',
 'rightslogtext' => 'Ин гузориш тағйироти ихтиёроти корбар аст.',
-'rightslogentry' => 'узвияти $1 аз гурӯҳ $2 ба $3 тағйир дода шуд',
-'rightsnone' => '(ҳеҷ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'вироиши ин саҳифа',
@@ -1377,10 +1379,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Нишон додани',
 'listusers-noresult' => 'Ҳеҷ корбаре ёфт нашуд.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Гузориши эҷоди корбар',
-'newuserlogpagetext' => 'Ин гузориш аз номҳои корбарии тозасохташуда аст.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ихтиёроти гурӯҳҳои корбарӣ',
 'listgrouprights-group' => 'Гурӯҳ',
@@ -1473,6 +1471,8 @@ $NEWPAGE
 
 Пешниҳодот ва кӯмаки бештар:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'эҷод шуд',
+'changed' => 'тағйирёфта',
 
 # Delete
 'deletepage' => 'Ҳазфи саҳифа',
@@ -2534,5 +2534,6 @@ $5
 'revdelete-restricted' => 'маҳдудиятҳо ба мудирон амалӣ шуданд',
 'revdelete-unrestricted' => 'маҳдудиятҳо аз мудирон бардошта шуданд',
 'newuserlog-byemail' => 'калимаи убур ба почтаи электронӣ фиристода шуд',
+'rightsnone' => '(ҳеҷ)',
 
 );
index f80bb33..359c5cd 100644 (file)
@@ -887,11 +887,13 @@ On bojad kamtar az $1 {{PLURAL:$1|alomat|alomatho}} boşad.',
 'right-userrights-interwiki' => 'Viroişi ixtijoroti korbariji korbaroni digar vikiho',
 'right-siteadmin' => 'Bastn va boz kardani pojgohi doda',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Guzorişi eçodi korbar',
+'newuserlogpagetext' => 'In guzoriş az nomhoi korbariji tozasoxtaşuda ast.',
+
 # User rights log
 'rightslog' => 'Guzorişi ixtijoroti korbar',
 'rightslogtext' => 'In guzoriş taƣjiroti ixtijoroti korbar ast.',
-'rightslogentry' => 'uzvijati $1 az gurūh $2 ba $3 taƣjir doda şud',
-'rightsnone' => '(heç)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'viroişi in sahifa',
@@ -1227,10 +1229,6 @@ Jak klik kardani rūi unvoni sutunho boisi taƣjiri tartibi namoişi parvandaho
 'listusers-submit' => 'Nişon dodani',
 'listusers-noresult' => 'Heç korbare joft naşud.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Guzorişi eçodi korbar',
-'newuserlogpagetext' => 'In guzoriş az nomhoi korbariji tozasoxtaşuda ast.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ixtijoroti gurūhhoi korbarī',
 'listgrouprights-group' => 'Gurūh',
@@ -1297,6 +1295,8 @@ Agar şumo dertar az fehristi nazarotaton in sahifaro hazv kardan xohed, dar men
 'enotif_lastvisited' => 'Baroi didani hamai taƣjirot az oxirin bore, ki sar zadaed $1ro bubined.',
 'enotif_lastdiff' => 'Baroi namoişi in taƣjir $1ro bubined.',
 'enotif_anon_editor' => 'korbari noşinos $1',
+'created' => 'eçod şud',
+'changed' => 'taƣjirjofta',
 
 # Delete
 'deletepage' => 'Hazfi sahifa',
@@ -2336,5 +2336,6 @@ Nişonai pajvandro biduni peşvand "{{ns:file}}:" vorid kuned.',
 'revdelete-restricted' => 'mahdudijatho ba mudiron amalī şudand',
 'revdelete-unrestricted' => 'mahdudijatho az mudiron bardoşta şudand',
 'newuserlog-byemail' => 'kalimai ubur ba poctai elektronī firistoda şud',
+'rightsnone' => '(heç)',
 
 );
index 8f6ffa8..d79544b 100644 (file)
@@ -198,30 +198,30 @@ $linkTrail = '/^([a-z]+)(.*)\$/sD';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ขีดเส้นใต้ลิงก์',
-'tog-justify' => 'à¸\88ัà¸\94ยà¹\88อหà¸\99à¹\89าà¹\80à¸\95à¹\87มà¸\9aรรà¸\97ัà¸\94',
+'tog-justify' => 'à¸\88ัà¸\94ยà¹\88อหà¸\99à¹\89าà¸\8aิà¸\94à¸\82อà¸\9a',
 'tog-hideminor' => 'ซ่อนการแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด',
 'tog-hidepatrolled' => 'ซ่อนการแก้ไขที่ตรวจแล้วในหน้าปรับปรุงล่าสุด',
-'tog-newpageshidepatrolled' => 'à¸\8bà¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¸\95รวà¸\88à¹\81ลà¹\89วà¸\88าà¸\81รายà¸\8aืà¹\88อหน้าใหม่',
+'tog-newpageshidepatrolled' => 'à¸\8bà¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¸\95รวà¸\88à¹\81ลà¹\89วà¸\88าà¸\81รายà¸\81ารหน้าใหม่',
 'tog-extendwatchlist' => 'ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด',
-'tog-usenewrc' => 'à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94รุà¹\88à¸\99à¹\80สริม (ต้องการจาวาสคริปต์)',
+'tog-usenewrc' => 'à¸\88ัà¸\94à¸\81ลุà¹\88มà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\82à¸\94ยหà¸\99à¹\89าà¹\83à¸\99รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¹\81ละรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู (ต้องการจาวาสคริปต์)',
 'tog-numberheadings' => 'ใส่เลขหัวข้อในสารบัญอัตโนมัติ',
 'tog-showtoolbar' => 'แสดงเครื่องมือแก้ไข (จาวาสคริปต์)',
 'tog-editondblclick' => 'แก้ไขหน้าโดยการดับเบิลคลิก (จาวาสคริปต์)',
 'tog-editsection' => 'เปิดการแก้ไขเฉพาะส่วนผ่านลิงก์ [แก้ไข]',
 'tog-editsectiononrightclick' => 'เปิดการแก้ไขเฉพาะส่วนโดยคลิกขวาที่หัวข้อ (จาวาสคริปต์)',
 'tog-showtoc' => 'แสดงสารบัญ (สำหรับหน้าที่มีมากกว่า 3 หัวข้อ)',
-'tog-rememberpassword' => 'à¸\88ำà¸\82à¹\89อมูลà¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¸\82อà¸\87à¸\89ัà¸\99à¹\83à¸\99à¹\80à¸\9aราà¹\80à¸\8bอรà¹\8cà¸\99ีà¹\89 (สูà¸\87สุà¸\94 $1 {{PLURAL: $1 | à¸§à¸±à¸\99 | à¸§à¸±à¸\99}})',
-'tog-watchcreations' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88สรà¹\89าà¸\87à¹\83สà¹\88รายการเฝ้าดู',
-'tog-watchdefault' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\83สà¹\88รายการเฝ้าดู',
-'tog-watchmoves' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\83สà¹\88รายการเฝ้าดู',
-'tog-watchdeletion' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88ลà¸\9aà¹\83สà¹\88รายการเฝ้าดู',
+'tog-rememberpassword' => 'à¸\88ำà¸\81ารลà¹\87อà¸\81อิà¸\99à¸\82อà¸\87à¸\89ัà¸\99à¹\83à¸\99à¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8cà¸\99ีà¹\89 (สูà¸\87สุà¸\94 $1 à¸§à¸±à¸\99)',
+'tog-watchcreations' => 'à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¸\97ีà¹\88à¸\89ัà¸\99สรà¹\89าà¸\87à¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99อัà¸\9bà¹\82หลà¸\94à¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-watchdefault' => 'à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-watchmoves' => 'à¹\80à¸\9eิà¹\88มà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-watchdeletion' => 'à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99ลà¸\9aà¹\80à¸\82à¹\89ารายการเฝ้าดู',
 'tog-minordefault' => 'กำหนดให้การแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย',
 'tog-previewontop' => 'แสดงตัวอย่างการแก้ไขก่อนกล่องแก้ไข',
 'tog-previewonfirst' => 'แสดงตัวอย่างการแก้ไขสำหรับการแก้ไขครั้งแรก',
 'tog-nocache' => 'ปิดใช้งานแคช',
-'tog-enotifwatchlistpages' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9dà¹\89าà¸\94ูมีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
-'tog-enotifusertalkpages' => 'อีà¹\80มลหาà¹\80มืà¹\88อมีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\89ัà¸\99',
-'tog-enotifminoredits' => 'à¹\81มà¹\89วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82เล็กน้อย',
+'tog-enotifwatchlistpages' => 'อีà¹\80มลหาà¹\80มืà¹\88อหà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8cà¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูมีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87',
+'tog-enotifusertalkpages' => 'อีà¹\80มลหาà¹\80มืà¹\88อหà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\89ัà¸\99มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87',
+'tog-enotifminoredits' => 'อีà¹\80มลหาà¹\80à¸\8aà¹\88à¸\99à¸\81ัà¸\99สำหรัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¹\81ละà¹\84à¸\9fลà¹\8cเล็กน้อย',
 'tog-enotifrevealaddr' => 'เผยที่อยู่อีเมลในอีเมลที่ชี้แจง',
 'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดู',
 'tog-oldsig' => 'ลายเซ็นที่ใช้อยู่:',
@@ -245,7 +245,7 @@ $messages = array(
 
 'underline-always' => 'เสมอ',
 'underline-never' => 'ไม่เคย',
-'underline-default' => 'à¸\84à¹\88าà¸\9bริยายà¸\95ามà¹\80วà¹\87à¸\9aเบราว์เซอร์',
+'underline-default' => 'à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\82อà¸\87หà¸\99à¹\89าà¸\95าหรือเบราว์เซอร์',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'รูปแบบตัวอักษรในพื้นที่แก้ไข:',
@@ -330,6 +330,7 @@ $messages = array(
 'newwindow' => '(เปิดหน้าต่างใหม่)',
 'cancel' => 'ยกเลิก',
 'moredotdotdot' => 'ดูเพิ่ม...',
+'morenotlisted' => 'มีที่ยังไม่แสดงอีก...',
 'mypage' => 'หน้า',
 'mytalk' => 'พูดคุย',
 'anontalk' => 'พูดคุยกับไอพีนี้',
@@ -351,9 +352,9 @@ $messages = array(
 'vector-action-delete' => 'ลบ',
 'vector-action-move' => 'เปลี่ยนชื่อ',
 'vector-action-protect' => 'ป้องกัน',
-'vector-action-undelete' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารลà¸\9a',
+'vector-action-undelete' => 'à¸\81ูà¹\89à¸\84ืà¸\99',
 'vector-action-unprotect' => 'เปลี่ยนค่าการป้องกัน',
-'vector-simplesearch-preference' => 'à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\84ำà¹\81à¸\99ะà¸\99ำà¸\81ารà¸\84à¹\89à¸\99หาà¸\82ัà¹\89à¸\99สูà¸\87 (สำหรัà¸\9aสà¸\81ิà¸\99 Vector à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99)',
+'vector-simplesearch-preference' => 'à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\81à¸\96à¸\9aà¸\84à¹\89à¸\99หาอยà¹\88าà¸\87à¸\87à¹\88าย (à¹\80à¸\89à¸\9eาะหà¸\99à¹\89าà¸\95าà¹\80วà¸\81à¹\80à¸\95อรà¹\8c)',
 'vector-view-create' => 'สร้าง',
 'vector-view-edit' => 'แก้ไข',
 'vector-view-history' => 'ดูประวัติ',
@@ -393,12 +394,12 @@ $messages = array(
 'unprotect' => 'เปลี่ยนค่าการป้องกัน',
 'unprotectthispage' => 'แก้ไขการป้องกันหน้านี้',
 'newpage' => 'หน้าใหม่',
-'talkpage' => 'à¸\9eูà¸\94à¸\84ุยหน้านี้',
+'talkpage' => 'อภิà¸\9bรายหน้านี้',
 'talkpagelinktext' => 'พูดคุย',
 'specialpage' => 'หน้าพิเศษ',
 'personaltools' => 'เครื่องมือส่วนตัว',
-'postcomment' => 'หัวà¸\82à¹\89อใหม่',
-'articlepage' => 'à¹\81สà¸\94à¸\87หน้าเนื้อหา',
+'postcomment' => 'à¸\95อà¸\99ใหม่',
+'articlepage' => 'à¸\94ูหน้าเนื้อหา',
 'talk' => 'อภิปราย',
 'views' => 'ดู',
 'toolbox' => 'เครื่องมือ',
@@ -449,19 +450,19 @@ $1',
 'privacypage' => 'Project:นโยบายสิทธิส่วนบุคคล',
 
 'badaccess' => 'มีข้อผิดพลาดในการใช้สิทธิ',
-'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ร้องขอนี้',
+'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ร้องขอ',
 'badaccess-groups' => 'ปฏิบัติการที่คุณร้องขอนี้สงวนไว้เฉพาะผู้ใช้ใน{{PLURAL:$2|กลุ่ม|กลุ่มหนึ่งกลุ่มใด ดังนี้}}: $1',
 
 'versionrequired' => 'ต้องการมีเดียวิกิรุ่น $1',
-'versionrequiredtext' => 'ต้องการมีเดียวิกิรุ่น $1 สำหรับใช้งานหน้านี้ ดูเพิ่ม [[Special:Version|รุ่นซอฟต์แวร์]]',
+'versionrequiredtext' => 'ต้องการมีเดียวิกิรุ่น $1 สำหรับใช้งานหน้านี้ ดู[[Special:Version|หน้ารุ่น]]',
 
 'ok' => 'ตกลง',
 'retrievedfrom' => 'รับข้อมูลจาก "$1"',
 'youhavenewmessages' => 'คุณมี$1 ($2)',
 'newmessageslink' => 'ข้อความใหม่',
 'newmessagesdifflink' => 'การเปลี่ยนแปลงล่าสุด',
-'youhavenewmessagesfromusers' => 'คุณมี$1จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
-'youhavenewmessagesmanyusers' => 'คุณมี$1จากผู้ใช้หลายคน ($2)',
+'youhavenewmessagesfromusers' => 'คุณมี $1จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
+'youhavenewmessagesmanyusers' => 'คุณมี $1จากผู้ใช้หลายคน ($2)',
 'newmessageslinkplural' => '$1 ข้อความใหม่',
 'newmessagesdifflinkplural' => '$1 การเปลี่ยนแปลงล่าสุด',
 'youhavenewmessagesmulti' => 'คุณมีข้อความใหม่ที่ $1',
@@ -491,7 +492,7 @@ $1',
 'sort-ascending' => 'เรียงจากน้อยไปมาก',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'à¹\80à¸\99ืà¹\89อหา',
+'nstab-main' => 'หà¸\99à¹\89า',
 'nstab-user' => 'หน้าผู้ใช้',
 'nstab-media' => 'หน้าสื่อ',
 'nstab-special' => 'หน้าพิเศษ',
@@ -508,10 +509,9 @@ $1',
 คุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง
 หรืออาจเกิดจากข้อผิดพลาดในซอฟต์แวร์ซึ่ง {{SITENAME}} ใช้อยู่',
 'nosuchspecialpage' => 'ไม่มีหน้าพิเศษดังกล่าว',
-'nospecialpagetext' => '
-<strong>คุณร้องขอหน้าพิเศษไม่ถูกต้อง</strong>
+'nospecialpagetext' => '<strong>คุณร้องขอหน้าพิเศษไม่ถูกต้อง</strong>
 
-รายà¸\8aืà¹\88อหà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\97ีà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88 [[Special:SpecialPages|รายà¸\8aืà¹\88อหน้าพิเศษ]]',
+รายà¸\81ารหà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\97ีà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88 [[Special:SpecialPages|รายà¸\81ารหน้าพิเศษ]]',
 
 # General errors
 'error' => 'ข้อผิดพลาด',
@@ -553,7 +553,7 @@ $1',
 'fileexistserror' => 'ไม่สามารถเขียนไฟล์ "$1" ได้ เนื่องจากมีไฟล์อยู่แล้ว',
 'unexpected' => 'ผลที่ไม่คาดคิด: "$1"="$2"',
 'formerror' => 'ผิดพลาด: ไม่สามารถส่งแบบได้',
-'badarticleerror' => 'à¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89',
+'badarticleerror' => 'ไม่สามารถดำเนินปฏิบัติการนี้ในหน้านี้',
 'cannotdelete' => 'ไม่สามารถลบหน้าหรือไฟล์ "$1" 
 อาจมีผู้อื่นลบไปแล้ว',
 'cannotdelete-title' => "ไม่สามารถลบหน้า ''$1''",
@@ -561,21 +561,24 @@ $1',
 ไม่มีคำอธิบายสำหรับการยกเลิกนี้',
 'badtitle' => 'ชื่อไม่เหมาะสม',
 'badtitletext' => 'ชื่อหน้าที่ร้องขอไม่ถูกต้อง เป็นชื่อว่าง หรือชื่อที่ผิดพลาดเนื่องจากลิงก์ข้ามมาจากภาษาอื่น ชื่อที่ใช้อาจมีตัวอักษรที่ไม่สามารถปรากฏในชื่อได้',
-'perfcached' => 'à¸\82à¹\89อมูลà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80à¸\81à¹\88า à¸\97ีà¹\88à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99à¹\81à¸\84à¸\8aà¸\82อà¸\87ระà¸\9aà¸\9a A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'ข้อมูลต่อไปนี้ถูกเก็บไว้ในหน่วยความจำแคช, และได้รับการปรับปรุงครั้งสุดท้าย $1. ค่าสูงสุดของ {{PLURAL:$4|หนึ่งผลลัพธ์คือ|$4 ผลลัพธ์คือ}} จะสามารถเก็บไว้ในหน่วยความจำแคชได้',
+'perfcached' => 'à¸\82à¹\89อมูลà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99à¹\81à¸\84à¸\8a à¹\81ละอาà¸\88ลà¹\89าสมัย à¸¡à¸µà¸\9cลà¸\81ารà¸\84à¹\89à¸\99หาสูà¸\87สุà¸\94 $1 à¸£à¸²à¸¢à¸\81ารà¹\83à¸\99à¹\81à¸\84à¸\8a',
+'perfcachedts' => 'ข้อมูลต่อไปนี้ถูกเก็บไว้ในหน่วยความจำแคช และได้รับการปรับล่าสุดเมื่อ $1 ค่าสูงสุด $4 ผลลัพธ์สามารถเก็บไว้ในหน่วยความจำแคชได้',
 'querypage-no-updates' => 'ขณะนี้การปรับปรุงหน้านี้ถูกระงับ ข้อมูลในที่นี่จะไม่รีเฟรชเป็นปัจจุบัน',
 'wrong_wfQuery_params' => 'พารามิเตอร์ที่ส่งไป wfQuery() ไม่ถูกต้อง<br />
 ฟังก์ชั่น: $1<br />
 คำค้น: $2',
 'viewsource' => 'ดูโค้ด',
 'viewsource-title' => 'ดูโค้ดสำหรับ $1',
-'actionthrottled' => 'à¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¸\8aัà¹\88วà¸\84ราว',
+'actionthrottled' => 'การกระทำถูกระงับชั่วคราว',
 'actionthrottledtext' => 'เพื่อเป็นมาตรการป้องกันสแปม คุณจึงถูกจำกัดมิให้กระทำสิ่งนี้ไม่ให้ติดต่อกันหลายครั้งเกินไปในช่วงระยะเวลาสั้น ๆ ซึ่งขณะนี้คุณได้กระทำเกินขีดจำกัดแล้ว กรุณารอสักครู่แล้วลองอีกครั้ง',
-'protectedpagetext' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
+'protectedpagetext' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82หรือà¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารอืà¹\88à¸\99',
 'viewsourcetext' => 'คุณสามารถดูและคัดลอกโค้ดหน้านี้ได้:',
-'viewyourtext' => "คุณสามารถเปิดดูและคัดลอกต้นฉบับของ '''การแก้ไขของคุณ''' ของหน้านี้ได้",
-'protectedinterface' => 'หน้านี้เป็นข้อความที่ใช้แสดงบนหน้าตาหรือส่วนติดต่อผู้ใช้ของซอฟต์แวร์ ถูกล็อกห้ามแก้ไขเพื่อป้องกันการก่อกวน',
-'editinginterface' => "'''คำเตือน:''' คุณกำลังแก้ไขข้อความที่ใช้แสดงบนหน้าตาหรือส่วนติดต่อผู้ใช้ของซอฟต์แวร์  การแก้ไขหน้านี้จะมีผลต่อการแสดงข้อความบนส่วนติดต่อผู้ใช้ของทุกคน  ถ้าคุณต้องการแปลหน้านี้ ให้ลองใช้บริการของ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] ซึ่งเป็นโครงการสำหรับแปลซอฟต์แวร์มีเดียวิกิ",
+'viewyourtext' => "คุณสามารถดูและคัดลอกต้นฉบับ'''การแก้ไขของคุณ'''ในหน้านี้ได้",
+'protectedinterface' => 'หน้านี้เป็นข้อความอินเตอร์เฟซสำหรับซอฟต์แวร์บนวิกินี้ และถูกป้องกันเพื่อมิให้มีการกระทำผิด
+ในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น',
+'editinginterface' => "'''คำเตือน:''' คุณกำลังแก้ไขหน้าที่ใช้เพื่อให้ข้อความอินเตอร์เฟซแก่ซอฟต์แวร์
+การเปลี่ยนแปลงหน้านี้จะกระทบต่อลักษณะของอินเตอร์เฟซผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้
+ในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
 'sqlhidden' => '(คำสั่ง SQL ซ่อนอยู่)',
 'cascadeprotected' => 'หน้านี้ได้รับการป้องกันจากการแก้ไข เนื่องจากหน้านี้ถูกใช้เป็นส่วนหนึ่งใน{{PLURAL:$1|หน้า $2 ซึ่งได้รับการป้องกันแบบ "ทบทุกลำดับขั้น"|หน้าซึ่งได้รับการป้องกันแบบ "ทบทุกลำดับขั้น" ดังต่อไปนี้: $2}}',
 'namespaceprotected' => "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ '''$1'''",
@@ -600,8 +603,8 @@ $1',
 คุณสามารถใช้งาน {{SITENAME}} ต่อในฐานะผู้ใช้นิรนาม หรือคุณสามารถ<span class='plainlinks'>[$1 ล็อกอินกลับเข้าไป]</span>ด้วยชื่อผู้ใช้เดิมหรือชื่อผู้ใช้อื่น
 อย่างไรก็ตามอาจมีบางหน้าที่แสดงผลเสมือนคุณกำลังล็อกอินอยู่ จนกว่าคุณจะล้างแคชเบราว์เซอร์ของคุณ",
 'welcomeuser' => 'ยินดีต้อนรับ $1!',
-'welcomecreation-msg' => 'à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99à¹\81ลà¹\89ว
-อย่าลืมเปลี่ยนแปลง[[Special:Preferences|การตั้งค่าใน{{SITENAME}}]]ของคุณ',
+'welcomecreation-msg' => 'บัญชีของคุณถูกสร้างขึ้นแล้ว
+อย่าลืมเปลี่ยนแปลง[[Special:Preferences|การตั้งค่าใน {{SITENAME}}]] ของคุณ',
 'yourname' => 'ชื่อผู้ใช้',
 'yourpassword' => 'รหัสผ่าน',
 'yourpasswordagain' => 'พิมพ์รหัสผ่านอีกครั้ง:',
@@ -609,19 +612,19 @@ $1',
 'securelogin-stick-https' => 'ยังคงเชื่อมต่อกับ HTTPS หลังจากล็อกอิน',
 'yourdomainname' => 'โดเมนของคุณ:',
 'password-change-forbidden' => 'คุณไม่สามารถเปลี่ยนรหัสผ่านบนวิกินี้',
-'externaldberror' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารระà¸\9aุà¸\95ัวà¸\95à¸\99à¸\88าà¸\81ภายà¸\99อà¸\81 à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aัà¸\8dà¸\8aีอืà¹\88à¸\99',
+'externaldberror' => 'มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\82อà¸\87à¸\90าà¸\99à¸\82à¹\89อมูลà¹\83à¸\99à¸\81ารà¸\9eิสูà¸\88à¸\99à¹\8cà¸\95ัวà¸\88ริà¸\87 à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¸\9bรัà¸\9aà¸\9aัà¸\8dà¸\8aีภายà¸\99อà¸\81à¸\82อà¸\87à¸\84ุà¸\93',
 'login' => 'ล็อกอิน',
 'nav-login-createaccount' => 'ล็อกอิน / สร้างบัญชี',
-'loginprompt' => 'à¸\95à¹\89อà¸\87à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\84ุà¸\81à¸\81ีà¹\89à¸\81à¹\88อà¸\99à¸\97ีà¹\88à¸\88ะลà¹\87อà¸\81อิà¸\99à¹\80à¸\82à¹\89าสูà¹\88 {{SITENAME}}',
+'loginprompt' => 'ต้องเปิดใช้คุกกี้ก่อนจะล็อกอินเข้าสู่ {{SITENAME}}',
 'userlogin' => 'ล็อกอิน / สร้างบัญชี',
 'userloginnocreate' => 'ล็อกอิน',
 'logout' => 'ล็อกเอาต์',
 'userlogout' => 'ล็อกเอาต์',
 'notloggedin' => 'ไม่ได้ล็อกอิน',
-'nologin' => "ล็อกอินด้านล่างหรือ '''$1'''",
+'nologin' => 'ไม่มีบัญชีหรือ $1',
 'nologinlink' => 'สร้างบัญชี',
 'createaccount' => 'สร้างบัญชี',
-'gotaccount' => "มีà¸\9aัà¸\8dà¸\8aีà¹\81ลà¹\89วหรือà¹\84มà¹\88 '''$1'''",
+'gotaccount' => "มีà¸\9aัà¸\8dà¸\8aีà¹\81ลà¹\89วà¹\83à¸\8aà¹\88à¹\84หม '''$1'''",
 'gotaccountlink' => 'ล็อกอิน',
 'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณหรือ',
 'createaccountmail' => 'ผ่านทางอีเมล',
@@ -637,16 +640,16 @@ $1',
 'noname' => 'คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง',
 'loginsuccesstitle' => 'ล็อกอินสำเร็จ',
 'loginsuccess' => "'''ขณะนี้คุณล็อกอินเข้าสู่ {{SITENAME}} ด้วยชื่อ \"\$1\"'''",
-'nosuchuser' => 'à¹\84มà¹\88มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\8aืà¹\88อ "$1"
+'nosuchuser' => 'ไม่มีผู้ใช้ชื่อ "$1"
 อักษรใหญ่เล็กมีผลต่อชื่อผู้ใช้
-à¸\81รุà¸\93าà¸\95รวà¸\88à¸\81ารสะà¸\81à¸\94อีà¸\81à¸\84รัà¹\89à¸\87 à¸«à¸£à¸·à¸­[[Special:UserLogin/signup|สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88]]',
-'nosuchusershort' => 'à¹\84มà¹\88มีà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\8aืà¹\88อ "$1" à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\81ารสะà¸\81à¸\94',
+กรุณาตรวจการสะกดอีกครั้ง หรือ[[Special:UserLogin/signup|สร้างบัญชีใหม่]]',
+'nosuchusershort' => 'ไม่มีผู้ใช้ชื่อ "$1" กรุณาตรวจสอบการสะกด',
 'nouserspecified' => 'คุณต้องระบุชื่อผู้ใช้',
 'login-userblocked' => 'ผู้ใช้นี้ถูกบล็อก ไม่อนุญาตให้ล็อกอิน',
 'wrongpassword' => 'รหัสผ่านที่ใส่ไม่ถูกต้อง โปรดลองอีกครั้ง',
 'wrongpasswordempty' => 'ยังไม่ได้ระบุรหัสผ่าน โปรดลองอีกครั้ง',
 'passwordtooshort' => 'รหัสผ่านต้องมีความยาวอย่างน้อย $1 ตัวอักษร',
-'password-name-match' => 'รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\84มà¹\88à¹\80หมือà¸\99à¸\81ัà¸\9aชื่อผู้ใช้ของคุณ',
+'password-name-match' => 'รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95à¹\88าà¸\87à¸\88าà¸\81ชื่อผู้ใช้ของคุณ',
 'password-login-forbidden' => 'ห้ามใช้ชื่อผู้ใช้และรหัสผ่านนี้',
 'mailmypassword' => 'อีเมลรหัสผ่านใหม่',
 'passwordremindertitle' => 'รหัสผ่านชั่วคราวใหม่สำหรับ {{SITENAME}}',
@@ -665,11 +668,11 @@ $1',
 จึงส่งผลให้ผู้เข้าชมที่ใช้หมายเลขไอพีนี้ ไม่สามารถสร้างบัญชีได้อีกในขณะนี้',
 'emailauthenticated' => 'อีเมลของคุณได้รับการรับรอง ณ วันที่ $2 เวลา $3',
 'emailnotauthenticated' => 'อีเมลของคุณยังไม่ได้ถูกยืนยัน ดังนั้นคำสั่งพิเศษที่ใช้งานผ่านอีเมลยังไม่เปิดใช้งาน',
-'noemailprefs' => 'รัà¸\9aอีà¹\80มลà¸\95ามà¹\80à¸\87ืà¹\88อà¸\99à¹\84à¸\82à¸\9eิà¹\80ศษà¸\95à¹\88อà¹\84à¸\9bà¸\99ี้',
+'noemailprefs' => 'ระà¸\9aุà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¹\83à¸\99à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\84ุà¸\93ลัà¸\81ษà¸\93ะà¹\80หลà¹\88าà¸\99ีà¹\89à¸\97ำà¸\87าà¸\99à¹\84à¸\94้',
 'emailconfirmlink' => 'ยืนยันอีเมลของคุณ',
 'invalidemailaddress' => 'ไม่สามารถรับที่อยู่อีเมลได้ เพราะดูมีรูปแบบไม่ถูกต้อง
 โปรดใส่ที่อยู่ให้มีรูปแบบถูกต้อง หรือเว้นช่องนั้น',
-'cannotchangeemail' => 'à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ัà¸\9aà¸\9aัà¸\8dà¸\8aีà¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\94à¹\89à¹\83à¸\99สาราà¸\99ุà¸\81รมนี้',
+'cannotchangeemail' => 'à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\9aà¸\99วิà¸\81ินี้',
 'emaildisabled' => 'เว็บไซต์นี้ไม่สามารถส่งอีเมล',
 'accountcreated' => 'ชื่อบัญชีได้ถูกสร้างขึ้น',
 'accountcreatedtext' => 'ชื่อบัญชีสำหรับ $1 ได้ถูกสร้างขึ้นแล้ว',
@@ -685,12 +688,12 @@ $1',
 'suspicious-userlogout' => 'คำขอของคุณเพื่อออกจากระบบถูกปฏิเสธ เพราะดูเหมือนว่าจะส่งมาจากเบราว์เซอร์หรือพร็อกซี่แคชที่เสีย',
 
 # E-mail sending
-'php-mail-error-unknown' => 'à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\97ีà¹\88à¹\84มà¹\88รูà¹\89à¸\88ัà¸\81à¹\83à¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99 mail() à¸\82อà¸\87 PHP',
+'php-mail-error-unknown' => 'à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\84มà¹\88à¸\97ราà¸\9aสาà¹\80หà¸\95ุà¹\83à¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99 mail() à¸\82อà¸\87à¸\9eีà¹\80อà¸\8aà¸\9eี',
 'user-mail-no-addy' => 'พยายามส่งอีเมลโดยไม่มีที่อยู่อีเมล',
 
 # Change password dialog
 'resetpass' => 'เปลี่ยนรหัสผ่าน',
-'resetpass_announce' => 'คุณใช้รหัสอีเมลชั่วคราวล็อกอิน คุณต้องกำหนดรหัสผ่านใหม่จึงจะเสร็จสิ้นขั้นตอนการล็อกอิน:',
+'resetpass_announce' => 'à¸\84ุà¸\93à¹\83à¸\8aà¹\89รหัสอีà¹\80มลà¸\8aัà¹\88วà¸\84ราวลà¹\87อà¸\81อิà¸\99 à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ำหà¸\99à¸\94รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\95รà¸\87à¸\99ีà¹\89 à¸\88ึà¸\87à¸\88ะà¹\80สรà¹\87à¸\88สิà¹\89à¸\99à¸\82ัà¹\89à¸\99à¸\95อà¸\99à¸\81ารลà¹\87อà¸\81อิà¸\99:',
 'resetpass_text' => '<!-- เพิ่มข้อความที่นี่ -->',
 'resetpass_header' => 'เปลี่ยนรหัสผ่าน',
 'oldpassword' => 'รหัสผ่านเดิม:',
@@ -707,17 +710,17 @@ $1',
 'resetpass-temp-password' => 'รหัสผ่านชั่วคราว:',
 
 # Special:PasswordReset
-'passwordreset' => 'ลà¹\89าà¸\87รหัสà¸\9cà¹\88าà¸\99',
+'passwordreset' => 'à¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88',
 'passwordreset-text' => 'กรอกแบบนี้เพื่อรับตัวเตือนอีเมลของรายละเอียดบัญชีของคุณ',
 'passwordreset-legend' => 'เปลี่ยนรหัสผ่าน',
-'passwordreset-disabled' => 'à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\84มà¹\88สามารà¸\96à¸\97ำà¹\84à¸\94à¹\89à¹\83นวิกินี้',
+'passwordreset-disabled' => 'à¸\81ารà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\9aนวิกินี้',
 'passwordreset-username' => 'ชื่อผู้ใช้:',
 'passwordreset-domain' => 'โดเมน:',
 'passwordreset-email' => 'ที่อยู่อีเมล:',
 'passwordreset-emailtitle' => 'รายละเอียดบัญชีบน {{SITENAME}}',
 'passwordreset-emailelement' => 'ชื่อผู้ใช้: $1
 รหัสผ่านชั่วคราว: $2',
-'passwordreset-emailsent' => 'อีà¹\80มลà¹\8cà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bà¹\81ลà¹\89ว',
+'passwordreset-emailsent' => 'อีเมลแจ้งเตือนได้ถูกส่งไปแล้ว',
 
 # Special:ChangeEmail
 'changeemail' => 'เปลี่ยนที่อยู่อีเมล',
@@ -761,14 +764,14 @@ $1',
 'showpreview' => 'แสดงตัวอย่าง',
 'showlivepreview' => 'แสดงตัวอย่างทันที',
 'showdiff' => 'แสดงความเปลี่ยนแปลง',
-'anoneditwarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸«à¸¡à¸²à¸¢à¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99สà¹\88วà¸\99à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99",
-'anonpreviewwarning' => 'คุณยังไม่ได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณไว้ในประวัติของหน้านี้',
+'anoneditwarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸\84ุà¸\93มิà¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99 à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81à¹\84วà¹\89à¹\83à¸\99à¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89",
+'anonpreviewwarning' => "'''คุณมิได้ล็อกอิน การบันทึกจะเก็บที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้'''",
 'missingsummary' => "'''อย่าลืม:''' คุณยังไม่ได้ระบุคำอธิบายการแก้ไขครั้งนี้ ถ้าคุณกดบันทึกไปส่วนคำอธิบายการแก้ไขนั้นจะว่างและไม่แสดงผล",
 'missingcommenttext' => 'กรุณาใส่ความเห็นด้านล่าง',
-'missingcommentheader' => "'''อยà¹\88าลืม:''' à¸\84ุà¸\93ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หัวà¸\82à¹\89อ/à¸\88à¹\88าหัวสำหรัà¸\9aà¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99à¸\84รัà¹\89à¸\87à¸\99ีà¹\89 à¸\96à¹\89าà¸\84ุà¸\93à¸\81à¸\94 {{int:savearticle}} à¸­à¸µà¸\81à¸\84รัà¹\89à¸\87หà¸\99ึà¹\88à¸\87 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\88ะไม่มีหัวข้อ",
+'missingcommentheader' => "'''à¸\9bระà¸\81าศà¹\80à¸\95ือà¸\99:''' à¸\84ุà¸\93ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หัวà¸\82à¹\89อ/à¸\88à¹\88าหัวสำหรัà¸\9aà¸\84วามà¹\80หà¹\87à¸\99à¸\99ีà¹\89 à¸\96à¹\89าà¸\84ุà¸\93à¸\81à¸\94 \"{{int:savearticle}}\" à¸­à¸µà¸\81à¸\84รัà¹\89à¸\87 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81à¹\82à¸\94ยไม่มีหัวข้อ",
 'summary-preview' => 'ตัวอย่างคำอธิบายการแก้ไข:',
 'subject-preview' => 'ตัวอย่างหัวข้อ:',
-'blockedtitle' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\96ูà¸\81หà¹\89ามà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'blockedtitle' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81',
 'blockedtext' => "'''ชื่อผู้ใช้หรือหมายเลขไอพีถูกของคุณถูกบล็อก'''
 
 $1 เป็นผู้ดำเนินการบล็อก 
@@ -799,20 +802,20 @@ $1 เป็นผู้ดำเนินการบล็อก
 กรุณาระบุรายละเอียดทั้งหมดข้างต้นในการร้องขอใดๆ ที่คุณกระทำ',
 'blockednoreason' => 'ไม่ได้ให้เหตุผลไว้',
 'whitelistedittext' => 'คุณต้อง$1เพื่อทำการแก้ไขหน้า',
-'confirmedittext' => 'à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¸\96à¹\89าà¹\84มà¹\88à¹\84à¸\94à¹\89à¸\97ำà¸\81ารยืà¸\99ยัà¸\99อีà¹\80มล à¸\81รุà¸\93ายืà¸\99ยัà¸\99อีà¹\80มลà¸\9cà¹\88าà¸\99à¸\97าà¸\87 [[Special:Preferences|การตั้งค่าผู้ใช้]]',
+'confirmedittext' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87ยืà¸\99ยัà¸\99à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\81à¹\88อà¸\99à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89า à¹\82à¸\9bรà¸\94à¸\81ำหà¸\99à¸\94à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¹\81ละà¸\97ำà¹\83หà¹\89à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\9cà¹\88าà¸\99[[Special:Preferences|การตั้งค่าผู้ใช้]]',
 'nosuchsectiontitle' => 'ไม่พบหัวข้อย่อย',
-'nosuchsectiontext' => 'à¸\84ุà¸\93à¸\9eยายามà¹\81à¸\81à¹\89à¹\84à¸\82หัวà¸\82à¹\89อยà¹\88อยà¸\97ีà¹\88à¹\84มà¹\88มีอยูà¹\88à¹\81ลà¹\89วà¹\83à¸\99à¸\82à¸\93ะà¸\99ีà¹\89 à¸«à¸±à¸§à¸\82à¹\89อยà¹\88อยà¸\94ัà¸\87à¸\81ลà¹\88าวอาà¸\88à¸\96ูà¸\81ยà¹\89ายหรือลà¸\9aà¹\83à¸\99à¸\82à¸\93ะà¸\97ีà¹\88à¸\84ุà¸\93à¸\94ูหà¸\99à¹\89าà¹\80วà¹\87à¸\9aอยู่',
+'nosuchsectiontext' => 'à¸\84ุà¸\93à¸\9eยายามà¹\81à¸\81à¹\89à¹\84à¸\82à¸\95อà¸\99à¸\97ีà¹\88à¹\84มà¹\88มีอยูà¹\88 à¸\95อà¸\99à¸\94ัà¸\87à¸\81ลà¹\88าวอาà¸\88à¸\96ูà¸\81ยà¹\89ายหรือลà¸\9aà¸\82à¸\93ะà¸\97ีà¹\88à¸\84ุà¸\93à¸\94ูหà¸\99à¹\89าอยู่',
 'loginreqtitle' => 'จำเป็นต้องล็อกอิน',
 'loginreqlink' => 'ล็อกอิน',
 'loginreqpagetext' => 'คุณต้อง$1เพื่อดูหน้าอื่น',
 'accmailtitle' => 'ส่งรหัสผ่านแล้ว',
-'accmailtext' => "มีà¸\81ารสรà¹\89าà¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81à¸\9aà¸\9aสุà¹\88มà¹\83หà¹\89à¸\81ัà¸\9a [[User talk:$1|$1]] à¹\82à¸\94ยรหัสà¸\9cà¹\88าà¸\99à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\88ัà¸\94สà¹\88à¸\87à¹\84à¸\9bà¸\97ีà¹\88 $2
+'accmailtext' => "มีการสร้างรหัสผ่านแบบสุ่มให้กับ [[User talk:$1|$1]] โดยจัดส่งไปที่ $2
 
-สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88à¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89า''[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]'' à¸«à¸¥à¸±à¸\87à¸\88าà¸\81à¸\97ีà¹\88ล็อกอินแล้ว",
+สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\9aัà¸\8dà¸\8aีà¹\83หมà¹\88à¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89า''[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]'' à¸«à¸¥à¸±à¸\87ล็อกอินแล้ว",
 'newarticle' => '(ใหม่)',
-'newarticletext' => 'หน้านี้ยังไม่มีข้อความใด สามารถเริ่มสร้างหน้านี้โดยการพิมพ์ข้อความลงในกล่องด้านล่าง
-(ดูเพิ่มเติมที่ [[{{MediaWiki:Helppage}}|หน้าคำอธิบาย]])
-à¸\96à¹\89าà¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารสรà¹\89าà¸\87à¹\83หà¹\89à¸\81à¸\94à¸\9bุà¹\88ม à¸\96อยหลัà¸\87 (back) à¸\97ีà¹\88à¹\80วà¹\87à¸\9aà¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8c',
+'newarticletext' => "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้
+ในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[[{{MediaWiki:Helppage}}|หน้าคำอธิบาย]])
+à¸\96à¹\89าà¸\84ุà¸\93มาà¹\82à¸\94ยอุà¸\9aัà¸\95ิà¹\80หà¸\95ุ à¹\83หà¹\89à¸\81à¸\94'''à¸\96อยหลัà¸\87''' (back) à¸\97ีà¹\88à¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8c",
 'anontalkpagetext' => "----''หน้านี้เป็นหน้าพูดคุยสำหรับผู้ใช้นิรนาม ซึ่งยังไม่ได้สร้างบัญชีผู้ใช้
 โดยทางเราจำเป็นต้องระบุตัวตนผ่านทางหมายเลขไอพี
 ซึ่งหมายเลขไอพีนี้อาจถูกใช้ร่วมกันโดยผู้ใช้หลายคน
@@ -823,25 +826,26 @@ $1 เป็นผู้ดำเนินการบล็อก
 'noarticletext-nopermission' => 'ปัจจุบันไม่มีข้อความในหน้านี้
 คุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อบทความนี้]]ในหน้าอื่น หรือ<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง]</span> แต่คุณไม่มีสิทธิ์สร้างหน้านี้',
 'userpage-userdoesnotexist' => 'บัญชีผู้ใช้ "<nowiki>$1</nowiki>" มิได้ลงทะเบียน กรุณาตรวจสอบก่อนว่าคุณต้องการสร้างหรือแก้ไขหน้านี้',
-'userpage-userdoesnotexist-view' => 'à¹\84มà¹\88มีà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\83à¸\99à¸\8aืà¹\88อ "$1"',
+'userpage-userdoesnotexist-view' => 'à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89 "$1" à¸¡à¸´à¹\84à¸\94à¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99',
 'blocked-notice-logextract' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก
-à¸\9bูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:',
+รายการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:',
 'clearyourcache' => "'''หมายเหตุ:''' หลังจากบันทึกแล้ว คุณอาจจะต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง
 * '''ไฟร์ฟอกซ์ / ซาฟารี:''' กดปุ่ม ''Shift'' ค้างไว้ขณะคลิก ''Reload'' หรือกดปุ่ม ''Ctrl-F5'' หรือ ''Ctrl-R'' (''⌘-R'' บนแมคอินทอช)
 * '''กูเกิล โครม:''' กดปุ่ม ''Ctrl-Shift-R'' (''⌘-Shift-R'' บนแมคอินทอช)
 * '''อินเทอร์เน็ตเอกซ์พลอเรอร์:''' กดปุ่ม ''Ctrl'' ค้างไว้ขณะคลิก ''Refresh'' หรือกดปุ่ม ''Ctrl-F5''
 * '''คองเคอเรอร์:''' คลิก ''Reload'' หรือกดปุ่ม ''F5''
 * '''โอเปร่า:''' ล้างแคชในเมนู ''Tools → Preferences''",
-'usercssyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบ CSS สไตล์ชีทก่อนทำการบันทึก",
-'userjsyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม 'แสดงตัวอย่าง' เพื่อทดสอบสไตล์ชีตหรือจาวาสคริปต์ก่อนทำการบันทึก",
-'usercsspreview' => "'''อย่าลืมว่าสไตล์ชีตที่คุณสร้างยังไม่ได้ถูกบันทึก'''
-'''นี่คือการแสดงตัวอย่างเท่านั้น!'''",
-'userjspreview' => "'''อย่าลืมว่าจาวาสคริปต์ยังไม่ได้ถูกบันทึก ขณะนี้แสดงเพียงตัวอย่างเท่านั้น!'''",
-'sitecsspreview' => "'''โปรดจำไว้ว่า คุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น'''
+'usercssyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบสไตล์ชีท CSS ก่อนบันทึก",
+'userjsyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม \"แสดงตัวอย่าง\" เพื่อทดสอบจาวาสคริปต์ใหม่ก่อนบันทึก",
+'usercsspreview' => "'''อย่าลืมว่าคุณกำลังดูตัวอย่าง CSS ผู้ใช้ของคุณ'''
+'''ยังไม่ได้ถูกบันทึก!'''",
+'userjspreview' => "'''อย่าลืมว่าคุณกำลังทดสอบ/ดูตัวอย่างจาวาสคริปต์ผู้ใช้ของคุณ'''
+'''ยังไม่ถูกบันทึก!'''",
+'sitecsspreview' => "'''พึงระลึกว่าคุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น'''
 '''มันยังไม่ได้ถูกบันทึก!'''",
-'sitejspreview' => "'''à¹\82à¸\9bรà¸\94à¸\88ำà¹\84วà¹\89วà¹\88า à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87รหัส JavaScript นี้เท่านั้น'''
+'sitejspreview' => "'''à¸\9eึà¸\87ระลึà¸\81วà¹\88าà¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¹\82à¸\84à¹\89à¸\94à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8cนี้เท่านั้น'''
 '''มันยังไม่ได้ถูกบันทึก!'''",
-'userinvalidcssjstitle' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¹\84มà¹\88มีà¹\81à¸\9aà¸\9aหà¸\99à¹\89าà¸\95า \"\$1\" à¸­à¸¢à¹\88าลืมวà¹\88าหà¸\99à¹\89า .css à¹\81ละ .js à¸\97ีà¹\88à¸\9bรัà¸\9aà¹\81à¸\95à¹\88à¸\87à¹\80อà¸\87 à¹\83à¸\8aà¹\89à¹\80à¸\9bà¹\87à¸\99อัà¸\81ษรตัวพิมพ์เล็กทั้งหมด เช่น ใช้ {{ns:user}}:Foo/vector.css แทนที่จะเป็น {{ns:user}}:Foo/Vector.css",
+'userinvalidcssjstitle' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¹\84มà¹\88มีหà¸\99à¹\89าà¸\95า \"\$1\" à¸«à¸\99à¹\89า .css à¹\81ละ .js à¸\97ีà¹\88à¸\9bรัà¸\9aà¹\81à¸\95à¹\88à¸\87à¹\80อà¸\87 à¹\83à¸\8aà¹\89ตัวพิมพ์เล็กทั้งหมด เช่น ใช้ {{ns:user}}:Foo/vector.css แทนที่จะเป็น {{ns:user}}:Foo/Vector.css",
 'updated' => '(ปรับปรุงแล้ว)',
 'note' => "'''คำแนะนำ:'''",
 'previewnote' => "'''พึงระลึกว่านี่เป็นเพียงตัวอย่างเท่านั้น'''
@@ -858,15 +862,17 @@ $1 เป็นผู้ดำเนินการบล็อก
 'token_suffix_mismatch' => "'''การแก้ไขของคุณได้ถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายที่คุณใช้อยู่ได้ทำลายรูปแบบเครื่องหมายวรรคตอนในตราสารประจำการแก้ไข (edit token)'''
 ระบบไม่รับการแก้ไขของคุณเพื่อป้องกันความผิดพลาดของข้อมูล
 ในบางครั้งปัญหานี้จะเกิดขึ้นถ้าคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
-'edit_form_incomplete' => "'''à¸\9aาà¸\87สà¹\88วà¸\99à¸\82อà¸\87à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\9bà¹\84มà¹\88à¸\96ึà¸\87à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c à¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93ยัà¸\87à¸\84งอยู่และลองอีกครั้ง'''",
+'edit_form_incomplete' => "'''à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aาà¸\87สà¹\88วà¸\99à¹\84à¸\9bà¹\84มà¹\88à¸\96ึà¸\87à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c à¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93ยังอยู่และลองอีกครั้ง'''",
 'editing' => 'กำลังแก้ไข $1',
-'creating' => 'กำลังสร้างหน้า $1',
+'creating' => 'กำลังสร้าง $1',
 'editingsection' => 'กำลังแก้ไข $1 (เฉพาะส่วน)',
-'editingcomment' => 'à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82 $1 (หัวà¸\82à¹\89อใหม่)',
+'editingcomment' => 'à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82 $1 (à¸\95อà¸\99ใหม่)',
 'editconflict' => 'แก้ไขชนกัน: $1',
-'explainconflict' => "ใครบางคนได้เปลี่ยนแปลงหน้านี้ขณะที่คุณกำลังแก้ไข
-ข้อความส่วนบนเป็นข้อความปัจจุบันของหน้านี้ และส่วนล่างเป็นการแก้ไขของคุณ
-คุณต้องทำการรวมการเปลี่ยนแปลงของคุณเข้ากับข้อความปัจจุบัน '''เฉพาะ'''ข้อความส่วนบนเท่านั้นที่จะถูกบันทึก เมื่อกดปุ่ม \"{{int:savearticle}}\"",
+'explainconflict' => "ใครบางคนได้เปลี่ยนแปลงหน้านี้ตั้งแต่คุณกำลังแก้ไข
+พื้นที่ข้อความส่วนบนมีข้อความหน้าที่มีอยู่ในปัจจุบัน
+การแก้ไขของคุณแสดงอยู่ในพื้นที่ข้อความส่วนล่าง
+คุณจะต้องรวมการเปลี่ยนแปลงของคุณเข้ากับข้อความที่มีอยู่
+'''เฉพาะ'''ข้อความในพื้นที่ข้อความส่วนบนเท่านั้นที่จะถูกบันทึก เมื่อกดปุ่ม \"{{int:savearticle}}\"",
 'yourtext' => 'ข้อความของคุณ',
 'storedversion' => 'รุ่นที่เก็บไว้',
 'nonunicodebrowser' => "'''คำเตือน: เว็บเบราว์เซอร์นี้ไม่สนับสนุนการใช้งานแบบยูนิโคด ตัวอักษรที่ไม่ใช่แบบแอสกีจะแสดงในกล่องการแก้ไขในลักษณะรหัสเลขฐานสิบหก'''",
@@ -890,7 +896,7 @@ $1 เป็นผู้ดำเนินการบล็อก
 'semiprotectedpagewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'cascadeprotectedwarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
-'titleprotectedwarning' => "'''คำเตือน:  หน้านี้ได้รับการป้องกันไว้ให้สร้างได้โดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
+'titleprotectedwarning' => "'''คำเตือน: หน้านี้ได้รับการป้องกันไว้ให้สร้างได้เฉพาะโดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'templatesused' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:',
 'templatesusedpreview' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในการแสดงตัวอย่าง:',
@@ -922,14 +928,15 @@ $1 เป็นผู้ดำเนินการบล็อก
 'edit-no-change' => 'การแก้ไขของคุณถูกเพิกเฉย เพราะไม่มีการเปลี่ยนแปลงใด ๆ',
 'edit-already-exists' => 'ไม่สามารถสร้างหน้าใหม่ได้
 เพราะมีหน้านี้แล้ว',
+'defaultmessagetext' => 'ข้อความสารโดยปริยาย',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''คำเตือน:''' หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป
 
 หน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
 'expensive-parserfunction-category' => 'หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป',
-'post-expand-template-inclusion-warning' => 'คำเตือน: แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป
¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\9aาà¸\87หà¸\99à¹\89าà¸\88ะà¹\84มà¹\88à¸\96ูà¸\81รวมà¹\80à¸\82à¹\89ามา',
+'post-expand-template-inclusion-warning' => "'''คำเตือน:''' แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป
¸\9aาà¸\87à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\88ะà¹\84มà¹\88à¸\96ูà¸\81รวมà¹\80à¸\82à¹\89ามา",
 'post-expand-template-inclusion-category' => 'หน้าที่มีแม่แบบรวมมาเกินขนาด',
 'post-expand-template-argument-warning' => 'คำเตือน: หน้านี้มีแม่แบบที่มีอาร์กิวเมนต์ขนาดใหญ่เกินไป อาร์กิวเมนต์เหล่านี้จะถูกละทิ้ง',
 'post-expand-template-argument-category' => 'หน้าที่มีแม่แบบซึ่งอาร์กิวเมนต์ถูกละทิ้ง',
@@ -940,12 +947,12 @@ $1 เป็นผู้ดำเนินการบล็อก
 # "Undo" feature
 'undo-success' => 'การแก้ไขนี้สามารถย้อนกลับได้ กรุณาตรวจสอบข้อแตกต่างด้านล่างให้แน่ใจว่านี่คือสิ่งที่คุณต้องการทำ จากนั้นให้บันทึกการเปลี่ยนแปลงด้านล่างเพื่อเสร็จสิ้นขั้นตอน',
 'undo-failure' => 'การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขปัจจุบัน',
-'undo-norev' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96ยà¹\89อà¸\99à¹\84à¸\94à¹\89à¹\80à¸\9eราะà¹\84มà¹\88มีหรือà¸\96ูà¸\81ลà¸\9aà¹\81ลà¹\89วà¹\83à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99',
+'undo-norev' => 'à¹\84มà¹\88สามารà¸\96ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89 à¹\80à¸\9eราะà¹\84มà¹\88มีหรือà¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¹\81ลà¹\89ว',
 'undo-summary' => 'ย้อนการแก้ไขรุ่น $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'ไม่สามารถสร้างบัญชีได้',
-'cantcreateaccount-text' => "à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88à¸\9cà¹\88าà¸\99à¸\97าà¸\87หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\99ีà¹\89 ('''$1''') à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\84วà¹\89โดย [[User:$3|$3]]
+'cantcreateaccount-text' => "à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\83หมà¹\88à¸\88าà¸\81à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\99ีà¹\89 ('''$1''') à¸\96ูà¸\81ระà¸\87ัà¸\9aโดย [[User:$3|$3]]
 
 เหตุผลที่ $3 ให้ไว้ คือ ''$2''",
 
@@ -984,7 +991,7 @@ $1 เป็นผู้ดำเนินการบล็อก
 # Revision deletion
 'rev-deleted-comment' => '(คำอธิบายอย่างย่อถูกลบออก)',
 'rev-deleted-user' => '(ชื่อผู้ใช้ถูกลบออก)',
-'rev-deleted-event' => '(หà¸\99à¹\89าà¸\97ีà¹\88à¹\83สà¹\88à¹\80à¸\82à¹\89ามาถูกลบออก)',
+'rev-deleted-event' => '(à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\9bูมถูกลบออก)',
 'rev-deleted-user-contribs' => '[ชื่อผู้ใช้หรือหมายเลขไอพีถูกลบแล้ว - การแก้ไขถูกซ่อนจากรายการแก้ไข]',
 'rev-deleted-text-permission' => "รุ่นของหน้านี้'''ถูกลบ'''
 รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
@@ -1127,7 +1134,7 @@ $1",
 # Search results
 'searchresults' => 'ผลการค้นหา',
 'searchresults-title' => 'ผลการค้นหาสำหรับ "$1"',
-'searchresulttext' => 'สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการค้น{{SITENAME}} ดูที่ [[{{MediaWiki:Helppage}}|{{int:help}}]]',
+'searchresulttext' => 'สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการค้น {{SITENAME}} ดูที่ [[{{MediaWiki:Helppage}}|{{int:help}}]]',
 'searchsubtitle' => 'คุณได้สืบค้นหา \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|ทุกหน้าที่ขึ้นต้นด้วย "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ทุกหน้าที่โยงมาที่ "$1"]])',
 'searchsubtitleinvalid' => "ค้นหาเกี่ยวกับ '''$1'''",
 'toomanymatches' => 'พบตรงกันมากเกินไป กรุณาใช้คำค้นหาอื่น',
@@ -1146,7 +1153,7 @@ $1",
 'searchmenu-new' => "'''สร้างหน้า \"[[:\$1]]\" บนวิกินี้'''",
 'searchhelp-url' => 'Help:สารบัญ',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|สืบค้นหน้าที่มีคำขึ้นต้นนี้]]',
-'searchprofile-articles' => 'หà¸\99à¹\89าà¸\9aà¸\97à¸\84วาม',
+'searchprofile-articles' => 'หà¸\99à¹\89าà¹\80à¸\99ืà¹\89อหา',
 'searchprofile-project' => 'คำอธิบายและหน้าโครงการ',
 'searchprofile-images' => 'มัลติมีเดีย',
 'searchprofile-everything' => 'ทุกอย่าง',
@@ -1173,8 +1180,8 @@ $1",
 'showingresults' => "แสดง $1 รายการ เริ่มต้นจากรายการที่ '''$2'''",
 'showingresultsnum' => "แสดง $3 รายการ เริ่มต้นจากรายการที่  '''$2'''",
 'showingresultsheader' => "{{PLURAL:$5|ผลการสืบค้น '''$1''' จาก '''$3'''|ผลการสืบค้น '''$1 - $2''' จาก '''$3'''}} สำหรับ '''$4'''",
-'nonefound' => "'''à¸\84ำà¹\80à¸\95ือà¸\99''': à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\9aาà¸\87สà¹\88วà¸\99à¸\88ะà¸\96ูà¸\81à¸\84à¹\89à¸\99หาà¹\80อà¸\87
¹\83หà¹\89ลอà¸\87à¹\80ลือà¸\81à¸\84ำà¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¸\81ารà¸\84à¹\89à¸\99หาà¸\94à¹\89วย ''all:'' à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\84à¹\89à¸\99หาà¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมà¸\96ึà¸\87 หน้าอภิปราย แม่แบบ ฯลฯ) หรือเลือกเนมสเปซที่ต้องการ",
+'nonefound' => "'''à¸\84ำà¹\80à¸\95ือà¸\99''': à¸¡à¸µà¹\80à¸\9eียà¸\87à¸\9aาà¸\87à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\97ีà¹\88à¸\88ะà¸\96ูà¸\81à¸\84à¹\89à¸\99à¹\82à¸\94ยà¸\9bริยาย
¸¥à¸­à¸\87à¹\80ลือà¸\81à¸\84ำà¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¸\81ารà¸\84à¹\89à¸\99หาà¸\94à¹\89วย ''all:'' à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\84à¹\89à¸\99à¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมหน้าอภิปราย แม่แบบ ฯลฯ) หรือเลือกเนมสเปซที่ต้องการ",
 'search-nonefound' => 'ไม่มีผลลัพธ์ตามคำค้นที่กำหนด',
 'powersearch' => 'ค้นหาระดับสูง',
 'powersearch-legend' => 'ค้นหาระดับสูง',
@@ -1197,7 +1204,7 @@ $1",
 
 # Preferences page
 'preferences' => 'ตั้งค่าส่วนตัว',
-'mypreferences' => 'à¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัว',
+'mypreferences' => 'à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88า',
 'prefs-edits' => 'จำนวนการแก้ไข:',
 'prefsnologin' => 'ไม่ได้ล็อกอิน',
 'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span>ก่อนเพื่อตั้งค่าส่วนตัว',
@@ -1216,7 +1223,7 @@ $1",
 'prefs-watchlist-days-max' => 'มากสุด $1 วัน',
 'prefs-watchlist-edits' => 'จำนวนการแก้ไขมากสุดที่แสดงในรายการเฝ้าดูที่ขยายออก:',
 'prefs-watchlist-edits-max' => 'จำนวนสูงสุด: 1000',
-'prefs-watchlist-token' => 'สัà¸\8dลัà¸\81ษà¸\93à¹\8cรายการเฝ้าดู:',
+'prefs-watchlist-token' => 'à¹\82à¸\97à¹\80à¸\84à¹\87à¸\99รายการเฝ้าดู:',
 'prefs-misc' => 'เบ็ดเตล็ด',
 'prefs-resetpass' => 'เปลี่ยนรหัสผ่าน',
 'prefs-changeemail' => 'เปลี่ยนที่อยู่อีเมล',
@@ -1260,7 +1267,7 @@ $1",
 'timezoneregion-indian' => 'มหาสมุทรอินเดีย',
 'timezoneregion-pacific' => 'มหาสมุทรแปซิฟิก',
 'allowemail' => 'เปิดรับอีเมลจากผู้ใช้อื่น',
-'prefs-searchoptions' => 'à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¸\84à¹\89à¸\99หา',
+'prefs-searchoptions' => 'ค้นหา',
 'prefs-namespaces' => 'เนมสเปซ',
 'defaultns' => 'หรือค้นหาในเนมสเปซต่อไปนี้:',
 'default' => 'ค่าโดยปริยาย',
@@ -1283,7 +1290,7 @@ $1",
 'yournick' => 'ลายเซ็น:',
 'prefs-help-signature' => 'ความเห็นในหน้าพูดคุยควรจะลงลายเซ็นด้วย "<nowiki>~~~~</nowiki>" ซึ่งจะถูกแปลงเป็นลายเซ็นและตราเวลา',
 'badsig' => 'ลายเซ็นที่ใช้ผิดพลาด กรุณาตรวจสอบคำสั่งเอชทีเอ็มแอล',
-'badsiglength' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\82อà¸\87à¸\84ุà¸\93ยาวà¹\80à¸\81ิà¸\99à¹\84à¸\9b à¸\95à¹\89อà¸\87มีà¸\84วามยาวà¹\84มà¹\88à¹\80à¸\81ิà¸\99 $1 à¸\95ัวอัà¸\81ษร',
+'badsiglength' => 'ลายเซ็นของคุณยาวเกินไป ต้องยาวไม่เกิน $1 ตัวอักษร',
 'yourgender' => 'เพศ:',
 'gender-unknown' => 'ไม่ระบุ',
 'gender-male' => 'ชาย',
@@ -1308,7 +1315,7 @@ $1",
 'prefs-displayrc' => 'ค่าการแสดงผล',
 'prefs-displaysearchoptions' => 'ค่าการแสดงผล',
 'prefs-displaywatchlist' => 'ค่าการแสดงผล',
-'prefs-diffs' => 'สà¹\88วà¸\99à¸\95à¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
+'prefs-diffs' => 'à¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => 'ที่อยู่อีเมลดูถูกต้อง',
@@ -1348,9 +1355,9 @@ $1",
 
 'group-user-member' => '{{GENDER:$1|ผู้ใช้ใหม่}}',
 'group-autoconfirmed-member' => 'ผู้ใช้ทั่วไป',
-'group-bot-member' => 'บอต',
-'group-sysop-member' => 'ผู้ดูแล',
-'group-bureaucrat-member' => 'ผู้ดูแลสิทธิแต่งตั้ง',
+'group-bot-member' => '{{GENDER:$1|บอต}}',
+'group-sysop-member' => '{{GENDER:$1|ผู้ดูแลระบบ}}',
+'group-bureaucrat-member' => '{{GENDER:$1|ผู้ดูแลสิทธิแต่งตั้ง}}',
 'group-suppress-member' => '{{GENDER:$1|oversight}}',
 
 'grouppage-user' => '{{ns:project}}:ผู้ใช้',
@@ -1405,13 +1412,13 @@ $1",
 'right-editusercssjs' => 'แก้ไข CSS และ JS ของผู้ใช้คนอื่น',
 'right-editusercss' => 'แก้ไข CSS ของผู้ใช้คนอื่น',
 'right-edituserjs' => 'แก้ไข JS ของผู้ใช้คนอื่น',
-'right-rollback' => 'ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¹\88าสุà¸\94à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aาà¸\87หà¸\99à¹\89าà¹\82à¸\94ยà¹\80à¸\89à¸\9eาะอยà¹\88าà¸\87รวà¸\94à¹\80รà¹\87ว',
+'right-rollback' => 'ย้อนการแก้ไขของผู้ใช้ล่าสุดที่แก้ไขหน้าโดยเฉพาะอย่างรวดเร็ว',
 'right-markbotedits' => 'ทำเครื่องหมายการย้อนว่าเป็นการแก้ไขโดยบอต',
 'right-noratelimit' => 'ไม่มีผลกระทบจากการจำกัดสิทธิตามเวลา',
 'right-import' => 'นำเข้าหน้าจากวิกิอื่น',
 'right-importupload' => 'นำเข้าหน้าจากไฟล์ที่อัปโหลด',
 'right-patrol' => 'ทำเครื่องหมายการแก้ไขของผู้อื่นว่าตรวจสอบแล้ว',
-'right-autopatrol' => 'à¸\95ัà¹\89à¸\87à¹\83หà¹\89à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87วà¹\88าà¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วà¹\82à¸\94ยอัตโนมัติ',
+'right-autopatrol' => 'à¸\95ัà¹\89à¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87วà¹\88าà¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วอัตโนมัติ',
 'right-patrolmarks' => 'ดูการเปลี่ยนแปลงล่าสุดของการทำเครื่องหมายตรวจสอบ',
 'right-unwatchedpages' => 'ดูรายการหน้าที่ไม่มีผู้เฝ้าดู',
 'right-mergehistory' => 'รวมประวัติการแก้ไขหน้า',
@@ -1420,13 +1427,15 @@ $1",
 'right-siteadmin' => 'ล็อกและปลดล็อกฐานข้อมูล',
 'right-override-export-depth' => 'ส่งออกหน้า รวมหน้าที่เชื่อมโยงกับหน้านี้สูงสุด 5 ลำดับชั้น',
 'right-sendemail' => 'ส่งอีเมลหาผู้ใช้อื่น',
-'right-passwordreset' => 'เปลี่ยนรหัสผ่านของผู้ใช้ ([[Special:PasswordReset|หน้าพิเศษ]])',
+'right-passwordreset' => 'ดูอีเมลตั้งรหัสผ่านใหม่',
+
+# Special:Log/newusers
+'newuserlogpage' => 'ปูมการสร้างบัญชีผู้ใช้',
+'newuserlogpagetext' => 'นี่คือปูมการสร้างบัญชีผู้ใช้',
 
 # User rights log
 'rightslog' => 'ปูมสิทธิผู้ใช้',
 'rightslogtext' => 'ส่วนนี้คือปูมการเปลี่ยนแปลงสิทธิผู้ใช้',
-'rightslogentry' => '$1 ถูกเปลี่ยนกลุ่มจาก $2 เป็น $3',
-'rightsnone' => '(ไม่มี)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'อ่านหน้านี้',
@@ -1474,7 +1483,7 @@ $1",
 'recentchanges-label-minor' => 'เป็นการแก้ไขเล็กน้อย',
 'recentchanges-label-bot' => 'การแก้ไขนี้กระทำโดยบอต',
 'recentchanges-label-unpatrolled' => 'การแก้ไขนี้ยังไม่ได้ตรวจสอบ',
-'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง {{PLURAL:$2|1 วัน|'''$2''' วัน}}ที่ผ่านมา จนถึง $5; $4",
+'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง '''$2''' วันที่ผ่านมา จนถึง $5, $4",
 'rcnotefrom' => "แสดงการเปลี่ยนแปลงตั้งแต่ '''$2''' (แสดง '''$1''' รายการ)",
 'rclistfrom' => 'แสดงการเปลี่ยนแปลงตั้งแต่ $1',
 'rcshowhideminor' => '$1การแก้ไขเล็กน้อย',
@@ -1483,7 +1492,7 @@ $1",
 'rcshowhideanons' => '$1ผู้ใช้นิรนาม',
 'rcshowhidepatr' => '$1การแก้ไขที่ตรวจสอบแล้ว',
 'rcshowhidemine' => '$1การแก้ไขของฉัน',
-'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา;<br />$3',
+'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3',
 'diff' => 'ต่าง',
 'hist' => 'ประวัติ',
 'hide' => 'ซ่อน',
@@ -1562,7 +1571,7 @@ $1",
 'filename-tooshort' => 'ชื่อไฟล์สั้นเกินไป',
 'filetype-banned' => 'ไฟล์ประเภทนี้ถูกห้าม',
 'verification-error' => 'ไฟล์นี้ไม่ผ่านการพิสูจน์ยืนยันไฟล์',
-'hookaborted' => 'สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¸\97ีà¹\88à¸\88ะà¸\97ำà¸\81ารà¸\9bรัà¸\9aà¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\94à¹\89ถูกยกเลิกโดยส่วนขยาย',
+'hookaborted' => 'สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¸\9bรัà¸\9aà¹\80à¸\9bลีà¹\88ยà¸\99ถูกยกเลิกโดยส่วนขยาย',
 'illegal-filename' => 'ชื่อไฟล์นี้ไม่ได้รับอนุญาต',
 'overwrite' => 'ไม่อนุญาตให้เขียนทับไฟล์ที่มีอยู่แล้ว',
 'unknown-error' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุ',
@@ -1599,9 +1608,9 @@ $1",
 'uploadwarning' => 'คำเตือนการอัปโหลด',
 'uploadwarning-text' => 'กรุณาแก้ไขคำอธิบายไฟล์ด้านล่างนี้ แล้วลองใหม่อีกครั้ง',
 'savefile' => 'บันทึกไฟล์',
-'uploadedimage' => '"[[$1]]" ถูกอัปโหลด',
+'uploadedimage' => 'อัปโหลด "[[$1]]"',
 'overwroteimage' => 'อัปโหลดรุ่นใหม่ของ "[[$1]]"',
-'uploaddisabled' => 'อัà¸\9bà¹\82หลà¸\94à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'uploaddisabled' => 'à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99อัà¸\9bà¹\82หลà¸\94',
 'copyuploaddisabled' => 'การอัปโหลดโดย URL ได้ถูกปิดการใช้งานไว้',
 'uploadfromurl-queued' => 'การอัพโหลดของคุณได้ถูกจัดในคิวแล้ว',
 'uploaddisabledtext' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน',
@@ -1618,7 +1627,7 @@ $1",
 'upload-options' => 'ตัวเลือกอัปโหลด',
 'watchthisupload' => 'เฝ้าดูไฟล์นี้',
 'filewasdeleted' => 'ไฟล์ในชื่อนี้ได้ถูกอัปโหลดก่อนหน้าและถูกลบไปแล้ว กรุณาตรวจสอบ $1 ก่อนที่จะอัปโหลดใหม่อีกครั้ง',
-'filename-bad-prefix' => "ไฟล์ที่คุณกำลังจะอัปโหลดเข้ามานี้มีชื่อที่ขึ้นต้นด้วย '''\"\$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใดๆ (โดยปกติแล้วชื่อนี้จะถูกตั้งมาโดยกล้องถ่ายรูปดิจิทัล).  กรุณาตั้งชื่อไฟล์ใหม่ที่สื่อความหมายมากกว่าเดิม",
+'filename-bad-prefix' => "ไฟล์ที่คุณกำลังจะอัปโหลดเข้ามานี้มีชื่อที่ขึ้นต้นด้วย '''\"\$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใด ๆ ที่โดยปกติแล้วชื่อนี้จะถูกตั้งโดยกล้องถ่ายรูปดิจิทัลอัตโนมัติ กรุณาตั้งชื่อไฟล์ใหม่ที่สื่อความหมายกว่าเดิม",
 'upload-success-subj' => 'อัปโหลดสำเร็จ',
 'upload-success-msg' => 'การอัปโหลดของคุณจาก [$2] สำเร็จแล้ว และสามารถใช้ไฟล์ได้ที่นี่: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'ปัญหาการอัปโหลด',
@@ -1646,7 +1655,7 @@ $1',
 'backend-fail-copy' => 'ไม่สามารถคัดลอกไฟล์ "$1" ไปยัง "$2" ได้',
 'backend-fail-move' => 'ไม่สามารถย้ายไฟล์ "$1" ไปยัง "$2" ได้',
 'backend-fail-read' => 'ไม่สามารถอ่านไฟล์ "$1" ได้',
-'backend-fail-create' => 'à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¹\84à¸\9fลà¹\8c $1 à¹\84à¸\94à¹\89.',
+'backend-fail-create' => 'à¹\84มà¹\88สามารà¸\96à¹\80à¸\82ียà¸\99à¹\84à¸\9fลà¹\8c "$1" à¹\84à¸\94à¹\89',
 
 # ZipDirectoryReader
 'zip-unsupported' => 'ไฟล์ดังกล่าวเป็นไฟล์ ZIP ซึ่งใช้คุณสมบัติ ZIP ที่ไม่ได้รับการสนับสนุนโดย MediaWiki.
@@ -1665,7 +1674,7 @@ $1',
 'img-auth-accessdenied' => 'การเข้าถึงถูกจำกัด',
 'img-auth-nopathinfo' => 'ค่า PATH_INFO สูญหาย
 เซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งข้อมูลนี้
-หรือà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cอาà¸\88à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¹\81à¸\9aà¸\9a CGI-based à¹\81ละà¹\84มà¹\88สà¸\99ัà¸\9aสà¸\99ุà¸\99à¸\82à¹\89อมูล img_auth
+หรือเซิร์ฟเวอร์อาจเป็นแบบ CGI-based และไม่สนับสนุนข้อมูล img_auth
 ดูที่ https://www.mediawiki.org/wiki/Manual:Image_Authorization',
 'img-auth-notindir' => 'ที่อยู่ที่ร้องขอไม่ได้อยู่ในไดเร็กทอรีอัพโหลดที่กำหนดไ้ว้',
 'img-auth-badtitle' => 'ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก "$1" ได้',
@@ -1775,7 +1784,7 @@ $1',
 'filedelete-comment' => 'เหตุผล:',
 'filedelete-submit' => 'ลบ',
 'filedelete-success' => "ลบไฟล์ '''$1''' แล้ว",
-'filedelete-success-old' => "à¹\84à¸\9fลà¹\8c '''[[Media:$1|$1]]''' à¸£à¸¸à¹\88à¸\99à¹\80มืà¹\88อ $3, $2 à¸\96ูà¸\81ลà¸\9aà¹\80รียà¸\9aรà¹\89อยà¹\81ลà¹\89ว",
+'filedelete-success-old' => "ไฟล์ '''[[Media:$1|$1]]''' รุ่นเมื่อ $3, $2 ถูกลบแล้ว",
 'filedelete-nofile' => "ไม่มีไฟล์ '''$1'''",
 'filedelete-nofile-old' => "ไม่มี '''$1''' ตามคุณลักษณะที่กำหนด อยู่ในกรุ",
 'filedelete-otherreason' => 'เหตุผลอื่น/เพิ่มเติม:',
@@ -1783,7 +1792,7 @@ $1',
 'filedelete-reason-dropdown' => '* เหตุผลการลบทั่วไป
 ** ละเมิดลิขสิทธิ์
 ** ไฟล์ซ้ำ',
-'filedelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\8aืà¹\88อà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99การลบ',
+'filedelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80หà¸\95ุà¸\9cลการลบ',
 'filedelete-maintenance' => 'ปิดการลบและเรียกคืนไฟล์ไว้ชั่วคราว ในระหว่างการซ่อมบำรุง',
 'filedelete-maintenance-title' => 'ไม่สามารถลบไฟล์',
 
@@ -1818,26 +1827,26 @@ $1',
 'statistics-header-edits' => 'สถิติการแก้ไข',
 'statistics-header-views' => 'สถิติการเข้าชม',
 'statistics-header-users' => 'สถิติผู้ใช้',
-'statistics-header-hooks' => 'สถิติอื่น',
+'statistics-header-hooks' => 'สถิติอื่น',
 'statistics-articles' => 'หน้าเนื้อหา',
 'statistics-pages' => 'หน้าทั้งหมด',
-'statistics-pages-desc' => 'หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ีà¹\89 à¸£à¸§à¸¡à¹\84à¸\9bà¸\96ึà¸\87หà¸\99à¹\89าà¸\95à¹\88าà¸\87 à¹\86 à¹\80à¸\8aà¹\88à¸\99 à¸«à¸\99à¹\89าสà¸\99à¸\97à¸\99า à¹\81ละหน้าเปลี่ยนทาง เป็นต้น',
+'statistics-pages-desc' => 'หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89 à¸£à¸§à¸¡à¸\97ัà¹\89à¸\87หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุย หน้าเปลี่ยนทาง เป็นต้น',
 'statistics-files' => 'จำนวนไฟล์ที่ถูกอัปโหลด',
-'statistics-edits' => 'การแก้ไขหน้าทั้งหมดนับแต่ก่อตั้ง{{SITENAME}}ภาษาไทย',
+'statistics-edits' => 'การแก้ไขหน้าทั้งหมดนับแต่ก่อตั้ง {{SITENAME}}',
 'statistics-edits-average' => 'จำนวนแก้ไขต่อหน้าโดยเฉลี่ย',
 'statistics-views-total' => 'จำนวนการเข้าชมทั้งหมด',
 'statistics-views-total-desc' => 'ไม่นับรวมจำนวนการเข้าชมหน้าที่ไม่มีอยู่และหน้าพิเศษ',
 'statistics-views-peredit' => 'จำนวนการเข้าดูต่อการแก้ไข:',
-'statistics-users' => '[[Special:ListUsers|à¸\9cูà¹\89à¹\83à¸\8aà¹\89]]à¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99',
+'statistics-users' => '[[Special:ListUsers|ผู้ใช้]]ลงทะเบียน',
 'statistics-users-active' => 'ผู้ใช้ที่ยังแก้ไขอยู่',
-'statistics-users-active-desc' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84à¸\94à¹\89à¹\81à¸\81à¹\89à¹\84à¸\82ในช่วง $1 วันที่ผ่านมา',
+'statistics-users-active-desc' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\94ำà¹\80à¸\99ิà¸\99à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารในช่วง $1 วันที่ผ่านมา',
 'statistics-mostpopular' => 'หน้าที่มีการเข้าชมมากที่สุด',
 
 'disambiguations' => 'หน้าที่เชื่อมโยงกับหน้าแก้ความกำกวม',
 'disambiguationspage' => 'Template:แก้กำกวม',
-'disambiguations-text' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87 '''หà¸\99à¹\89าà¸\84ำà¸\81ำà¸\81วม''' à¸\8bึà¹\88à¸\87à¹\80à¸\99ืà¹\89อหาà¹\83à¸\99หà¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¸\84วรà¸\96ูà¸\81à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87หัวà¸\82à¹\89อà¸\97ีà¹\88à¹\80หมาะสมà¹\81à¸\97à¸\99à¸\97ีà¹\88<br />
-
-หà¸\99à¹\89าà¹\83à¸\94à¸\97ีà¹\88à¹\80รียà¸\81à¹\83à¸\8aà¹\89 [[MediaWiki:Disambiguationspage]] à¸«à¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¸\88ะà¸\96ูà¸\81à¸\99ัà¸\9aà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84ำกำกวม",
+'disambiguations-text' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89มีอยà¹\88าà¸\87à¸\99à¹\89อยหà¸\99ึà¹\88à¸\87ลิà¸\87à¸\81à¹\8cà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87'''หà¸\99à¹\89าà¸\84วามà¸\81ำà¸\81วม'''
+ซึ่งอาจต้องลิงก์ไปยังหน้าที่เหมาะสมแทน<br />
+หà¸\99à¹\89าà¹\83à¸\94à¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมาà¸\88าà¸\81 [[MediaWiki:Disambiguationspage]] à¸«à¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¸\88ะà¸\96ูà¸\81à¸\99ัà¸\9aรวมà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84วามกำกวม",
 
 'doubleredirects' => 'หน้าเปลี่ยนทางซ้ำซ้อน',
 'doubleredirectstext' => 'หน้านี้แสดงรายการชื่อที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น
@@ -1857,7 +1866,7 @@ $1',
 'withoutinterwiki-legend' => 'คำนำหน้า',
 'withoutinterwiki-submit' => 'แสดง',
 
-'fewestrevisions' => 'หน้าที่มีการแก้ไขน้อย',
+'fewestrevisions' => 'หน้าที่มีการแก้ไขน้อยสุด',
 
 # Miscellaneous special pages
 'nbytes' => '$1 ไบต์',
@@ -1891,33 +1900,34 @@ $1',
 'mostinterwikis' => 'หน้าที่มีลิงก์ข้ามภาษามากที่สุด',
 'mostrevisions' => 'หน้าที่มีการแก้ไขมาก',
 'prefixindex' => 'หน้าทั้งหมดตามดัชนีคำขึ้นต้น',
+'prefixindex-namespace' => 'ทุกหน้าที่มีคำขึ้นต้น ($1 เนมสเปซ)',
 'shortpages' => 'หน้าสั้นมาก',
 'longpages' => 'หน้ายาวมาก',
 'deadendpages' => 'หน้าสุดทาง',
-'deadendpagestext' => 'หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89ลิà¸\87à¸\81à¹\8cà¹\84à¸\9bหà¸\99à¹\89าหà¸\99à¹\89าà¹\83à¸\94à¹\83à¸\99วิà¸\81ิ',
+'deadendpagestext' => 'หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89ลิà¸\87à¸\81à¹\8cà¹\84à¸\9bหà¸\99à¹\89าอืà¹\88à¸\99à¹\83à¸\99 {{SITENAME}}',
 'protectedpages' => 'หน้าถูกล็อก',
 'protectedpages-indef' => 'การล็อกแบบไม่จำกัดเท่านั้น',
 'protectedpages-cascade' => 'การล็อกแบบสืบทอดเท่านั้น',
-'protectedpagestext' => 'หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81หà¹\89ามà¹\81à¸\81à¹\89à¹\84à¸\82หรือหà¹\89ามà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ',
+'protectedpagestext' => 'หน้าต่อไปนี้ถูกล็อกห้ามแก้ไขหรือเปลี่ยนชื่อ',
 'protectedpagesempty' => 'ไม่มีหน้าใดที่ถูกล็อกตามค่าที่เลือก',
 'protectedtitles' => 'หัวเรื่องที่ได้รับการป้องกัน',
-'protectedtitlestext' => 'หัวà¹\80รืà¹\88อà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89สรà¹\89าà¸\87à¹\83หมà¹\88',
+'protectedtitlestext' => 'หัวà¹\80รืà¹\88อà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89สรà¹\89าà¸\87',
 'protectedtitlesempty' => 'ปัจจุบันไม่มีหัวเรื่องที่ได้รับการป้องกันด้วยค่าต่อไปนี้',
 'listusers' => 'รายนามผู้ใช้',
-'listusers-editsonly' => 'à¹\81สà¸\94à¸\87à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88รà¹\88วมแก้ไข',
+'listusers-editsonly' => 'à¹\81สà¸\94à¸\87à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ารแก้ไข',
 'listusers-creationsort' => 'เรียงลำดับตามวันสร้าง',
-'usereditcount' => 'การแก้ไข $1 {{PLURAL:$1|ครั้ง|ครั้ง}}',
-'usercreated' => '{{GENDER:$3|Created}} เมื่อ $1 เวลา $2',
+'usereditcount' => 'การแก้ไข $1 ครั้ง',
+'usercreated' => '{{GENDER:$3|ถูกสร้าง}}เมื่อ $1 เวลา $2',
 'newpages' => 'หน้าใหม่',
 'newpages-username' => 'ชื่อผู้ใช้:',
 'ancientpages' => 'หน้าที่ไม่ได้แก้ไขนานสุด',
 'move' => 'เปลี่ยนชื่อ',
 'movethispage' => 'เปลี่ยนชื่อหน้านี้',
-'unusedimagestext' => 'à¹\84à¸\9fลà¹\8cà¸\94ัà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\9bราà¸\81à¸\8fà¹\81à¸\95à¹\88à¹\84มà¹\88มีà¸\81ารà¹\80รียà¸\81à¹\83à¸\8aà¹\89à¸\97ีà¹\88หà¸\99à¹\89าà¹\83à¸\94ๆ เลย
-ภาà¸\9eà¸\99ีà¹\89อาà¸\88à¸\88ะà¸\96ูà¸\81à¹\83à¸\8aà¹\89à¸\88าà¸\81à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cอืà¹\88à¸\99 à¸\8bึà¹\88à¸\87ลิà¸\87à¸\81à¹\8cมาภาà¸\9eà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\82à¸\94ยà¸\95รà¸\87 à¸\94ัà¸\87à¸\99ัà¹\89à¸\99à¹\84à¸\9fลà¹\8cà¸\94ัà¸\87à¸\81ลà¹\88าวà¸\88ะยัà¸\87à¸\9bราà¸\81à¸\8fà¹\83à¸\99รายà¸\81ารà¸\99ีà¹\89à¹\81มà¹\89วà¹\88าจะมีการใช้อย่างต่อเนื่อง',
+'unusedimagestext' => 'à¹\84à¸\9fลà¹\8cà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89มีอยูà¹\88 à¹\81à¸\95à¹\88à¹\84มà¹\88มีà¸\81ารà¹\80รียà¸\81à¹\83à¸\8aà¹\89à¹\83à¸\99หà¸\99à¹\89าà¹\83à¸\94 ๆ เลย
+หมายà¹\80หà¸\95ุวà¹\88า à¹\80วà¹\87à¸\9aà¹\84วà¸\95à¹\8cอืà¹\88à¸\99อาà¸\88ลิà¸\87à¸\81à¹\8cมายัà¸\87à¹\84à¸\9fลà¹\8cà¸\94à¹\89วยยูอารà¹\8cà¹\81อลà¹\82à¸\94ยà¸\95รà¸\87 à¸\89ะà¸\99ัà¹\89à¸\99à¸\88ึà¸\87อาà¸\88ยัà¸\87มีà¸\8aืà¹\88ออยูà¹\88à¸\97ีà¹\88à¸\99ีà¹\88à¹\81มà¹\89จะมีการใช้อย่างต่อเนื่อง',
 'unusedcategoriestext' => 'หมวดหมู่ต่อไปนี้ยังมีอยู่ถึงแม้ว่าจะไม่มีว่าไม่มีหน้าไหนหรือบทความไหนใช้ส่วนนี้',
 'notargettitle' => 'ไม่พบหน้าปลายทาง',
-'notargettext' => 'à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87หรือà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87นี้',
+'notargettext' => 'à¸\84ุà¸\93มิà¹\84à¸\94à¹\89ระà¸\9aุหà¸\99à¹\89าหรือà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80à¸\9bà¹\89าหมายà¸\97ีà¹\88à¸\88ะà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99นี้',
 'nopagetitle' => 'ไม่มีหน้าเป้าหมายดังกล่าว',
 'nopagetext' => 'หน้าเป้าหมายที่คุณระบุไม่มีอยู่',
 'pager-newer-n' => 'ใหม่กว่า $1',
@@ -1937,8 +1947,8 @@ $1',
 'speciallogtitlelabel' => 'เป้าหมาย (ชื่อเรื่องหรือผู้ใช้):',
 'log' => 'ปูม',
 'all-logs-page' => 'ปูมสาธารณะทั้งหมด',
-'alllogstext' => 'à¹\81สà¸\94à¸\87à¸\9bูมà¸\97ีà¹\88มีà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87{{SITENAME}}
-à¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¹\83หà¹\89ละà¹\80อียà¸\94à¸\82ึà¹\89à¸\99à¹\82à¸\94ยà¹\80ลือà¸\81à¸\9bระà¹\80ภà¸\97à¸\82อà¸\87à¸\9bูม à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร (ระวัà¸\87อัà¸\81ษรภาษาอัà¸\87à¸\81ฤษà¸\9eิมà¸\9eà¹\8cà¹\80ลà¹\87à¸\81à¹\83หà¸\8dà¹\88)',
+'alllogstext' => 'à¸\81ารà¹\81สà¸\94à¸\87à¸\9cลรวมà¸\9bูมà¸\97ีà¹\88มีà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87 {{SITENAME}}
+คุณสามารถค้นหาให้ละเอียดขึ้นโดยเลือกประเภทปูม ชื่อผู้ใช้หรือหน้าที่ต้องการ (ระวังอักษรภาษาอังกฤษพิมพ์เล็กใหญ่)',
 'logempty' => 'ไม่พบรายการตรงกันในปูม',
 'log-title-wildcard' => 'ค้นหาชื่อเรื่องด้วยคำขึ้นต้น',
 'showhideselectedlogentries' => 'แสดง/ซ่อนรายการปูมที่เลือก',
@@ -1981,8 +1991,8 @@ $1',
 'linksearch-ns' => 'เนมสเปซ:',
 'linksearch-ok' => 'สืบค้น',
 'linksearch-text' => 'อักขระตัวแทนเช่น "*.wikipedia.org" สามารถใช้ได้
¹\82à¸\94à¹\80มà¸\99ระà¸\94ัà¸\9aà¸\9aà¸\99สุà¸\94à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87มีเป็นอย่างน้อย เช่น "*.org"<br />
-à¹\82à¸\9eรà¹\82à¸\97à¸\84อลà¸\97ีà¹\88รอà¸\87รัà¸\9a: <code>$1</code> (อยà¹\88าà¹\83สà¹\88à¸\84ำà¹\80หลà¹\88าà¸\99ีà¹\89à¹\83à¸\99à¸\81ารสืà¸\9aà¸\84à¹\89à¸\99à¸\82อà¸\87à¸\84ุà¸\93)',
¸\95à¹\89อà¸\87à¸\81ารà¹\82à¸\94à¹\80มà¸\99ระà¸\94ัà¸\9aà¸\9aà¸\99สุà¸\94เป็นอย่างน้อย เช่น "*.org"<br />
+à¹\82à¸\9eรà¹\82à¸\97à¸\84อลà¸\97ีà¹\88รอà¸\87รัà¸\9a: <code>$1</code> (à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¹\80à¸\9bà¹\89à¸\99 http:// à¸«à¸²à¸\81à¹\84มà¹\88ระà¸\9aุà¹\82à¸\9eรà¹\82à¸\97à¸\84อล)',
 'linksearch-line' => '$1 ถูกลิงก์จาก $2',
 'linksearch-error' => 'เครื่องหมายแทนอักขระ (wildcard) อยู่หน้าชื่อโฮสต์ได้เท่านั้น',
 
@@ -1990,21 +2000,17 @@ $1',
 'listusersfrom' => 'แสดงชื่อผู้ใช้โดยเริ่มต้นจาก:',
 'listusers-submit' => 'แสดง',
 'listusers-noresult' => 'ไม่พบชื่อผู้ใช้ที่ต้องการ',
-'listusers-blocked' => '(à¸\96ูà¸\81ระà¸\87ัà¸\9a)',
+'listusers-blocked' => '(à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81)',
 
 # Special:ActiveUsers
 'activeusers' => 'รายการผู้ใช้ประจำ',
-'activeusers-intro' => 'à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ิà¸\88à¸\81รรมà¹\83à¸\94à¹\86 à¹\83à¸\99รอà¸\9a $1 {{PLURAL:$1|วัà¸\99|วัà¸\99}}ที่ผ่านมา',
-'activeusers-count' => '{{PLURAL:$1|การแก้ไขล่าสุด|การแก้ไขล่าสุด $1 รายการ}} ใน{{PLURAL:$3|ช่วงวัน|ช่วง $3 วัน}}ที่ผ่านมา',
+'activeusers-intro' => 'à¸\99ีà¹\88à¸\84ือรายà¸\99ามà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ิà¸\88à¸\81รรมà¹\83à¸\94 à¹\86 à¹\83à¸\99 $1 à¸§à¸±à¸\99ที่ผ่านมา',
+'activeusers-count' => '{{PLURAL:$1|การแก้ไขล่าสุด|การแก้ไขล่าสุด $1 รายการ}} ในช่วง $3 วันที่ผ่านมา',
 'activeusers-from' => 'แสดงชื่อผู้ใช้โดยเริ่มจาก:',
 'activeusers-hidebots' => 'ซ่อนบอต',
 'activeusers-hidesysops' => 'ซ่อนผู้ดูแลระบบ',
 'activeusers-noresult' => 'ไม่พบชื่อผู้ใช้',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ปูมการสร้างบัญชีผู้ใช้ใหม่',
-'newuserlogpagetext' => 'นี่คือปูมการสร้างบัญชีผู้ใช้',
-
 # Special:ListGroupRights
 'listgrouprights' => 'สิทธิของกลุ่มผู้ใช้',
 'listgrouprights-summary' => 'รายชื่อกลุ่มผู้ใช้ต่อไปนี้ถูกกำหนดไว้บน {{SITENAME}} โดยมีสิทธิการเข้าถึงที่เกี่ยวข้อง และอาจมี[[{{MediaWiki:Listgrouprights-helppage}}|ข้อมูลเพิ่มเติม]]เกี่ยวกับสิทธิของแต่ละบุคคล',
@@ -2018,8 +2024,8 @@ $1',
 'listgrouprights-removegroup' => 'สามารถลบ{{PLURAL:$2|กลุ่มนี้|กลุ่มเหล่านี้}}ได้: $1',
 'listgrouprights-addgroup-all' => 'สามารถเพิ่มกลุ่มทั้งหมดได้',
 'listgrouprights-removegroup-all' => 'สามารถลบกลุ่มทั้งหมดได้',
-'listgrouprights-addgroup-self' => 'เพิ่ม {{PLURAL:$2|กลุ่ม|กลุ่ม}} เข้าไปในชื่อผู้ใช้: $1',
-'listgrouprights-removegroup-self' => 'ลบ {{PLURAL:$2|กลุ่ม|กลุ่ม}} ออกจากชื่อผู้ใช้: $1',
+'listgrouprights-addgroup-self' => 'เพิ่ม{{PLURAL:$2|กลุ่ม|กลุ่ม}}เข้าไปในชื่อผู้ใช้: $1',
+'listgrouprights-removegroup-self' => 'ลบ{{PLURAL:$2|กลุ่ม|กลุ่ม}}ออกจากชื่อผู้ใช้: $1',
 'listgrouprights-addgroup-self-all' => 'เพิ่มทุกกลุ่มเข้าไปในชื่อผู้ใช้นี้',
 'listgrouprights-removegroup-self-all' => 'ลบทุกกลุ่มออกจากชื่อผู้ใช้นี้',
 
@@ -2027,30 +2033,33 @@ $1',
 'mailnologin' => 'ไม่มีการส่งอีเมล',
 'mailnologintext' => 'ต้องการทำ[[Special:UserLogin|ล็อกอิน]]และตั้งค่าอีเมลในส่วน[[Special:Preferences|การตั้งค่า]] เพื่อจะส่งอีเมลหาผู้ใช้คนอื่น',
 'emailuser' => 'ส่งอีเมลหาผู้ใช้นี้',
+'emailuser-title-target' => 'ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}',
+'emailuser-title-notarget' => 'อีเมลผู้ใช้',
 'emailpage' => 'อีเมลผู้ใช้',
-'emailpagetext' => 'คุณสามารถใช้แบบฟอร์มด้านล่างส่งอีเมลหาผู้ใช้คนนี้
-à¸\8aืà¹\88ออีà¹\80มลà¸\9cูà¹\89สà¹\88à¸\87à¸\88ะà¹\83à¸\8aà¹\89à¸\8aืà¹\88ออีà¹\80มลà¸\97ีà¹\88à¹\84à¸\94à¹\89ระà¸\9aุà¹\84วà¹\89à¹\81ลà¹\89วà¹\83à¸\99[[Special:Preferences|à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัวà¸\82อà¸\87à¸\84ุà¸\93]] à¸\8bึà¹\88à¸\87à¸\9cูà¹\89รัà¸\9aสามารà¸\96à¸\95อà¸\9aà¸\81ลัà¸\9aà¹\84à¸\94à¹\89',
+'emailpagetext' => 'คุณสามารถใช้แบบฟอร์มด้านล่างส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้
+à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88à¸\84ุà¸\93à¸\81รอà¸\81à¹\83à¸\99[[Special:Preferences|à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัวà¸\82อà¸\87à¸\84ุà¸\93]]à¸\88ะà¸\9bราà¸\81à¸\8fà¹\80à¸\9bà¹\87à¸\99à¸\97ีà¹\88อยูà¹\88 "à¸\88าà¸\81" à¸\82อà¸\87อีà¹\80มล à¸\8bึà¹\88à¸\87à¸\9cูà¹\89รัà¸\9aสามารà¸\96à¸\95อà¸\9aà¸\81ลัà¸\9aà¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\82à¸\94ยà¸\95รà¸\87',
 'usermailererror' => 'การส่งอีเมลผิดพลาด:',
-'defemailsubject' => '{{SITENAME}} อีเมล์จากผู้ใช้งาน "$1"',
-'usermaildisabled' => 'à¸\81ารสà¹\88à¸\87อีà¹\80มลหาà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88สามารà¸\96à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84à¸\94à¹\89',
+'defemailsubject' => 'อีเมล {{SITENAME}} จากผู้ใช้ "$1"',
+'usermaildisabled' => 'สà¹\88à¸\87อีà¹\80มลหาà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
 'usermaildisabledtext' => 'คุณไม่สามารถส่งอีเมลไปหาผู้ใช้อื่นบนวิกินี้',
 'noemailtitle' => 'ไม่มีที่อยู่อีเมล',
 'noemailtext' => 'ผู้ใช้คนนี้ระบุที่อยู่อีเมลไม่ถูกต้อง',
 'nowikiemailtitle' => 'ไม่อนุญาตให้ใช้อีเมล',
-'nowikiemailtext' => 'ผู้ใช้ท่านนี้เลือกไม่รับอีเมลจากผู้ใช้อื่น',
-'emailtarget' => 'กรอกชื่อผู้ใช้งานของผู้รับ',
-'emailusername' => 'ชื่อผู้ใช้งาน :',
-'emailusernamesubmit' => 'ส่งข้อมูล',
-'email-legend' => 'ส่งอีเมลถึงผู้ใช้อื่นใน {{SITENAME}}',
+'nowikiemailtext' => 'ผู้ใช้คนนี้เลือกไม่รับอีเมลจากผู้ใช้อื่น',
+'emailnotarget' => 'ไม่มีชื่อผู้ใช้ของผู้รับหรือชื่อผู้ใช้ไม่ถูกต้อง',
+'emailtarget' => 'กรอกชื่อผู้ใช้ของผู้รับ',
+'emailusername' => 'ชื่อผู้ใช้ :',
+'emailusernamesubmit' => 'ส่ง',
+'email-legend' => 'ส่งอีเมลถึงผู้ใช้ {{SITENAME}} อีกคน',
 'emailfrom' => 'จาก:',
 'emailto' => 'ถึง:',
 'emailsubject' => 'หัวเรื่อง:',
 'emailmessage' => 'ข้อความ:',
 'emailsend' => 'ส่ง',
 'emailccme' => 'ส่งอีเมลสำเนากลับมา',
-'emailccsubject' => 'สà¹\88à¸\87à¸\82à¹\89อà¸\84วามà¸\8bà¹\89ำà¹\84à¸\9bà¸\97ีà¹\88$1: $2',
-'emailsent' => 'อีà¹\80มลà¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\80รียà¸\9aรà¹\89อย',
-'emailsenttext' => 'อีà¹\80มลà¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\80รียà¸\9aรà¹\89อย',
+'emailccsubject' => 'à¸\84ัà¸\94ลอà¸\81à¸\82à¹\89อà¸\84วามà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\9bยัà¸\87$1: $2',
+'emailsent' => 'อีà¹\80มลà¸\96ูà¸\81สà¹\88à¸\87à¹\81ลà¹\89ว',
+'emailsenttext' => 'อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81สà¹\88à¸\87à¹\81ลà¹\89ว',
 'emailuserfooter' => 'อีเมลฉบับนี้ถูกส่งโดย $1 ถึง $2 ด้วยฟังก์ชัน "อีเมลผู้ใช้รายนี้" ที่ {{SITENAME}}',
 
 # User Messenger
@@ -2058,19 +2067,17 @@ $1',
 'usermessage-editor' => 'ตัวส่งข้อความของระบบ',
 
 # Watchlist
-'watchlist' => 'รายการเฝ้าดู',
+'watchlist' => 'รายการเฝ้าดูของฉัน',
 'mywatchlist' => 'รายการเฝ้าดู',
-'watchlistfor2' => 'สำหรับ $1 ($2)',
-'nowatchlist' => 'à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หà¸\99à¹\89าà¹\84หà¸\99à¹\80à¸\82à¹\89ารายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู',
-'watchlistanontext' => 'กรุณา $1 เพื่อที่จะดูหรือแก้ไขหน้าในรายการเฝ้าดู',
+'watchlistfor2' => 'สำหรับ $1 $2',
+'nowatchlist' => 'à¹\84มà¹\88มีรายà¸\81ารà¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93',
+'watchlistanontext' => 'กรุณา$1เพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ',
 'watchnologin' => 'ไม่ได้ล็อกอิน',
-'watchnologintext' => 'ต้อง[[Special:UserLogin|ล็อกอิน]]เพื่อแก้ไขรายการเฝ้าดู',
-'addwatch' => 'เพิ่มเข้าไปยังรายการเฝ้าดู',
-'addedwatchtext' => 'หน้า "[[:$1]]" ถูกใส่เข้าไปใน[[Special:Watchlist|รายการเฝ้าดู]]ของคุณ ถ้ามีการเปลี่ยนแปลงเกิดขึ้นในหน้าเหล่านี้ รวมถึงหน้าพูดคุยของหน้านี้
-รายชื่อหน้าจะแสดงเป็นตัวหนาในส่วนของ[[Special:RecentChanges|หน้าการเปลี่ยนแปลงล่าสุด]]เพื่อให้โดดเด่นเป็นที่สังเกต
-ถ้าไม่ต้องการเฝ้าดูให้กดที่  "เลิกเฝ้าดู" ในส่วนของเมนู',
-'removewatch' => 'ลบออกจากรายการเฝ้าดู',
-'removedwatchtext' => 'หน้า "[[:$1]]" ถูกนำออกจาก[[Special:Watchlist|รายการเฝ้าดูของท่าน]]',
+'watchnologintext' => 'ต้อง[[Special:UserLogin|ล็อกอิน]]เพื่อแก้ไขรายการเฝ้าดูของคุณ',
+'addwatch' => 'เพิ่มเข้ารายการเฝ้าดู',
+'addedwatchtext' => 'หน้า "[[:$1]]" ถูกเพิ่มเข้า[[Special:Watchlist|รายการเฝ้าดู]]ของคุณ ถ้ามีการเปลี่ยนแปลงในหน้านี้ และหน้าพูดคุยที่เกี่ยวข้องจะแสดงรายการด้านล่าง',
+'removewatch' => 'นำออกจากรายการเฝ้าดู',
+'removedwatchtext' => 'หน้า "[[:$1]]" ถูกนำออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]',
 'watch' => 'เฝ้าดู',
 'watchthispage' => 'เฝ้าดูหน้านี้',
 'unwatch' => 'เลิกเฝ้าดู',
@@ -2078,14 +2085,14 @@ $1',
 'notanarticle' => 'ไม่ใช่หน้าเนื้อหา',
 'notvisiblerev' => 'รุ่นดังกล่าวถูกลบเรียบร้อยแล้ว',
 'watchnochange' => 'ไม่มีหน้าที่คุณเฝ้าดูถูกแก้ไขในระยะเวลาที่แสดง',
-'watchlist-details' => 'มี $1 à¸«à¸\99à¹\89าà¹\83à¸\99รายà¸\8aืà¹\88อเฝ้าดูของคุณ ไม่รวมหน้าอภิปราย',
+'watchlist-details' => 'มี $1 à¸«à¸\99à¹\89าà¹\83à¸\99รายà¸\81ารเฝ้าดูของคุณ ไม่รวมหน้าอภิปราย',
 'wlheader-enotif' => '* แจ้งเตือนผ่านอีเมลถูกเปิดใช้งาน',
-'wlheader-showupdated' => "* à¸«à¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94แสดงใน'''ตัวหนา'''",
+'wlheader-showupdated' => "* à¸«à¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80à¸\82à¹\89าà¸\8aมà¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87à¸\84ุà¸\93แสดงใน'''ตัวหนา'''",
 'watchmethod-recent' => 'ตรวจสอบการปรับปรุงล่าสุดกับหน้าเฝ้าดู',
 'watchmethod-list' => 'ตรวจสอบหน้าเฝ้าดูกับการแก้ไขล่าสุด',
 'watchlistcontains' => 'รายการเฝ้าดูของคุณมี $1 หน้า',
 'iteminvalidname' => "เกิดปัญหาชื่อไม่ถูกต้องกับ '$1'...",
-'wlnote' => 'ด้านล่างเป็นการแก้ไข $1 รายการ ในช่วง $2 ชั่วโมงที่ผ่านมา',
+'wlnote' => "ด้านล่างเป็นการแก้ไข{{PLURAL:$1|สุดท้าย|ล่าสุด '''$1''' รายการ}} ใน{{PLURAL:$2|ชั่วโมง|ช่วง '''$2''' ชั่วโมง}}ที่ผ่านมา จนถึง $3, $4",
 'wlshowlast' => 'แสดงล่าสุดใน $1 ชั่วโมง $2 วัน $3',
 'watchlist-options' => 'ตัวเลือกรายการเฝ้าดู',
 
@@ -2100,43 +2107,44 @@ $1',
 'enotif_subject_created' => '{{SITENAME}} หน้า $1 ถูกสร้างแล้วโดย {{gender:$2|$2}}',
 'enotif_subject_moved' => '{{SITENAME}} หน้า $1 ได้ย้ายแล้วโดย {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}} หน้า $1 ได้เปลี่ยนแล้วโดย {{gender:$2|$2}}',
-'enotif_lastvisited' => 'ดู $1 สำหรับการเปลี่ยนแปลงตั้งแต่ครั้งล่าสุดที่คุณเข้าชม',
+'enotif_lastvisited' => 'à¸\94ู $1 à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94à¸\97ีà¹\88à¸\84ุà¸\93à¹\80à¸\82à¹\89าà¸\8aม',
 'enotif_lastdiff' => 'ดู $1 เพื่อดูการเปลี่ยนแปลงนี้',
 'enotif_anon_editor' => 'ผู้ใช้นิรนาม $1',
-'enotif_body' => 'เรียน $WATCHINGUSERNAME,
-
+'enotif_body' => 'เรียน $WATCHINGUSERNAME
 
-ทางระบบจากเว็บ {{SITENAME}} ต้องการแจ้งให้ทราบว่า หน้า $PAGETITLE ได้ $CHANGEDORCREATED เมื่อ $PAGEEDITDATE โดย $PAGEEDITOR ดูรุ่นปัจจุบันได้ที่ $PAGETITLE_URL
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+คำอธิบายอย่างย่อของผู้เขียน: $PAGESUMMARY $PAGEMINOREDIT
 
-คำสรุปการแก้ไข: $PAGESUMMARY $PAGEMINOREDIT
-
-ติดต่อผู้แก้ไข:
-อีเมล: $PAGEEDITOR_EMAIL
+ติดต่อผู้เขียน:
+เมล: $PAGEEDITOR_EMAIL
 วิกิ: $PAGEEDITOR_WIKI
 
-จะไม่มีการแจ้งเพิ่มเติมจนกว่าคุณจะได้แวะเข้าไปที่หน้านี้
-นอกจากนี้คุณสามารถตั้งค่ายกเลิกการแจ้งของหน้าที่อยู่ในรายการเฝ้าดูได้
+จะไม่มีประกาศอื่นหากมีกิจกรรมเพิ่มเติม เว้นเสียแต่คุณจะเข้าชมหน้านี้ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ
 
-             ระบบแจ้งอัตโนมัติจาก {{SITENAME}}
+ระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ
 
 --
-ถ้าต้องการเปลี่ยนแปลงรายการเฝ้าดู กรุณาไปที่:
+ในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู
+{{canonicalurl:{{#special:Preferences}}}}
+
+ในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\99ีà¹\89à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู à¸\81รุà¸\93าà¹\84à¸\9bà¸\97ีà¹\88:
¹\83à¸\99à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93 à¹\82à¸\9bรà¸\94à¸\94ู
 $UNWATCHURL
 
-à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\84วามà¸\8aà¹\88วยà¹\80หลือà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¸\81รุà¸\93าà¹\84à¸\9bà¸\97ีà¹\88:
+à¸\9cลà¸\9bà¹\89อà¸\99à¸\81ลัà¸\9aà¹\81ละà¸\84วามà¸\8aà¹\88วยà¹\80หลือà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ถูกสร้าง',
+'changed' => 'ถูกเปลี่ยนแปลง',
 
 # Delete
 'deletepage' => 'ลบหน้า',
 'confirm' => 'ยืนยัน',
 'excontent' => "เนื้อหาเดิม: '$1'",
 'excontentauthor' => "เนื้อหาเดิม: '$1' (และมีผู้เขียนคนเดียว คือ '[[Special:Contributions/$2|$2]]')",
-'exbeforeblank' => "à¹\80à¸\99ืà¹\89อหาà¹\80à¸\94ิมà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\96ูà¸\81à¸\97ำà¹\83หà¹\89วà¹\88าà¸\87: '$1'",
+'exbeforeblank' => "à¹\80à¸\99ืà¹\89อหาà¸\81à¹\88อà¸\99à¸\96ูà¸\81à¸\97ำวà¹\88าà¸\87à¸\84ือ: '$1'",
 'exblank' => 'หน้าว่าง',
 'delete-confirm' => 'ลบ "$1"',
 'delete-legend' => 'ลบ',
@@ -2148,18 +2156,18 @@ $UNWATCHURL
 'deletedtext' => '"$1" ถูกลบ
 ดู $2 สำหรับบันทึกการลบล่าสุด',
 'dellogpage' => 'ปูมการลบ',
-'dellogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\82อà¸\87à¸\81ารลà¸\9aลà¹\88าสุà¸\94',
+'dellogpagetext' => 'ด้านล่างเป็นรายการการลบล่าสุด',
 'deletionlog' => 'ปูมการลบ',
 'reverted' => 'ย้อนไปรุ่นก่อนหน้า',
 'deletecomment' => 'เหตุผล:',
 'deleteotherreason' => 'เหตุผลอื่น/เพิ่มเติม:',
 'deletereasonotherlist' => 'เหตุผลอื่น',
-'deletereason-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\97ัà¹\88วà¹\84à¸\9bà¸\82อà¸\87à¸\81ารลà¸\9a
+'deletereason-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b
 ** รับแจ้งจากผู้เขียน
 ** ละเมิดลิขสิทธิ์
 ** ก่อกวน',
-'delete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\8aืà¹\88อà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99การลบ',
-'delete-toobig' => 'หน้านี้มีประวัติการแก้ไขนาดใหญ่ คือ $1 รุ่น การลบหน้าเช่นนี้ถูกจำกัดเพื่อป้องกันการรบกวน{{SITENAME}}โดยบังเอิญ',
+'delete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80หà¸\95ุà¸\9cลการลบ',
+'delete-toobig' => 'หน้านี้มีประวัติการแก้ไขนาดใหญ่ คือ กว่า $1 รุ่น การลบหน้าเช่นนี้ถูกจำกัดเพื่อป้องกันการรบกวน{{SITENAME}}โดยบังเอิญ',
 'delete-warning-toobig' => 'หน้านี้มีประวัติการแก้ไขขนาดใหญ่ กว่า $1 รุ่น การลบหน้านี้อาจรบกวนการทำงานของฐานข้อมูลของ {{SITENAME}} โปรดดำเนินการด้วยความระมัดระวัง',
 
 # Rollback
@@ -2167,27 +2175,28 @@ $UNWATCHURL
 'rollback_short' => 'ย้อนกลับฉุกเฉิน',
 'rollbacklink' => 'ย้อนกลับฉุกเฉิน',
 'rollbacklinkcount' => 'ย้อนกลับฉุกเฉิน $1 การแก้ไข',
+'rollbacklinkcount-morethan' => 'ย้อนกลับฉุกเฉินกว่า $1 การแก้ไข',
 'rollbackfailed' => 'ย้อนกลับฉุกเฉินล้มเหลว',
 'cantrollback' => 'ไม่สามารถย้อนการแก้ไขได้ ผู้เขียนคนล่าสุดเป็นผู้เขียนคนเดียวของหน้านี้',
 'alreadyrolled' => 'ไม่สามารถย้อนกลับฉุกเฉินการแก้ไขสุดท้ายโดย [[User:$2|$2]] ([[User talk:$2|พูดคุย]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ในหน้า [[:$1]] มีผู้อื่นได้แก้ไขหรือย้อนกลับฉุกเฉินหน้านี้ไปก่อนแล้ว
 
 ผู้แก้ไขล่าสุดของหน้านี้คือ [[User:$3|$3]] ([[User talk:$3|พูดคุย]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])',
-'editcomment' => "สรุà¸\9bà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82: \"''\$1''\"",
+'editcomment' => "à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\84ือ: \"''\$1''\"",
 'revertpage' => 'ย้อนการแก้ไขของ [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นของ [[User:$1|$1]]',
 'revertpage-nouser' => 'ย้อนการแก้ไขโดย (ชื่อผู้ใช้ถูกลบออก) ไปยังรุ่นล่าสุดโดย [[User:$1|$1]]',
-'rollback-success' => 'ยà¹\89อà¸\99รุà¹\88à¸\99à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย $1 à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99ลà¹\88าสุà¸\94à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย $2 à¹\81ลà¹\89ว',
+'rollback-success' => 'ยà¹\89อà¸\99รุà¹\88à¸\99à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย $1 à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99ลà¹\88าสุà¸\94à¹\82à¸\94ย $2',
 
 # Edit tokens
 'sessionfailure-title' => 'Session นี้ล้มเหลว',
-'sessionfailure' => 'à¸\97à¹\88าà¸\97าà¸\87จะมีปัญหาเกี่ยวการล็อกอินในช่วงเวลานี้ เกิดจากทางระบบป้องกันการลักลอบการขโมยล็อกอิน กรุณาย้อนกลับไปหน้าก่อนหน้า และลองโหลดใหม่อีกครั้ง',
+'sessionfailure' => 'à¹\80หมือà¸\99จะมีปัญหาเกี่ยวการล็อกอินในช่วงเวลานี้ เกิดจากทางระบบป้องกันการลักลอบการขโมยล็อกอิน กรุณาย้อนกลับไปหน้าก่อนหน้า และลองโหลดใหม่อีกครั้ง',
 
 # Protect
 'protectlogpage' => 'ปูมการล็อก',
 'protectlogtext' => 'ด้านล่างนี้คือรายการการเปลี่ยนแปลงการป้องกันหน้า
 ดู[[Special:ProtectedPages|รายการหน้าที่ถูกป้องกัน]]สำหรับการป้องกันหน้าในปัจจุบัน',
-'protectedarticle' => '"[[$1]]" ถูกล็อก',
+'protectedarticle' => 'ป้องกัน "[[$1]]"',
 'modifiedarticleprotection' => 'เปลี่ยนระดับการล็อกสำหรับ "[[$1]]"',
-'unprotectedarticle' => 'ลà¸\9aà¸\81ารà¸\9bà¸\81à¸\9bà¹\89อà¸\87à¸\82à¹\89อมูลออà¸\81จาก "[[$1]]" แล้ว',
+'unprotectedarticle' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99จาก "[[$1]]" แล้ว',
 'movedarticleprotection' => 'ย้ายการตั้งค่าการล็อกจาก "[[$2]]" ไปยัง "[[$1]]"',
 'protect-title' => 'กำลังล็อกหน้า "$1"',
 'protect-title-notallowed' => 'ดูระดับการป้องกันของ "$1"',
@@ -2199,7 +2208,7 @@ $UNWATCHURL
 'protectexpiry' => 'หมดอายุ:',
 'protect_expiry_invalid' => 'เวลาหมดอายุไม่ถูกต้อง',
 'protect_expiry_old' => 'เวลาหมดอายุผ่านมาแล้ว',
-'protect-unchain-permissions' => 'ปลดล็อกตัวเลือกป้องกันอื่นๆ',
+'protect-unchain-permissions' => 'ปลดล็อกตัวเลือกป้องกันอื่น ๆ',
 'protect-text' => "ดูและเปลี่ยนระดับการล็อกสำหรับหน้า '''$1'''.",
 'protect-locked-blocked' => "ไม่สามารถเปลี่ยนระดับการล็อกหน้าขณะที่ถูกบล็อกได้ ดูระดับการล็อกของหน้า '''$1''':",
 'protect-locked-dblock' => "ไม่สามารถเปลี่ยนระดับการล็อกหน้าได้เนื่องจากฐานข้อมูลถูกล็อก ดูระดับการล็อกของหน้า '''$1''':",
@@ -2252,15 +2261,16 @@ $UNWATCHURL
 'viewdeletedpage' => 'หน้าที่ถูกลบ',
 'undeletepagetext' => '{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้ถูกลบไปแล้ว แต่ยังคงอยู่ในกรุซึ่งสามารถเรียกคืนได้ กรุข้อมูลอาจถูกลบเป็นระยะ',
 'undelete-fieldset-title' => 'กู้คืนรุ่นต่าง ๆ',
-'undeleteextrahelp' => "à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80รียà¸\81à¸\84ืà¸\99à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¹\83à¸\94à¹\80ลย à¹\81ลà¹\89วà¸\81à¸\94à¸\9bุà¹\88ม '''''à¹\80รียà¸\81คืน'''''
-à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80รียà¸\81à¸\84ืà¸\99à¸\9bระวัà¸\95ิà¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\83à¸\94สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87 à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\97ีà¹\88มีà¸\9bระวัà¸\95ิสà¹\88วà¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\88ะà¹\80รียà¸\81à¸\84ืà¸\99 à¹\81ลà¹\89วà¸\81à¸\94'''''à¹\80รียà¸\81คืน'''''
+'undeleteextrahelp' => "à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\84ืà¸\99à¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¹\83à¸\94à¹\80ลย à¹\81ลà¹\89วà¸\81à¸\94à¸\9bุà¹\88ม '''''à¸\81ูà¹\89คืน'''''
+à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\84ืà¸\99à¹\80à¸\89à¸\9eาะà¸\9aาà¸\87สà¹\88วà¸\99 à¹\83หà¹\89à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\97ีà¹\88มีà¸\9bระวัà¸\95ิสà¹\88วà¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89 à¹\81ลà¹\89วà¸\81à¸\94'''''à¸\81ูà¹\89คืน'''''
 กด '''''ล้างค่า''''' เพื่อลบค่าในกล่องความเห็นและกล่องตัวเลือกทั้งหมด",
 'undeleterevisions' => '$1 รุ่นการแก้ไขถูกเก็บไว้',
 'undeletehistory' => 'เมื่อคุณกู้หน้าใดหน้าหนึ่ง รุ่นทั้งหมดจะถูกกู้คืนไปยังประวัติ หากมีหน้าใหม่ในชื่อเดียวกันถูกสร้างขึ้นหลังจากการลบ รุ่นที่กู้คืนนั้นจะปรากฏในประวัติที่มีมาก่อน',
 'undeleterevdel' => 'จะกู้คืนไม่ได้หากการกู้คืนนั้นส่งผลให้รุ่นล่าสุดของหน้าหรือไฟล์ถูกลบไปบางส่วน ในกรณีเช่นนั้น คุณต้องไม่เลือกหรือแสดงรุ่นใหม่สุดที่ถูกลบไปก่อน',
 'undeletehistorynoadmin' => 'หน้านี้ถูกลบก่อนหน้านี้ โดยสาเหตุการลบและรายชื่อผู้ร่วมแก้ไขก่อนหน้าแสดงผลด้านล่าง สำหรับข้อมูลที่ถูกลบจะดูได้เฉพาะผู้ดูแลระบบ',
 'undelete-revision' => 'รุ่นที่ถูกลบของหน้า $1 (ตั้งแต่ $4 เมื่อ $5) โดย $3:',
-'undeleterevision-missing' => 'รุ่นที่ต้องการดูไม่มี ข้อมูลอาจจะโดนลบ',
+'undeleterevision-missing' => 'รุ่นไม่ถูกต้องหรือสูญหาย
+คุณอาจมีลิงก์เสีย หรือรุ่นอาจถูกกู้คืนหรือนำออกจากกรุ',
 'undelete-nodiff' => 'ไม่พบรุ่นก่อนหน้า',
 'undeletebtn' => 'กู้คืน',
 'undeletelink' => 'ดู/กู้คืน',
@@ -2271,11 +2281,12 @@ $UNWATCHURL
 'undeletedrevisions' => '$1 รุ่นการแก้ไขถูกกู้คืน',
 'undeletedrevisions-files' => '$1 รุ่น และ $2 ไฟล์ถูกกู้คืน',
 'undeletedfiles' => '$1 ไฟล์ถูกกู้คืน',
-'cannotundelete' => 'เรียกคืนไม่สำเร็จ อาจมีใครบางคนเรียกคืนหน้านั้นแล้ว',
+'cannotundelete' => 'กู้คืนล้มเหลว:
+$1',
 'undeletedpage' => "'''$1 ถูกกู้คืน'''
 
 ดู[[Special:Log/delete|ปูมการลบ]] สำหรับรายชื่อการลบและการกู้คืนล่าสุด",
-'undelete-header' => 'à¸\94ู [[Special:Log/delete|à¸\9aัà¸\99à¸\97ึà¸\81การลบ]] สำหรับหน้าที่ถูกลบล่าสุด',
+'undelete-header' => 'à¸\94ู [[Special:Log/delete|à¸\9bูมการลบ]] สำหรับหน้าที่ถูกลบล่าสุด',
 'undelete-search-title' => 'ค้นหาหน้าที่ถูกลบ',
 'undelete-search-box' => 'ค้นหาหน้าที่ถูกลบ',
 'undelete-search-prefix' => 'ค้นหาหน้าที่เริ่มต้นด้วย:',
@@ -2295,14 +2306,14 @@ $1',
 
 # Namespace form on various pages
 'namespace' => 'เนมสเปซ:',
-'invert' => 'à¸\97ัà¹\89à¸\87หมà¸\94à¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89เลือก',
+'invert' => 'à¸\81ลัà¸\9aà¸\81ารเลือก',
 'tooltip-invert' => 'เลือกกล่องนี้เพื่อซ่อนการเปลี่ยนแปลงไปยังหน้าในเนมเปซที่เลือก (และเนมสเปซที่เกี่ยวข้องถ้าเลือก)',
 'namespace_association' => 'เนมสเปซที่เกี่ยวข้อง',
 'tooltip-namespace_association' => 'เลือกกล่องนี้เพื่อรวมเนมสเปซพูดคุยหรือหัวข้อที่เกี่ยวข้องกับเนมสเปซที่เลือกด้วย',
 'blanknamespace' => '(หลัก)',
 
 # Contributions
-'contributions' => 'เรื่องที่เขียนโดยผู้ใช้นี้',
+'contributions' => 'เรื่องที่เขียนโดย{{GENDER:$1|ผู้ใช้}}นี้',
 'contributions-title' => 'เรื่องที่เขียนโดย $1',
 'mycontris' => 'เรื่องที่เขียน',
 'contribsub2' => 'สำหรับ $1 ($2)',
@@ -2331,9 +2342,9 @@ $1',
 
 # What links here
 'whatlinkshere' => 'หน้าที่ลิงก์มา',
-'whatlinkshere-title' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\82ยà¸\87มาà¸\97ีà¹\88 "$1"',
+'whatlinkshere-title' => 'หà¸\99à¹\89าà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมายัà¸\87 "$1"',
 'whatlinkshere-page' => 'หน้า:',
-'linkshere' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89ลิà¸\87à¸\81à¹\8cมาà¸\97ีà¹\88 '''[[:$1]]''':",
+'linkshere' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89ลิà¸\87à¸\81à¹\8cมายัà¸\87 '''[[:$1]]''':",
 'nolinkshere' => "ไม่มีหน้าใดลิงก์มาที่ '''[[:$1]]'''",
 'nolinkshere-ns' => "ไม่มีหน้าใดลิงก์มาที่'''[[:$1]]''' ในเนมสเปซที่เลือกไว้",
 'isredirect' => 'หน้าเปลี่ยนทาง',
@@ -2345,7 +2356,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1หน้าเปลี่ยนทาง',
 'whatlinkshere-hidetrans' => '$1 ถูกรวมอยู่',
 'whatlinkshere-hidelinks' => '$1 ลิงก์',
-'whatlinkshere-hideimages' => '$1 ภาพที่ลิงก์',
+'whatlinkshere-hideimages' => '$1ลิงก์ไฟล์',
 'whatlinkshere-filters' => 'ตัวกรอง',
 
 # Block/unblock
@@ -2386,7 +2397,7 @@ $1',
 'badipaddress' => 'หมายเลขไอพีไม่ถูกต้อง',
 'blockipsuccesssub' => 'บล็อกสำเร็จ',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ถูกบล็อก<br />
-ดู[[Special:BlockList|รายการบล็อกไอพี]]เพื่อตรวจสอบการบล็อก',
+ดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก',
 'ipb-blockingself' => 'คุณกำลังทำการบล็อกตัวคุณเอง คุณแน่ใจแล้วหรือว่าต้องการทำเช่นนั้น',
 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
 'ipb-unblock-addr' => 'เลิกบล็อก $1',
@@ -2428,7 +2439,7 @@ $1',
 'change-blocklink' => 'เปลี่ยนการบล็อก',
 'contribslink' => 'เรื่องที่เขียน',
 'emaillink' => 'ส่งอีเมล',
-'autoblocker' => 'à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\95รà¸\87à¸\81ัà¸\9a "[[User:$1|$1]]" à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¸\81ลà¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81สาà¹\80หà¸\95ุ: "$2"',
+'autoblocker' => 'à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93ลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\83à¸\8aà¹\89à¹\82à¸\94ย "[[User:$1|$1]]" à¹\80หà¸\95ุà¸\9cลà¸\97ีà¹\88à¹\83หà¹\89à¹\81à¸\81à¹\88à¸\81ารà¸\9aลà¹\87อà¸\81 $1 à¸\84ือ: "$2"',
 'blocklogpage' => 'ปูมการบล็อก',
 'blocklog-showlog' => 'ผู้ใช้นี้ถูกสกัดกั้นมาก่อน
 ปูมการสกัดกั้นแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:',
@@ -2450,10 +2461,10 @@ $1',
 'range_block_disabled' => 'ยกเลิกการบล็อกช่วงไอพีของผู้ดูแลระบบ',
 'ipb_expiry_invalid' => 'ค่าวันหมดอายุไม่ถูกต้อง',
 'ipb_expiry_temp' => 'ผู้ใช้ที่ถูกบล็อกจะซ่อนโดยถาวร',
-'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81อาà¸\88à¸\88ะมีการแก้ไขมากเกินไป',
+'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\9eราะอาà¸\88มีการแก้ไขมากเกินไป',
 'ipb_already_blocked' => '"$1" ถูกบล็อกแล้วก่อนหน้านี้',
 'ipb-needreblock' => '$1 ถูกบล็อกแล้ว คุณต้องการแก้ไขหรือไม่',
-'ipb-otherblocks-header' => 'การบล็อกอื่นๆ',
+'ipb-otherblocks-header' => '{{PLURAL:$1|การบล็อก}}อื่น ๆ',
 'unblock-hideuser' => 'คุณไม่สามารถยกเลิกการบล็อคผู้ใช้งานรายนี้ได้, เนื่องจากชื่อผู้ใช้ของผู้ใช้งานถูกซ่อนอยู่',
 'ipb_cant_unblock' => 'ปัญหา: หมายเลขบล็อก $1 ไม่พบ อาจเกิดจากได้ถูกยกเลิกการบล็อกแล้ว',
 'ipb_blocked_as_range' => 'มีข้อผิดพลาด: หมายเลขไอพี $1 ไม่ได้ถูกระงับโดยตรงและไม่สามารถยกเลิกการระงับโดยตรงได้.  อย่างไรก็ตาม ไอพีนี้ถูกระงับในฐานะที่เป็นส่วนหนึ่งของหมายเลขไอพีในช่วง $2 ซึ่งสามารถยกเลิกการระงับได้',
@@ -2467,7 +2478,7 @@ $1',
 'sorbsreason' => 'หมายเลขไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์',
 'sorbs_create_account_reason' => 'หมายเลขไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์ ดังนั้นคุณไม่สามารถสร้างชื่อบัญชีผู้ใช้ได้',
 'cant-block-while-blocked' => 'คุณไม่สามารถบล็อกผู้ใช้อื่นในขณะที่คุณกำลังถูกบล็อก',
-'cant-see-hidden-user' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\88à¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามระà¸\87ัà¸\9aà¸\99ัà¹\89à¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aหรือà¸\8bà¹\88อà¸\99à¹\80à¸\94ิมอยูà¹\88à¹\81ลà¹\89ว à¹\83à¸\99à¸\82à¸\93ะà¸\97ีà¹\88ีà¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¸\84ุà¸\93ไม่สามารถดูหรือแก้ไขการระงับผู้ใช้ได้',
+'cant-see-hidden-user' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามระà¸\87ัà¸\9aà¸\99ัà¹\89à¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aหรือà¸\8bà¹\88อà¸\99à¹\80à¸\94ิมอยูà¹\88à¹\81ลà¹\89ว à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¸\8bà¹\88อà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¸\84ุà¸\93à¸\88ึà¸\87ไม่สามารถดูหรือแก้ไขการระงับผู้ใช้ได้',
 'ipbblocked' => 'คุณไม่สามารถบล็อกหรือปลดบล็อกผู้ใช้คนอื่น เนื่องจากคุณกำลังถูกบล็อก',
 'ipbnounblockself' => 'คุณไม่ได้รับอนุญาตให้ปลดบล็อกตนเอง',
 
@@ -2484,7 +2495,7 @@ $1',
 'lockdbsuccesssub' => 'ล็อกฐานข้อมูลเรียบร้อย',
 'unlockdbsuccesssub' => 'ปลดล็อกฐานข้อมูลเรียบร้อย',
 'lockdbsuccesstext' => 'ล็อกฐานข้อมูลเรียบร้อย
-<br />อย่าลืมที่จะ [[Special:UnlockDB|ปลดล็อก]] เพื่อให้ใช้งานได้ตามปกติ',
+<br />อย่าลืม[[Special:UnlockDB|ปลดล็อก]]หลังการบำรุงรักษาเสร็จสิ้น',
 'unlockdbsuccesstext' => 'ปลดล็อกฐานข้อมูลเรียบร้อย',
 'lockfilenotwritable' => 'ไม่สามารถล็อกฐานข้อมูลได้ เนื่องจากการเขียนลงฐานข้อมูล การล็อกและการปลดล็อกจำเป็นต้องทำที่เว็บเซิร์ฟเวอร์',
 'databasenotlocked' => 'ฐานข้อมูลไม่ได้ล็อก',
@@ -2520,23 +2531,23 @@ $1',
 
 หากเกิดกรณีเหล่านี้ คุณจะต้องย้ายหรือรวมหน้าเองหากต้องการเปลี่ยนชื่อตามในภายหลัง",
 'movearticle' => 'เปลี่ยนชื่อ',
-'moveuserpage-warning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99''' à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\88ะยà¹\89ายหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¹\82à¸\9bรà¸\94à¸\97ราà¸\9aวà¹\88าหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88à¸\88ะà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ à¹\81à¸\95à¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88ะ'''à¹\84มà¹\88'''à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ",
+'moveuserpage-warning' => "'''คำเตือน''' คุณกำลังย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่'''ถูกเปลี่ยนชื่อ",
 'movenologin' => 'ไม่ได้ล็อกอิน',
-'movenologintext' => 'à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\99ีà¹\89 à¸\95à¹\89อà¸\87ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\81ละà¹\83หà¹\89à¸\97ำà¸\81าร[[Special:UserLogin|ล็อกอิน]]',
-'movenotallowed' => 'à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89ยà¹\89ายหน้า',
-'movenotallowedfile' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¸\97ีà¹\88à¸\88ะยà¹\89ายà¹\84à¸\9fลà¹\8c',
-'cant-move-user-page' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\83à¸\99à¸\81ารยà¹\89ายหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89 (à¹\81ยà¸\81à¸\88าà¸\81หà¸\99à¹\89ายà¹\88อย)',
-'cant-move-to-user-page' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\83à¸\99à¸\81ารยà¹\89ายหà¸\99à¹\89าà¹\83à¸\94 à¹\86 à¹\84à¸\9bà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89 (ยà¸\81à¹\80วà¹\89à¸\99หà¸\99à¹\89ายà¹\88อยà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89)',
+'movenologintext' => 'à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\99ีà¹\89 à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\81ละ[[Special:UserLogin|ล็อกอิน]]',
+'movenotallowed' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหน้า',
+'movenotallowedfile' => 'คุณไม่มีสิทธิย้ายไฟล์',
+'cant-move-user-page' => 'คุณไม่มีสิทธิย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)',
+'cant-move-to-user-page' => 'คุณไม่มีสิทธิย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)',
 'newtitle' => 'ชื่อใหม่',
 'move-watch' => 'เฝ้าดูหน้านี้',
 'movepagebtn' => 'เปลี่ยนชื่อ',
 'pagemovedsub' => 'เปลี่ยนชื่อสำเร็จ',
 'movepage-moved' => '\'\'\'"$1" ถูกเปลี่ยนชื่อเป็น "$2"\'\'\'',
 'movepage-moved-redirect' => 'หน้าเปลี่ยนทางถูกสร้างขึ้น',
-'movepage-moved-noredirect' => 'หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81สรà¹\89าà¸\87',
+'movepage-moved-noredirect' => 'à¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\96ูà¸\81ระà¸\87ัà¸\9a',
 'articleexists' => 'หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่',
 'cantmove-titleprotected' => 'คุณไม่สามารถเปลี่ยนชื่อหน้าเป็นชื่อนี้ได้ เนื่องจากชื่อใหม่นี้ได้รับการป้องกันไม่ให้สร้างใหม่',
-'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\84à¹\88à¸\97à¹\84à¸\94à¹\80 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94ยà¹\89ายà¹\80อà¸\87อีà¸\81à¸\84รัà¹\89à¸\87'''",
+'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94รวมà¹\80อà¸\87à¸\94à¹\89วยมือ'''",
 'movedto' => 'เปลี่ยนชื่อเป็น',
 'movetalk' => 'เปลี่ยนชื่อหน้าพูดคุยพร้อมกัน',
 'move-subpages' => 'ย้ายหน้าย่อยทั้งหมด (มากถึง $1 หน้า)',
@@ -2544,7 +2555,7 @@ $1',
 'movepage-page-exists' => 'หน้า $1 มีอยู่แล้วและไม่สามารถเขียนทับได้โดยอัตโนมัติ',
 'movepage-page-moved' => 'หน้า $1 ถูกเปลี่ยนชื่อเป็น $2',
 'movepage-page-unmoved' => 'หน้า $1 ไม่สามารถเปลี่ยนชื่อเป็น $2 ได้',
-'movepage-max-pages' => 'หน้าทั้งหมด $1 {{PLURAL:$1|หน้า|หน้า}} ถูกย้ายไป ซึ่งนับได้ว่าเป็นจำนวนที่มากที่สุดเท่าที่จะทได้ และหยุดการย้ายหน้าอย่างอัตโนมัติแล้ว',
+'movepage-max-pages' => 'หน้า $1 หน้าถูกย้ายไป ซึ่งมากสุดแล้ว และจะไม่มีหน้าใดย้ายอัตโนมัติเพิ่ม',
 'movelogpage' => 'ปูมการเปลี่ยนชื่อ',
 'movelogpagetext' => 'ด้านล่างเป็นรายการการเปลี่ยนชื่อทุกหน้า',
 'movesubpage' => '{{PLURAL:$1|หน้าย่อย|หน้าย่อย}}',
@@ -2553,12 +2564,12 @@ $1',
 'movereason' => 'เหตุผล:',
 'revertmove' => 'ย้อน',
 'delete_and_move' => 'ลบและย้าย',
-'delete_and_move_text' => '== à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87ลบ ==
+'delete_and_move_text' => '== à¸\95à¹\89อà¸\87à¸\81ารลบ ==
 
 มีหน้าปลายทาง "[[:$1]]" แล้ว คุณต้องการลบหน้านั้นหรือไม่เพื่อดำเนินการต่อ',
 'delete_and_move_confirm' => 'ใช่ ลบหน้านั้น',
-'delete_and_move_reason' => 'à¸\96ูà¸\81ลà¸\9aสำหรัà¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ',
-'selfmove' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¹\80à¸\94ิมà¹\81ละหà¸\99à¹\89าà¹\83หมà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99 à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อได้',
+'delete_and_move_reason' => 'à¸\96ูà¸\81ลà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\9bิà¸\94à¸\8aà¹\88อà¸\87à¹\81à¸\81à¹\88à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\88าà¸\81 "[[$1]]"',
+'selfmove' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¹\81ละà¸\9bลายà¸\97าà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99 à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89มาà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¹\80à¸\94ิมได้',
 'immobile-source-namespace' => 'ไม่สามารถเปลี่ยนชื่อหน้าในเนมสเปซ "$1"',
 'immobile-target-namespace' => 'ไม่สามารถย้ายหน้าไปยังเนมสเปซ "$1" ได้',
 'immobile-target-namespace-iw' => 'ไม่สามารถย้ายไปยังหน้าปลายทางที่เป็นลิงก์ interwiki ได้',
@@ -2642,16 +2653,16 @@ $1',
 'importtext' => 'กรุณาส่งออกไฟล์จากวิกิต้นทางโดยใช้[[Special:Export|เครื่องมือส่งออก]]
 บันทึกลงคอมพิวเตอร์ของคุณ และอัปโหลดที่นี่',
 'importstart' => 'กำลังนำเข้าหน้า...',
-'import-revision-count' => '$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}',
+'import-revision-count' => '$1 รุ่นการแก้ไข',
 'importnopages' => 'ไม่มีหน้าให้นำเข้า',
-'imported-log-entries' => 'นำ $1 {{PLURAL:$1| เข้าระบบ | รายการบันทึก}}',
+'imported-log-entries' => 'นำเข้า $1 รายการปูม',
 'importfailed' => 'การนำเข้าไม่สำเร็จ: <nowiki>$1</nowiki>',
 'importunknownsource' => 'ไม่ทราบชนิดของไฟล์นำเข้า',
 'importcantopen' => 'ไม่สามารถเปิดไฟล์นำเข้าได้',
-'importbadinterwiki' => 'ลิà¸\87à¸\81à¹\8cà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¸\82à¹\89ามภาษาà¹\80สีย',
+'importbadinterwiki' => 'ลิงก์ข้ามภาษาเสีย',
 'importnotext' => 'ไฟล์ว่างหรือไฟล์ไม่มีข้อความ',
 'importsuccess' => 'นำเข้าไฟล์สำเร็จ!',
-'importhistoryconflict' => 'à¸\9bระวัà¸\95ิหà¸\99à¹\89าà¸\82ัà¸\94à¹\81ยà¹\89à¸\87à¸\81ัà¸\99 (à¸\8bึà¹\88à¸\87อาจเคยนำเข้าหน้านี้มาก่อน)',
+'importhistoryconflict' => 'มีà¸\9bระวัà¸\95ิรุà¹\88à¸\99à¸\82ัà¸\94à¹\81ยà¹\89à¸\87à¸\81ัà¸\99 (อาจเคยนำเข้าหน้านี้มาก่อน)',
 'importnosources' => 'ไม่มีการกำหนดแหล่งนำเข้าข้ามวิกิ และการอัปโหลดประวัติหน้าโดยตรงถูกปิดการใช้งาน',
 'importnofile' => 'ไฟล์นำเข้าไม่ได้ถูกอัปโหลด',
 'importuploaderrorsize' => 'อัปโหลดไฟล์ข้อมูลนำเข้าไม่สำเร็จ
@@ -2670,7 +2681,7 @@ $1',
 'import-error-create' => 'หน้า "$1" ยังไม่ได้ถูกนำเข้า เนื่องจากคุณไม่ได้รับอนุญาตให้สามารถสร้างได้',
 
 # Import log
-'importlogpage' => 'à¸\9aัà¸\99à¸\97ึà¸\81การนำเข้า',
+'importlogpage' => 'à¸\9bูมการนำเข้า',
 'importlogpagetext' => 'นำเข้าไฟล์จากวิกิอื่น โดยผ่านทางผู้ดูแลระบบ',
 'import-logentry-upload' => 'นำเข้า [[$1]] ผ่านการอัปโหลดแล้ว',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}',
@@ -2699,7 +2710,7 @@ $1',
 'tooltip-ca-protect' => 'ล็อกหน้านี้',
 'tooltip-ca-unprotect' => 'เปลี่ยนแปลงการป้องกันหน้านี้',
 'tooltip-ca-delete' => 'ลบหน้านี้',
-'tooltip-ca-undelete' => 'à¹\80รียà¸\81คืนการแก้ไขหน้านี้กลับมาเป็นรุ่นก่อนที่ถูกลบ',
+'tooltip-ca-undelete' => 'à¸\81ูà¹\89คืนการแก้ไขหน้านี้กลับมาเป็นรุ่นก่อนที่ถูกลบ',
 'tooltip-ca-move' => 'เปลี่ยนชื่อหน้านี้',
 'tooltip-ca-watch' => 'เพิ่มหน้านี้เข้ารายการเฝ้าดู',
 'tooltip-ca-unwatch' => 'นำหน้านี้ออกจากรายการเฝ้าดู',
@@ -2714,7 +2725,7 @@ $1',
 'tooltip-n-recentchanges' => 'รายการปรับปรุงล่าสุดในวิกินี้',
 'tooltip-n-randompage' => 'สุ่มหน้าขึ้นมา',
 'tooltip-n-help' => 'อธิบายการใช้งาน',
-'tooltip-t-whatlinkshere' => 'รายการหน้าวิกิที่ลิงก์มาที่นี่',
+'tooltip-t-whatlinkshere' => 'รายà¸\81ารà¸\97ุà¸\81หà¸\99à¹\89าวิà¸\81ิà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมาà¸\97ีà¹\88à¸\99ีà¹\88',
 'tooltip-t-recentchangeslinked' => 'รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้',
 'tooltip-feed-rss' => 'ฟีดชนิดอาร์เอสเอส (RSS) ของหน้านี้',
 'tooltip-feed-atom' => 'ฟีดอะตอม (Atom) ของหน้านี้',
@@ -2740,8 +2751,9 @@ $1',
 'tooltip-diff' => 'แสดงการเปลี่ยนการต่อข้อความ',
 'tooltip-compareselectedversions' => 'แสดงความแตกต่างระหว่างสองรุ่นที่เลือกของหน้านี้',
 'tooltip-watch' => 'เพิ่มหน้านี้เข้ารายการเฝ้าดู',
+'tooltip-watchlistedit-normal-submit' => 'นำชื่อเรื่องออก',
 'tooltip-watchlistedit-raw-submit' => 'อัพเดทรายการเฝ้าดู',
-'tooltip-recreate' => 'สรà¹\89าà¸\87หà¸\99à¹\89าà¸\99ีà¹\89อีà¸\81à¸\84รัà¹\89à¸\87à¹\81มà¹\89วà¹\88าà¸\88ะถูกลบ',
+'tooltip-recreate' => 'สรà¹\89าà¸\87หà¸\99à¹\89าà¸\99ีà¹\89อีà¸\81à¸\84รัà¹\89à¸\87à¹\81มà¹\89à¹\80à¸\84ยถูกลบ',
 'tooltip-upload' => 'เริ่มอัปโหลด',
 'tooltip-rollback' => '"ย้อนกลับฉุกเฉิน" ใช้ย้อนการแก้ไขในหน้านี้ของผู้เขียนคนล่าสุดในคลิกเดียว',
 'tooltip-undo' => '"ย้อน" ใช้ย้อนการแก้ไขครั้งนี้และเปิดแบบแก้ไข สามารถเพิ่มคำอธิบายในตอนท้าย',
@@ -2810,7 +2822,7 @@ $1',
 'pageinfo-title' => 'ข้อมูลสำหรับ "$1"',
 'pageinfo-not-current' => 'ขออภัย ไม่สามารถให้ข้อมูลนี้สำหรับรุ่นเก่าได้',
 'pageinfo-header-basic' => 'ข้อมูลเบื้องต้น',
-'pageinfo-header-edits' => 'การแก้ไข',
+'pageinfo-header-edits' => 'à¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
 'pageinfo-header-restrictions' => 'การล็อกหน้า',
 'pageinfo-header-properties' => 'คุณสมบัติหน้า',
 'pageinfo-display-title' => 'แสดงชื่อ',
@@ -2820,7 +2832,7 @@ $1',
 'pageinfo-language' => 'ภาษาเนื้อหาของหน้า',
 'pageinfo-robot-policy' => 'สถานะเสิร์ชเอนจิน',
 'pageinfo-views' => 'จำนวนการเข้าดู',
-'pageinfo-watchers' => 'จำนวนผู้เข้าดู',
+'pageinfo-watchers' => 'จำนวนผู้เข้าดูหน้า',
 'pageinfo-redirects-name' => 'หน้าเปลี่ยนทางมายังหน้านี้',
 'pageinfo-subpages-name' => 'หน้าย่อยของหน้านี้',
 'pageinfo-subpages-value' => '$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)',
@@ -2828,7 +2840,7 @@ $1',
 'pageinfo-firsttime' => 'วันที่สร้างหน้า',
 'pageinfo-lastuser' => 'ผู้เขียนคนล่าสุด',
 'pageinfo-lasttime' => 'วันที่แก้ไขล่าสุด',
-'pageinfo-edits' => 'จำนวนการแก้ไข',
+'pageinfo-edits' => 'จำนวนการแก้ไขรวม',
 'pageinfo-authors' => 'จำนวนผู้เขียนทั้งหมด',
 'pageinfo-recent-edits' => 'การแก้ไขล่าสุด (ภายใน $1ที่ผ่านมา)',
 'pageinfo-recent-authors' => 'จำนวนผู้เขียนล่าสุด',
@@ -2838,6 +2850,10 @@ $1',
 'pageinfo-redirectsto' => 'เปลี่ยนทางไปยัง',
 'pageinfo-contentpage' => 'นับเป็นหน้าเนื้อหา',
 'pageinfo-contentpage-yes' => 'ใช่',
+'pageinfo-category-info' => 'ข้อมูลหมวดหมู่',
+'pageinfo-category-pages' => 'จำนวนหน้า',
+'pageinfo-category-subcats' => 'จำนวนหมวดหมู่ย่อย',
+'pageinfo-category-files' => 'จำนวนไฟล์',
 
 # Skin names
 'skinname-standard' => 'คลาสสิก',
@@ -2890,7 +2906,7 @@ $1',
 'file-info' => 'ขนาดไฟล์: $1, ชนิดไมม์: $2',
 'file-info-size' => '$1 × $2 พิกเซล, ขนาดไฟล์: $3, ชนิดไมม์: $4',
 'file-info-size-pages' => '$1 × $2 พิกเซล, ขนาดไฟล์: $3, ประเภท MIME: $4, $5 {{PLURAL:$5|หน้า|หน้า}}',
-'file-nohires' => 'à¹\84มà¹\88มีภาà¸\9eà¸\84วามละà¹\80อียà¸\94สูà¸\87à¸\81วà¹\88าà¸\99ีà¹\89',
+'file-nohires' => 'ไม่มีความละเอียดสูงกว่านี้',
 'svg-long-desc' => 'ไฟล์ SVG, $1 × $2 พิกเซล พอเป็นพิธี, ขนาดไฟล์: $3',
 'show-big-image' => 'ความละเอียดสูงสุด',
 'show-big-image-other' => 'อื่นๆ {{PLURAL:$2|resolution|resolutions}}: $1.',
@@ -2922,7 +2938,10 @@ $1',
 'minutes' => '$1 นาที',
 'hours' => '$1 ชั่วโมง',
 'days' => '$1 วัน',
+'months' => '$1 เดือน',
+'years' => '$1 ปี',
 'ago' => '$1 มาแล้ว',
+'just-now' => 'เมื่อสักครู่นี้',
 
 # Bad image list
 'bad_image_list' => 'รูปแบบแสดงต่อไปนี้:
@@ -3254,7 +3273,7 @@ $1',
 'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล',
 'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย',
 'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้',
-'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}}ภาษาไทยไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
+'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}} ไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
 กรุณาตรวจสอบอีเมลว่าถูกต้อง และไม่มีอักขระที่ไม่สามารถใช้ได้
 
 ข้อความตีกลับ: $1',
@@ -3314,7 +3333,7 @@ $5
 'confirmrecreate' => "ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ได้ลบหน้านี้ในช่วงที่คุณกำลังแก้ไข ด้วยเหตุผลว่า:
 : ''$2''
 กรุณายืนยันว่าต้องการสร้างหน้านี้ขึ้นมาใหม่",
-'confirmrecreate-noreason' => 'ผู้ใช้ [[ผู้ใช้:$1|$1]] ([[พูดคุยกับผู้ใช้:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข โปรดยืนยันว่าคุณต้องการสร้างหน้านี้ใหม่จริง ๆ',
+'confirmrecreate-noreason' => 'ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข โปรดยืนยันว่าคุณต้องการสร้างหน้านี้ใหม่จริง ๆ',
 'recreate' => 'สร้างใหม่',
 
 # action=purge
@@ -3386,24 +3405,24 @@ $5
 
 # Watchlist editor
 'watchlistedit-numitems' => 'รายการเฝ้าดูมี $1 รายการ ไม่รวมหน้าพูดคุย',
-'watchlistedit-noitems' => 'à¹\84มà¹\88มีหัวà¸\82à¹\89อใดในรายการเฝ้าดู',
+'watchlistedit-noitems' => 'à¹\84มà¹\88มีà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ใดในรายการเฝ้าดู',
 'watchlistedit-normal-title' => 'แก้ไขรายการเฝ้าดู',
-'watchlistedit-normal-legend' => 'ลà¸\9aà¸\8aืà¹\88อหัวà¸\82à¹\89อออกจากรายการเฝ้าดู',
-'watchlistedit-normal-explain' => 'หัวà¸\82à¹\89อà¸\97ีà¹\88อยูà¹\88à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูแสดงด้านล่าง 
-à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aออà¸\81 à¹\83หà¹\89à¸\84ลิà¸\81à¹\80ลือà¸\81à¸\97ีà¹\88à¸\81ลà¹\88อà¸\87à¸\94à¹\89าà¸\99à¸\82à¹\89าà¸\87à¹\81à¸\95à¹\88ละหัวà¸\82à¹\89อ และคลิก "{{int:Watchlistedit-normal-submit}}" 
+'watchlistedit-normal-legend' => 'ลà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ออกจากรายการเฝ้าดู',
+'watchlistedit-normal-explain' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93แสดงด้านล่าง 
+à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aออà¸\81 à¹\83หà¹\89à¸\84ลิà¸\81à¹\80ลือà¸\81à¸\97ีà¹\88à¸\81ลà¹\88อà¸\87à¸\94à¹\89าà¸\99à¸\82à¹\89าà¸\87à¹\81à¸\95à¹\88ละà¸\8aืà¹\88อ และคลิก "{{int:Watchlistedit-normal-submit}}" 
 หรืออาจจะ[[Special:EditWatchlist/raw|แก้ไขรายการทั้งหมด]]',
-'watchlistedit-normal-submit' => 'ลà¸\9aหัวà¸\82à¹\89อ',
+'watchlistedit-normal-submit' => 'ลà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87',
 'watchlistedit-normal-done' => '$1 รายการได้ถูกนำออกจากรายการเฝ้าดู:',
 'watchlistedit-raw-title' => 'แก้ไขรายการเฝ้าดูทั้งหมด',
 'watchlistedit-raw-legend' => 'แก้ไขรายการเฝ้าดูทั้งหมด',
-'watchlistedit-raw-explain' => 'หัวà¸\82à¹\89อà¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¹\81สà¸\94à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸\8bึà¹\88à¸\87สามารà¸\96à¹\80à¸\9eิà¹\88มหรือà¸\99ำออà¸\81à¹\84à¸\94à¹\89 à¸«à¸\99ึà¹\88à¸\87หัวà¸\82à¹\89อà¸\95à¹\88อหà¸\99ึà¹\88à¸\87แถว 
-à¹\80มืà¹\88อà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80สรà¹\87à¸\88à¹\81ลà¹\89ว à¹\83หà¹\89à¸\84ลิà¸\81 "{{int:Watchlistedit-raw-submit}}" 
+'watchlistedit-raw-explain' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\81สà¸\94à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸\8bึà¹\88à¸\87สามารà¸\96à¹\80à¸\9eิà¹\88มหรือà¸\99ำออà¸\81à¹\84à¸\94à¹\89 à¸«à¸\99ึà¹\88à¸\87à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\95à¹\88อแถว 
+à¹\80มืà¹\88อà¹\80สรà¹\87à¸\88à¹\81ลà¹\89ว à¹\83หà¹\89à¸\81à¸\94 "{{int:Watchlistedit-raw-submit}}" 
 ซึ่งอาจแก้ไขผ่าน [[Special:EditWatchlist|โปรแกรมแก้ไขข้อความทั่วไป]]',
-'watchlistedit-raw-titles' => 'หัวà¸\82à¹\89อ:',
+'watchlistedit-raw-titles' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87:',
 'watchlistedit-raw-submit' => 'ปรับรายการเฝ้าดู',
 'watchlistedit-raw-done' => 'รายการเฝ้าดูของคุณได้ปรับแล้ว',
-'watchlistedit-raw-added' => '$1 à¸«à¸±à¸§à¸\82à¹\89อได้ถูกเพิ่มเข้าไป:',
-'watchlistedit-raw-removed' => '$1 à¸«à¸±à¸§à¸\82à¹\89อได้ถูกนำออกไป:',
+'watchlistedit-raw-added' => '$1 à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ได้ถูกเพิ่มเข้าไป:',
+'watchlistedit-raw-removed' => '$1 à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ได้ถูกนำออกไป:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'ดูการเปลี่ยนแปลงที่เกี่ยวข้อง',
@@ -3472,10 +3491,10 @@ $5
 'specialpages' => 'หน้าพิเศษ',
 'specialpages-note' => '----
 * หน้าพิเศษปกติ
-* <strong class="mw-specialpagerestricted">หน้าพิเศษสำหรับผู้ดูแล</strong>',
+* <span class="mw-specialpagerestricted">หน้าพิเศษที่ถูกจำกัด</span>',
 'specialpages-group-maintenance' => 'รายงานการเก็บกวาด',
 'specialpages-group-other' => 'หน้าพิเศษอื่น ๆ',
-'specialpages-group-login' => 'ล็อกอิน / สร้างบัญชีผู้ใช้ใหม่',
+'specialpages-group-login' => 'ล็อกอิน / สร้างบัญชี',
 'specialpages-group-changes' => 'ปรับปรุงล่าสุดและปูมต่าง ๆ',
 'specialpages-group-media' => 'รายงานเรื่องสื่อและการอัปโหลด',
 'specialpages-group-users' => 'ผู้ใช้และสิทธิ',
@@ -3521,6 +3540,9 @@ $5
 'compare-rev1' => 'รุ่น 1',
 'compare-rev2' => 'รุ่น 2',
 'compare-submit' => 'เปรียบเทียบ',
+'compare-invalid-title' => 'ชื่อเรื่องที่คุณระบุไม่ถูกต้อง',
+'compare-title-not-exists' => 'ชื่อเรื่องที่คุณระบุไม่มีอยู่',
+'compare-revision-not-exists' => 'รุ่นที่คุณระบุไม่มีอยู่',
 
 # Database error messages
 'dberr-header' => 'วิกินี้กำลังประสบปัญหา',
@@ -3551,9 +3573,20 @@ $5
 'logentry-delete-delete' => '$1 ลบหน้า $3',
 'logentry-delete-restore' => '$1 กู้คืนหน้า $3',
 'logentry-delete-event' => '$1 เปลี่ยนทัศนวิสัยของ $5 รายการปูมใน $3: $4',
+'logentry-delete-revision' => '$1 เปลี่ยนแปลงทัศนวิสัยของ $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 รายการปูมบน $3: $4',
+'logentry-suppress-revision' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของ $5 รุ่นบนหน้า $3: $4',
+'logentry-suppress-event-legacy' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของรายการปูมบน $3',
+'logentry-suppress-revision-legacy' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของรุ่นบนหน้า $3',
 'revdelete-content-hid' => 'เนื้อหาถูกซ่อน',
 'revdelete-summary-hid' => 'คำอธิบายอย่างย่อถูกซ่อน',
 'revdelete-uname-hid' => 'ชื่อผู้ใช้ถูกซ่อน',
+'revdelete-content-unhid' => 'เนื้อหาถูกแสดง',
+'revdelete-summary-unhid' => 'คำอธิบายอย่างย่อถูกแสดง',
+'revdelete-uname-unhid' => 'ชื่อผู้ใช้ถูกแสดง',
 'revdelete-restricted' => 'เพิ่มการจำกัดกับผู้ดูแลระบบ',
 'revdelete-unrestricted' => 'ยกเลิกการจำกัดแก่ผู้ดูแลระบบ',
 'logentry-move-move' => '$1 ย้ายหน้า $3 ไปยัง $4',
@@ -3562,11 +3595,12 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ย้ายหน้า $3 ไปยัง $4 ทับหน้าเปลี่ยนทาง (ไม่สร้างหน้าเปลี่ยนทางตามมา)',
 'logentry-patrol-patrol' => '$1 ทำเครื่องหมายว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว',
 'logentry-patrol-patrol-auto' => '$1 ทำเครื่องหมายโดยอัตโนมัติว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว',
-'logentry-newusers-newusers' => '$1 สร้างบัญชีผู้ใช้ใหม่',
-'logentry-newusers-create' => '$1 สร้างบัญชีผู้ใช้ใหม่',
-'logentry-newusers-create2' => '$1 สร้างบัญชีผู้ใช้ $3',
+'logentry-newusers-newusers' => 'บัญชีผู้ใช้ $1 ถูกสร้างขึ้น',
+'logentry-newusers-create' => 'บัญชีผู้ใช้ $1 ถูกสร้างขึ้น',
+'logentry-newusers-create2' => 'บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1',
 'logentry-newusers-autocreate' => 'บัญชี $1 ถูกสร้างขึ้นอัตโนมัติ',
 'newuserlog-byemail' => 'รหัสผ่านถูกส่งทางอีเมล',
+'rightsnone' => '(ไม่มี)',
 
 # Feedback
 'feedback-message' => 'ข้อความ:',
@@ -3587,4 +3621,15 @@ $5
 'api-error-filetype-banned' => 'ไฟล์ประเภทนี้ถูกห้าม',
 'api-error-mustbeloggedin' => 'กรุณาลงชื่อเข้าใช้เพื่ออัปโหลดไฟล์',
 
+# Durations
+'duration-seconds' => '$1 วินาที',
+'duration-minutes' => '$1 นาที',
+'duration-hours' => '$1 ชั่วโมง',
+'duration-days' => '$1 วัน',
+'duration-weeks' => '$1 สัปดาห์',
+'duration-years' => '$1 ปี',
+'duration-decades' => '$1 ทศวรรษ',
+'duration-centuries' => '$1 ศตวรรษ',
+'duration-millennia' => '$1 สหัสวรรษ',
+
 );
index 17829ab..07ac792 100644 (file)
@@ -1237,11 +1237,13 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 'right-override-export-depth' => 'Sahypalary, şol sanda çykgytly sahypalary 5-e çenli çuňlukda eksportirle',
 'right-sendemail' => 'Başga ulanyjylara e-poçta iber',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Täze ulanyjy gündeligi',
+'newuserlogpagetext' => 'Ulanyjy döretme gündeligi.',
+
 # User rights log
 'rightslog' => 'Ulanyjy hukuklarynyň gündeligi',
 'rightslogtext' => 'Ulanyjy hukuklaryndaky üýtgeşmeler gündeligi.',
-'rightslogentry' => '$1 üçin topar agzalygyny $2 toparyndan $3 toparyna üýtgetdi',
-'rightsnone' => '(hiç biri)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bu sahypany okamaga',
@@ -1787,10 +1789,6 @@ Goldanylýan protokollar: <code>$1</code>',
 'activeusers-hidesysops' => 'Administratorlary gizle',
 'activeusers-noresult' => 'Ulanyjy tapylmady.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Täze ulanyjy gündeligi',
-'newuserlogpagetext' => 'Ulanyjy döretme gündeligi.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ulanyjy topary hukuklary',
 'listgrouprights-summary' => 'Aşakda şu wikide kesgitlenen ulanyjy toparlarynyň hem-de olaryň degişli ulanmak hukuklarynyň sanawy berilýär.
@@ -1909,6 +1907,8 @@ $UNWATCHURL
 
 Seslenme we goşmaça kömek:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'döredildi',
+'changed' => 'üýtgedildi',
 
 # Delete
 'deletepage' => 'Sahypany öçür',
@@ -3153,6 +3153,7 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.',
 'revdelete-restricted' => 'administratorlara goýlan çäklendirmeler',
 'revdelete-unrestricted' => 'administratorlardan aýyrylan çäklendirmeler',
 'newuserlog-byemail' => 'parol e-poçta bilen iberildi',
+'rightsnone' => '(hiç biri)',
 
 # Search suggestions
 'searchsuggest-search' => 'Gözleg',
index 4b7beae..fd69b3e 100644 (file)
@@ -369,7 +369,7 @@ $messages = array(
 'viewcount' => 'Namataan na pahinang ito nang {{PLURAL:$1|isang|$1}} beses.',
 'protectedpage' => 'Pahinang nakasanggalang',
 'jumpto' => 'Tumalon sa:',
-'jumptonavigation' => 'paglilibot (nabigasyon)',
+'jumptonavigation' => 'paglilibot',
 'jumptosearch' => 'paghahanap',
 'view-pool-error' => 'Paumanhin, ngunit masyado pong abala ang mga serbidor sa sandaling ito.
 Masyadong maraming tagagamit ay sinusubukang tingnan ang pahinang ito.
@@ -440,9 +440,9 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'feed-invalid' => 'Hindi tanggap na uri ng serbisyo ng pagpaparating.',
 'feed-unavailable' => 'Walang serbisyo mula sa sindikasyong pangpaglalathala',
 'site-rss-feed' => 'Kargang RSS ng $1',
-'site-atom-feed' => 'Kargang Atom ng $1',
+'site-atom-feed' => 'Sindikasyong Atom ng $1',
 'page-rss-feed' => 'Kargang RSS ng "$1"',
-'page-atom-feed' => 'Kargang Atom ng "$1"',
+'page-atom-feed' => 'Sindikasyong Atom ng "$1"',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
 'red-link-title' => '$1 (hindi umiiral ang pahina)',
@@ -567,6 +567,9 @@ Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
 
 Maaari kang tumuloy sa paggamit ng {{SITENAME}} nang hindi nakikilala (anonimo), o maaaring kang <span class='plainlinks'>[$1 lumagda/tumala muli]</span> bilang kapareho o ibang tagagamit.
 Tandaan na may ilang pahinang maaaring magpatuloy na nagpapakitang parang nakalagda ka pa rin, hanggang sa linisin mo ang iyong baunang pambasa-basa (''browser cache'').",
+'welcomeuser' => 'Mabuhay, $1!',
+'welcomecreation-msg' => 'Nilikha na ang iyong kuwenta.
+Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SITENAME}}]].',
 'yourname' => 'Bansag:',
 'yourpassword' => 'Hudyat:',
 'yourpasswordagain' => 'Hudyat mo uli:',
@@ -948,6 +951,10 @@ Tila binura na ito.',
 Umiiral na ito.',
 'defaultmessagetext' => 'Nakatakdang teksto ng mensahe',
 
+# Content models
+'content-model-wikitext' => 'wikiteksto',
+'content-model-text' => 'purong teksto',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Babala: Naglalaman ang pahinang ito ng napakaraming mamahaling mga tawag na pantungkulin.
 
@@ -1309,7 +1316,7 @@ Hindi ito maibabalik sa dating gawi.',
 'prefs-emailconfirm-label' => 'Kumpirmasyon ng e-liham:',
 'prefs-textboxsize' => 'Sukat ng bintana ng pagbabago',
 'youremail' => 'E-liham:',
-'username' => 'Bansag:',
+'username' => '{{GENDER:$1|Bansag}}:',
 'uid' => 'ID ng tagagamit:',
 'prefs-memberingroups' => 'Kasapi ng {{PLURAL:$1|na pangkat|na mga pangkat}}:',
 'prefs-memberingroups-type' => '$1',
@@ -1464,12 +1471,13 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'right-sendemail' => 'Magpadala ng e-liham sa ibang mga tagagamit',
 'right-passwordreset' => 'Tingnan ang mga e-liham ng muling pagtatakda ng hudyat',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Talaan ng paglikha ng tagagamit',
+'newuserlogpagetext' => 'Isa itong talaan ng mga paglikha ng tagagamit.',
+
 # User rights log
 'rightslog' => 'Tala ng mga karapatan ng tagagamit',
 'rightslogtext' => 'Isa itong tala ng mga pagbabago sa mga karapatan ng tagagamit.',
-'rightslogentry' => 'binago ang kasapiang pampangkat para kay $1 mula sa $2 patungong $3',
-'rightslogentry-autopromote' => 'ay kusang naitaas ang ranggo mula $2 upang maging $3',
-'rightsnone' => '(wala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basahin itong pahina',
@@ -1710,6 +1718,7 @@ Kapag nagpatuloy ang suliranin, makipagugnayan sa isang [[Special:ListUsers/syso
 'backend-fail-notsame' => 'Isang hindi kamukhang talaksan ang umiiral na sa $1.',
 'backend-fail-invalidpath' => 'Ang $1 ay hindi isang katanggap-tanggap na landas ng imbakan.',
 'backend-fail-delete' => 'Hindi mabura ang talaksang $1.',
+'backend-fail-describe' => 'Hindi mapalitan ang metadatos para sa talaksang "$1".',
 'backend-fail-alreadyexists' => 'Umiiral na ang pahinang $1.',
 'backend-fail-store' => 'Hindi maimbak ang talaksang $1 sa $2.',
 'backend-fail-copy' => 'Hindi makopya ang talaksang $1 sa $2.',
@@ -2119,10 +2128,6 @@ Sinusuportahang mga protokolo: <code>$1</code> (huwag idagdag ang anuman sa mga
 'activeusers-hidesysops' => 'Itago ang mga tagapangasiwa',
 'activeusers-noresult' => 'Walang natagpuang mga tagagamit.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Talaan ng paglikha ng tagagamit',
-'newuserlogpagetext' => 'Isa itong talaan ng mga paglikha ng tagagamit.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mga uri ng tagagamit',
 'listgrouprights-summary' => 'Ang sumusunod ay isang talaan ng mga pangkat ng tagagamit na binigyang kahulugang sa wiking ito, kasama ang kanilang mga kaugnay na mga karapatan.
@@ -2183,7 +2188,7 @@ Ang ipinasok mong direksiyong e-liham sa [[Special:Preferences|iyong mga kagustu
 
 # Watchlist
 'watchlist' => 'Mga binabantayan ko',
-'mywatchlist' => 'Bantayan ko',
+'mywatchlist' => 'Bantayan',
 'watchlistfor2' => 'Para sa $1 $2',
 'nowatchlist' => 'Wala kang pahinang binabantayan.',
 'watchlistanontext' => 'Paki $1 upang makita o mabago ang mga aytem sa iyong binabantayan.',
@@ -2253,6 +2258,8 @@ $UNWATCHURL
 
 Tugon at karagdagang tulong:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'nilikha',
+'changed' => 'binago',
 
 # Delete
 'deletepage' => 'Burahin ang pahina',
@@ -2429,7 +2436,7 @@ $1',
 'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
-'namespace' => 'Espasyo ng pangalan:',
+'namespace' => 'Ngalan-espasyo:',
 'invert' => 'Baligtarin and pinili',
 'tooltip-invert' => 'Tsekan ang kahong ito upang ikubli ang mga pagbabago sa mga pahina sa loob ng napiling mga puwang ng pangalan (at ang kaugnay na puwang ng pangalan kung may tsek)',
 'namespace_association' => 'Kaugnay na mga puwang na pampangalan',
@@ -2562,8 +2569,8 @@ Tingnan ang [[Special:BlockList|talaan ng mga hinadlangan]] upang suriin ang mga
 'blocklist-nousertalk' => 'hindi mo mababago ang iyong pansariling pahina ng usapan',
 'ipblocklist-empty' => 'Walang laman ang talaan ng pagharang/paghadlang.',
 'ipblocklist-no-results' => 'Nakaharang ang hiniling na IP address o bansag.',
-'blocklink' => 'harangin/hadlangan',
-'unblocklink' => 'tanggalin ang pagharang/paghadlang',
+'blocklink' => 'harangin',
+'unblocklink' => 'tanggalin ang pagharang',
 'change-blocklink' => 'baguhin ang pagharang/paghadlang',
 'contribslink' => 'ambag',
 'emaillink' => 'ipadala ang e-liham',
@@ -2859,7 +2866,7 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-pt-logout' => 'Umalis sa pagkakalagda',
 'tooltip-ca-talk' => 'Usapan tungkol sa nilalaman ng pahinang ito',
 'tooltip-ca-edit' => 'Maaaring baguhin ang pahinang ito. Paki gamit ang buton ng paunang tingin bago itala.',
-'tooltip-ca-addsection' => 'Magsimula ng isang bagong seksyon',
+'tooltip-ca-addsection' => 'Magsimula ng isang bagong seksiyon',
 'tooltip-ca-viewsource' => 'Nakaprotekta ang pahinang ito. Makikita mo lamang ang pinagmulan (source) nito.',
 'tooltip-ca-history' => 'Nakaraang bersyon ng pahinang ito.',
 'tooltip-ca-protect' => 'Iprotekta ang pahinang ito',
@@ -2883,12 +2890,12 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-t-whatlinkshere' => 'Tala ng lahat ng pahina ng mga wiking nakakawing dito',
 'tooltip-t-recentchangeslinked' => 'Kamakailang mga pagbabago na nakakawing mula sa pahinang ito',
 'tooltip-feed-rss' => 'Subo/Kargang RSS para sa pahinang ito',
-'tooltip-feed-atom' => 'Subo/kargang Atom para sa pahinang ito',
+'tooltip-feed-atom' => 'Sindikasyong Atom para sa pahinang ito',
 'tooltip-t-contributions' => 'Tunghayan ang tala ng mga ambag ng tagagamit na ito',
 'tooltip-t-emailuser' => 'Magpadala ng isang e-liham sa tagagamit na ito',
 'tooltip-t-upload' => 'Magkarga ng mga talaksan',
 'tooltip-t-specialpages' => 'Tala ng lahat ng mga natatanging pahina',
-'tooltip-t-print' => 'Nalilimbag na bersyon ng pahinang ito',
+'tooltip-t-print' => 'Bersiyong maililimbag ng pahinang ito',
 'tooltip-t-permalink' => 'Palagiang kawing sa bersyong ito ng pahina',
 'tooltip-ca-nstab-main' => 'Tingnan ang pahina ng nilalaman',
 'tooltip-ca-nstab-user' => 'Tingnan ang pahina ng tagagamit',
@@ -3057,7 +3064,7 @@ Maaaring manganib ang iyong sistema kapag ipinagana mo ito.",
 'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pahina|mga pahina}}',
 'file-info' => 'sukat ng talaksan: $1, tipo ng MIME: $2',
-'file-info-size' => '$1 × $2 piksel, sukat ng talaksan: $3, tipo ng MIME: $4',
+'file-info-size' => '$1 × $2 piksel, laki ng talaksan: $3, uri ng MIME: $4',
 'file-info-size-pages' => '$1 × $2 mga piksel, sukat ng talaksan: $3, uri ng MIME: $4, $5 {{PLURAL:$5|pahina|mga pahina}}',
 'file-nohires' => 'Walang makuhang mas mataas na resolusyon (kalinawan).',
 'svg-long-desc' => 'Talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3',
@@ -3960,7 +3967,7 @@ Ipinapakita ang mga larawan sa buong kalinawan, tuwirang sinisimulan ang ibang u
 
 # Special:Tags
 'tags' => 'Tanggap na mga tatak ng pagbabago',
-'tag-filter' => '[[Special:Tags|Tatakan]] ang pansala:',
+'tag-filter' => 'Pansala ng [[Special:Tags|tatak]]:',
 'tag-filter-submit' => 'Pansala',
 'tags-title' => 'Mga tatak',
 'tags-intro' => 'Itinatala ng pahinang ito ang mga tatak na maaaring ipantatak ng sopwer sa isang pagbabago, at ang kanilang kahulugan.',
@@ -4039,6 +4046,7 @@ Ipinapakita ang mga larawan sa buong kalinawan, tuwirang sinisimulan ang ibang u
 'logentry-newusers-create2' => 'Lumikha si $1 ng isang kuwenta ng tagagamit na $3',
 'logentry-newusers-autocreate' => 'Kusang nalikha ang akawnt na $1',
 'newuserlog-byemail' => 'Ipinadala ang hudyat sa pamamagitan ng e-liham',
+'rightsnone' => '(wala)',
 
 # Feedback
 'feedback-bugornote' => 'Kung handa ka nang detalyadong maglarawan ng isang suliraning teknikal mangyaring [$1 iulat ang sira].
index 42461ba..e9d5c1b 100644 (file)
@@ -649,6 +649,9 @@ $messages = array(
 # Groups
 'group-user' => 'Иштирокәкон',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Иштирокәкон ғеидијоти журнал',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'Ым сәһифә сәрост кардеј',
 
@@ -774,9 +777,6 @@ $messages = array(
 # Special:LinkSearch
 'linksearch-line' => '$2-ку сәбон вардә бә $1',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Иштирокәкон ғеидијоти журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(иштирокәкон сијоһи)',
 
index 3284456..afaeb6c 100644 (file)
@@ -495,10 +495,13 @@ Ko e ʻuhinga loka ko e $1 ia.",
 'group-sysop-member' => 'Pule fakafounga',
 'group-bureaucrat-member' => 'Pulelahi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Tohinoa ʻo e fakatupu kau ʻetita',
+'newuserlogpagetext' => 'Ko e tohinoa ʻeni ʻo e fakatupu kau ʻetita.',
+
 # User rights log
 'rightslog' => 'Tohinoa ʻo e kau ʻetita honau maʻu mafai',
 'rightslogtext' => 'Ko e tohinoa ʻeni ʻo e ngaah liliu ʻo e kau ʻetita ʻenau maʻu mafai',
-'rightsnone' => '(hala)',
 
 # Recent changes
 'recentchanges' => 'Ngaahi toki liliu',
@@ -727,10 +730,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusersfrom' => 'ʻAsi mai kau ʻetita mei he:',
 'listusers-submit' => 'ʻAsi mai',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Tohinoa ʻo e fakatupu kau ʻetita',
-'newuserlogpagetext' => 'Ko e tohinoa ʻeni ʻo e fakatupu kau ʻetita.',
-
 # E-mail user
 'mailnologin' => 'ʻOku ʻikai ha tuʻasila ke tohila ki ai',
 'emailuser' => 'Tohila ki he ʻetitá ni',
@@ -777,6 +776,9 @@ Kapau ʻaho ʻe taha, te ke fietoʻo ʻa e pēsí mei hoʻo hokohoko leʻo, lomi
 'watching' => 'ʻOku leʻo...',
 'unwatching' => 'ʻOku taʻeleʻo...',
 
+'created' => 'kuo fakatupu',
+'changed' => 'ʻosi liliu',
+
 # Delete
 'deletepage' => 'Tāmateʻi peesi',
 'confirm' => 'Fakamoʻoniʻi',
@@ -1227,4 +1229,7 @@ Kātaki fakapapauʻi te ke fie toe fatu ʻa e kupu ni.",
 # Special:SpecialPages
 'specialpages' => 'Ngaahi peesi makehe',
 
+# New logging system
+'rightsnone' => '(hala)',
+
 );
index 4126a24..39c868d 100644 (file)
@@ -466,9 +466,11 @@ Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap
 'right-delete' => 'Rausim ol pes',
 'right-suppressionlog' => 'Lukim ol praivet ripot',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ripot long ol nupela yusa',
+
 # User rights log
 'rightslog' => 'Ripot long ol pawa bilong ol yusa',
-'rightsnone' => 'i nogat wanpela',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ridim dispela pes',
@@ -608,9 +610,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListUsers
 'listusers-submit' => 'Soim',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ripot long ol nupela yusa',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grup',
 'listgrouprights-members' => '(lista bilong ol memba)',
@@ -655,6 +654,8 @@ Sapos yu laik rausim dispela pes long lukautbuk bilong yu bihain, paitim \"Pinis
 'enotif_reset' => 'Makim olgeta pes olsem mi lukim pinis',
 'enotif_impersonal_salutation' => 'yusa long {{SITENAME}}',
 'enotif_anon_editor' => 'IP yusa $1',
+'created' => 'i kirapim',
+'changed' => 'i senisim',
 
 # Delete
 'deletepage' => 'Rausim dispela pes',
@@ -881,6 +882,9 @@ Yu inap lukim as tok bilong em',
 # HTML forms
 'htmlform-selectorother-other' => 'Narapela',
 
+# New logging system
+'rightsnone' => 'i nogat wanpela',
+
 # Search suggestions
 'searchsuggest-search' => 'Painim',
 
index 22b3dd7..a9b015f 100644 (file)
@@ -1465,9 +1465,9 @@ Kullanabileceğiniz rastgele-üretilmiş bir değer: $1',
 'prefs-emailconfirm-label' => 'E-posta doğrulaması:',
 'prefs-textboxsize' => 'Değiştirme penceresinin boyutu',
 'youremail' => 'E-posta:',
-'username' => 'Kullanıcı adı:',
-'uid' => 'Kayıt numarası:',
-'prefs-memberingroups' => '{{PLURAL:$1|Grup|Grup}} üyesi:',
+'username' => '{{GENDER:$1|Kullanıcı adı}}:',
+'uid' => '{{GENDER:$1|Kullanıcı}} kimliği:',
+'prefs-memberingroups' => '{{GENDER:$2|Üye}} {{PLURAL:$1|group|grupları}}:',
 'prefs-registration' => 'Kayıt zamanı:',
 'yourrealname' => 'Gerçek adınız:',
 'yourlanguage' => 'Dil:',
@@ -1615,12 +1615,13 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'right-sendemail' => 'Diğer kullanıcılara e-posta gönder',
 'right-passwordreset' => 'Parola sıfırlama e-postalarını görür',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yeni kullanıcı kayıtları',
+'newuserlogpagetext' => 'En son kaydolan kullanıcı kayıtları.',
+
 # User rights log
 'rightslog' => 'Kullanıcı hakları kayıtları',
 'rightslogtext' => 'Kullanıcı hakları değişiklikleri kayıtları.',
-'rightslogentry' => '$1 adlı kullanıcının yetkileri $2 iken $3 olarak değiştirildi',
-'rightslogentry-autopromote' => '$2 otomatik olarak yükseltilerek $3 yapıldı.',
-'rightsnone' => '(hiçbiri)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bu sayfayı okumaya',
@@ -2223,10 +2224,6 @@ Desteklenen iletişim kuralları: <code>$1</code> (bunların hiçbirini aramanı
 'activeusers-hidesysops' => 'Yöneticileri gizle',
 'activeusers-noresult' => 'Kullanıcı bulunamadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yeni kullanıcı kayıtları',
-'newuserlogpagetext' => 'En son kaydolan kullanıcı kayıtları.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kullanıcı grubu hakları',
 'listgrouprights-summary' => 'Aşağıdaki bu vikide tanımlanan kullanıcı gruplarının, ilgili erişim haklarıyla birlikte listesidir.
@@ -2355,6 +2352,8 @@ $UNWATCHURL
 
 Geri bildirim ve daha fazla yardım için:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oluşturuldu',
+'changed' => 'değiştirildi',
 
 # Delete
 'deletepage' => 'Sayfayı sil',
@@ -2506,7 +2505,8 @@ Revizyon onarılmış veya arşivden silinmiş olabilir ya da sahip olduğunuz b
 'undeletedrevisions' => 'Toplam {{PLURAL:$1|1 kayıt|$1 kayıt}} geri getirildi.',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 revizyon|$1 revizyon}} ve {{PLURAL:$2|1 dosya|$2 dosya}} eski konumuna getirildi',
 'undeletedfiles' => '{{PLURAL:$1|1 dosya|$1 dosya}} geri getirildi.',
-'cannotundelete' => 'Sayfayı ya da medyayı sizden önce bir başka kullanıcı geri getirdiğinden dolayı sizin geri getirme işleminiz geçersiz.',
+'cannotundelete' => 'Silme başarısız oldu:
+$1',
 'undeletedpage' => "'''$1 sayfası geri getirildi'''
 
 Önceki silme ve geri getirme işlemleri için [[Special:Log/delete|silme kayıtları]]na bakınız.",
@@ -2669,7 +2669,7 @@ Engelleme günlüğü referans için aşağıda sağlanmıştır:',
 Gizleme günlüğü referans için aşağıda sağlanmıştır:',
 'blocklogentry' => ', [[$1]] kullanıcısını engelledi, engelleme süresi: $2 $3',
 'reblock-logentry' => '[[$1]] için bitiş tarihi $2 $3 olmak üzere engelleme ayarlarını değiştirdi',
-'blocklogtext' => 'Burada kullanıcı erişimine yönelik engelleme ya da engelleme kaldırma kayıtları listelenmektedir. Otomatik  IP adresi engellemeleri listeye dahil değildir. Şu anda erişimi durdurulmuş kullanıcıları [[Special:BlockList|IP engelleme listesi]] sayfasından görebilirsiniz.',
+'blocklogtext' => 'Burada kullanıcı erişimine yönelik engelleme ya da engelleme kaldırma kayıtları listelenmektedir. Otomatik  IP adresi engellemeleri listeye dahil değildir. Şu anda erişimi durdurulmuş kullanıcıları [[Special:BlockList|engelleme listesi]] sayfasından görebilirsiniz.',
 'unblocklogentry' => '$1 kullanıcının engellemesi kaldırıldı',
 'block-log-flags-anononly' => 'sadece anonim kullanıcılar',
 'block-log-flags-nocreate' => 'hesap yaratımı engellendi',
@@ -2919,6 +2919,7 @@ Geçici dosya kayıp.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript denemesi',
+'javascripttest-title' => '$1 testleri çalışıyor',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Kullanıcı sayfanız',
@@ -3055,6 +3056,9 @@ Geçici dosya kayıp.',
 'pageinfo-contentpage' => 'Bir içerik sayfası sayılır',
 'pageinfo-contentpage-yes' => 'Evet',
 'pageinfo-protect-cascading-yes' => 'Evet',
+'pageinfo-protect-cascading-from' => 'Korumalar üzerinden geçiş',
+'pageinfo-category-info' => 'Kategori bilgileri',
+'pageinfo-category-pages' => 'Sayfa sayısı',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3301,6 +3305,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-source' => 'Kaynak',
 'exif-urgency' => 'Aciliyet',
 'exif-fixtureidentifier' => 'Fikstür adı',
+'exif-locationdest' => 'Yerin konumu',
 'exif-contact' => 'İletişim bilgileri',
 'exif-writer' => 'Yazar',
 'exif-languagecode' => 'Dil',
@@ -3892,6 +3897,7 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'logentry-newusers-create2' => '$1 kullanıcı hesabı oluşturdu $3',
 'logentry-newusers-autocreate' => '$1 hesabı otomatik olarak oluşturuldu',
 'newuserlog-byemail' => 'e-posta yoluyla şifre gönderilmiştir',
+'rightsnone' => '(hiçbiri)',
 
 # Feedback
 'feedback-subject' => 'Konu:',
index d1c7a9f..b7087c0 100644 (file)
@@ -1343,10 +1343,12 @@ $1",
 'right-delete' => 'битләрне бетерү',
 'right-editinterface' => 'Кулланучы интерфейсын үзгәртү',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Кулланучыларны теркәү көндәлеге',
+'newuserlogpagetext' => 'Яңа теркәлгән кулланучылар исемлеге',
+
 # User rights log
 'rightslog' => 'Кулланучының хокуклары көндәлеге',
-'rightslogentry' => '$1 кулланучысын $2 группасыннан $3 группасына күчерде',
-'rightsnone' => '(юк)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бу битне укырга',
@@ -1703,10 +1705,6 @@ PICT # төрле
 'activeusers-hidesysops' => 'Идарәчеләрне яшер',
 'activeusers-noresult' => 'Кулланучылар табылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Кулланучыларны теркәү көндәлеге',
-'newuserlogpagetext' => 'Яңа теркәлгән кулланучылар исемлеге',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кулланучы төркемнәренең хокуклары',
 'listgrouprights-group' => 'Төркем',
@@ -1716,7 +1714,10 @@ PICT # төрле
 
 # E-mail user
 'emailuser' => 'Бу кулланучыга хат',
+'emailuser-title-target' => '{{GENDER:$1|Кулланучыга}} электрон хат язу',
+'emailuser-title-notarget' => 'Кулланучыга хат җибәрү',
 'emailpage' => 'Кулланучыга хат җибәрү',
+'emailpagetext' => 'Әлеге форма ярдәмендә {{GENDER:$1|кулланучының}} электрон почта адресына хат җибәрергә мөмкин. Җибәрелгән адрес исемендә Сезнең [[Special:Preferences|көйләнмәләрдә]] күрсәтелгән адресыгыз күрсәтеләчәк, шуның ярдәмендә Сез ул кулланучы белән турыдан-туры сөйләшә аласыз.',
 'defemailsubject' => '{{SITENAME}}: хат',
 'noemailtitle' => 'Электрон почта адресы юк',
 'noemailtext' => 'Бу кулланучы чын электрон әрҗә адресын күрсәтмәде.',
@@ -1789,6 +1790,8 @@ $UNWATCHURL
 
 Элемтә һәм ярдәм:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'төзергән',
+'changed' => 'үзгәртелде',
 
 # Delete
 'deletepage' => 'Битне бетерү',
@@ -2529,6 +2532,7 @@ $1',
 'logentry-newusers-create2' => '$1 $3 кулланучы хисап язмасын төзеде',
 'logentry-newusers-autocreate' => 'Автоматик рәвештә $1 хисап язмасы төзелде.',
 'newuserlog-byemail' => 'серсүз электрон почта аша җибәрелде',
+'rightsnone' => '(юк)',
 
 # Feedback
 'feedback-bugornote' => 'Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].
index 210cade..f09b370 100644 (file)
@@ -1113,10 +1113,12 @@ Ul $1 {{PLURAL:$1|xäreftän}} kübräk bulırğa tieş tügel.',
 'right-delete' => 'bitlärne beterü',
 'right-editinterface' => 'Qullanuçı interfeysın üzgärtü',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Qullanuçılarnı terkäw köndälege',
+'newuserlogpagetext' => 'Yaña terkälgän qullanuçılar isemlege',
+
 # User rights log
 'rightslog' => 'Qullanuçınıñ xoquqları köndälege',
-'rightslogentry' => '$1 qullanuçısın $2 gruppasınnan $3 gruppasına küçerde',
-'rightsnone' => '(yuq)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'bu bitne üzgärtergä',
@@ -1463,10 +1465,6 @@ Asta [[Special:UnusedCategories|qullanılmağan törkemnär]] kärsätelgän.
 'activeusers-hidesysops' => 'İdaräçelärne yäşer',
 'activeusers-noresult' => 'Qullanuçılar tabılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Qullanuçılarnı terkäw köndälege',
-'newuserlogpagetext' => 'Yaña terkälgän qullanuçılar isemlege',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Qullanuçı törkemnäreneñ xoquqları',
 'listgrouprights-group' => 'Törkem',
@@ -1537,6 +1535,8 @@ $UNWATCHURL
 
 Elemtä häm yärdäm:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'tözergän',
+'changed' => 'üzgärtelde',
 
 # Delete
 'deletepage' => 'Bitne beterü',
@@ -2187,5 +2187,6 @@ Yulnıñ berençe sıltaması quyma öçen tıyılğan räsemgä sıltama bulır
 # New logging system
 'revdelete-restricted' => 'çikläwlär idaräçelärgä dä qullanıla',
 'newuserlog-byemail' => 'sersüz elektron poçta aşa cibärelde',
+'rightsnone' => '(yuq)',
 
 );
index 7ebbfb3..a8a7959 100644 (file)
@@ -187,10 +187,10 @@ $messages = array(
 'vector-view-create' => 'Чаяары',
 'vector-view-edit' => 'Эдери',
 'vector-view-history' => 'Төөгүнү көөрү',
-'vector-view-view' => 'Номчууру',
+'vector-view-view' => 'Номчуур',
 'vector-view-viewsource' => 'Дөзү бижиин көөрү',
 'actions' => 'Кылыглар',
-'namespaces' => 'Аттар делгеми',
+'namespaces' => 'Ð\90Ñ\82Ñ\82аÑ\80 Ð´ÐµÐ»Ð³ÐµÐ¼Ð½ÐµÑ\80и',
 'variants' => 'Бир янзы',
 
 'errorpagetitle' => 'Алдаг',
@@ -198,7 +198,7 @@ $messages = array(
 'tagline' => '{{SITENAME}} деп веб-сайттан',
 'help' => 'Дуза',
 'search' => 'Диле',
-'searchbutton' => 'Дилээри',
+'searchbutton' => 'Дилээр',
 'go' => 'Баары',
 'searcharticle' => 'Күүcедири',
 'history' => 'Арынның төөгүзү',
@@ -222,12 +222,12 @@ $messages = array(
 'unprotectthispage' => 'Бо арынның камгалалын өскертири',
 'newpage' => 'Чаа арын',
 'talkpage' => 'Бо арын дугайында чугаалажыры',
-'talkpagelinktext' => 'Чугаалажыры',
+'talkpagelinktext' => 'Чугаа',
 'specialpage' => 'Тускай арын',
 'personaltools' => 'Хууда херекселдер',
 'postcomment' => 'Чаа салбыр',
 'articlepage' => 'Допчу арынны көөрү',
-'talk' => 'Чугаалажыры',
+'talk' => 'Чугаа',
 'views' => 'Көрүүшкүннери',
 'toolbox' => 'Херекселдер',
 'userpage' => 'Ажыглакчының арынын көөрү',
@@ -536,7 +536,7 @@ Please check if you want to create/edit this page.',
 
 # Search results
 'searchresults' => 'Түңнелдер',
-'searchresults-title' => '«$1» диле',
+'searchresults-title' => '«$1» Ð´ÐµÐ¿ Ð´Ð¸Ð»Ðµ',
 'prevn' => 'эрткен {{PLURAL:$1|$1}}',
 'nextn' => 'дараазында {{PLURAL:$1|$1}}',
 'prevn-title' => 'Эрткен $1 {{PLURAL:$1|бижик|бижик}}',
@@ -670,8 +670,8 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'right-editusercss' => 'Өске ажыглакчыларның CSS файлдарын өскертири.',
 'right-edituserjs' => 'Өске ажыглакчыларның JavaScript файлдарын өскертири.',
 
-# User rights log
-'rightsnone' => '(чок)',
+# Special:Log/newusers
+'newuserlogpage' => 'Чаа ажыглакчы кырында журнал',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бо арынны номчууру',
@@ -726,7 +726,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchangeslinked-to' => 'Айыткан арынче шөлүп турар арыннарга өскерилгелерни көргүзер',
 
 # Upload
-'upload' => 'Файлды салыры',
+'upload' => 'Файл чүдүрер',
 'uploadbtn' => 'Файлды салыры',
 'uploadnologin' => 'Кирбес',
 'uploaderror' => 'Кииреринге алдаг',
@@ -899,9 +899,6 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'activeusers-hidebots' => 'Роботтарны чажырары',
 'activeusers-hidesysops' => 'Эргелекчыларны чажырары',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Чаа ажыглакчы кырында журнал',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Бөлүк кижилер',
 'listgrouprights-members' => '(кежигүннүң даңзызы)',
@@ -936,6 +933,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
 'enotif_anon_editor' => 'ат эвес ажыглакчы $1',
+'changed' => 'өскертти',
 
 # Delete
 'deletepage' => 'Арынны ырадыры',
@@ -982,7 +980,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'blanknamespace' => '(Кол)',
 
 # Contributions
-'contributions' => 'Ажыглакчыниң салыышкыннары',
+'contributions' => '{{GENDER:$1|Ажыглакчының}} салыышкыннары',
 'contributions-title' => '«$1» деп ажыглакчының салыышкыннары',
 'mycontris' => 'Салыышкыннар',
 'contribsub2' => '$1 ($2)',
@@ -1109,7 +1107,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-search-go' => 'Шак ындыг аттыг арынче щилчиир',
 'tooltip-search-fulltext' => 'Бо бижике арыннардан дилээри',
 'tooltip-p-logo' => 'Кол Арын',
-'tooltip-n-mainpage' => 'Кол Арынны баары',
+'tooltip-n-mainpage' => 'Кол Арынче шилчиир',
 'tooltip-n-mainpage-description' => 'Кол Арынче кирери',
 'tooltip-n-portal' => 'Төлевилел дыгайында, чүнү кылып болур силер, кайда чүү чыдарыл',
 'tooltip-n-currentevents' => 'Ам болуп турар таварылгалар даңзызы',
@@ -1330,6 +1328,9 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'htmlform-submit' => 'Күүcедири',
 'htmlform-selectorother-other' => 'Өске',
 
+# New logging system
+'rightsnone' => '(чок)',
+
 # Feedback
 'feedback-subject' => 'Кол сөс:',
 'feedback-message' => 'Чагаа:',
index a5c64dd..523311d 100644 (file)
@@ -1401,15 +1401,13 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'right-sendemail' => 'باشقا ئىشلەتكۈچىگە ئېلخەت يوللا',
 'right-passwordreset' => 'پارول ئەسلىگە قايتۇرۇش ئېلخەت ئادرېس كۆرۈش.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ئىشلەتكۈچى قۇرغان خاتىرە',
+'newuserlogpagetext' => '(چەكلەنگەن)',
+
 # User rights log
 'rightslog' => 'ئىشلەتكۈچى ھوقۇق خاتىرىسى',
 'rightslogtext' => 'ئىشلەتكۈچى ھوقۇق خاتىرىسى',
-'rightslogentry' => 'گۇرۇپپا ئەزاسى $1  نىڭ ھوقۇقىنى $2 دىن $3 غا ئۆزگەرت',
-'rightslogentry-autopromote' => 'ئۆزلۈكىدىن $2 دىن $3 غا ئۆرلىدى',
-'logentry-rights-rights' => '$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $4 دىن $5 غا $1 ئالماشتۇردى',
-'logentry-rights-rights-legacy' => '$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى',
-'logentry-rights-autopromote' => '$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى',
-'rightsnone' => '(يوق)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'بۇ بەتنى ئوقۇ',
@@ -2057,10 +2055,6 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'activeusers-hidesysops' => 'باشقۇرغۇچىنى يوشۇر',
 'activeusers-noresult' => 'ئىشلەتكۈچى تېپىلمىدى.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ئىشلەتكۈچى قۇرغان خاتىرە',
-'newuserlogpagetext' => '(چەكلەنگەن)',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ئىشلەتكۈچى گۇرۇپپا ھوقۇقى',
 'listgrouprights-summary' => 'تۆۋەندىكىسى بۇ wiki دا ئېنىقلىما بېرىلگەن ئىشلەتكۈچى ھوقۇق چېكى تىزىملىكى ۋە ئۇلارنىڭ زىيارەت ھوقۇق چېكى.
@@ -2197,6 +2191,8 @@ $UNWATCHURL نى زىيارەت قىلىڭ
 
 قايتما ئىنكاس ياكى تېخىمۇ كۆپ ياردەمگە ئېرىشمەكچى بولسىڭىز:
 {{canonicalurl:{{MediaWiki:Helppage}}}} نى زىيارەت قىلىڭ',
+'created' => 'قۇرغان',
+'changed' => 'ئۆزگەردى',
 
 # Delete
 'deletepage' => 'بەت ئۆچۈر',
@@ -3074,6 +3070,7 @@ $1',
 'minutes' => '{{PLURAL: $1|$1مىنۇت}}',
 'hours' => '{{PLURAL:$1|$1سائەت}}',
 'days' => '{{PLURAL:$1|$1 كۈن}}',
+'years' => '{{PLURAL:$1|$1 يىل}}',
 'ago' => '$1 بۇرۇن',
 'just-now' => 'بايا',
 
@@ -3864,6 +3861,10 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'logentry-newusers-create2' => 'ئىشلەتكۈچى ھېساباتى $3 نى $1 قۇردى',
 'logentry-newusers-autocreate' => 'ئىشلەتكۈچى $1 ئاپتوماتلىق قۇرۇلدى',
 'newuserlog-byemail' => 'ئىم ئىلخەتتە يوللاندى',
+'logentry-rights-rights' => '$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $4 دىن $5 غا $1 ئالماشتۇردى',
+'logentry-rights-rights-legacy' => '$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى',
+'logentry-rights-autopromote' => '$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى',
+'rightsnone' => '(يوق)',
 
 # Feedback
 'feedback-bugornote' => 'ئەگەر بىر تېخنىكىلىق مەسىلىنى تەپسىلىي بايان قىلىشقا تەييارلانماقچى بولسىڭىز، [$1 خاتالىق دوكلات]ى يوللاڭ. ياكى تۆۋەندىكى ئاددىي جەدۋەلنى ئىشلىتىڭ. ئىنكاسىڭىز "[$3 $2]" بەتكە قوشۇلىدۇ، ئىشلەتكۈچى ئاتىڭىز ۋە ئىشلەتكەن توركۆرگۈڭىز قوشۇپ قويۇلىدۇ.',
index 636100f..2963c19 100644 (file)
@@ -32,6 +32,7 @@
  * @author NickK
  * @author Olvin
  * @author Prima klasy4na
+ * @author RLuts
  * @author Riwnodennyk
  * @author Sodmy
  * @author Urhixidur
@@ -490,6 +491,7 @@ $messages = array(
 'newwindow' => '(відкривається в новому вікні)',
 'cancel' => 'Скасувати',
 'moredotdotdot' => 'Детальніше…',
+'morenotlisted' => 'Більше немає нічого…',
 'mypage' => 'Сторінка',
 'mytalk' => 'Обговорення',
 'anontalk' => 'Обговорення для цієї IP-адреси',
@@ -870,6 +872,7 @@ $1',
 # E-mail sending
 'php-mail-error-unknown' => 'Невідома помилка в PHP-mail() функції',
 'user-mail-no-addy' => 'Спроба надсилання електронної пошти без зазначеної адреси електронної пошти.',
+'user-mail-no-body' => 'Спроба надіслати електронного листа з порожнім або надто коротким вмістом.',
 
 # Change password dialog
 'resetpass' => 'Змінити пароль',
@@ -1359,7 +1362,7 @@ $1",
 'editundo' => 'скасувати',
 'diff-multi' => '({{PLURAL:$1|Одна проміжна версія одного користувача не показана|$1 проміжні версії {{PLURAL:$2|одного користувача|$2 користувачів}} не показані|$1 проміжних версій {{PLURAL:$2|одного користувача|$2 користувачів}} не показані}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|не показана $1 проміжна я версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|$1 користувачем|$2 користувачами}})',
-'difference-missing-revision' => '{{PLURAL:$2|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|$2 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ð´Ð»Ñ\8f Ñ\86Ñ\8cого Ð¿Ð¾Ñ\80Ñ\96внÑ\8fннÑ\8f ($1) Ð½Ðµ {{PLURAL:$2|знайдене|знайдені}}.
+'difference-missing-revision' => '{{PLURAL:$2|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|$2 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ð´Ð»Ñ\8f Ñ\86Ñ\8cого Ð¿Ð¾Ñ\80Ñ\96внÑ\8fннÑ\8f ($1) Ð½Ðµ {{PLURAL:$2|знайдена|знайдені}}.
 
 Імовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.
 Подробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].',
@@ -1450,7 +1453,7 @@ $1",
 'prefs-labs' => 'Експериментальні функції',
 'prefs-user-pages' => 'Сторінки користувача',
 'prefs-personal' => 'Особисті дані',
-'prefs-rc' => 'СÑ\82оÑ\80Ñ\96нка Ð¾Ñ\81Ñ\82аннÑ\96х редагувань',
+'prefs-rc' => 'СÑ\82оÑ\80Ñ\96нка Ð½Ð¾Ð²Ð¸х редагувань',
 'prefs-watchlist' => 'Список спостереження',
 'prefs-watchlist-days' => 'Кількість днів, що відображаються у списку спостережень:',
 'prefs-watchlist-days-max' => 'Максимум $1 {{PLURAL:$1|день|дні|днів}}',
@@ -1627,7 +1630,7 @@ $1",
 'right-purge' => 'Очищення кешу для сторінки без сторінки підтвердження',
 'right-autoconfirmed' => 'Редагування частково захищених сторінок',
 'right-bot' => 'Автоматична обробка',
-'right-nominornewtalk' => 'Ð\92Ñ\96дÑ\81Ñ\83Ñ\82нÑ\96Ñ\81Ñ\82Ñ\8c Ð½ÐµÐ·Ð½Ð°Ñ\87ниÑ\85 Ñ\80едагÑ\83ванÑ\8c Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ\80енÑ\8c Ð²ÐºÐ»Ñ\8eÑ\87аÑ\94 Ñ\80ежим Ð½Ð¾Ð²Ð¸Ñ\85 Ð¿Ð¾Ð²Ñ\96домленÑ\8c',
+'right-nominornewtalk' => 'Ð\9dезнаÑ\87нÑ\96 Ñ\80едагÑ\83ваннÑ\8f Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ\80енÑ\8c ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ð½Ðµ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ\8eÑ\82Ñ\8c Ð¿Ð¾Ð¿ÐµÑ\80едженнÑ\8f Ð¿Ñ\80о Ð½Ð¾Ð²Ñ\96 Ð¿Ð¾Ð²Ñ\96домленнÑ\8f',
 'right-apihighlimits' => 'Розширення обмежень на виконання API-запитів',
 'right-writeapi' => 'Використання API для запису',
 'right-delete' => 'Вилучення сторінок',
@@ -1669,15 +1672,13 @@ $1",
 'right-sendemail' => 'відправляти пошту іншим користувачам',
 'right-passwordreset' => 'Перегляд повідомлень електронної пошти для зміни паролю',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал нових користувачів',
+'newuserlogpagetext' => 'Список нещодавно зареєстрованих користувачів.',
+
 # User rights log
 'rightslog' => 'Журнал прав користувача',
 'rightslogtext' => 'Це протокол зміни прав користувачів.',
-'rightslogentry' => 'змінив права доступу для користувача $1 з $2 на $3',
-'rightslogentry-autopromote' => 'був автоматично переведений з $2 до $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3 із $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3',
-'logentry-rights-autopromote' => '$1 було автоматично переведено із $4 в $5',
-'rightsnone' => '(нема)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'перегляд цієї сторінки',
@@ -2314,9 +2315,9 @@ $1',
 'linksearch-pat' => 'Шаблон для пошуку:',
 'linksearch-ns' => 'Простір назв:',
 'linksearch-ok' => 'Знайти',
-'linksearch-text' => 'Ð\9cожна Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ð¿Ñ\96дÑ\81Ñ\82ановоÑ\87нÑ\96 Ñ\81имволи (Ñ\88аблони), Ð½Ð°Ð¿Ñ\80иклад, "*.wikipedia.org".
\9dеобÑ\85Ñ\96дний Ð´Ð¾Ð¼ÐµÐ½ Ð¿Ñ\80инаймнÑ\96 Ð²ÐµÑ\80Ñ\85нÑ\8cого Ñ\80Ñ\96внÑ\8f, Ð½Ð°Ð¿Ñ\80иклад "*.org"<br />
-Підтримувані протоколи: <code>$1</code> (за замовчуванням http:// якщо жоден протокол не вказано)',
+'linksearch-text' => 'Ð\9cожна Ð²Ð¶Ð¸Ð²Ð°Ñ\82и Ð¿Ñ\96дÑ\81Ñ\82ановоÑ\87нÑ\96 Ñ\81имволи, Ð½Ð°Ð¿Ñ\80иклад, Â«*.wikipedia.org».
\9dеобÑ\85Ñ\96дно Ð·Ð°Ð·Ð½Ð°Ñ\87иÑ\82и Ð´Ð¾Ð¼ÐµÐ½, Ð¿Ñ\80инаймнÑ\96 Ð²ÐµÑ\80Ñ\85нÑ\8cого Ñ\80Ñ\96внÑ\8f, Ð½Ð°Ð¿Ñ\80иклад Â«*.org».<br />
+{{PLURAL:$2|Підтримується протокол|Підтримуються протоколи}}: <code>$1</code> (за замовчуванням http:// , якщо жоден протокол не зазначено).',
 'linksearch-line' => 'Посилання на $1 із $2',
 'linksearch-error' => 'Підстановочні знаки можуть використовуватися лише на початку адрес.',
 
@@ -2335,10 +2336,6 @@ $1',
 'activeusers-hidesysops' => 'Приховати адміністраторів',
 'activeusers-noresult' => 'Не знайдено користувачів.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал нових користувачів',
-'newuserlogpagetext' => 'Список нещодавно зареєстрованих користувачів.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права груп користувачів',
 'listgrouprights-summary' => 'Нижче наведений список груп користувачів у цій вікі і права для кожної групи.
@@ -2476,6 +2473,8 @@ $UNWATCHURL
 
 Зворотній зв\'язок і допомога:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створена',
+'changed' => 'змінена',
 
 # Delete
 'deletepage' => 'Вилучити сторінку',
@@ -2518,10 +2517,10 @@ $UNWATCHURL
 'rollbacklinkcount' => 'скасування $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
 'rollbacklinkcount-morethan' => 'скасування більш, ніж $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
 'rollbackfailed' => 'Відкинути зміни не вдалося',
-'cantrollback' => 'Неможливо відкинути редагування, оскільки останній, хто редагував, є єдиним автором цієї сторінки.',
+'cantrollback' => 'Неможливо відкинути редагування, оскільки останній дописувач є її автором.',
 'alreadyrolled' => 'Неможливо відкинути останні редагування [[:$1]], зроблені [[User:$2|$2]] ([[User talk:$2|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), оскільки хтось інший уже змінив чи відкинув редагування цієї статті.
 
\9eÑ\81Ñ\82аннÑ\96 Ñ\80едагÑ\83ваннÑ\8f Ð·Ñ\80обив [[User:$3|$3]] ([[User talk:$3|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
\9eÑ\81Ñ\82аннÑ\96 Ñ\80едагÑ\83ваннÑ\8f Ð·Ñ\80облено [[User:$3|$3]] ([[User talk:$3|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Пояснення редагування було: «''$1''».",
 'revertpage' => 'Редагування користувача [[Special:Contributions/$2|$2]] ([[User talk:$2|обговорення]]) відкинуті до версії користувача [[User:$1|$1]]',
 'revertpage-nouser' => "Відкинуто редагування (ім'я користувача приховано) до зробленого [[User:$1|$1]]",
@@ -2546,6 +2545,8 @@ $UNWATCHURL
 'prot_1movedto2' => '«[[$1]]» перейменована на «[[$2]]»',
 'protect-badnamespace-title' => 'Беззахисний простір імен',
 'protect-badnamespace-text' => 'Сторінки у просторі імен не можуть бути захищені.',
+'protect-norestrictiontypes-text' => 'Цю сторінку не може бути захищено, бо немає ніяких типів обмежень.',
+'protect-norestrictiontypes-title' => 'Сторінка, яку неможливо захистити',
 'protect-legend' => 'Підтвердження встановлення захисту',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Закінчується:',
@@ -2561,9 +2562,9 @@ $UNWATCHURL
 Поточні установки для сторінки: '''$1''':",
 'protect-cascadeon' => 'Ця сторінка захищена, бо вона включена {{PLURAL:$1|до зазначеної нижче сторінки, на яку|до нижчезазначених сторінок, на які}} встановлено каскадний захист. Ви можете змінити рівень захисту цієї сторінки, але це не вплине на каскадний захист.',
 'protect-default' => 'Дозволити всім користувачам',
-'protect-fallback' => 'Ð\9fоÑ\82Ñ\80Ñ\96бен Ð´Ð¾Ð·Ð²Ñ\96л «$1»',
-'protect-level-autoconfirmed' => 'Ð\97аÑ\85иÑ\81Ñ\82иÑ\82и Ð²Ñ\96д Ð½Ð¾Ð²Ð¸Ñ\85 Ñ\96 Ð½ÐµÐ·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в',
-'protect-level-sysop' => 'ТÑ\96лÑ\8cки Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80и',
+'protect-fallback' => 'Ð\94озволено Ñ\82Ñ\96лÑ\8cки ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам Ñ\96з Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¾Ð¼ «$1»',
+'protect-level-autoconfirmed' => 'Ð\94озволено Ñ\82Ñ\96лÑ\8cки Ð°Ð²Ñ\82опÑ\96дÑ\82веÑ\80дженим ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам',
+'protect-level-sysop' => 'Ð\94озволено Ñ\82Ñ\96лÑ\8cки Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ам',
 'protect-summary-cascade' => 'каскадний',
 'protect-expiring' => 'закінчується $1 (UTC)',
 'protect-expiring-local' => 'закінчується $1',
@@ -3222,7 +3223,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-watchers' => 'Кількість спостерігачів',
 'pageinfo-redirects-name' => 'Перенаправлення на цю сторінку',
 'pageinfo-subpages-name' => 'Підсторінки цієї сторінки',
-'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|не-перенаправлення|не-перенаправлення|не-перенаправлень}})',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|неперенаправлення|неперенаправлення|неперенаправлень}})',
 'pageinfo-firstuser' => 'Створив сторінку',
 'pageinfo-firsttime' => 'Дата створення сторінки',
 'pageinfo-lastuser' => 'Останній редактор',
@@ -3234,6 +3235,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-magic-words' => '{{PLURAL:$1|Магічне слово|Магічні слова}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Прихована категорія|Приховані категорії}} ($1)',
 'pageinfo-templates' => 'Включено {{PLURAL:$1|шаблон|шаблонів}} ($1)',
+'pageinfo-transclusions' => 'Включено до ($1) {{PLURAL:$1|сторінки|сторінок}}',
 'pageinfo-toolboxlink' => 'Інформація про сторінку',
 'pageinfo-redirectsto' => 'Перенаправляє на',
 'pageinfo-redirectsto-info' => 'інформація',
@@ -3242,6 +3244,10 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-protect-cascading' => 'Звідси розпочинається каскадний захист',
 'pageinfo-protect-cascading-yes' => 'Так',
 'pageinfo-protect-cascading-from' => 'Каскадний захист починається тут',
+'pageinfo-category-info' => 'Інформація про категорію',
+'pageinfo-category-pages' => 'Кількість сторінок',
+'pageinfo-category-subcats' => 'Кількість підкатегорій',
+'pageinfo-category-files' => 'Кількість файлів',
 
 # Skin names
 'skinname-standard' => 'Стандартне',
@@ -3334,6 +3340,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 хвилина|$1 хвилини|$1 хвилин}}',
 'hours' => '{{PLURAL:$1|$1 година|$1 години|$1 годин}}',
 'days' => '{{PLURAL:$1|$1 день|$1 дні|$1 днів}}',
+'months' => '{{PLURAL:$1|$1 місяць|$1 місяці|$1 місяців}}',
+'years' => '{{PLURAL:$1|$1 рік|$1 роки|$1 років}}',
 'ago' => '$1 тому',
 'just-now' => 'щойно',
 
@@ -4255,6 +4263,10 @@ MediaWiki поширюється в надії, що вона буде кори
 'logentry-newusers-create2' => '$1 {{GENDER:$2|створив|створила}} обліковий запис {{GENDER:$4|користувача|користувачки}} $3',
 'logentry-newusers-autocreate' => '$1 — автоматично створений обліковий запис',
 'newuserlog-byemail' => 'пароль надісланий електронною поштою',
+'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3 із $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3',
+'logentry-rights-autopromote' => '$1 було автоматично переведено із $4 в $5',
+'rightsnone' => '(нема)',
 
 # Feedback
 'feedback-bugornote' => 'Якщо ви готові описати технічні проблеми в деталях, будь ласка [ $1  повідомте про помилку].
index 9573ecd..72f19ca 100644 (file)
@@ -979,11 +979,13 @@ HTML tags جانچئے.',
 'right-delete' => 'صفحات حذف کریں',
 'right-sendemail' => 'دیگر صارفین کو برقی ڈاک بھیجیں',
 
+# Special:Log/newusers
+'newuserlogpage' => 'نوشتۂ آمد صارف',
+'newuserlogpagetext' => 'یہ نۓ صارفوں کی آمد کا نوشتہ ہے',
+
 # User rights log
 'rightslog' => 'نوشتہ صارفی اختیارات',
 'rightslogtext' => 'یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔',
-'rightslogentry' => 'گروہ رکنیت میں برائے $1 از $2 تا $3 تبدیلی ہوئی',
-'rightsnone' => '(کچھ نہیں)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'اس صفحہ میں ترمیم کریں',
@@ -1182,10 +1184,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-line' => '$1 مربوط ہے $2 سے',
 
-# Special:Log/newusers
-'newuserlogpage' => 'نوشتۂ آمد صارف',
-'newuserlogpagetext' => 'یہ نۓ صارفوں کی آمد کا نوشتہ ہے',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(اراکین کی فہرست)',
 
@@ -1212,6 +1210,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'wlshowlast' => 'دکھائیں آخری $1 گھنٹے $2 دن $3',
 'watchlist-options' => 'اختیارات برائے زیرِنظرفہرست',
 
+'created' => 'بنا دیا گیا',
+'changed' => 'تبدیل کردیاگیا',
+
 # Delete
 'deletepage' => 'صفحہ ضائع کریں',
 'confirm' => 'یقین',
@@ -1525,6 +1526,9 @@ $1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4',
 # Special:SpecialPages
 'specialpages' => 'خصوصی صفحات',
 
+# New logging system
+'rightsnone' => '(کچھ نہیں)',
+
 # Search suggestions
 'searchsuggest-search' => 'تلاش',
 
index 773282c..e713bb8 100644 (file)
@@ -170,7 +170,7 @@ $messages = array(
 'cancel' => 'Bekor qilish',
 'moredotdotdot' => 'Batafsil...',
 'mypage' => 'Sahifa',
-'mytalk' => 'Munozara',
+'mytalk' => 'Munozaram',
 'anontalk' => 'Bu IP uchun suhbat',
 'navigation' => 'Saytda harakatlanish',
 'and' => '&#32;va',
@@ -502,6 +502,10 @@ Siz sharhlamoqchi bo'lgan bo'lim o'chirilgan yoki boshqa sarlavhaga jildirilgan
 'newarticletext' => "Bu sahifa hali mavjud emas.
 Sahifani yaratish uchun quyida matn kiritishingiz mumkin (qoʻshimcha axborot uchun [[{{MediaWiki:Helppage}}|yordam sahifasini]] koʻring).
 Agar bu sahifaga xatolik sabab kelib qolgan boʻlsangiz brauzeringizning '''orqaga''' tugmasini bosing.",
+'anontalkpagetext' => "----''Ushbu munozara sahifasi hali hisob yozuvini yaratmagan, yoki undan foydalanmaydigan anonim ishtirokchiga tegishli.
+Shu sababli tenglashtirish uchun raqamli IP-manzildan foydalaniladi.
+Ushbu manzilning oʻzi bir nechta boshqa ishtirokchilarga ham mos kelishi mumkin.
+Agar siz anonim ishtirokchi boʻlsangiz va siz oʻzingizga yoʻnaltirilmagan xabar oldim deb taxmin qilsangiz, iltimos, boshqa anonim ishtirokchilar bilan mumkin boʻlgan chalkashliklarni chetlab oʻtish uchun [[Special:UserLogin/signup|hisob yozuvi yarating]] yoki [[Special:UserLogin|tizimga kiring]].''",
 'noarticletext' => 'Bu sahifada hozircha hech qanday matn yoʻq. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tegishli qaydlarga qarashingiz] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz]</span> mumkin.',
 'clearyourcache' => "'''Eslatma.''' Saqlaganingizdan so'ng o'zgarishlarni ko'rish uchun siz o'z brauzeringiz keshini tozalashingizga to'gri kelishi mumkin.
 * '''Firefox / Safari:''' ''Shift'' tugmasini bosgan holda, ''Yangilash'' unsurlar darchasini bosing, yoki ''Ctrl-F5'' yoki ''Ctrl-R'' (Macda ''⌘-R'') ni bosing
@@ -733,6 +737,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'stub-threshold-disabled' => "O'chirib qo'yilgan",
 'recentchangesdays-max' => 'Eng koʻpi $1 kun',
 'recentchangescount' => 'Sukut boʻyicha koʻrsatiladigan tahrirlar soni',
+'savedprefs' => 'Sizning moslamalaringiz saqlandi.',
 'timezonelegend' => 'Vaqt mintaqangiz:',
 'localtime' => 'Mahalliy vaqt:',
 'timezoneuseserverdefault' => 'Server moslamalaridan foydalanish ($1)',
@@ -835,9 +840,12 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'right-read' => "Sahifalarni o'qish",
 'right-edit' => 'Sahifalarni tahrirlash',
 
+# Special:Log/newusers
+'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
+'newuserlogpagetext' => 'Yaqinda roʻyxatdan oʻtgan foydalanuvchilar roʻyxati',
+
 # User rights log
 'rightslog' => "Ishtirokchi huquqlari bo'yicha qaydlar",
-'rightslogentry' => "ishtirokchi $1ning guruhlardagi a'zoligini $2dan $3ga o'zgartirdi",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ushbu sahifani tahrirlash',
@@ -868,7 +876,7 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'diff' => 'farq',
 'hist' => 'tarix',
 'hide' => 'Yashirish',
-'show' => 'Koʻrsatish',
+'show' => 'koʻrsatish',
 'minoreditletter' => 'k',
 'newpageletter' => 'Y',
 'boteditletter' => 'b',
@@ -912,7 +920,7 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'listfiles_name' => 'Nomi',
 'listfiles_user' => 'Foydalanuvchi',
 'listfiles_size' => 'Oʻlchami',
-'listfiles_description' => 'TaÊ»rif',
+'listfiles_description' => 'Taʼrif',
 'listfiles_count' => 'Versiyalar',
 
 # File description page
@@ -1006,10 +1014,12 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'prevpage' => 'Avvalgi sahifa ($1)',
 'allpagesfrom' => 'Quyidagidan boshlanuvchi sahifalarni koʻrsatish:',
 'allarticles' => 'Barcha sahifalar',
+'allnotinnamespace' => 'Barcha sahifalar ("$1" nomfazolaridan tashqari)',
 'allpagesprev' => 'Oldingi',
 'allpagesnext' => 'Keyingi',
 'allpagessubmit' => 'Oʻtish',
 'allpagesprefix' => 'Shunday prefiksli sahifalarni koʻrsatish:',
+'allpages-hide-redirects' => 'Yoʻnaltirishlarni yashirish',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => "Oxirgi versiyasini ko'rish",
@@ -1048,10 +1058,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'activeusers-hidesysops' => 'Maʼmurlarni yashirish',
 'activeusers-noresult' => 'Foydalanuvchilar topilmadi.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
-'newuserlogpagetext' => 'Yaqinda roʻyxatdan oʻtgan foydalanuvchilar roʻyxati',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Foydalanuvchilar guruhi huquqlari',
 'listgrouprights-group' => 'Guruh',
@@ -1123,10 +1129,10 @@ Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmasl
 'enotif_subject_restored' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan tiklandi',
 'enotif_subject_changed' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan oʻzgartirildi',
 'enotif_body_intro_deleted' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan o‘chirildi, qarang: $3.',
-'enotif_body_intro_created' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan yaratildi, joriy variantini ko‘rish uchun $3ga qarang.',
-'enotif_body_intro_moved' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan qayta nomlandi, joriy variantini ko‘rish uchun $3ga qarang.',
-'enotif_body_intro_restored' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan tiklandi, joriy variantini ko‘rish uchun $3ga qarang.',
-'enotif_body_intro_changed' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan o‘zgartirildi, joriy variantini ko‘rish uchun $3ga qarang.',
+'enotif_body_intro_created' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan yaratildi, joriy variantini ko‘rish uchun $3 ga qarang.',
+'enotif_body_intro_moved' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan qayta nomlandi, joriy variantini ko‘rish uchun $3 ga qarang.',
+'enotif_body_intro_restored' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan tiklandi, joriy variantini ko‘rish uchun $3 ga qarang.',
+'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',
@@ -1148,14 +1154,16 @@ Agar siz sahifaga o‘tib ko‘rmasangiz, u holda uning keyingi o‘zgarishlari
 Xabar berish moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting
 {{canonicalurl:{{#special:Preferences}}}}
 
-O‘z kuzatuv ro‘yxatingiz moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting
+Oʻz kuzatuv roʻyxatingiz moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-O‘z kuzatuv ro\'yxatingizdan sahifani o‘chirish uchun quyidagi havola bo‘yicha o‘ting
+Oʻz kuzatuv roʻyxatingizdan sahifani o‘chirish uchun quyidagi havola bo‘yicha o‘ting
 $UNWATCHURL
 
 Qayta aloqa va yordam
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yaratildi',
+'changed' => 'o‘zgartirildi',
 
 # Delete
 'deletepage' => "Sahifani o'chirish",
@@ -1251,7 +1259,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 # Contributions
 'contributions' => '{{GENDER:$1|Foydalanuvchi}} hissasi',
 'contributions-title' => '{{GENDER:$1|Foydalanuvchi}} $1 hissasi',
-'mycontris' => 'Hissa',
+'mycontris' => 'Hissam',
 'contribsub2' => '$1 uchun ($2)',
 'nocontribs' => "Belgilangan shartlarga muvofiq o'zgarishlar topilmadi",
 'uctop' => '(oxirgi)',
@@ -1476,6 +1484,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'pageinfo-watchers' => 'Sahifa kuzatuvchilari soni',
 'pageinfo-edits' => 'Jami tahrirlar soni',
 'pageinfo-toolboxlink' => 'Sahifa haqida maʼlumot',
+'pageinfo-redirectsto' => 'Qayta yoʻnaltirish',
 
 # Skin names
 'skinname-standard' => 'Klassik',
index db6d37b..e626377 100644 (file)
@@ -156,7 +156,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Scondi i canbiamenti verificà in tei "Ultimi canbiamenti"',
 'tog-newpageshidepatrolled' => "Scondi łe pajine verifegae da l'elenco de łe pajine pì resenti",
 'tog-extendwatchlist' => "Mostra tute łe modifeghe a i oservai spesałi, no soło l'ultima",
-'tog-usenewrc' => 'Utiłisa łe ulteme modifeghe avansae (el richiede JavaScript)',
+'tog-usenewrc' => "Ragrupa łe modifeghe par pàjina inte i ultimi canbiamenti e inte łe tegnùe d'ocio (el dimanda JavaScript)",
 'tog-numberheadings' => 'Numerasion automatega de i titołi de sesion',
 'tog-showtoolbar' => 'Mostra ła bara de i strumenti de modifega (el richiede JavaScript)',
 'tog-editondblclick' => 'Modifega de łe pajine tramite dopio clic (el richiede JavaScript)',
@@ -164,17 +164,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Modifega de łe sesion tramite clic destro sol titoło (el richiede JavaScript)',
 'tog-showtoc' => "Mostra l'indexe par łe pajine con pì de 3 sesion",
 'tog-rememberpassword' => 'Tiente in mente la me password so sto computer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})',
-'tog-watchcreations' => 'Zonta łe pajine creae a i oservai spesałi',
-'tog-watchdefault' => 'Zonta łe pajine modifegae a i oservai spesałi',
-'tog-watchmoves' => 'Zonta łe pajine spostae a i oservai spesałi',
-'tog-watchdeletion' => 'Zonta łe pajine scansełae a i oservai spesałi',
+'tog-watchcreations' => "Xonta łe pàjine creae e i file cargai a łe tegnùe d'ocio",
+'tog-watchdefault' => "Xonta łe pàjine e i file modifegai a łe tegnùe d'ocio",
+'tog-watchmoves' => "Xonta łe pàjine e i file spostai a łe tegnùe d'ocio",
+'tog-watchdeletion' => "Xonta łe pàjine e i file scansełai a łe tegnùe d'ocio",
 'tog-minordefault' => 'Segna ogni canbiamento come picenin (solo come predefinìo)',
 'tog-previewontop' => "Mostra l'anteprima sora ła caseła de modifega e no soto",
 'tog-previewonfirst' => "Mostra l'anteprima par ła prima modifega",
 'tog-nocache' => 'Disativa ła cache par łe pajine del browser',
-'tog-enotifwatchlistpages' => 'Segnałame via e-mail łe modifeghe a łe pajine oservae',
+'tog-enotifwatchlistpages' => "Segnałame via e-mail có vien canbià na pàjina o un file prexente inte ła lista de łe tegnùe d'ocio",
 'tog-enotifusertalkpages' => 'Avìseme par e-mail se i scrive su la me pagina de discussion',
-'tog-enotifminoredits' => 'Avìseme par e-mail anca par i canbiamenti picenini',
+'tog-enotifminoredits' => "Avìxeme par e-mail anca pa' i canbiamenti picenini de pàjine e file",
 'tog-enotifrevealaddr' => 'Fà védar el me indirisso e-mail in tei messagi de aviso',
 'tog-shownumberswatching' => 'Mostra el numaro de utenti che i ga ła pajina en oservasion',
 'tog-oldsig' => 'Anteprima de ła firma:',
@@ -182,7 +182,7 @@ $messages = array(
 'tog-externaleditor' => "Dopara par default un editor de testo esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
 'tog-externaldiff' => "Dopara par default un programa de diff esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
 'tog-showjumplinks' => 'Ativa i cołegamenti acesibiłi "va a"',
-'tog-uselivepreview' => 'Ativa ła funsion "Line preview" (el richiede JavaScript; sperimentałe)',
+'tog-uselivepreview' => 'Ativa ła funsion "Line preview" (el dimanda JavaScript; sperimentałe)',
 'tog-forceeditsummary' => "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
 'tog-watchlisthideown' => 'Scondi łe me modifeghe ne i oservai spesałi',
 'tog-watchlisthidebots' => 'Scondi łe modifeghe de i bot ne i oservai spesałi',
@@ -197,7 +197,7 @@ $messages = array(
 
 'underline-always' => 'Senpre',
 'underline-never' => 'Mai',
-'underline-default' => 'Mantieni łe inpostasion del browser',
+'underline-default' => 'Mantien łe inpostasion del browser o de ła skin',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Stiłe font de l'area de modifega:",
@@ -282,7 +282,8 @@ $messages = array(
 'newwindow' => '(se verze in te na finestra nova)',
 'cancel' => 'Lassa star',
 'moredotdotdot' => 'Altro...',
-'mypage' => 'La me pagina',
+'morenotlisted' => 'Altro nó elencà',
+'mypage' => 'Pàjina',
 'mytalk' => 'Discussion',
 'anontalk' => 'Discusion par sto IP',
 'navigation' => 'Navigasion',
@@ -305,10 +306,10 @@ $messages = array(
 'vector-action-protect' => 'Protezi',
 'vector-action-undelete' => 'Recupera',
 'vector-action-unprotect' => 'Canbia ła protesion',
-'vector-simplesearch-preference' => "Intaca i sugerimenti di ricerca avansadi (solo par l'interfacia Vector)",
+'vector-simplesearch-preference' => "Abiłita ła sbara par ła riserca senplifegà (soło che par l'interfacia Vector)",
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Canbia',
-'vector-view-history' => 'Varda la storia',
+'vector-view-history' => "Varda ła 'storia",
 'vector-view-view' => 'Lezi',
 'vector-view-viewsource' => 'Varda el testo',
 'actions' => 'Asion',
@@ -467,12 +468,12 @@ L'elenco de le pagine speciali te lo cati su [[Special:SpecialPages|{{int:specia
 # General errors
 'error' => 'Erore',
 'databaseerror' => 'Erore del database',
-'dberrortext' => 'Erore de sintassi ne ła richiesta inoltrà al database.
-Ciò podaria indicare ła presensa de on bug nel software.
-L\'ultima query invià al database xè sta:
+'dberrortext' => 'Eror de sintasi inte ła dimanda inoltrà al database.
+Ciò podaria indicar ła prexensa de un bug inte\'l software.
+L\'ultema query invià al database ła xè sta:
 <blockquote><tt>$1</tt></blockquote>
 riciamà da ła funsion "<tt>$2</tt>".
-El database el ga restituio el seguente erore "<tt>$3: $4</tt>".',
+El database el ga restituio el seguente eror "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Erore de sintasi ne ła richiesta inoltrà al database.
 L\'ultima query invià al database xè sta:
 "$1"
@@ -509,6 +510,8 @@ Se prega de dìrghelo a un [[Special:ListUsers/sysop|aministradore]] indicando l
 'cannotdelete' => 'No xè sta posibiłe scansełare el file "$1".
 Podaria esare sta zà scansełà da qualcun altro.',
 'cannotdelete-title' => 'Inposibiłe ełiminare ła pajina "$1"',
+'delete-hook-aborted' => 'Modifega abortìa da parte del hook.
+No xe stà dà nisuna spiegasion in merito.',
 'badtitle' => 'Titoło mia justo',
 'badtitletext' => "El titoło de ła pajina richiesta xè vodo, erà o con carateri no amesi opure el deriva da n'erore ne i cołegamenti tra siti wiki diversi o version en łengue diverse de ło steso sito.",
 'perfcached' => 'Sti dati vien tiradi fora da na copia "cache" del database e łi podarìa no esare ajornadi. Inte ła cache xe {{PLURAL:$1|disponibiłe un rixultado|xe disponibiłi $1 rixultadi}}.',
@@ -522,12 +525,13 @@ Query: $2',
 'viewsource-title' => 'Varda el testo de $1',
 'actionthrottled' => 'Asion ritardà',
 'actionthrottledtext' => "Come misura de sicuresa contro e o spam, l'esecusion de alcune asion e a xè limità a on numaro masimo de volte en on determinà periodo de tenpo, limite che en questo caso xè sta superà. Se prega de riprovare tra qualche minuto.",
-'protectedpagetext' => 'Sta pagina la xe stà proteta de modo che nissuni possa canbiarla.',
+'protectedpagetext' => 'Sta pàjina ła xe stà proteta de modo che nisun posa canbiarla o far altre operasion.',
 'viewsourcetext' => 'Se pole vardar e copiar el testo de sta pagina:',
 'viewyourtext' => "Xè posibile vedàre e copiare el codexe sorzente de le '''to modifighe''' a sta pajina:",
-'protectedinterface' => "Sta pagina la gà drento un testo de l'interfacia utente del software, quindi la xe proteta parché nissuni la strussia.",
-'editinginterface' => "'''Ocio:''' El testo de sta pajina el fa parte de l'interfacia utente del sito. Tute łe modifeghe aportae a sta pajina se riflete so i mesaji visuałizà par tuti i utenti.
-Par łe tradusion, considera ła posibiłità de usare [//translatewiki.net/wiki/Main_Page?setlang=vec translatewiki.net], el projeto MediaWiki par ła localizasion.",
+'protectedinterface' => "Sta pàjina ła gà drento un testo de l'interfacia utente del software de sto sito, quindi la xe proteta parché nisuni ła strusie.
+Par xontar o modifegar tradusion par tute łe wiki doparar [//translatewiki.net/ translatewiki.net], el projeto de locałixasion de MediaWiki.",
+'editinginterface' => "'''Ocio:''' El testo de sta pàjina el fa parte de l'interfacia utente del sito. Tute łe modifeghe aportae a sta pajina se riflete so i mesaji visuałixà par tuti i utenti so sta wiki.
+Par xontare o modifegar łe tradusion vałide so tute łe wiki, considera ła posibiłità de doparar [//translatewiki.net/wiki/Main_Page?setlang=vec translatewiki.net], el projeto MediaWiki par ła localixasion.",
 'sqlhidden' => '(ła query SQL ła xè sta sconta)',
 'cascadeprotected' => 'So sta pajina no xè posibiłe efetuare modifeghe parché xè sta inclusa {{PLURAL:$1|ne ła pajina indicà de seguito, che xè sta proteta|ne łe pajine indicae de seguito, che e xè sta protete}} sełesionando ła protesion "ricorsiva":
 $2',
@@ -543,6 +547,7 @@ L\'aministradore che ło ga blocà ga fornìo sta spiegasion: "$3".',
 'invalidtitle-knownnamespace' => 'Titoło no vałido co namespace "$2" e testo "$3"',
 'invalidtitle-unknownnamespace' => 'Titoło no vałido co namespace sconosùo "$1" e testo "$2"',
 'exception-nologin' => 'Acesso mia efetuà',
+'exception-nologin-text' => "Sta pàjina o asion ła richiede che te gapi efetuà 'l aceso so sta wiki.",
 
 # Virus scanner
 'virus-badscanner' => 'Erore de configurasion: antivirus sconossuo: "$1"',
@@ -555,12 +560,15 @@ L\'aministradore che ło ga blocà ga fornìo sta spiegasion: "$3".',
 Te poli 'ndar vanti doparando {{SITENAME}} come utente anonimo o se nò <span class='plainlinks'>[$1 entrar da novo]</span>, col stesso nome utente o uno difarente.
 Ocio che serte pagine podarìa èssar che ti 'e vedi come se te fussi 'ncora drento col to nome de prima, fin che no te neti la ''cache'' del to browser.",
 'welcomeuser' => 'Benvegnù, $1!',
+'welcomecreation-msg' => 'El to nome utente el xe stà creà.
+Nó desmentegarte de personałixare łe [[Special:Preferences|prefarense de {{SITENAME}}]].',
 'yourname' => 'Nome utente:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'De novo la password:',
 'remembermypassword' => 'Tiente in mente la password su sto conputer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})',
 'securelogin-stick-https' => 'Resta tacà par HTTPS dopo èssar entrà',
 'yourdomainname' => 'Spesifegare el dominio',
+'password-change-forbidden' => 'Nó xe posibiłe canbiar ła password so sta wiki.',
 'externaldberror' => "Se xè verifegà n'erore con el server de autenticasion esterno, opure no se dispone de łe autorizasion nesesarie par ajornare el proprio aceso esterno.",
 'login' => 'Entra',
 'nav-login-createaccount' => 'Entra / Regìstrete',
@@ -641,6 +649,7 @@ Spèta un tocheto prima de proàr da novo.',
 # E-mail 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.',
 
 # Change password dialog
 'resetpass' => 'Cànbia la password',
@@ -702,6 +711,7 @@ Password tenporanea: $2',
 'changeemail-oldemail' => 'Indiriso de posta ełetronega atuałe:',
 'changeemail-newemail' => 'Novo indiriso de posta ełetronega:',
 'changeemail-none' => '(nisun)',
+'changeemail-password' => 'Ła password so {{SITENAME}}:',
 'changeemail-submit' => 'Canbia indiriso de posta ełetronega',
 'changeemail-cancel' => 'Anuła',
 
@@ -800,16 +810,16 @@ o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'noarticletext-nopermission' => 'In sto momento no ghe xe nissun testo su sta pagina.
 Te pol [[Special:Search/{{PAGENAME}}|sercar sto titolo de pagina]] in altre pagine,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sercar in tei registri ligà a sta pagina]</span>, ma no te ghè el parmesso de crear sta pagina.',
+'missing-revision' => 'Ła revixion #$1 de ła pàjina "{{PAGENAME}}" nó ła existe.',
 'userpage-userdoesnotexist' => 'L\'account "<nowiki>$1</nowiki>" no\'l corisponde mìa a un utente registrà. Verifica se te voli dal bon crear o modificar sta pagina.',
 'userpage-userdoesnotexist-view' => 'L\'utensa "$1" no la xe gnancora registrà.',
 'blocked-notice-logextract' => "Sto utente xè atualmente blocà.
 L'ultimo ełemento del rejistro de i blochi xè riportà de seguito par informasion:",
-'clearyourcache' => "Ocio: dopo aver salvà, połe darse che te gabi da netare ła cache del to browser par védar i canbiamenti.
+'clearyourcache' => "Ocio: dopo 'ver salvà, pol darse che te gabi da netare ła cache del to browser par védar i canbiamenti.
 *Par '''Firefox / Safari:''' tien macà el boton de łe majuscołe e schicia \"Recarga\", o senò maca ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' se te ghè el Mac)
-*Par '''Google Chrome''':schicia ''Ctrl-Shift-R'' (''⌘-Shift-R'' co' un Mac)
+*Par '''Google Chrome''':schicia ''Ctrl-Shift-R'' (''⌘-Shift-R'' có un Mac)
 *Par '''Internet Explorer''': tien schicià el boton \"Ctrl\" fin che te schici '''Recarga''', senò schicia '''Ctrl+F5'''
-*Par '''Konqueror''': schicia \"Recarga\" o maca ''F5'';
-*Par '''Opera:''' néta la cache in ''Strumenti → Preferense;''",
+*Par '''Opera:''' néta la cache in ''Strumenti → Prefarense;''",
 'usercssyoucanpreview' => "'''Sugerimento:''' se consiglia de doparar el boton \"{{int:showpreview}} par proàr i novi CSS prima de salvarli.",
 'userjsyoucanpreview' => "'''Sugerimento:''' se consiglia de doparar el boton \"{{int:showpreview}}\" par proàr i novi JavaScript prima de salvarli.",
 'usercsspreview' => "'''Sta qua la xe solo n'anteprima del proprio CSS personal.
@@ -821,7 +831,7 @@ Le modifiche no le xe gnancora stà salvà!'''",
 'updated' => '(Agiornà)',
 'note' => "'''Nota:'''",
 'previewnote' => "Sta cua ła xe soło n'anteprima; i canbiamenti a ła pajina NO i xe gnancora stà salvài!",
-'continue-editing' => 'Continua modifegare',
+'continue-editing' => "Va a l'area de modifega",
 'previewconflict' => 'Sta anteprima la corisponde al testo ne la casèla de edizion de sora, e la fa védar come vegnarà fora la pagina se te machi "Salva la pagina" in sto momento.',
 'session_fail_preview' => "No xè stà possibiłe salvar le to modifiche parché i dati de la session i xè andai persi.
 Par piaser, riproa da novo.
@@ -895,6 +905,9 @@ Pararìa che la sìpia stà scancelà.',
 'edit-already-exists' => 'No se pol crear na pagina nova.
 La esiste de zà.',
 'defaultmessagetext' => 'Testo predefinìo',
+'content-failed-to-parse' => "Inposibiłe anałixare $2 pa'l modèl $1: $3",
+'invalid-content-data' => 'Dati contegnui nó vałidi',
+'content-not-allowed-here' => 'Contegnùo in "$1" nó consentio inte ła pàjina [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'wikitesto',
@@ -922,6 +935,7 @@ Sti argomenti i xe stà omessi.",
 'expansion-depth-exceeded-warning' => 'Sta pajina ga superà el limite de profondità de espansion',
 'parser-unstrip-loop-warning' => 'Xe sta riłevà un ciclo de Unstrip',
 'parser-unstrip-recursion-limit' => 'Superadi i limiti de recursion de Unstrip ($1)',
+'converter-manual-rule-error' => 'Rilevà eror inte ła regoła manuałe de conversion de ła lèngua',
 
 # "Undo" feature
 'undo-success' => 'Sta modifica la pode èssar anulà. Verifica el confronto presentà de seguito par èssar sicuro che el contenuto el sia come te lo voli e quindi salva le modifiche par conpletar la procedura de anulamento.',
@@ -1051,9 +1065,11 @@ No ti gà acesso su de ela.',
 'revdelete-no-change' => "''Ocio:''' la version datà $1 a le $2 la gà zà le inpostassion de visibilità da ti richieste.",
 'revdelete-concurrent-change' => "No se riesse a modificar la version datà $1 a le $2: pararìa che qualchidun altro el gavesse canbià el stato de la version intanto che ti te sercavi de far la stessa roba. Daghe n'ociada sui registri.",
 'revdelete-only-restricted' => "Eròr sercando de scondar l'elemento datà $1 a le $2: no te podi inpedirghe ai aministradori de vardar na revision se no te selessioni al tenpo stesso una de le altre opzioni de restrizion.",
-'revdelete-reason-dropdown' => '*Motivassion pi comuni par la scancelassion
-** Violassion de copyright
-** Informassion personali inapropriàe',
+'revdelete-reason-dropdown' => '*Motivasion pi comuni par la scansełasion
+** Viołasion de copyright
+** Comenti o informasion personali inapropriàe
+** Nome utente inapropià
+** Informasion potensialmente difamatoria',
 'revdelete-otherreason' => 'Altro:',
 'revdelete-reasonotherlist' => 'Altra motivassion',
 'revdelete-edit-reasonlist' => 'Modifica le motivazion par la scancelazion',
@@ -1103,6 +1119,10 @@ Assicùrete che la continuità storica de la pagina no la vegna alterà.',
 'editundo' => 'tira indrìo',
 'diff-multi' => '({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de pi de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)',
+'difference-missing-revision' => "{{PLURAL:$2|Na version|$2 version}} de sta difarensa ($1) {{PLURAL:$2|nó ła xe sta trovà|nó łe xe stae trovae}}.
+
+Cuesto se verifega de sołito seguendo un ligamente vecio de un dif a na pàjina scansełà.
+I detaji i pol esar catai inte'l [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de łe scansełasion].",
 
 # Search results
 'searchresults' => 'Risultati de la riserca',
@@ -1189,11 +1209,12 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'prefs-beta' => 'Funsionałidà beta',
 'prefs-datetime' => 'Data e ora',
 'prefs-labs' => 'Funsionałidà de i laboratori',
+'prefs-user-pages' => 'Pàjine utente',
 'prefs-personal' => 'Profiło utente',
 'prefs-rc' => 'Ultime modifeghe',
-'prefs-watchlist' => 'Tegnùi de òcio',
+'prefs-watchlist' => "Pàjine tegnùe d'ocio",
 'prefs-watchlist-days' => 'Nùmaro de giòrni da far védar nei osservati speciali:',
-'prefs-watchlist-days-max' => 'Masimo $1 ',
+'prefs-watchlist-days-max' => 'Masimo $1 {{PLURAL:$1|xorno|xorni}}',
 'prefs-watchlist-edits' => 'Nùmaro de modifiche da far védar con le funzion avanzade:',
 'prefs-watchlist-edits-max' => 'Numaro massimo: 1000',
 'prefs-watchlist-token' => "Segnal par le pagine tegnùe d'ocio:",
@@ -1238,7 +1259,7 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'timezoneregion-indian' => 'Oceano Indian',
 'timezoneregion-pacific' => 'Oceano Pacifico',
 'allowemail' => 'Consenti la ricezion de e-mail da altri utenti<sup>1</sup>',
-'prefs-searchoptions' => 'Opsioni de riserca',
+'prefs-searchoptions' => 'Riserca',
 'prefs-namespaces' => 'Namespace',
 'defaultns' => 'Serca in sti namespace se no diversamente specificà:',
 'default' => 'predefinìo',
@@ -1251,9 +1272,9 @@ Sta operassion no la pol èssar anulà.',
 'prefs-emailconfirm-label' => "Conferma de l'e-mail:",
 'prefs-textboxsize' => 'Dimension de la casèla de modifica',
 'youremail' => 'La to e-mail',
-'username' => 'Nome utente',
-'uid' => 'ID utente:',
-'prefs-memberingroups' => 'Menbro {{PLURAL:$1|del grupo|dei grupi}}:',
+'username' => '{{GENDER:$1|Nome utente}}:',
+'uid' => '{{GENDER:$1|ID utente}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Menbro}} {{PLURAL:$1|del grupo|de i grupi}}:',
 'prefs-registration' => 'Data de registrassion:',
 'yourrealname' => 'El to vero nome:',
 'yourlanguage' => 'Lengua:',
@@ -1365,6 +1386,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'right-writeapi' => "Doparar l'API par la modifica de la wiki",
 'right-delete' => 'Scancela pagine',
 'right-bigdelete' => 'Scancela pagine con cronologie longhe',
+'right-deletelogentry' => 'Scanseła e ripristina voxe de registrio spesifeghe',
 'right-deleterevision' => 'Scondi version specifiche de le pagine',
 'right-deletedhistory' => 'Varda i record scancelà de la cronologia, ma sensa el testo associà a lori',
 'right-deletedtext' => 'Vardar el testo scancelà e i canbiamenti tra dele revision scancelà',
@@ -1401,12 +1423,13 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'right-sendemail' => 'Mandarghe e-mail a cheialtri utenti',
 'right-passwordreset' => 'Vedi i mesaji de rinpostasion de ła password',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Novi utenti',
+'newuserlogpagetext' => 'Sto qua el xè el registro dei novi utenti registrai.',
+
 # User rights log
 'rightslog' => 'Diriti de i utenti',
 'rightslogtext' => 'Sto qua el xe el registro de le modifiche ai diriti assegnà ai utenti.',
-'rightslogentry' => "gà modificà l'apartenenza de $1 dal grupo $2 al grupo $3",
-'rightslogentry-autopromote' => 'xe stà automategamente promoso/a da $2 a $3',
-'rightsnone' => '(nissun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lèxar sta pàxena',
@@ -1475,7 +1498,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'number_of_watching_users_pageview' => '[osservà da {{PLURAL:$1|un utente|$1 utenti}}]',
 'rc_categories' => 'Limita a le categorie (separà da "|")',
 'rc_categories_any' => 'Qualsiasi',
-'rc-change-size-new' => '$1 byte dopo ła modifega',
+'rc-change-size-new' => '$1 {{PLURAL:$|byte}} dopo ła modifega',
 'newsectionsummary' => '/* $1 */ sezion nova',
 'rc-enhanced-expand' => 'Mostra detaji (richiede JavaScript)',
 'rc-enhanced-hide' => 'Scondi detaji',
@@ -1547,7 +1570,7 @@ Varda la [[Special:NewFiles|galerìa dei file nóvi]] par na vision de insieme.'
 'hookaborted' => 'La modifica che te voli fare la xe stà interota da un hook de na estension.',
 'illegal-filename' => 'El nome del file no xe parmesso.',
 'overwrite' => 'No xe parmesso de sorascrìvar un file esistente.',
-'unknown-error' => 'Se gà verifica un eror sconossùo.',
+'unknown-error' => 'Se gà verifegà un eror sconosùo.',
 'tmp-create-error' => 'Inpussibile creare el file tenporaneo.',
 'tmp-write-error' => 'Eror de scritura del file temporaneo.',
 'large-file' => 'Se racomanda de no superar mìa le dimension de $1 par ciascun file; sto file el xe grando $2.',
@@ -1630,6 +1653,7 @@ Se el problema el persiste, contatar un [[Special:ListUsers/sysop|aministrador]]
 'backend-fail-notsame' => 'Existe xà un file no identico a  $1 .',
 'backend-fail-invalidpath' => '$1 no xe un percorso de archiviasion vałido.',
 'backend-fail-delete' => 'Inposibiłe scançełare el file "$1".',
+'backend-fail-describe' => 'Inposibiłe modifegar i metadati del file "$1".',
 'backend-fail-alreadyexists' => 'El file $1 existe xà.',
 'backend-fail-store' => 'Inposibiłe memorixare el file  $1  in  $2 .',
 'backend-fail-copy' => 'Inposibiłe copiare el file "$1" in "$2".',
@@ -1644,12 +1668,48 @@ Se el problema el persiste, contatar un [[Special:ListUsers/sysop|aministrador]]
 'backend-fail-synced' => 'El file "$1" xe incoerente rento i backend de ła memoria interna.',
 'backend-fail-connect' => 'Inposibiłe conétarse al backend de memoria "$1".',
 'backend-fail-internal' => 'Se ga verifegà on erore sconosùo nte\'l backend de memoria "$1".',
-'backend-fail-usable' => 'Inposibiłe modifegare el file $1 a cauxa de autorixasion insuficenti o directory mancanti.',
+'backend-fail-contenttype' => 'Inposibiłe determinar ła tipołoxia del file da archiviar in "$1".',
+'backend-fail-batchsize' => 'El backend de memoria el ga programà na serie de $1 {{PLURAL:$1|operasion}} su file; el limite el xe de $2 {{PLURAL:$2|operasion}}.',
+'backend-fail-usable' => 'Inposibiłe lexare o scrivare el file $1 a cauxa de autorixasion insuficenti o directory/contenidori mancanti.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Inposibiłe coneterse al database journal par l\'archiviasion back-end "$1".',
+'filejournal-fail-dbquery' => 'Inposibiłe axornar el database journal par l\'archiviasion back-end "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Inposibiłe sblocar "$1"; nó \'l xe blocà.',
+'lockmanager-fail-closelock' => 'Nó riusia ła sarada del file de bloco par "$1".',
+'lockmanager-fail-deletelock' => 'Nó riusia ła scansełasion del file de bloco par "$1".',
+'lockmanager-fail-acquirelock' => 'Nó riusia acuixision bloco par "$1".',
+'lockmanager-fail-openlock' => 'Nó riusia l\'apertura del file de bloco par "$1".',
+'lockmanager-fail-releaselock' => 'Nó riusio rełaso del bloco par "$1".',
+'lockmanager-fail-db-bucket' => "Inposibiłe contatar i necesari database de bloco inte'l bucket $1.",
+'lockmanager-fail-db-release' => "Inposibiłe revocar i blochi so'l database $1.",
+'lockmanager-fail-svr-acquire' => "Inposibiłe acuixir blochi so'l server $1.",
+'lockmanager-fail-svr-release' => "Inposibiłe revocar i blochi so'l server $1.",
+
+# ZipDirectoryReader
+'zip-file-open-error' => "S'à verifegà un eror co se jera drio verxare el file pa' i controłi ZIP.",
+'zip-wrong-format' => "El file spesifegà no'l xe un file ZIP.",
+'zip-bad' => "El file el xe un file ZIP coroto o ilexibiłe.
+Nó 'l pol esar controłà par sicuresa.",
+'zip-unsupported' => "El file el xe un file ZIP che'l dopara carateristeghe ZIP nó suportae da MediaWiki.
+Nó 'l pol esar controła par sicuresa.",
+
+# Special:UploadStash
+'uploadstash' => 'Carga stash',
+'uploadstash-summary' => "Sta pàjina ła consente 'l aceso a i file che xe sta cargai (o i xe in faxe de cargamento) ma che nó xe stai ncora pùbicai so ła wiki. Sti file i xe vixibiłi soło che al utente che i ga cargai.",
+'uploadstash-clear' => 'Elimina i file in stash',
+'uploadstash-nofiles' => 'Nó te ghe file in stash.',
+'uploadstash-badtoken' => 'Sta asion nó ła ga vuo suceso, forsi parché łe to credeniałi de modifega łe xe scadue. Prova ncora.',
+'uploadstash-errclear' => 'Ła scansełasion de i file nó ła ga vù suceso.',
+'uploadstash-refresh' => "Axorna 'l elenco de i file",
+'invalid-chunk-offset' => 'Offset de ła parte nó vałido',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Acesso negà',
 'img-auth-nopathinfo' => "Manca el PATH_INFO.
-El to server no'l xe mia configurà par passar sta informassion.
+El to server no'l xe mia configurà par pasar sta informasion.
 Magari el xe basà su CGI e no'l suporta img_auth.
 Varda https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
 'img-auth-notindir' => "El percorso richiesto no'l se cata in te la cartèla de caricamento configurà.",
@@ -1726,17 +1786,23 @@ De seguito xe elencà solo {{PLURAL:$1|la prima pagina che ponta|le prime $1 pag
 Se pode védar un [[Special:WhatLinksHere/$2|elenco par intiero]].',
 'nolinkstoimage' => 'Nissuna pàxena la punta a sto file.',
 'morelinkstoimage' => 'Varda i [[Special:WhatLinksHere/$1|altri colegamenti]] verso sto file.',
+'linkstoimage-redirect' => '$1 (rimando file) $2',
 'duplicatesoffile' => '{{PLURAL:$1|El file seguente el xe un dopion|I $1 file seguenti i xe dei dopioni}} de sto file ([[Special:FileDuplicateSearch/$2|ulteriori detagli]]):',
 'sharedupload' => 'Sto file el vien da $1 e se pole dopararlo anca su altri progeti.',
 'sharedupload-desc-there' => 'Sto file el vien da $1 e se pode dopararlo su altri projeti.
 Consulta la [$2 pàxena de descrission del file] par ulteriori informassion.',
 'sharedupload-desc-here' => 'Sto file el vien da $1 e se pode dopararlo su altri projeti.
 Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrission del file].',
+'sharedupload-desc-edit' => "Sto file el vien da $1 e 'l pol esar doparà da altri projeti.
+Probabilmente te vui modifegar ła descrision prexente inte ła [$2 pàjina de descrision del file].",
+'sharedupload-desc-create' => "Sto file el vien da $1 e 'l pol esar doparà da altri projeti.
+Probabilmente te vui modifegar ła descrision prexente inte ła [$2 pàjina de descrision del file].",
 'filepage-nofile' => 'No ghe xe nissun file co sto nome.',
 'filepage-nofile-link' => 'NO ghe xe un file co sto nome, ma te podi [$1 cargarlo su].',
 'uploadnewversion-linktext' => 'Carga na nova version de sto file',
 'shared-repo-from' => 'da $1',
 'shared-repo' => 'un archivio condiviso',
+'upload-disallowed-here' => 'Inposibiłe sovrascrivere sto file.',
 
 # File reversion
 'filerevert' => 'Ripristina $1',
@@ -1766,6 +1832,7 @@ Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrissio
 ** File duplicà',
 'filedelete-edit-reasonlist' => 'Modifica le motivazion par la scancelazion',
 'filedelete-maintenance' => 'La scancelassion e el riprìstino dei file i xe disabilità par un tocheto par manutension.',
+'filedelete-maintenance-title' => 'Inposibiłe scansełar el file.',
 
 # MIME search
 'mimesearch' => 'Serca in base al tipo MIME',
@@ -1815,14 +1882,16 @@ Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrissio
 
 'disambiguations' => 'Pajine cołegade a pajine de dixanbiguasion',
 'disambiguationspage' => 'Template:Disambigua',
-'disambiguations-text' => "Le pagine ne la lista che segue le contien dei colegamenti a '''pagine de disanbiguazion''' e no a l'argomento a cui le dovarìà far riferimento.<br />
-Vien considerà pagine de disanbiguazion tute quele che contien i modèi elencà in [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Łe pàjine inte ła lista cuà soto łe ga drento almanco un ligamento a na '''pàjina de dixanbiguasion'''.
+Łe podaria dover puntar a na pàjina pì apropià.<br />
+Vien considerae pàjine de dixanbiguasion tute cuełe che łe ga drento i modełi elencai in [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Redirect dopi',
 'doubleredirectstext' => 'Sta pagina le elenca pagine che rimanda a altre pagine de rimando.
 Ogni riga la contien dei colegamenti al primo e al secondo rimando, oltre a la destinassion del secondo rimando, che de solito la xe la "vera" pagina de destinassion, a cui dovarìa pontar el primo rimando.
 Le righe <del>sbarà</del> le xe xà stà sistemà.',
 'double-redirect-fixed-move' => '[[$1]] xe stà spostà, desso el xe solo un rimando a [[$2]]',
+'double-redirect-fixed-maintenance' => 'Coreto dopio rimando da [[$1]] a [[$2]].',
 'double-redirect-fixer' => 'Coretòr de redirect',
 
 'brokenredirects' => 'Redirect mìa giusti',
@@ -1840,6 +1909,7 @@ Le righe <del>sbarà</del> le xe xà stà sistemà.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|categoria|categorie}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|colegamento|colegamenti}}',
 'nmembers' => '$1 {{PLURAL:$1|elemento|elementi}}',
 'nrevisions' => '$1 {{PLURAL:$1|revision|revision}}',
@@ -1860,14 +1930,18 @@ Le righe <del>sbarà</del> le xe xà stà sistemà.',
 'wantedpages' => 'Pagine pì domandà',
 'wantedpages-badtitle' => 'Titolo mia valido nel grupo de risultati: $1',
 'wantedfiles' => 'File domandà',
+'wantedfiletext-cat' => 'I seguenti file i xe riciamai da wikilink, ma nó i existe. I file ospitai so repository esterni i podaria esar elencai anca se de fato existenti. Sti falsi poxitivi i sarà <del>sbarai</del>. Łe pàjine che incorpora i file che nó existe łe xe elencae in [[:$1]].',
+'wantedfiletext-nocat' => 'I seguenti file i xe riciamai da wikilink, ma nó i existe. I file ospitai so repository esterni i podaria esar elencai anca se de fato existenti. Sti falsi poxitivi i sarà <del>sbarai</del>.',
 'wantedtemplates' => 'Modèi domandà',
 'mostlinked' => 'Pagine piassè puntà',
 'mostlinkedcategories' => 'Categorie piassè riciamae',
 'mostlinkedtemplates' => 'Modèi piassè doparà',
 'mostcategories' => 'Pagine con piassè categorie',
 'mostimages' => 'File piassè riciamà',
+'mostinterwikis' => 'Pàjine có pì interwiki',
 'mostrevisions' => 'Pagine con piassè revisión',
 'prefixindex' => 'Tute le pagine che taca con...',
+'prefixindex-namespace' => "Tute łe pàjine có 'l prefiso del namespace $1",
 'shortpages' => 'Pagine curte',
 'longpages' => 'Pagine longhe',
 'deadendpages' => 'Pagine sensa uscita',
@@ -1900,6 +1974,7 @@ Par piaser tien conto che altri siti web i podarìa realizar colegamenti ai file
 'pager-newer-n' => '{{PLURAL:$1|quel pi novo|i $1 pi novi}}',
 'pager-older-n' => '{{PLURAL:$1|quel pi vecio|i $1 pi vèci}}',
 'suppress' => 'Supervision',
+'querypage-disabled' => 'Sta pàjina speciałe ła xe dixativà par motivi de prestasion.',
 
 # Book sources
 'booksources' => 'Fonti librarie',
@@ -1917,6 +1992,7 @@ Par piaser tien conto che altri siti web i podarìa realizar colegamenti ai file
 Te podi restrénzar i criteri de riçerca selezionando el tipo de registro, el nome utente, o la pàxena interessà (ocio che sti ultimi du i distingue tra majuscolo e minuscolo).',
 'logempty' => "El registro no'l contien mìa elementi corispondenti a la riçerca.",
 'log-title-wildcard' => 'Riçerca dei titoli che scuminsia con',
+'showhideselectedlogentries' => 'Mostra/scondi łe voxe de registro sełesionae',
 
 # Special:AllPages
 'allpages' => 'Tute le pagine',
@@ -1937,6 +2013,8 @@ Te podi restrénzar i criteri de riçerca selezionando el tipo de registro, el n
 'allpages-hide-redirects' => 'Scondi rimandi',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Te si drio vardar na version de sta pàjina memorixà inte ła cache, che ła pol esar vecia al masimo de $1.',
+'cachedspecial-viewing-cached-ts' => 'Te si drio vardar na version de sta pàjina memorixà inte ła cache, che ła podaria nó esar conpletamente axornà.',
 'cachedspecial-refresh-now' => "Varda l'ultima.",
 
 # Special:Categories
@@ -1958,9 +2036,9 @@ Varda anca le [[Special:WantedCategories|categorie domandà]].',
 'linksearch-pat' => 'Espression de riserca:',
 'linksearch-ns' => 'Namespace:',
 'linksearch-ok' => 'Serca',
-'linksearch-text' => 'Xe posibiłe doparare metacarateri, come "*.wikipedia.org".<br />
-Xe necesario almanco un dominio de primo liveło, tipo "*.org".<br />
-Protocołi suportadi: <code>$1</code> (no sta xontare nesuno de sti cuà inte ła to riçerca).',
+'linksearch-text' => 'Xe posibiłe doparare metacarateri, come "*.wikipedia.org".
+Xe nesesario almanco un dominio de primo liveło, tipo "*.org".<br />
+{{PLURAL:$2|Protocoło suportà|Protocołi suportai}}: <code>$1</code> (predefinio http:// se nisun protocoło el xe spesifegà).',
 'linksearch-line' => '$1 presente ne la pagina $2',
 'linksearch-error' => "I metacaràteri i pode vegner doparài solo a l'inizio del nome de l'host.",
 
@@ -1979,10 +2057,6 @@ Protocołi suportadi: <code>$1</code> (no sta xontare nesuno de sti cuà inte ł
 'activeusers-hidesysops' => 'Scondi i aministradori',
 'activeusers-noresult' => 'Nissun utente catà.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Novi utenti',
-'newuserlogpagetext' => 'Sto qua el xè el registro dei novi utenti registrai.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diriti dei grupi utenti',
 'listgrouprights-summary' => 'Sta qua la xe na lista dei grupi de utenti definìi su sta wiki, coi diriti asocià a ognuno.
@@ -2009,16 +2083,18 @@ Se pol consultar anca dele altre [[{{MediaWiki:Listgrouprights-helppage}}|inform
 'emailuser-title-target' => 'Scrivi na e-mail a {{GENDER:$1|sto|sta}} utente',
 'emailuser-title-notarget' => "Scrivi na e-mail a l'utente",
 'emailpage' => "Scrivi na e-mail a l'utente",
-'emailpagetext' => 'Te podi usar el modulo chi soto par mandare na e-mail a sto utente.
-La e-mail che te ghè indicà ne le [[Special:Preferences|to preferense]] la vegnarà fora nel canpo "Da" de la mail, così che el destinatario el possa rispóndarte a ti diretamente.',
+'emailpagetext' => 'Te podi usar el moduło chi soto par mandare na e-mail a sto {{GENDER:$1|utente}}.
+Ła e-mail che te ghè indicà inte łe [[Special:Preferences|to prefarense]] ła vegnarà fora inte\'l canpo "Da" de la mail, cusì che\'l destinatario el posa rispóndarte diretamente a ti.',
 'usermailererror' => "L'ogeto mail el gà restituìo l'eror:",
-'defemailsubject' => 'Messagio da {{SITENAME}}',
+'defemailsubject' => 'Mesajo da {{SITENAME}} dal utente "$1"',
 'usermaildisabled' => 'e-mail utente disabiłità',
 'usermaildisabledtext' => 'No xè posibiłe inviare e-mail ad altri utenti so sto wiki',
 'noemailtitle' => 'Nissun indirisso e-mail',
 'noemailtext' => "Sto utente no'l gà indicà nissuna casela e-mail valida.",
 'nowikiemailtitle' => 'Posta elétronega mia parmessa',
 'nowikiemailtext' => 'Sto utente el ga sielto de no ricévar e-mail da i altri utenti.',
+'emailnotarget' => 'Nome utente del destinatario inexistente o nó vałido.',
+'emailtarget' => 'Inserisi el nome utente del destinatario',
 'emailusername' => 'Nome utente:',
 'emailusernamesubmit' => 'Manda',
 'email-legend' => "Màndeghe na e-mail a n'altro utente de {{SITENAME}}",
@@ -2039,15 +2115,16 @@ La e-mail che te ghè indicà ne le [[Special:Preferences|to preferense]] la veg
 
 # Watchlist
 'watchlist' => "Pagine tegnùe d'ocio",
-'mywatchlist' => "Pagine tegnùe d'ocio",
+'mywatchlist' => "Pàjine tegnùe d'ocio",
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => "No te ghè indicà pagine da tegner d'ocio.",
 'watchlistanontext' => "Per vardar e modifegar l'ełenco de i osservati speciałi bisogna $1.",
 'watchnologin' => 'Acesso mia efetuà',
 'watchnologintext' => 'Te ghè prima da far el [[Special:UserLogin|login]] par modificar la to lista de osservati speciali.',
 'addwatch' => "Tien d'ocio",
-'addedwatchtext' => "La pagina \"[[:\$1]]\" la xe stà zontà a la to [[Special:Watchlist|lista de pagine da tegner d'ocio]].
-I futuri canbiamenti a sta pagina e a la so pagina de discussion i se vedarà fora qua, e la pagina la se vedarà in '''grosso''' sui [[Special:RecentChanges|ultimi canbiamenti]] par tegnerla d'ocio mejo.",
+'addedwatchtext' => 'Ła pagina "[[:$1]]" ła xe stà xontà a ła to [[Special:Watchlist|lista de pàjine da tegner d\'ocio]].
+I futuri canbiamenti a sta pàjina e a ła so pàjina de discusion i vegnarà elencai in cheła pàjina là.',
+'removewatch' => "Cava da łe tegnùe d'ocio",
 'removedwatchtext' => 'La pagina "[[:$1]]" la xe stà cavà da le to [[Special:Watchlist|pagine tegnùe de ocio]].',
 'watch' => "Tien d'ocio",
 'watchthispage' => "Tien d'ocio sta pagina",
@@ -2063,46 +2140,59 @@ I futuri canbiamenti a sta pagina e a la so pagina de discussion i se vedarà fo
 'watchmethod-list' => 'controło de i osservati speciałi par modifeghe recenti',
 'watchlistcontains' => 'La lista de i osservati speciałi la contien {{PLURAL:$1|una pagina|$1 pagine}}.',
 'iteminvalidname' => "Problemi con la voxe '$1', nome mìa vałido...",
-'wlnote' => "Qua soto te cati {{PLURAL:$1|l'ultimo canbiamento|i ultimi '''$1''' canbiamenti}} ne {{PLURAL:$2|l'ultima ora|le ultime '''$2''' ore}}.",
+'wlnote' => "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi '''$1''' canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime '''$2''' ore}}; i dati i xe axornai a łe $4 del $3.",
 'wlshowlast' => 'Mostra le ultime $1 ore $2 zorni $3',
 'watchlist-options' => "Inpostassion de le pagine tegnùe d'ocio",
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => "Taco a tegner d'ocio...",
 'unwatching' => "Desmeto de tegner d'ocio...",
+'watcherrortext' => 'S\'à verifegà un eror durante ła modifega de łe tegnùe d\'ocio par "$1".',
 
 'enotif_mailer' => 'Sistema de notifica via e-mail de {{SITENAME}}',
 'enotif_reset' => 'Segna tute le pagine come zà viste',
 'enotif_impersonal_salutation' => 'Utente de {{SITENAME}}',
+'enotif_subject_deleted' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta scansełà da {{gender:$2|$2}}',
+'enotif_subject_created' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta creà da {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta spostà da {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta ripristinà da {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta canbià da {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta scansełà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_created' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta creà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_moved' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta spostà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_restored' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta ripristinà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_changed' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta canbià da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
 'enotif_lastvisited' => 'Varda $1 par tute le modifiche da la to ultima visita.',
 'enotif_lastdiff' => 'Varda $1 par visualizar la modifica.',
 'enotif_anon_editor' => 'utente anonimo $1',
 'enotif_body' => 'Caro/a $WATCHINGUSERNAME,
 
-ła pàxena $PAGETITLE de {{SITENAME}} la xè stà $CHANGEDORCREATED el $PAGEEDITDATE da $PAGEEDITOR, varda $PAGETITLE_URL par ła version atuałe.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-Somario del redator: $PAGESUMMARY $PAGEMINOREDIT
+Ogeto del intervento, inserio dal autor: $PAGESUMMARY $PAGEMINOREDIT
 
-Contatta el redator:
-mail: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+Contata l\'autor:
+via posta eletronega: $PAGEEDITOR_EMAIL
+so\'l sito: $PAGEEDITOR_WIKI
 
-No ghe sarà altre notifiche in caso de ulteriori canbiamenti, a manco che ti no te visiti sta pàxena.
-Te podi anca reinpostar l\'avixo de notifica par tuti i osservati speciałi de ła to łista.
+Nó vegnarà inviae altre notifeghe in caxo de ulteriori atività, se nó te vixiti ła pàjina. Inoltre, xe posibiłe modifegar łe inpostasion de notifega par tute łe pàjine inte ła lista de łe tegnùe d\'ocio.
 
-             El to amichevole sistema de notifica de {{SITENAME}}
+             El sistema de notifega de {{SITENAME}}, al to servisio
 
 --
-Par canbiar łe inpostassion de i to osservati speciałi, visita
-{{canonicalurl:Special:Watchlist/edit}}
+Par modifegar łe inpostasion de łe notifeghe via posta eletronega, varda 
+{{canonicalurl:{{#special:Preferences}}}}
 
-Par cavar la pagina da i to osservati speciałi, visita
+Par modifegar ła lista de łe tegnùe d\'ocio, varda 
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+Par cavar ła pàjina da ła lista de łe tegnùe d\'ocio, varda
 $UNWATCHURL
 
-Par riscontri e ulteriore assistensa:
+Par comentare e risevere ajuto:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creà',
+'changed' => 'canbià',
 
 # Delete
 'deletepage' => 'Scancela pagina',
@@ -2138,6 +2228,8 @@ Varda $2 par n'elenco de le ultime pagine scanselà.",
 'rollback' => 'Anuła łe modifighe',
 'rollback_short' => 'Rollback',
 'rollbacklink' => 'tira indrìo i canbiamenti',
+'rollbacklinkcount' => 'rollback de {{PLURAL:$1|na modifega|$1 modifeghe}}',
+'rollbacklinkcount-morethan' => 'rollback de pì de {{PLURAL:$1|na modifega|$1 modifeghe}}',
 'rollbackfailed' => 'Ripristino mìa riussìo',
 'cantrollback' => "No xè mia possibiłe tornar a na versión precedente: l'ultima modifica la xè stà aportà da l'unico utente che gà laorà a sto articoło.",
 'alreadyrolled' => "No xè mia possibile efetuar el ripristino de [[:$1]] da [[User:$2|$2]] ([[User talk:$2|discussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); qualcun altro gà xà modificà o efetuà el ripristino de sta voxe.
@@ -2163,6 +2255,10 @@ Vedi ła [[Special:ProtectedPages|lista dełe pajine protete]] pa l'elenco de ł
 'protect-title' => 'Canbia el livèl de protezion par "$1"',
 'protect-title-notallowed' => 'Varda el livelo de protesion de " $1 "',
 'prot_1movedto2' => '[[$1]] spostà a [[$2]]',
+'protect-badnamespace-title' => 'Namespace nò protexibiłe',
+'protect-badnamespace-text' => 'Łe pàjine in sto namespace nò łe pol esar protete.',
+'protect-norestrictiontypes-text' => 'Sta pàjina nò ła pol esar proteta parché nò ghe xe gnaun tipo de restrision disponibiłe.',
+'protect-norestrictiontypes-title' => 'Pàjina nò protexibiłe',
 'protect-legend' => 'Conferma la protezion',
 'protectcomment' => 'Motivassion:',
 'protectexpiry' => 'Scadensa:',
@@ -2177,11 +2273,12 @@ Le inpostazion corenti par la pagina le xe '''$1''':",
 Le impostazion atuali par la pagina le xe '''$1''':",
 'protect-cascadeon' => 'Al momento sta pagina la xe blocà parché la xe inclusa {{PLURAL:$1|ne la pagina indicà de seguito, par la quale|ne le pagine indichè de seguito, par le quali}} xe ativa la protezion ricorsiva. Se pol modificar el livel de protezion individual de la pagina, ma le inpostazion derivanti da la protezion ricorsiva no le sarà mìa modificà.',
 'protect-default' => 'Autoriza tuti i utenti',
-'protect-fallback' => 'Ghe vole el parmesso de "$1"',
-'protect-level-autoconfirmed' => 'Bloca i utenti novi o mia registrà',
-'protect-level-sysop' => 'Solo aministradori',
+'protect-fallback' => 'Consentio soło che a i utenti có parmeso "$1"',
+'protect-level-autoconfirmed' => 'Consentio soło che a i utenti "autoconfermai"',
+'protect-level-sysop' => 'Consentio soło che a i aministradori',
 'protect-summary-cascade' => 'ricorsiva',
 'protect-expiring' => 'scadensa: $1 (UTC)',
+'protect-expiring-local' => 'scade el $1',
 'protect-expiry-indefinite' => 'infinìo',
 'protect-cascade' => "Protezion ricorsiva (l'estende la protezion a tute le pagine incluse in sta qua).",
 'protect-cantedit' => 'No te pol canbiar i livèi de protezion par la pagina, parché no te ghè mìa i parmessi necessari par modifegar la pagina stessa.',
@@ -2223,8 +2320,8 @@ Le impostazion atuali par la pagina le xe '''$1''':",
 'undeletepagetext' => "{{PLURAL:$1|La pàxena qua de sèvito la xe stà scancelà, ma la ghe xe 'ncora in archivio e pertanto se pole 'ncora recuperarla|Le $1 pàxene qua de sèvito le xe stà scancelè, ma le ghe xe 'ncora in archivio e pertanto se pole 'ncora recuperarle}}.
 L'archivio el vien svodà periodicamente.",
 'undelete-fieldset-title' => 'Recupera version',
-'undeleteextrahelp' => "Par recuperar la storia de la pàxena par intiero, lassa tute łe casełe desełezionàe e struca '''''Ripristina'''''.
-Par efetuar un ripristino sełetivo, seleziona łe casełe corispondenti a łe revixion da ripristinar e struca '''''Ripristina'''''. Strucando '''''Reset''''' vegnarà deselezionàe tute łe casełe e svodà el posto par el comento.",
+'undeleteextrahelp' => "Par recuperar l'intiera storia de ła pàjina, łasar tute łe caxełe desełesionae e strucar so '''''{{int:undeletebtn}}'''''.
+Par efetuar un ripristino sełetivo, sełesionar łe caxełe corispondenti a łe revixion da ripristinar e strucar so '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|Una revision|$1 revision}} in archivio',
 'undeletehistory' => 'Recuperando sta pàxena, tute łe so revixion le vegnarà inserìe da novo ne ła rełativa cronołogia.
 Se dopo ła scancełazion xè stà creà na nova pàxena col stesso titoło, łe revixion recuperà le sarà inserìe ne ła cronołogia preçedente.',
@@ -2242,11 +2339,13 @@ Se dopo ła scancełazion xè stà creà na nova pàxena col stesso titoło, łe
 'undeletedrevisions' => '{{PLURAL:$1|Una revision recuperà|$1 revision recuperà}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|Una revision|$1 revision}} e $2 file recuperà',
 'undeletedfiles' => '{{PLURAL:$1|Un file recuperà|$1 file recuperà}}',
-'cannotundelete' => "El recupero no'l xè riussìo: qualchedun altro el podarià aver xà recuperà ła pàxena.",
+'cannotundelete' => 'Ripristino nó riusìo:
+$1',
 'undeletedpage' => "'''$1 la xè stà recuperà'''
 
 Consulta el [[Special:Log/delete|registro de le scancełassion]] par vardare łe scancełassion e i recuperi pì reçenti.",
 'undelete-header' => 'Varda el [[Special:Log/delete|registro de le scancelazion]] par védar le scancelazion piassè reçenti.',
+'undelete-search-title' => 'Serca inte łe pàjine scanselae',
 'undelete-search-box' => 'Serca ne le pagine scancelà',
 'undelete-search-prefix' => 'Mostra le pagine el cui titolo scuminsia con:',
 'undelete-search-submit' => 'Serca',
@@ -2255,6 +2354,7 @@ Consulta el [[Special:Log/delete|registro de le scancełassion]] par vardare łe
 'undelete-bad-store-key' => "No se pol anular la scancelazion de la revision del file con data/ora $1: el file no'l xera disponibile prima de la scancelazion.",
 'undelete-cleanup-error' => 'Eror ne la scancelazion del file de archivio non doparà "$1".',
 'undelete-missing-filearchive' => "No se pol ripristinar l'ID $1 de l'archivio file in quanto no'l ghe xe mìà nel database. El podarìa èssar stà zà ripristinà.",
+'undelete-error' => "Eror inte'l ripristino de ła pàjina",
 'undelete-error-short' => 'Eror nel ripristino del file: $1',
 'undelete-error-long' => 'Se gà verificà dei erori nel tentativo de anular la scancelazion del file:
 
@@ -2265,6 +2365,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Namespace:',
 'invert' => 'Inverti la selession',
+'tooltip-invert' => "Sełesion sta caxeła par scondare łe modifeghe a łe pàjine drento del namespace sełesionà (e 'l rełativo namespace, se sełesionà)",
+'namespace_association' => 'Namespace asocià',
+'tooltip-namespace_association' => "Sełesiona sta caxeła pa' includare anca ła pàjina de discusion o 'l ogeto del namespace asocià cò 'n namespace sełesionà",
 'blanknamespace' => '(Prinsipale)',
 
 # Contributions
@@ -2351,6 +2454,9 @@ $1',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] xe stà blocà.<br />
 Varda [[Special:BlockList|lista IP blocadi]] par vedare tuti i blochi.',
 'ipb-blockingself' => 'Sito drio blocar te steso! Sito sicuro de voerlo fare?',
+'ipb-confirmhideuser' => 'Se sta par blocar un utente cò l\'opsion "Scondi utente" abiłità.
+In sto modo se evita che\'l nome utente el vegne fora inte łeliste e łe voxe del registro.
+Sito seguro de vołer continuar?',
 'ipb-edit-dropdown' => 'Motivi par el bloco',
 'ipb-unblock-addr' => 'Sbloca $1',
 'ipb-unblock' => 'Sbloca un utente o un indirizo IP',
@@ -2362,8 +2468,19 @@ Varda [[Special:BlockList|lista IP blocadi]] par vedare tuti i blochi.',
 'unblocked' => '[[User:$1|$1]] el xe stà sblocà',
 'unblocked-range' => '$1 xè stà sblocà',
 'unblocked-id' => 'El bloco $1 el xe stà cavà',
+'blocklist' => 'Utenti blocai',
 'ipblocklist' => 'Utenti blocà',
 'ipblocklist-legend' => 'Cata fora un utente blocà',
+'blocklist-userblocks' => 'Scondi i blochi de i account',
+'blocklist-tempblocks' => 'Scondi i blochi tenporanei',
+'blocklist-addressblocks' => 'Scondi i blochi de un IP ugnoło',
+'blocklist-rangeblocks' => 'Scondi i blochi de range',
+'blocklist-timestamp' => 'Date e ora',
+'blocklist-target' => 'Destinasion',
+'blocklist-expiry' => 'Scade',
+'blocklist-by' => 'Aministrador che ga blocà',
+'blocklist-params' => 'Parametri de bloco',
+'blocklist-reason' => 'Motivo',
 'ipblocklist-submit' => 'Serca',
 'ipblocklist-localblock' => 'Bloco local',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|Altro bloco|Altri blochi}}',
@@ -2405,6 +2522,7 @@ Qua soto ghe xe el registro de le sopression:',
 'ipb_already_blocked' => 'L\'utente "$1" el xe zà blocà',
 'ipb-needreblock' => '$1 xe xà blocà. Vuto canbiar le inpostassion?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Altro bloco|Altri blochi}}',
+'unblock-hideuser' => "Nò te poi sblocar sto utente, parché el so nome utente 'l'è sta sconto.",
 'ipb_cant_unblock' => 'Eror: Inpossibile catar el bloco con ID $1. El bloco el podarìa èssar zà stà cavà.',
 'ipb_blocked_as_range' => "Eror: L'indirizo IP $1 no'l xe sogeto a bloco individual e no'l pol èssar sblocà. El bloco el xe invesse ativo a livel de l'intervalo $2, che el pol èssar sblocà.",
 'ip_range_invalid' => 'Intervało de indirissi IP mìa vałido.',
@@ -2444,18 +2562,18 @@ Tiente in mente de [[Special:UnlockDB|sblocarlo]] co te ghè finìo de far manut
 # Move page
 'move-page' => 'Spostamento de $1',
 'move-page-legend' => 'Spostamento de pagina',
-'movepagetext' => "Col modulo qua soto te podi rinominar na pagina, spostando anca tuta la so storia al titolo novo.
-El vecio titolo el deventarà automaticamente un rimando (redirect) che punta al titolo novo.
-Te podi agiornar automaticamente i rimandi che punta al vecio titolo.
-Se te siegli de no farlo, tiente in mente de controlar ben che no se crea [[Special:DoubleRedirects|dopi redirect]] o [[Special:BrokenRedirects|redirect interoti]].
-Resta ne la to responsabilità de controlar che i colegamenti i continua a puntar dove che i deve.
+'movepagetext' => "Có 'l moduło cuà soto te podi rinominar na pàjina, spostando anca tuta ła so storia al titoło novo.
+El vecio titoło el devegnarà automategamente un rimando (redirect) che ponta al titoło novo.
+Te podi axornar automategamente i rimandi che ponta al vecio titoło.
+Se te siełi de nó farlo, tiente inamente de controłar ben che nó se cree [[Special:DoubleRedirects|dopi rimandi]] o [[Special:BrokenRedirects|rimandi interoti]].
+Resta inte ła to responsabiłità de controłar che i ligamenti i continue a pontar 'ndove che i deve.
 
-Ocio: la pagina '''no''' la sarà spostà se ghe fusse zà na pagina col titolo novo, a meno che no la sia na pagina voda o un rimando, e senpre che no la gabia na storia.
-Questo significa che, se te fè un eror, te podi da novo rinominar na pagina col vecio titolo, ma no te podi sovrascrìvar na pagina zà esistente.
+Ocio: ła pàjina '''nó''' ła sarà spostà se ghe fuse xà na pàjina có 'l titoło novo, a meno che nó ła sia un rimando, e senpre che nó ła gabia na storia.
+Cuesto signifega che, se te fè un eror, te podi da novo rinominar na pàjina có 'l vecio titoło, ma nó te podi sovrascrìvar na pàjina xà existente.
 
 '''OCIO!'''
-Sto canbiamento drastico el podarìa dar problemi che no se se speta, specialmente se se trata de na pagina molto visità.
-Stà ben tento a le conseguense del spostamento, prima de farlo.",
+Sto canbiamento drastico el podarìa dar problemi che nó se se speta, spesalmente se se trata de na pàjina molto vixità.
+Stà ben tento a łe conseguense del spostamento, prima de farlo.",
 'movepagetext-noredirectfixer' => "Col modulo qua soto te podi rinominar na pagina, spostando anca tuta la so storia al titolo novo.
 El vecio titolo el deventarà automaticamente un rimando (redirect) che punta al titolo novo.
 Tiente in mente de controlar ben che no se crea [[Special:DoubleRedirects|dopi redirect]] o [[Special:BrokenRedirects|redirect interoti]].
@@ -2510,13 +2628,14 @@ Par piaser, métighe un titolo difarente.",
 
 La voxe specificà come destinassion "[[:$1]]" l\'esiste xà. Vóto scancełarla par proseguir con ło spostamento?',
 'delete_and_move_confirm' => 'Sì, scancèla la pagina',
-'delete_and_move_reason' => "Scancelà par spostar n'altra pagina a sto titolo",
+'delete_and_move_reason' => 'Scanselà par rendar posibiłe el spostamento da "[[$1]]"',
 'selfmove' => 'No se pol spostar, el titolo novo el xe conpagno del vecio.',
 'immobile-source-namespace' => 'No te pol spostar pàxene in tel namespace "$1"',
 'immobile-target-namespace' => 'No te pol spostar pàxene \'ntel namespace "$1"',
 'immobile-target-namespace-iw' => "El colegamento interwiki no'l xe na valida destinassion in do spostar na pàxena.",
 'immobile-source-page' => 'Sta pàxena no la pol vegner spostà.',
 'immobile-target-page' => 'No te pol spostar a sto titolo.',
+'bad-target-model' => 'Ła destinasion dexiderà ła dopara un modèl de contegnui difarente. Nò xe posibiłe convertir da $1 a $2.',
 'imagenocrossnamespace' => 'No se pol spostar un file verso un namespace diverso da quelo dei file.',
 'nonfile-cannot-move-to-file' => 'Tuto quel che no xe un file, no se pode spostarlo al namespace dei file.',
 'imagetypemismatch' => "L'estension nova del file no la corisponde mìa al tipo de file",
@@ -2538,9 +2657,11 @@ Questo el pode in seguito vegner inportà in te n\'altro wiki che dòpara el sof
 Par esportar le pàxene, scrivi i tìtoli in te la casèla qua soto, un tìtolo par riga, e selessiona se te voli la version ùltima con tute le version preçedenti e el storico de le modìfeghe, opure la version ùltima con solo le informassion de l\'ùltima modìfega.
 
 Nel secondo caso te poli anca doparar un colegamento, par esenpio [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] par la pàxena "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Esporta tute łe pàjine',
 'exportcuronly' => "Includi soło ła version attuałe, no l'intera cronołogia",
 'exportnohistory' => "----
 '''Ocio!''' Par motivi ligà a le prestazion del sistema xè stà disabiłità l'esportazion de tuta ła storia de łe pàxene fata co sto modulo.",
+'exportlistauthors' => "Includi 'l elenco conpleto de i contribudori pa' ogni pajina",
 'export-submit' => 'Esporta',
 'export-addcattext' => 'Zonta pagine da la categoria:',
 'export-addcat' => 'Zonta',
@@ -2573,6 +2694,8 @@ Par piaser visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
 'thumbnail_error' => 'Eror ne la creazion de la miniatura: $1',
 'djvu_page_error' => 'Nùmaro de pagina DjVu sbaglià',
 'djvu_no_xml' => "Inpossibile otegner l'XML par el file DjVu",
+'thumbnail-temp-create' => 'Inposibiłe crear el file tenporaneo de łe miniadure',
+'thumbnail-dest-create' => 'Inposibiłe salvar ła miniadura inte ła destinasion',
 'thumbnail_invalid_params' => 'Parametri anteprima mìa giusti',
 'thumbnail_dest_directory' => 'Inpossibile crear la directory de destinazion',
 'thumbnail_image-type' => 'Tipo de imagine mia suportà',
@@ -2590,6 +2713,7 @@ Tute łe operazion de inportazion trans-wiki łe xè notà nel [[Special:Log/imp
 'import-interwiki-templates' => 'Tira dentro tuti i modèi',
 'import-interwiki-submit' => 'Inporta',
 'import-interwiki-namespace' => 'Namespace de destinassion:',
+'import-interwiki-rootpage' => 'Pàjina prinsipałe de destinasion (opsionałe):',
 'import-upload-filename' => 'Nome del file:',
 'import-comment' => 'Comento:',
 'importtext' => "Se połe esportare el file da ła fonte wiki doparando ła [[Special:Export|funsion de esportasion]].
@@ -2617,6 +2741,15 @@ Salveło so'l to conpiuter e carghelo cuà.",
 'import-upload' => 'Carga dati XML',
 'import-token-mismatch' => "I dati relativi a la session i xe 'ndài persi. Par piaser, próa da novo.",
 'import-invalid-interwiki' => 'No se pode inportar da la wiki indicà.',
+'import-error-edit' => 'Ła pàjina "$1" nò ła xe sta inportà parché no te si autorixà a modifegarla.',
+'import-error-create' => 'Ła pàjina "$1" nò ła xe sta inportà parché no te si autorixà a crearla.',
+'import-error-interwiki' => 'Ła pàjina "$1" nò ła vien inportà parché el so nome el xe riservà pa\'l ligamento foresto (interwiki).',
+'import-error-special' => 'Ła pàjina "$1" nò ła vien inportà parché ła apartien a un namespace speciałe che nò \'l permete pàjine.',
+'import-error-invalid' => 'Ła pàjina "$1" nò ła vien inportà parché el so nome nò \'l xe vałido.',
+'import-error-unserialize' => 'Ła version $2 de ła pàjina "$1" nó ła pol esar de-seriałixà. Ła version ła xe sta segnałà par doparar el modèl de contegnùo $3 seriałixà cofà $4.',
+'import-options-wrong' => '{{PLURAL:$2|Opsion sbałià|Opsion sbałiae}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ła pàjina prinsipałe fornia nó ła xe un titoło vałido.',
+'import-rootpage-nosubpage' => 'El namespace "$1" de ła pàjina prinsipałe nó \'l permete de \'ver sotopajine.',
 
 # Import log
 'importlogpage' => 'Inportassion',
@@ -2626,6 +2759,16 @@ Salveło so'l to conpiuter e carghelo cuà.",
 'import-logentry-interwiki' => 'gà trasferìo da altra wiki ła pàxena $1',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|una revixion importà|$1 revixion importae}} da $2',
 
+# JavaScriptTest
+'javascripttest' => 'Sperimentasion JavaScript',
+'javascripttest-title' => 'In execusion test par $1',
+'javascripttest-pagetext-noframework' => "Sta pàjina ła xe riservà a l'execusion de test de JavaScript.",
+'javascripttest-pagetext-unknownframework' => 'Framework de test sconosùo "$1".',
+'javascripttest-pagetext-frameworks' => "Par piasere, siełi uno de i seguenti framework pa' i test: $1",
+'javascripttest-pagetext-skins' => 'Siełi na skin có cui exeguir i test:',
+'javascripttest-qunit-intro' => 'Varda so mediawiki.org ła [$1 documentasion rivardante i test].',
+'javascripttest-qunit-heading' => 'Suite de test de JavaScript par QUnit in MediaWiki',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'La to pagina utente',
 'tooltip-pt-anonuserpage' => 'La pàxena utente de sto indirizo IP',
@@ -2686,6 +2829,8 @@ Salveło so'l to conpiuter e carghelo cuà.",
 'tooltip-diff' => 'Varda i canbiamenti fati al testo',
 'tooltip-compareselectedversions' => 'Varda le difarense tra le do version selessionà de sta pagina.',
 'tooltip-watch' => "Tien d'ocio sta pagina",
+'tooltip-watchlistedit-normal-submit' => 'Cava i titołi',
+'tooltip-watchlistedit-raw-submit' => "Axorna ła lista de łe tegnùe d'ocio",
 'tooltip-recreate' => 'Ricrea ła pàxena anca se la xè stà scancełà',
 'tooltip-upload' => 'Intaca el caricamento',
 'tooltip-rollback' => 'El "tira indrio" el desfa i canbiamenti a sta pagina fati de l\'ultimo che gà messo le mane.',
@@ -2716,9 +2861,11 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'spambot_username' => 'MediaWiki - sistema de rimozion del spam',
 'spam_reverting' => "Ripristinà l'ultima version priva de colegamenti a $1",
 'spam_blanking' => 'Pàxena svodà, tute łe version le contegneva cołegamenti a $1',
+'spam_deleting' => 'Pàjina scansełà, tute łe version łe contegneva ligamenti a $1',
 
 # Info page
 'pageinfo-title' => 'Informasion par "$1"',
+'pageinfo-not-current' => 'Ne disipiaxe, ma xe inposibiłe fornir sta informasion par vecie version.',
 'pageinfo-header-basic' => 'Informassion de base',
 'pageinfo-header-edits' => 'Storia dei canbiamenti',
 'pageinfo-header-restrictions' => 'Protession de la pagina',
@@ -2747,6 +2894,7 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria sconta|Categorie sconte}} ($1)',
 'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}}  ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pàjina incluxa|Pàjine incluxe}} so ($1)',
 'pageinfo-toolboxlink' => 'Informassion su sta pagina',
 'pageinfo-redirectsto' => 'La rimanda a',
 'pageinfo-redirectsto-info' => 'info',
@@ -2755,6 +2903,10 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'pageinfo-protect-cascading' => 'Protession ricorsiva da qua',
 'pageinfo-protect-cascading-yes' => 'Sì',
 'pageinfo-protect-cascading-from' => 'Protession ricorsiva eredità da',
+'pageinfo-category-info' => 'Informasion so ła categoria',
+'pageinfo-category-pages' => 'Nùmaro de pàjine',
+'pageinfo-category-subcats' => 'Nùmaro de sotocategorie',
+'pageinfo-category-files' => 'Nùmaro de file',
 
 # Patrolling
 'markaspatrolleddiff' => 'Segna la modifica come verificà',
@@ -2766,6 +2918,8 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'markedaspatrollederror' => 'No se pol contrassegnar ła voxe come verificà',
 'markedaspatrollederrortext' => 'Bisogna speçificare na revixion da contrassegnar come verificà.',
 'markedaspatrollederror-noautopatrol' => 'No te ghè i parmessi necessari par segnar le to stesse modifiche come verificàe.',
+'markedaspatrollednotify' => 'Ła modifega a $1 ła xe sta segnà come verifegà.',
+'markedaspatrollederrornotify' => 'Eror durante ła verifega.',
 
 # Patrol log
 'patrol-log-page' => 'Modifiche verificàe',
@@ -2795,15 +2949,22 @@ La so esecuzion la podarìa danegiar el to computer.",
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pagina|pagine}}',
 'file-info' => 'Dimensioni: $1, tipo MIME: $2',
 'file-info-size' => '$1 × $2 pixel, dimension del file: $3, tipo MIME: $4',
+'file-info-size-pages' => '$1 × $2 pixel, dimension del file: $3, tipo MIME: $4, $5 {{PLURAL:$5|pàjina|pàjine}}',
 'file-nohires' => 'No ghe xe version a risolussion pì granda.',
 'svg-long-desc' => 'file en formato SVG, dimension nominałi $1 × $2 pixel, dimension del file: $3',
+'svg-long-desc-animated' => 'file in formato SVG animà, dimension nominałi $1 × $2 pixel, dimension del file: $3',
+'svg-long-error' => 'File SVG mìa valido: $1',
 'show-big-image' => 'Version ad alta risołusion',
+'show-big-image-preview' => 'Dimension de sta anteprima: $1.',
+'show-big-image-other' => '{{PLURAL:$2|Altra risołusion|Altre risołusion}}: $1.',
 'show-big-image-size' => '$1 × $2 pixel',
 'file-info-gif-looped' => 'ripetù',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frame}}',
 'file-info-png-looped' => 'ripetù',
 'file-info-png-repeat' => 'ripetù $1 {{PLURAL:$1|olta|olte}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogrami}}',
+'file-no-thumb-animation' => "'''Nota: a cauxa de limitasion teniche, łe miniadure de sto file nó łe sarà animae.'''",
+'file-no-thumb-animation-gif' => "'''Nota: a cauxa de limitasion teniche, łe miniadure de łe imaxeni GIF a alta risołusion come cuesta nó łe sarà animae.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria dei file novi',
@@ -2822,6 +2983,8 @@ La so esecuzion la podarìa danegiar el to computer.",
 'minutes' => '{{PLURAL:$1|un minuto|$1 minuti}}',
 'hours' => "{{PLURAL:$1|un'ora|$1 ore}}",
 'days' => '{{PLURAL:$1|un zorno|$1 zorni}}',
+'months' => '{{PLURAL:$1|$1 mexe|$1 mexi}}',
+'years' => '{{PLURAL:$1|$1 ano|$1 ani}}',
 'ago' => '$1 fa',
 'just-now' => 'giusto desso',
 
@@ -2965,10 +3128,79 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-gpsareainformation' => 'Nome de ła xòna GPS',
 'exif-gpsdatestamp' => 'Data GPS',
 'exif-gpsdifferential' => 'Corezion diferensiałe GPS',
+'exif-jpegfilecomment' => 'Comento del file JPEG',
+'exif-keywords' => 'Parołe ciave',
+'exif-worldregioncreated' => "Rejon del Mondo in cui l'imaxene ła xe sta fata",
+'exif-countrycreated' => 'Paexe dove xe sta fata ła someja',
+'exif-countrycodecreated' => "Còdexe del paexe 'ndove xe sta fata ła someja",
+'exif-provinceorstatecreated' => "Provincia o stato 'ndove xe sta fata ła someja",
+'exif-citycreated' => "Sità 'ndove xe sta fata ła someja",
+'exif-sublocationcreated' => 'Parte de ła sità in cui xe sta fata ła someja',
+'exif-worldregiondest' => 'Rejon del Mondo mostrà',
+'exif-countrydest' => 'Paexe mostrà',
+'exif-countrycodedest' => 'Còdexe del Paexe mostrà',
+'exif-provinceorstatedest' => 'Provincia o stato mostrà',
+'exif-citydest' => 'Sità mostrà',
+'exif-sublocationdest' => 'Parte de ła sità mostrà',
 'exif-objectname' => 'Titoło curto',
+'exif-specialinstructions' => 'Istrusion speciałi',
+'exif-headline' => 'Titoło',
+'exif-credit' => 'Crediti',
+'exif-source' => 'Fonte',
+'exif-editstatus' => "Stato de edision de l'imaxene",
+'exif-urgency' => 'Urgensa',
+'exif-fixtureidentifier' => 'Nome del riferimento',
+'exif-locationdest' => 'Locałità rafegurà',
+'exif-locationdestcode' => 'Còdexe del liogo rafegurà',
+'exif-objectcycle' => "Momento del xorno pa'l cuałe el medium el xe progetà",
+'exif-contact' => 'Informasion de contato',
+'exif-writer' => 'Scritor',
+'exif-languagecode' => 'Léngua',
+'exif-iimversion' => 'Version IIM',
+'exif-iimcategory' => 'Categoria',
+'exif-iimsupplementalcategory' => 'Categorie xontive',
+'exif-datetimeexpires' => 'Nó doparar dopo',
+'exif-datetimereleased' => 'Rełasà el',
+'exif-originaltransmissionref' => 'Còdexe del liogo de trasmision orixenaria',
+'exif-identifier' => 'Identifegativo',
+'exif-lens' => 'Lente doparà',
+'exif-serialnumber' => 'Nùmaro de serie de ła fotocamera',
+'exif-cameraownername' => 'Paron de ła fotocamera',
+'exif-label' => 'Eticheta',
+'exif-datetimemetadata' => "Data in cui i metadata i xe stai modifegai l'ultema volta",
+'exif-nickname' => "Nome informałe de l'imaxene",
+'exif-rating' => 'Vałutasion (so 5)',
+'exif-rightscertificate' => 'Certificato de gestion de i diriti',
+'exif-copyrighted' => "Informasion so'l copyright",
+'exif-copyrightowner' => 'Detentor del copyright',
+'exif-usageterms' => "Termini d'utiłixo",
+'exif-webstatement' => 'Dichiarasion online de copyright',
+'exif-originaldocumentid' => 'ID univoco del documento orixenałe',
+'exif-licenseurl' => 'URL par ła licensa del copyright',
+'exif-morepermissionsurl' => 'Informasion so łe license alternadive',
+'exif-attributionurl' => "Pa'l riutiłixo de sta òpara, se prega de inserir un ligamento ipertestuałe a",
+'exif-preferredattributionname' => "Pa'l riutiłixo de sta òpara, se prega de atribuighine ła paternidà a",
+'exif-pngfilecomment' => 'Comento del file PNG',
+'exif-disclaimer' => 'Avertense',
+'exif-contentwarning' => "Avixo so'l contegnùo",
+'exif-giffilecomment' => 'Comento del file GIF',
+'exif-intellectualgenre' => 'Tipo de elemento',
+'exif-subjectnewscode' => 'Còdexe del ogeto',
+'exif-scenecode' => 'Còdexe de sèna IPTC',
+'exif-event' => 'Evento rafegurà',
+'exif-organisationinimage' => 'Organixasion rafegurà',
+'exif-personinimage' => 'Persona rafegurà',
+'exif-originalimageheight' => "Altesa de l'imaxene prima che ła fuse tajà",
+'exif-originalimagewidth' => "Larghesa de l'imaxene prima che ła fuse tajà",
 
 # EXIF attributes
 'exif-compression-1' => 'No conpresso',
+'exif-compression-2' => 'CCITT grupo 3 monodimensionałe - codifega run length de Huffman modifegà',
+'exif-compression-3' => 'Codifega fax CCITT Group 3',
+'exif-compression-4' => 'Codifega fax CCITT gruppo 4',
+
+'exif-copyrighted-true' => 'Proteto da copyright',
+'exif-copyrighted-false' => 'Dominio pùblico',
 
 'exif-unknowndate' => 'Data sconossiùa',
 
@@ -2987,6 +3219,8 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-xyresolution-i' => '$1 punti par połiçe (dpi)',
 'exif-xyresolution-c' => '$1 punti par çentimetro (dpc)',
 
+'exif-colorspace-65535' => 'Nó całibrià',
+
 'exif-componentsconfiguration-0' => 'no esiste',
 
 'exif-exposureprogram-0' => 'Non definio',
@@ -3104,6 +3338,10 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-gpslongitude-e' => 'Longitudine Est',
 'exif-gpslongitude-w' => 'Longitudine Ovest',
 
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => "$1 {{PLURAL:$1|metro|metri}} so'l liveło del mar",
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|metro|metri}} soto el liveło del mar',
+
 'exif-gpsstatus-a' => 'Mixurassion in corso',
 'exif-gpsstatus-v' => 'Mixurassion interoperabiłe',
 
@@ -3120,10 +3358,59 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-gpsdestdistance-m' => 'Mija',
 'exif-gpsdestdistance-n' => 'Mija nàutiche',
 
+'exif-gpsdop-excellent' => 'Esełente ($1)',
+'exif-gpsdop-good' => 'Bon ($1)',
+'exif-gpsdop-moderate' => 'Moderà ($1)',
+'exif-gpsdop-fair' => 'Discreto ($1)',
+'exif-gpsdop-poor' => 'Scarso ($1)',
+
+'exif-objectcycle-a' => 'Soło che ła matina',
+'exif-objectcycle-p' => 'Soło che ła sera',
+'exif-objectcycle-b' => 'Matina e sera',
+
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Diression reałe',
 'exif-gpsdirection-m' => 'Diression magnetica',
 
+'exif-ycbcrpositioning-1' => 'Centrà',
+'exif-ycbcrpositioning-2' => 'Co-situà',
+
+'exif-dc-contributor' => 'Cołaboradori',
+'exif-dc-coverage' => 'Anbito spasiałe o tenporałe de i media',
+'exif-dc-date' => 'Data (e)',
+'exif-dc-publisher' => 'Editor',
+'exif-dc-relation' => 'File ligai',
+'exif-dc-rights' => 'Diriti',
+'exif-dc-source' => 'Fonte del file',
+'exif-dc-type' => 'Tipo de file',
+
+'exif-rating-rejected' => 'Rifiutà',
+
+'exif-isospeedratings-overflow' => 'Maxor de 65535',
+
+'exif-iimcategory-ace' => 'Arte, cultura e spetacoło',
+'exif-iimcategory-clj' => 'Criminałità e dirito',
+'exif-iimcategory-dis' => 'Dixastri e insidenti',
+'exif-iimcategory-fin' => 'Economia e afari',
+'exif-iimcategory-edu' => 'Istrusion',
+'exif-iimcategory-evn' => 'Anbiente',
+'exif-iimcategory-hth' => 'Sałute',
+'exif-iimcategory-hum' => 'Interese uman',
+'exif-iimcategory-lab' => 'Laoro',
+'exif-iimcategory-lif' => 'Stiłe de vita e tenpo libaro',
+'exif-iimcategory-pol' => 'Pułitega',
+'exif-iimcategory-rel' => 'Rełijon e fè',
+'exif-iimcategory-sci' => 'Siensa e tenołoxia',
+'exif-iimcategory-soi' => 'Cuestion sociałi',
+'exif-iimcategory-spo' => 'Spor',
+'exif-iimcategory-war' => 'Guera, radeghi e dixordeni',
+'exif-iimcategory-wea' => 'Meteo',
+
+'exif-urgency-normal' => 'Normałe ($1)',
+'exif-urgency-low' => 'Basa ($1)',
+'exif-urgency-high' => 'Alta ($1)',
+'exif-urgency-other' => 'Priorità definie dal utente ($1)',
+
 # External editor support
 'edit-externally' => 'Modifega sto file usando on programa foresto',
 'edit-externally-help' => '(Par saverghene de pì consultare łe [//www.mediawiki.org/wiki/Manual:External_editors istrusion])',
@@ -3192,6 +3479,7 @@ El codexe de conferma el scadarà en automatego a łe $4.',
 # Scary transclusion
 'scarytranscludedisabled' => "[L'inclusion de pagine tra siti wiki no la xe ativa]",
 'scarytranscludefailed' => '[Inpossibile otegner el modèl $1]',
+'scarytranscludefailed-httpstatus' => '[Eror: inposibiłe otegner el modèl $1: HTTP $2]',
 'scarytranscludetoolong' => '[La URL la xe massa longa]',
 
 # Delete conflict
@@ -3199,6 +3487,8 @@ El codexe de conferma el scadarà en automatego a łe $4.',
 'confirmrecreate' => "L'utente [[User:$1|$1]] ([[User talk:$1|discussion]]) el ga scancełà sta voxe dopo che te ghè scuminsià a modificarla, con ła seguente motivazion:
 : ''$2''
 Par piaser, conferma che te vołi dal bon ricrear sta voxe.",
+'confirmrecreate-noreason' => 'El utente [[User:$1|$1]] ([[User talk:$1|discussion]]) el ga scansełà sta voxe dopo che te ghè scuminsià a modifegarla.
+Par piaser, conferma che te vołi dal bon ricrear sta voxe.',
 'recreate' => 'Ricrea',
 
 # action=purge
@@ -3208,7 +3498,9 @@ Par piaser, conferma che te vołi dal bon ricrear sta voxe.",
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Va ben',
+'confirm-watch-top' => "Xonto sta pàjina a ła to lista de łe tegnùe d'ocio?",
 'confirm-unwatch-button' => 'Va ben',
+'confirm-unwatch-top' => "Cavo sta pàjina da ła to lista de łe tegnùe d'ocio?",
 
 # Multipage image navigation
 'imgmultipageprev' => '← la pagina prima',
@@ -3286,6 +3578,7 @@ Nota che te pol anca [[Special:EditWatchlist|modificar la lista con l'interfacia
 'version-specialpages' => 'Pagine speciali',
 'version-parserhooks' => 'Hook del parser',
 'version-variables' => 'Variabili',
+'version-antispam' => 'Prevension del spam',
 'version-skins' => 'Aspeto grafego',
 'version-other' => 'Altro',
 'version-mediahandlers' => 'Gestori de contenuti multimediài',
@@ -3299,6 +3592,7 @@ Nota che te pol anca [[Special:EditWatchlist|modificar la lista con l'interfacia
 'version-license' => 'Licensa',
 'version-poweredby-credits' => "Sta wiki la va con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altri',
+'version-credits-summary' => "Semo contenti de riconosare łe seguenti persone p' 'ver contribuio a [[Special:Version|MediaWiki]].",
 'version-license-info' => "MediaWiki xe un software lìbaro; te pol redistribuirlo e/o modificarlo secondo i termini de la Licensa Publica Zeneral GNU publicà da la Free Software Foundation; secondo la version 2 de la Licensa, o (a scelta tua) una qualunque altra version sucessiva.
 
 MediaWiki el xe distribuìo sperando che el possa vegner utile, ma SENSA NISSUNA GARANSIA; sensa gnanca la garansia inplicita de COMERCIALIZASSION o de ADATAMENTO A UN USO PARTICOLARE. Varda la Licensa Publica Zeneral GNU par ulteriori detagli.
@@ -3307,6 +3601,8 @@ Insieme co sto programa te dovaressi 'ver ricevùo na copia de la Licensa Public
 'version-software' => 'Software instalà',
 'version-software-product' => 'Prodoto',
 'version-software-version' => 'Version',
+'version-entrypoints' => 'URL de aceso',
+'version-entrypoints-header-entrypoint' => 'Punti de aceso',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3325,15 +3621,16 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'fileduplicatesearch-info' => '$1 × $2 pixel<br />Dimension: $3<br />Tipo MIME: $4',
 'fileduplicatesearch-result-1' => 'No ghe xe duplicati conpagni del file "$1".',
 'fileduplicatesearch-result-n' => 'Ghe xe {{PLURAL:$2|un duplicato conpagno|$2 duplicati conpagni}} al file "$1".',
+'fileduplicatesearch-noresults' => 'Nisun file de nome "$1" trovà.',
 
 # Special:SpecialPages
 'specialpages' => 'Pagine speciali',
 'specialpages-note' => '----
-* Pagine speciali normali.
-* <strong class="mw-specialpagerestricted">Pagine speciali ad acesso limità.</strong>',
+* Pàjine speciałi normałi.
+* <span class="mw-specialpagerestricted">Pàjine speciałi a aceso limità.</span>',
 'specialpages-group-maintenance' => 'Resoconti de manutenzion',
 'specialpages-group-other' => 'Altre pagine speciali',
-'specialpages-group-login' => 'Login / registrazion',
+'specialpages-group-login' => 'Login / registrasion',
 'specialpages-group-changes' => 'Ultime modifiche e registri',
 'specialpages-group-media' => 'Resoconti e caricamenti dei file multimediài',
 'specialpages-group-users' => 'Utenti e diriti',
@@ -3379,6 +3676,9 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'compare-rev1' => 'Revisión 1',
 'compare-rev2' => 'Revisión 2',
 'compare-submit' => 'Confronta',
+'compare-invalid-title' => "El titoło che te ghè indicà nó 'l xe mia valido.",
+'compare-title-not-exists' => "El titoło che te ghe spesifegà nó 'l existe.",
+'compare-revision-not-exists' => 'Ła revixion che te ghe spesifegà nó ła existe.',
 
 # Database error messages
 'dberr-header' => 'Sta wiki la ga un problema',
@@ -3431,22 +3731,77 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'logentry-move-move_redir-noredirect' => '$1 ga spostà la pajina $3 a $4 al posto de un rimando sensa metare un rimando',
 'logentry-patrol-patrol' => '$1 ga segnà la revixion $4 de la pajina $3 come verifegà',
 'logentry-patrol-patrol-auto' => '$1 ga segnà automategamente la revixion $4 de la pajina $3 come verifegà',
-'logentry-newusers-newusers' => '$1 ga creà na utensa',
-'logentry-newusers-create' => '$1 ga creà na utensa',
-'logentry-newusers-create2' => '$1 ga creà na utensa $3',
+'logentry-newusers-newusers' => "L'utensa $1 xe sta creà",
+'logentry-newusers-create' => "L'utensa $1 xe sta creà",
+'logentry-newusers-create2' => 'Lutensa $3 xe sta creà da $1',
 'logentry-newusers-autocreate' => "L'utensa $1 xè stà creà automategamente",
 'newuserlog-byemail' => 'password spedìa par e-mail',
+'logentry-rights-rights' => "$1 ga canbià l'apartenensa de $3 dal grupo $4 al grupo $5",
+'logentry-rights-rights-legacy' => "$1 ga canbià l'apartenensa a grupi de $3",
+'logentry-rights-autopromote' => '$1 xe stà automategamente promoso/a da $4 a $5',
+'rightsnone' => '(nissun)',
 
 # Feedback
+'feedback-bugornote' => 'Se se xe in grado de descrivare el problema tenico riscontrà in maniera precixa, [$1 segnałare el bug]. In alternadiva, se pol doparar el moduło senplifegà cuà soto. El comento inserio el sarà xontà a ła pàjina "[$3 $2]", insieme al propio nome utente.',
 'feedback-subject' => 'Ogeto:',
 'feedback-message' => 'Messajo:',
 'feedback-cancel' => 'Anuła',
+'feedback-submit' => 'Invia feedback',
+'feedback-adding' => 'Inserimento del feedback inte ła pàjina...',
+'feedback-error1' => 'Eror: Da ła API xe rivà un rexultà nó riconosùo',
+'feedback-error2' => 'Eror: Nó xe sta posibiłe exeguir ła modifega',
+'feedback-error3' => 'Errore: Nisuna risposta da ła API',
+'feedback-thanks' => 'Grasie! El to feedback el xe sta publicà a ła pàjina "[$2 $1]".',
 'feedback-close' => 'Fato',
+'feedback-bugcheck' => "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
+'feedback-bugnew' => 'Controło efetuà. Segnała un novo bug',
 
 # Search suggestions
 'searchsuggest-search' => 'Serca',
 'searchsuggest-containing' => 'che contien...',
 
+# API errors
+'api-error-badaccess-groups' => 'Nó te si autorixà a cargar documenti so sta wiki.',
+'api-error-badtoken' => 'Eror interno: token fałà.',
+'api-error-copyuploaddisabled' => 'El cargamento tramite URL el xe dixabiłità so sto server.',
+'api-error-duplicate' => "So'l sito {{PLURAL:$1|ghe xe xà [$2 'n altro documento]|ghe xe xà [$2 altri documenti]}} có 'l steso contegnuo.",
+'api-error-duplicate-archive' => "{{PLURAL:$1|Ghe xera [$2 'n altro file]|Ghe xera [$2 altri file]}} xà inte'l sito có 'l steso contegnuo, ma {{PLURAL:$1|el xe sta scansełà|i xe stai scansełai}}.",
+'api-error-duplicate-archive-popup-title' => 'File duplic{{PLURAL:$1|à che xe xà sta scansełà|ai che i xe xà stai scansełai}}',
+'api-error-duplicate-popup-title' => '{{PLURAL:$1|documento duplicà|documenti duplicai}}',
+'api-error-empty-file' => 'El file sełesionà el gera vodo.',
+'api-error-emptypage' => 'Ła creasion de nove pàjine vode nó ła xe consentia.',
+'api-error-fetchfileerror' => 'Eror interno: ghe xe sta un problema durante el recupero del documento.',
+'api-error-fileexists-forbidden' => 'Un file de nome "$1" \'l existe xà e nò \'l pol esar sovrascrito.',
+'api-error-fileexists-shared-forbidden' => 'Un file de nome "$1" \'l existe xà inte\'l repository condivixo e nó \'l pol esar sovrascrito.',
+'api-error-file-too-large' => 'El file sełesionà el gera masa grando.',
+'api-error-filename-tooshort' => 'El nome del file el xe massa curto.',
+'api-error-filetype-banned' => 'Sto tipo de file el xe vietà.',
+'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|nó 'l xe un tipo de file consentio|nó i xe tipi de file consentìi}}. {{PLURAL:$3|El tipo de file consentio el xe|I tipi de file consentìi i xe}} $2.",
+'api-error-filetype-missing' => "Al file ghe manca l'estension.",
+'api-error-hookaborted' => 'Ła modifega che te ghe proà a far ła xe sta interota da na estension.',
+'api-error-http' => 'Eror interno: inposibiłe conetarse al server.',
+'api-error-illegal-filename' => "El nome del file nó 'l xe parmeso.",
+'api-error-internal-error' => "Eror interno: calcosa xe ndà storo có l'elaborasion del to cargamento so ła wiki.",
+'api-error-invalid-file-key' => 'Eror interno: file nó prexente inte ła carteła de i file tenporanei.',
+'api-error-missingparam' => 'Eror interno: parametri de ła dimanda mancanti.',
+'api-error-missingresult' => 'Eror interno: inposibiłe determinar se ła copia ła xe riusia.',
+'api-error-mustbeloggedin' => "Te ghe da efetuar 'l aceso par cargar i file.",
+'api-error-mustbeposted' => 'Eror interno: ła dimanda dimanda HTTP POST.',
+'api-error-noimageinfo' => "El cargamento el xe riusio, ma 'l server nó el ne ga dato gnauna informasion so'l file.",
+'api-error-nomodule' => 'Eror interno: nó xe sta inpostà el moduło de cargamento.',
+'api-error-ok-but-empty' => 'Eror interno: nisuna risposta dal server.',
+'api-error-overwrite' => 'Nó xe parmeso de sorascrìvar un file existente.',
+'api-error-stashfailed' => "Eror interno: el server nó 'l xe riusio a memorixar el documento tenporaneo.",
+'api-error-publishfailed' => "Eror interno: el server nó 'l xe riusio a publicar el documento tenporaneo.",
+'api-error-timeout' => "El server nó 'l ga risposto entro el tenpo previsto.",
+'api-error-unclassified' => 'Se gà verifegà un eror sconosùo.',
+'api-error-unknown-code' => 'Eror sconosùo: "$1"',
+'api-error-unknown-error' => 'Eror interno: calcosa xe ndà storto có se jera drio proar a cargar el file.',
+'api-error-unknown-warning' => 'Avixo sconosùo: "$1".',
+'api-error-unknownerror' => 'Eror sconosùo: "$1".',
+'api-error-uploaddisabled' => 'El cargamento el xe dixabiłità so sta wiki.',
+'api-error-verification-error' => "Sto file el podaria esar danegià, o 'ver l'estension sbałià.",
+
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|secondo|secondi}}',
 'duration-minutes' => '$1 {{PLURAL:$1|minuto|minuti}}',
index 5a8164c..3980a0a 100644 (file)
@@ -1197,11 +1197,13 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'right-sendemail' => 'Oigeta e-počtad toižile kävutajile',
 'right-passwordreset' => 'Kacta e-kirjeižid peitsanan toižetandanke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kävutajiden registracijan aigkirj',
+'newuserlogpagetext' => 'Tantoi registriruidud kävutajiden nimikirjutez.',
+
 # User rights log
 'rightslog' => 'Kävutajan oiktusiden aigkirj',
 'rightslogtext' => 'Nece om kävutajan oiktusiden toižetusen aigkirj.',
-'rightslogentry' => 'toižetin $1-kävutajan ühtnend gruppiš - oli $2, linneb $3',
-'rightsnone' => '(ei ole)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "lugeda necidä lehtpol't",
@@ -1688,10 +1690,6 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].',
 'activeusers-hidesysops' => 'Peitta administratorid',
 'activeusers-noresult' => 'Kävutajad ei olgoi löutud.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kävutajiden registracijan aigkirj',
-'newuserlogpagetext' => 'Tantoi registriruidud kävutajiden nimikirjutez.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kävutajiden gruppiden oiktused',
 'listgrouprights-group' => 'Grupp',
@@ -1800,6 +1798,8 @@ $UNWATCHURL
 
 Pid\'oitelend da joksii abu:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'om sätud',
+'changed' => 'om toižetadud',
 
 # Delete
 'deletepage' => "Čuta lehtpol' poiš",
@@ -3058,6 +3058,7 @@ Kävutagat normaline ezikacund.',
 'revdelete-restricted' => 'kaidendused administratoriden täht',
 'revdelete-unrestricted' => 'kaidendused heittud administratoriden täht',
 'newuserlog-byemail' => 'peisana om oigetud e-počtadme',
+'rightsnone' => '(ei ole)',
 
 # Feedback
 'feedback-subject' => 'Tem:',
index 98e7448..e2b618d 100644 (file)
@@ -408,13 +408,13 @@ $messages = array(
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Thể loại|Thể loại}}',
 'category_header' => 'Các trang trong thể loại “$1”',
-'subcategories' => 'Tiểu thể loại',
+'subcategories' => 'Thể loại con',
 'category-media-header' => 'Các tập tin trong thể loại “$1”',
 'category-empty' => "''Thể loại này hiện không có trang hay tập tin nào.''",
 'hidden-categories' => '{{PLURAL:$1|Thể loại ẩn|Thể loại ẩn}}',
 'hidden-category-category' => 'Thể loại ẩn',
-'category-subcat-count' => 'Thể loại này gồm {{PLURAL:$2|tiểu thể loại sau|{{PLURAL:$1||$1}} tiểu thể loại sau, trên tổng số $2 tiểu thể loại}}.',
-'category-subcat-count-limited' => 'Thể loại này gồm {{PLURAL:$1|tiểu thể loại|$1 tiểu thể loại}} sau.',
+'category-subcat-count' => 'Thể loại này gồm {{PLURAL:$2|thể loại con sau|{{PLURAL:$1||$1}} thể loại con sau, trên tổng số $2 thể loại con}}.',
+'category-subcat-count-limited' => 'Thể loại này gồm {{PLURAL:$1|thể loại con|$1 thể loại con}} sau.',
 'category-article-count' => '{{PLURAL:$2|Thể loại này gồm trang sau.|{{PLURAL:$1|Trang|$1 trang}} sau nằm trong thể loại này, trên tổng số $2 trang.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Trang|$1 trang}} sau nằm trong thể loại hiện hành.',
 'category-file-count' => '{{PLURAL:$2|Thể loại này gồm tập tin sau.|{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại này, trong tổng số $2 tập tin.}}',
@@ -429,6 +429,7 @@ $messages = array(
 'newwindow' => '(mở cửa sổ mới)',
 'cancel' => 'Hủy bỏ',
 'moredotdotdot' => 'Thêm nữa…',
+'morenotlisted' => 'Có nhiều hơn danh sách này…',
 'mypage' => 'Trang cá nhân',
 'mytalk' => 'Tin nhắn',
 'anontalk' => 'Thảo luận với IP này',
@@ -544,8 +545,8 @@ $1',
 'policy-url' => 'Project:Quy định và hướng dẫn',
 'portal' => 'Cộng đồng',
 'portal-url' => 'Project:Cộng đồng',
-'privacy' => 'Chính sách về sự riêng tư',
-'privacypage' => 'Project:Chính sách về sự riêng tư',
+'privacy' => 'Quy định quyền riêng tư',
+'privacypage' => 'Project:Quy định quyền riêng tư',
 
 'badaccess' => 'Lỗi về quyền truy cập',
 'badaccess-group0' => 'Bạn không được phép thực hiện thao tác này.',
@@ -788,6 +789,7 @@ Xin hãy đợi chốc lát rồi thử lại.',
 # E-mail sending
 'php-mail-error-unknown' => 'Lỗi không rõ trong hàm PHP mail()',
 'user-mail-no-addy' => 'Không có địa chỉ để gửi thư điện tử đến',
+'user-mail-no-body' => 'Không thể gửi thư điện tử rỗng hoặc có nội dung ngắn một cách vô lý.',
 
 # Change password dialog
 'resetpass' => 'Đổi mật khẩu',
@@ -1314,7 +1316,7 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'searchprofile-everything-tooltip' => 'Tìm tất cả nội dung (gồm cả các trang thảo luận)',
 'searchprofile-advanced-tooltip' => 'Tìm trong không gian tên tùy chọn',
 'search-result-size' => '$1 ({{PLURAL:$2|1 từ|$2 từ}})',
-'search-result-category-size' => '{{PLURAL:$1|1 trang thành viên|$1 trang thành viên}} ({{PLURAL:$2|1 tiểu thể loại|$2 tiểu thể loại}}, {{PLURAL:$3|1 tập tin|$3 tập tin}})',
+'search-result-category-size' => '$1 trang thành viên ($2 thể loại con, $3 tập tin)',
 'search-result-score' => 'Độ phù hợp: $1%',
 'search-redirect' => '(đổi hướng $1)',
 'search-section' => '(đề mục $1)',
@@ -1582,15 +1584,13 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'right-sendemail' => 'Gửi thư điện tử cho thành viên khác',
 'right-passwordreset' => 'Xem các thư điện tử đặt lại mật khẩu',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nhật trình mở tài khoản',
+'newuserlogpagetext' => 'Đây là danh sách những tài khoản thành viên mở lên gần đây.',
+
 # User rights log
 'rightslog' => 'Nhật trình cấp quyền thành viên',
 'rightslogtext' => 'Đây là nhật trình lưu những thay đổi đối với các quyền hạn thành viên.',
-'rightslogentry' => 'đã đổi các nhóm liên kết của thành viên $1 từ $2 thành $3',
-'rightslogentry-autopromote' => 'được tự động phong cấp từ $2 đến $3',
-'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',
-'rightsnone' => '(không có)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'đọc trang này',
@@ -2145,7 +2145,7 @@ Các mục <del>bị gạch bỏ</del> là các trang đã được sửa.',
 'movethispage' => 'Di chuyển trang này',
 'unusedimagestext' => 'Các tập tin sau tồn tại nhưng chưa được nhúng vào trang nào.
 Xin lưu ý là các trang Web bên ngoài có thể liên kết đến một tập tin ở đây qua một địa chỉ URL trực tiếp, do đó nhiều tập tin vẫn được liệt kê ở đây dù có thể nó đang được sử dụng.',
-'unusedcategoriestext' => 'Các trang thể loại này tồn tại mặc dù không có trang hay tiểu thể loại nào thuộc về nó.',
+'unusedcategoriestext' => 'Các trang thể loại này tồn tại mặc dù không có trang hay thể loại con nào thuộc về nó.',
 'notargettitle' => 'Chưa có mục tiêu',
 'notargettext' => 'Xin chỉ rõ trang hoặc thành viên cần thực hiện tác vụ.',
 'nopagetitle' => 'Không có trang đích nào như vậy',
@@ -2234,10 +2234,6 @@ Xem thêm [[Special:WantedCategories|thể loại cần thiết]].',
 'activeusers-hidesysops' => 'Ẩn bảo quản viên',
 'activeusers-noresult' => 'Không thấy thành viên.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nhật trình mở tài khoản',
-'newuserlogpagetext' => 'Đây là danh sách những tài khoản thành viên mở lên gần đây.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nhóm thành viên',
 'listgrouprights-summary' => 'Dưới đây là danh sách nhóm thành viên được định nghĩa tại wiki này, với mức độ truy cập của từng nhóm.
@@ -2372,6 +2368,8 @@ $UNWATCHURL
 
 Phản hồi và cần sự hỗ trợ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'viết mới',
+'changed' => 'thay đổi',
 
 # Delete
 'deletepage' => 'Xóa trang',
@@ -2440,6 +2438,8 @@ quay về phiên bản cuối của $2.',
 'prot_1movedto2' => '[[$1]] đổi thành [[$2]]',
 'protect-badnamespace-title' => 'Không gian tên không thể khóa',
 'protect-badnamespace-text' => 'Không thể khóa các trang tại không gian tên này.',
+'protect-norestrictiontypes-text' => 'Không thể khóa trang này vì không có sẵn tác vụ nào để hạn chế.',
+'protect-norestrictiontypes-title' => 'Trang không khóa được',
 'protect-legend' => 'Xác nhận khóa',
 'protectcomment' => 'Lý do:',
 'protectexpiry' => 'Thời hạn:',
@@ -2455,9 +2455,9 @@ hiện tại của trang '''$1''':",
 Đây là trạng thái hiện tại của trang '''$1''':",
 'protect-cascadeon' => 'Trang này hiện bị khóa vì nó được nhúng vào {{PLURAL:$1|những trang|trang}} dưới đây bị khóa với tùy chọn “khóa theo tầng” được kích hoạt. Bạn có thể đổi mức độ khóa của trang này, nhưng nó sẽ không ảnh hưởng đến việc khóa theo tầng.',
 'protect-default' => 'Cho phép mọi thành viên',
-'protect-fallback' => 'Cần quyền “$1”',
-'protect-level-autoconfirmed' => 'Cấm thành viên mới và người dùng chưa mở tài khoản',
-'protect-level-sysop' => 'Cấm mọi thành viên (trừ bảo quản viên)',
+'protect-fallback' => 'Chỉ cho phép những người dùng có quyền “$1”',
+'protect-level-autoconfirmed' => 'Chỉ cho phép các thành viên tự động xác nhận',
+'protect-level-sysop' => 'Chỉ cho phép các bảo quản viên',
 'protect-summary-cascade' => 'khóa theo tầng',
 'protect-expiring' => 'hết hạn $1 (UTC)',
 'protect-expiring-local' => 'hết hạn $1',
@@ -2756,7 +2756,7 @@ Bạn có thể cập nhật tự động các trang đổi hướng đến tên
 Nếu bạn chọn không cập nhật, hãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]].
 Bạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến.
 
-Chú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó rỗng hoặc là trang đổi hướng và không có lịch sử sửa đổi trước đây.
+Chú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó là trang đổi hướng và không có lịch sử sửa đổi trước đây.
 Điều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn.
 
 '''CẢNH BÁO!'''
@@ -2972,10 +2972,10 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'tooltip-pt-anonlogin' => 'Không đăng nhập vẫn tham gia được, tuy nhiên đăng nhập sẽ lợi hơn.',
 'tooltip-pt-logout' => 'Đăng xuất',
 'tooltip-ca-talk' => 'Thảo luận về trang này',
-'tooltip-ca-edit' => 'Bạn có thể sửa được trang này. Xin xem thử trước khi lưu.',
+'tooltip-ca-edit' => 'Bạn có thể sửa được trang này! (Xin vui lòng xem thử trước khi lưu.)',
 'tooltip-ca-addsection' => 'Bắt đầu một đề mục mới',
 'tooltip-ca-viewsource' => 'Trang này được khóa. Bạn có thể xem mã nguồn.',
-'tooltip-ca-history' => 'Những phiên bản cũ của trang này.',
+'tooltip-ca-history' => 'Các phiên bản cũ của trang này',
 'tooltip-ca-protect' => 'Khóa trang này lại',
 'tooltip-ca-unprotect' => 'Thay đổi mức khóa của trang này',
 'tooltip-ca-delete' => 'Xóa trang này',
@@ -3120,7 +3120,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-recent-authors' => 'Số người dùng sửa đổi gần đây',
 'pageinfo-magic-words' => 'Từ thần chú ($1)',
 'pageinfo-hidden-categories' => 'Thể loại ẩn ($1)',
-'pageinfo-templates' => 'Bản mẫu được nhúng ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Bản mẫu|Các bản mẫu}} được nhúng ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Trang|Các trang}} nhúng ($1)',
 'pageinfo-toolboxlink' => 'Thông tin trang',
 'pageinfo-redirectsto' => 'Đổi hướng đến',
 'pageinfo-redirectsto-info' => 'thông tin',
@@ -3129,6 +3130,10 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-protect-cascading' => 'Khóa theo tầng từ đây',
 'pageinfo-protect-cascading-yes' => 'Có',
 'pageinfo-protect-cascading-from' => 'Khóa theo tầng từ',
+'pageinfo-category-info' => 'Thông tin về thể loại',
+'pageinfo-category-pages' => 'Số trang',
+'pageinfo-category-subcats' => 'Số thể loại con',
+'pageinfo-category-files' => 'Số tập tin',
 
 # Skin names
 'skinname-standard' => 'Cổ điển',
@@ -3220,6 +3225,8 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'minutes' => '$1 phút',
 'hours' => '$1 giờ',
 'days' => '$1 ngày',
+'months' => '$1 tháng',
+'years' => '$1 năm',
 'ago' => 'cách đây $1',
 'just-now' => 'hồi nãy',
 
@@ -4089,6 +4096,10 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'logentry-newusers-create2' => '$1 đã mở tài khoản người dùng $3',
 'logentry-newusers-autocreate' => 'Tài khoản $1 đã được mở tự động',
 'newuserlog-byemail' => 'gửi mật khẩu qua thư điện tử',
+'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',
+'rightsnone' => '(không có)',
 
 # Feedback
 'feedback-bugornote' => 'Nếu bạn đã sẵn sàng để miêu tả các chi tiết của một vấn đề kỹ thuật, xin vui lòng [$1 báo cáo lỗi].
index 8060c4f..926cb12 100644 (file)
@@ -549,6 +549,9 @@ Hirmid sagsd, das Du den dhägsd '''selbâr gschriim''' hasd, das däär dhägsd
 
 'grouppage-sysop' => '{{ns:project}}:Adminisdradoorn',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brodoghol iwâr dii naja bearbajdâr-ôômeldunga',
+
 # User rights log
 'rightslog' => 'Brodoghol fo rächde-dsuudaalung an bearbajdâr',
 
@@ -648,9 +651,6 @@ S'gajd awâr aa â [[Special:WhatLinksHere/$2|lisdn mid alâ fârwajs]].",
 # Special:LinkSearch
 'linksearch' => 'Linggs nach ausârhalb',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brodoghol iwâr dii naja bearbajdâr-ôômeldunga',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Lisdn fon dâ midgliidâr)',
 
index 0227917..b6774ea 100644 (file)
@@ -1138,11 +1138,13 @@ Dalol i dälön votikanes kosikön ko ol yufü gebana- u bespikapad olik nes sä
 'right-siteadmin' => 'Lökofärmükön e maifükön nünodemi',
 'right-sendemail' => 'Sedön penedis leäktronik lü gebans votik',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Lised gebanijafamas',
+'newuserlogpagetext' => 'Is palisedons jafams gebanas nulik.',
+
 # User rights log
 'rightslog' => 'Jenotalised gebanagitätas',
 'rightslogtext' => 'Is palisedons votükams gebanagitätas.',
-'rightslogentry' => 'grupalimanam gebana: $1 pevotükon de $2 ad $3',
-'rightsnone' => '(nonik)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'reidön padi at',
@@ -1606,10 +1608,6 @@ Protoks pestütöl: <code>$1</code>',
 'activeusers-hidesysops' => 'Klänedolöd guvanis',
 'activeusers-noresult' => 'Geban nonik petuvon.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Lised gebanijafamas',
-'newuserlogpagetext' => 'Is palisedons jafams gebanas nulik.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gitäts gebanagrupa',
 'listgrouprights-summary' => 'Is palisedons gebanagrups in vük at dabinöls, sa gitäts tefik onsik.
@@ -1716,6 +1714,8 @@ Ad votükön parametami galädaliseda olik, loglös
 
 Küpets e yuf pluik:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'pejafon',
+'changed' => 'pevotüköl',
 
 # Delete
 'deletepage' => 'Moükolöd padi',
@@ -2810,6 +2810,7 @@ Magods pajonons ma fomät gudikün, ragivasots votik pamaifükons stedöfo kobü
 'revdelete-restricted' => 'miedükams pelonöfükons pro guvans',
 'revdelete-unrestricted' => 'miedükams pro guvans pemoükons',
 'newuserlog-byemail' => 'letavöd pesedon me pot leäktronik',
+'rightsnone' => '(nonik)',
 
 # Search suggestions
 'searchsuggest-search' => 'Suk',
index 58893e6..895d82e 100644 (file)
@@ -445,9 +445,11 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 'grouppage-user' => '{{ns:project}}:Сäüttijäd',
 'grouppage-sysop' => '{{ns:project}}:Praviťeľad',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uuvvõd cäüttijäd',
+
 # User rights log
 'rightslog' => 'Cäütteminõikuslogi',
-'rightsnone' => '(eb õõ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'muutu sitä cülciä',
@@ -598,9 +600,6 @@ Seness [$2 kuvauhsõ lehocülless] informaattsija on alapallõ annõttu.',
 # Special:ListUsers
 'listusers-submit' => 'Näüt väľľää',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uuvvõd cäüttijäd',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(selttsilainspiiska)',
 
@@ -963,6 +962,9 @@ Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull fa
 # HTML forms
 'htmlform-selectorother-other' => 'Muu',
 
+# New logging system
+'rightsnone' => '(eb õõ)',
+
 # Feedback
 'feedback-message' => 'Ilmottamin:',
 'feedback-cancel' => 'Otmeńoit',
index ea10aee..f02e1ba 100644 (file)
@@ -948,11 +948,12 @@ Taa tohe-i ollaq rohkõmb ku $1 {{PLURAL:$1|märk|märki}}.",
 'right-ipblock-exempt' => 'Minnäq müüdä automaatsist kinniqpidämiisist ni aadrõsijao ja IP-kinniqpidämiisist',
 'right-proxyunbannable' => 'Minnäq müüdä automaatsist vaihõserveri kinniqpidämiisist',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Vahtsõq pruukjaq',
+
 # User rights log
 'rightslog' => 'Pruukmisõiguisi muutmisõ nimekiri',
 'rightslogtext' => 'Taa om pruukmisõiguisi muutmiisi nimekiri.',
-'rightslogentry' => 'Pruukja $1 õigusõq muudõti ümbre rühmäst $2 rühmä $3',
-'rightsnone' => '(olõ-i õiguisi)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'seod lehte toimõndaq',
@@ -1287,9 +1288,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Näütäq',
 'listusers-noresult' => 'Olõ-s pruukjit.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Vahtsõq pruukjaq',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pruukjarühmi õigusõq',
 'listgrouprights-members' => '(liikmidõ nimekiri)',
@@ -1371,6 +1369,8 @@ Inämb seo lehe kotsilõ teedäqandmiisi saadõta-i. Võit ka kõik su perräkae
 Perräkaemisnimekirä säädmiisi saat muutaq lehe pääl: {{canonicalurl:Special:Watchlist/edit}}
 
 As\'a kotsilõ mano kaiaq ja küssü saat lehe päält: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'lehe loonuq',
+'changed' => 'lehte muutnuq',
 
 # Delete
 'deletepage' => 'Kistudaq lehekülg ärq',
@@ -2262,4 +2262,7 @@ Prooviq harilikku kaehust.',
 'specialpages-group-wiki' => 'Vikiteedüseq ja tüüriistaq',
 'specialpages-group-redirects' => 'Ümbrenäütämistallitusleheq',
 
+# New logging system
+'rightsnone' => '(olõ-i õiguisi)',
+
 );
index abdee4b..3ba9d00 100644 (file)
@@ -1060,12 +1060,13 @@ Ciste infôrmacion serè publike po tertos.",
 'right-unblockself' => 'Si disbloker lu-minme',
 'right-protect' => "Candjî les liveas d' protedjaedje eyet candjî les pådjes protedjeyes",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Djournå des noveas uzeus',
+'newuserlogpagetext' => "Chal pa dzo c' est ene djivêye des uzeus novelmint eredjîstrés.",
+
 # User rights log
 'rightslog' => 'Djournå des droets des uzeus',
 'rightslogtext' => "Çouchal, c' est on djournå des candjmints des droets des uzeus.",
-'rightslogentry' => "a candjî l' uzeu «$1» do groupe «$2» viè «$3»",
-'rightslogentry-autopromote' => 'a stî otomaticmint candjî di «$2» a «$3»',
-'rightsnone' => '(nouk)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lére cisse pådje ci',
@@ -1423,10 +1424,6 @@ Protocoles ricnoxhous: <code>$1</code> (nelzès metoz nén dins vosse tchinne di
 'listusers-noresult' => 'Nol uzeu di trové.',
 'listusers-blocked' => '({{GENDER:$1|bloké|blokêye}})',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Djournå des noveas uzeus',
-'newuserlogpagetext' => "Chal pa dzo c' est ene djivêye des uzeus novelmint eredjîstrés.",
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(djivêye des mimbes)',
 
@@ -1519,6 +1516,8 @@ $UNWATCHURL
 
 Po pus d\' aidance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ahivêye',
+'changed' => 'candjeye',
 
 # Delete
 'deletepage' => "Disfacer l' pådje",
@@ -2341,6 +2340,7 @@ Acertinez s' i vs plait ki vos vloz vormint rifé cisse pådje ci.",
 'logentry-newusers-create2' => "$1 a-st ahivé on conte d' uzeu $3",
 'logentry-newusers-autocreate' => 'li conte $1 a stî ahivé otomaticmint',
 'newuserlog-byemail' => "emilaedje d' on scret",
+'rightsnone' => '(nouk)',
 
 # Feedback
 'feedback-subject' => 'Sudjet',
index 649e13f..2d9185d 100644 (file)
@@ -985,9 +985,12 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'right-userrights-interwiki' => 'Igliwat an mga katungod han gumaramit han mga gumaramit ha iba nga mga wiki',
 'right-sendemail' => 'Padad-i hin e-mail ngada ha iba nga mga gumaramit',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Talaan han paghimo hin gumaramit',
+'newuserlogpagetext' => 'Ini an talaan han mga nagkahihimo nga mga gumaramit.',
+
 # User rights log
 'rightslog' => 'Talaan hin mga katungod han gumaramit',
-'rightsnone' => '(waray)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha ini nga pakli',
@@ -1353,10 +1356,6 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'activeusers-hidesysops' => 'Igtago an mga magdudumara',
 'activeusers-noresult' => 'Waray gumaramit nga nahiagian.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Talaan han paghimo hin gumaramit',
-'newuserlogpagetext' => 'Ini an talaan han mga nagkahihimo nga mga gumaramit.',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Hugpo',
 'listgrouprights-rights' => 'Mga katungod',
@@ -1404,6 +1403,8 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 
 'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
 'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
+'created' => 'nahimo',
+'changed' => 'naliwanan',
 
 # Delete
 'deletepage' => 'Igpara an pakli',
@@ -2203,6 +2204,7 @@ An iba in daan nakatago.
 'logentry-newusers-create2' => '$1 in naghimo hin gumaramit nga akawnt $3',
 'logentry-newusers-autocreate' => 'An akawnt nga $1 in lugaring nga nahimo',
 'newuserlog-byemail' => 'Ginpadangat an tigaman-pagsulod pinaagi han e-mail',
+'rightsnone' => '(waray)',
 
 # Feedback
 'feedback-subject' => 'Himangrawon:',
index e89f6e0..192fc84 100644 (file)
@@ -1124,11 +1124,13 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa
 'right-siteadmin' => 'Caabi walla caabeedi dàttub njoxe bi',
 'right-override-export-depth' => 'génne ay xët yu ëmbi xët yu lëkkaloo ba-ci xóotaay bu tolluwaayam àgg 5',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jëfandikukat yu yees yi',
+'newuserlogpagetext' => 'Xët wii daf lay won limu sáq yi fi mujjee sosu.',
+
 # User rights log
 'rightslog' => 'Sañ-sañi jëfandikukat',
 'rightslogtext' => 'Lii di toftal limu jaar-jaaru coppitey sañ-sañi jëfandikukat yi.',
-'rightslogentry' => 'moo jële jëfandikukat bii di « $1 » ci mbooloo  $2  yóbb ko ci $3',
-'rightsnone' => '(menn)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'jàng wii xët',
@@ -1544,10 +1546,6 @@ Xoolal itam [[Special:WantedCategories|wàll yi ñuy laaj]].',
 'activeusers-from' => 'Wone jëfandikukat yi dalee ko ci:',
 'activeusers-noresult' => 'Benn jëfandikukat giseesu ko',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jëfandikukat yu yees yi',
-'newuserlogpagetext' => 'Xët wii daf lay won limu sáq yi fi mujjee sosu.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Sañ-sañi mbooloom jëfandikukat mi',
 'listgrouprights-summary' => 'Lii di toftal mooy limu mboolooy jëfandikukat yi ne ci bii wiki, ak sañ-sañ yi ñu leen féetaleel.
@@ -1624,6 +1622,8 @@ Coppite yiy ñëw yu xët wi ak xëtu waxtaanuwaay wi mu àndal di nañu leen fa
 'enotif_lastvisited' => 'Nemmeekul $1 ngir gis bépp coppite dale ba sa nemmeku gu mujj.',
 'enotif_lastdiff' => 'Xoolal $1 ngir gis gii coppite.',
 'enotif_anon_editor' => 'Jëfandikukat bu binduwul $1',
+'created' => 'sosu na',
+'changed' => 'soppi',
 
 # Delete
 'deletepage' => 'Far xët wi',
@@ -2199,5 +2199,6 @@ Man nga tamit  [[Special:EditWatchlist/raw|soppi ko]].',
 'revdelete-restricted' => 'doxalub digal ngir yorkat yi',
 'revdelete-unrestricted' => 'digal ngir yorkat yi deñ na',
 'newuserlog-byemail' => 'baatujáll bi yónne nañu ko cib bataaxal',
+'rightsnone' => '(menn)',
 
 );
index cbba3a7..0dfb48e 100644 (file)
@@ -995,9 +995,11 @@ $1",
 'grouppage-sysop' => '{{ns:project}}:管理员',
 'grouppage-bureaucrat' => '{{ns:project}}:行政员',
 
+# Special:Log/newusers
+'newuserlogpage' => '用户创建日志',
+
 # User rights log
 'rightslog' => '用户权限日志',
-'rightsnone' => '(呒)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => '编辑箇只页面',
@@ -1187,9 +1189,6 @@ $1",
 # Special:ListUsers
 'listusers-submit' => '显示',
 
-# Special:Log/newusers
-'newuserlogpage' => '用户创建日志',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员列表)',
 
@@ -1224,6 +1223,9 @@ $1",
 'watching' => '监控……',
 'unwatching' => '解除监控……',
 
+'created' => '建立哉',
+'changed' => '改变哉',
+
 # Delete
 'deletepage' => '删脱页面',
 'confirm' => '确认',
@@ -1593,5 +1595,6 @@ Variants for Chinese language
 # New logging system
 'revdelete-restricted' => '已将限制应用到管理员',
 'revdelete-unrestricted' => '已移除对管理员个限制',
+'rightsnone' => '(呒)',
 
 );
index 69b64d2..a575bf4 100644 (file)
@@ -708,9 +708,11 @@ $1',
 'grouppage-sysop' => '{{ns:project}}:Закрачуд',
 'grouppage-bureaucrat' => '{{ns:project}}:Нойнчуд',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Бичгдлһнә сеткүл',
+
 # User rights log
 'rightslog' => 'Демнчна зөвәнә сеткүл',
-'rightsnone' => '(уга)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'эн халхиг чиклх',
@@ -853,9 +855,6 @@ $1',
 # Special:LinkSearch
 'linksearch' => 'Һаза заалһуд',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Бичгдлһнә сеткүл',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(мөчүдин сеткүл)',
 
@@ -901,6 +900,8 @@ e-mail\'ар $PAGEEDITOR_EMAIL
 
 Хәрү холва болн тус:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'бүтәв',
+'changed' => 'сольв',
 
 # Delete
 'deletepage' => 'Эн халхиг һарһҗ',
@@ -1265,4 +1266,7 @@ $2 шидрә һарһлһна төлә хәләтн.',
 'htmlform-reset' => 'Сольлһиг уга кех',
 'htmlform-selectorother-other' => 'Талдан',
 
+# New logging system
+'rightsnone' => '(уга)',
+
 );
index d15992a..2deb341 100644 (file)
@@ -458,6 +458,9 @@ $messages = array(
 'grouppage-user' => '{{ns:project}}:მახვარებუეფ',
 'grouppage-sysop' => '{{ns:project}}:ხემანჯღვერეფი',
 
+# Special:Log/newusers
+'newuserlogpage' => 'მახვარებუშ რეგისტრაციაშ ჟურნალ',
+
 # User rights log
 'rightslog' => 'მახვარებუშ ნებეფიშ ჟურნალ',
 
@@ -600,9 +603,6 @@ $messages = array(
 'linksearch' => 'გალენ რცხიეფ',
 'linksearch-line' => '$1 მერცხიილი რე $2-შე',
 
-# Special:Log/newusers
-'newuserlogpage' => 'მახვარებუშ რეგისტრაციაშ ჟურნალ',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(მაკათურეფიშ ერკებული)',
 
index 4f515b5..b11e2d0 100644 (file)
@@ -429,8 +429,8 @@ $1',
 'mainpage' => 'הויפט זייט',
 'mainpage-description' => 'הויפט זייט',
 'policy-url' => 'Project:פאליסי',
-'portal' => 'קאַווע שטיבל',
-'portal-url' => 'Project:קאַווע שטיבל',
+'portal' => 'קאַווע־שטיבל',
+'portal-url' => 'Project:קאַווע־שטיבל',
 'privacy' => 'פּריוואַטקייט פּאליסי',
 'privacypage' => 'Project:פּריוואַטקייט פאליסי',
 
@@ -791,9 +791,9 @@ $2
 'minoredit' => 'דאס איז א מינערדיגע ענדערונג',
 'watchthis' => 'טוט אױפֿפּאַסן דעם בלאט',
 'savearticle' => 'אױפֿהיטן בלאַט',
-'preview' => 'פאראויסדיגע ווייזונג',
-'showpreview' => 'פֿ×\90ָרױס×\93×\99×\92×¢ ×°×²Ö·×\96×\95× ×\92',
-'showlivepreview' => '×\9c×¢×\91×¢×\93×\99×\92×¢ ×¤×\90ר×\90×\95×\99ס×\93×\99×\92×¢ ×\95×\95×\99×\99×\96×\95× ×\92',
+'preview' => 'פֿאראויסקוק',
+'showpreview' => '×\95×\95ײַ×\96×\9f ×¤Ö¿×\90ָרױסק×\95ק',
+'showlivepreview' => '×\96×\90פֿ×\90ר×\98×\99×\92ער ×¤×\90ר×\90×\95×\99סק×\95ק',
 'showdiff' => 'ווײַז די ענדערונגען',
 'anoneditwarning' => "'''ווארענונג:''' איר זענט נישט אריינלאגירט אין אייער קאנטע. אייער איי פי אדרעס וועט ווערן דאקומענטירט אין דעם בלאטס היסטאריע פון ענדערונגען. אויב זארגט איר זיך פאר פריוואטקייטן, ביטע טוט זיך אריינלאגירן.",
 'anonpreviewwarning' => "''איר זענט נישט אַרײַנלאגירט. אויפֿהיטן וועט ארײַנשרײַבן אײַער IP אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''",
@@ -939,7 +939,7 @@ $2
 'titleprotectedwarning' => "'''אזהרה: דער בלאט איז פֿארשפאַרט טא דארף מען [[Special:ListGroupRights|ספעציפֿישע רעכטן]] צו שאפֿן אים.'''
 די פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
 'templatesused' => '{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אויף דעם בלאט:',
-'templatesusedpreview' => '{{PLURAL:$1|×\9e×\95ס×\98ער| ×\9e×\95ס×\98ער×\9f}}  ×\91×\90Ö·× ×\99צ×\98  ×\90×\99×\9f ×\93×¢×\9d ×¤Ö¿×\90ָר×\90ױס×\93×\99ק×\9f ×\90ױסק×\95ק:',
+'templatesusedpreview' => '{{PLURAL:$1|מוסטער| מוסטערן}}  באַניצט  אין דעם פֿאָראױסקוק:',
 'templatesusedsection' => '{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אין דעם אפטיילונג:',
 'template-protected' => '(באשיצט)',
 'template-semiprotected' => '(טיילווייז באשיצט)',
@@ -1478,15 +1478,13 @@ $1",
 'right-sendemail' => 'שיקן ע-פאסט צו אנדערע באניצער',
 'right-passwordreset' => 'באַקוקן פאַסווארט צוריקשטעלן ע־בריוו',
 
+# Special:Log/newusers
+'newuserlogpage' => 'נייע באַניצערס לאָג-בוך',
+'newuserlogpagetext' => 'דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.',
+
 # User rights log
 'rightslog' => 'באַניצער רעכטן לאג',
 'rightslogtext' => 'דאָס איז אַ לאג פֿון ענדערונגען צו באַניצער רעכטן.',
-'rightslogentry' => 'געביטן די מיטגלידערשאַפֿט פֿאַר $1 פֿון $2 אויף $3',
-'rightslogentry-autopromote' => 'אויטאמאטיש פראמאווירט פון $2 צו $3',
-'logentry-rights-rights' => '$1 האט געביטן גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5',
-'logentry-rights-rights-legacy' => '$1 האט געביטן גרופע מיטגלידערשאפט פאר $3',
-'logentry-rights-autopromote' => '$1 אויטאמאטיש פראמאווירט פון $4 צו $5',
-'rightsnone' => '(גארנישט)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ליינען דעם בלאַט',
@@ -1709,6 +1707,7 @@ $1",
 'backend-fail-notexists' => 'נישט פֿאראן די טעקע $1.',
 'backend-fail-invalidpath' => '$1 איז נישט קיין גילטיקער שפייכלערן שטעג.',
 'backend-fail-delete' => 'קען נישט אויסמעקן טעקע $1.',
+'backend-fail-describe' => 'קען נישט ענדערן מעטאדאטן פאר דער טעקע "$1".',
 'backend-fail-alreadyexists' => 'די טעקע $1 עקזיסטירט שוין.',
 'backend-fail-store' => "מ'קען נישט שפייכלערן טעקע $1 בײַ $2.",
 'backend-fail-copy' => 'האט נישט געקענט קאפירן "$1" צו "$2".',
@@ -2065,10 +2064,6 @@ $1",
 'activeusers-hidesysops' => 'באַהאַלטן סיסאפן',
 'activeusers-noresult' => 'קיין באניצער נישט געטראפֿן.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'נייע באַניצערס לאָג-בוך',
-'newuserlogpagetext' => 'דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'באַניצער גרופע רעכטן',
 'listgrouprights-summary' => "פֿאלגנד איז א רשימה פֿון באַניצער גרופעס דעפֿינירט אויף דער דאָזיקער וויקי, מיט זײַערע אַסאציאירטע צוטריט רעכטן.
@@ -2135,9 +2130,9 @@ $1",
 'watchnologin' => 'איר זענט נישט אַרײַנלאגירט',
 'watchnologintext' => 'איר דארפֿט זיין [[Special:UserLogin|אריינגלאגירט]] צו מאדיפֿיצירן אייער אויפפַּאסונג־ליסטע.',
 'addwatch' => 'צולייגן צו דער אויפֿפאַסונג ליסטע',
-'addedwatchtext' => "דער בלאט \"[[:\$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
+'addedwatchtext' => 'דער בלאט "[[:$1]]" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
 
\95×\95×\99×\99×\98ערע ×¢× ×\93ער×\95× ×\92×¢×\9f ×¦×\95 ×\93×¢×\9d ×\91×\9c×\90Ö·×\98 ×\90×\95×\9f ×¦×\95 ×\96ײַ×\9f ×¤×\90ר×\91×\99× ×\93×¢× ×¢×\9d ×¨×¢×\93×\9f ×\91×\9c×\90Ö·×\98 ×\95×\95×¢×\9c×\9f ×\96ײַ×\9f ×\90×\95×\99ס×\92ערע×\9b× ×\98 ×\93×\90ר×\98, ×\90×\95×\9f ×\93ער ×\91×\9c×\90×\98 ×\95×\95×¢×\98 ×\96×\99×\99×\9f '''×\93×\99ק''' ×\90×\99×\9f ×\93ער [[Special:RecentChanges|×\9c×\99ס×\98×¢ ×¤×\95×\9f ×\9cעצ×\98×¢ ×¢× ×\93ער×\95× ×\92×¢×\9f]] ×¦×\95 ×\92ר×\99× ×\92ער ×\9e×\90×\9b×\9f ×\93×\90ס ×\90×\95×\99פֿפ×\90ַס×\9f.",
\95×\95ײַ×\98ערע ×¢× ×\93ער×\95× ×\92×¢×\9f ×¦×\95 ×\93×¢×\9d ×\91×\9c×\90Ö·×\98 ×\90×\95×\9f ×¦×\95 ×\96ײַ×\9f ×¤×\90ר×\91×\99× ×\93×¢× ×¢×\9d ×¨×¢×\93×\9f ×\91×\9c×\90Ö·×\98 ×\95×\95×¢×\9c×\9f ×\96ײַ×\9f ×\90×\95×\99ס×\92ערע×\9b× ×\98 ×\93×\90ר×\98.',
 'removewatch' => 'אַראָפּנעמען פון דער אויפֿפאַסונג ליסטע',
 'removedwatchtext' => 'דער בלאַט "[[:$1]]" איז אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].',
 'watch' => 'אױפֿפּאַסן',
@@ -2206,6 +2201,8 @@ $UNWATCHURL
 
 פאר מער הילף:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'געשאַפֿן',
+'changed' => 'געטוישט',
 
 # Delete
 'deletepage' => 'מעק אויס בלאט',
@@ -2365,6 +2362,7 @@ $UNWATCHURL
 'undelete-search-prefix' => 'ווײַז בלעטער וואס הייבן אן מיט:',
 'undelete-search-submit' => 'זוכן',
 'undelete-no-results' => 'נישט געטראפן קיין צוגעפאסטע בלעטער אין אויסמעקונג ארכיוו.',
+'undelete-cleanup-error' => 'גרײַז בײַם אויסמעקן נישט געניצטע ארכיוו טעקע "$1".',
 'undelete-error' => 'גרייז ביים צוריקשטעלן בלאט',
 'undelete-error-short' => 'טעות ביים צוריקשטעלן טעקע: $1',
 'undelete-error-long' => 'גרײַזן געטראפֿן בײַם ווידערשטעלן די טעקע:
@@ -2619,7 +2617,7 @@ $1',
 'cant-move-to-user-page' => 'איר זענט נישט דערלויבט צו באַוועגן א בלאַט צו א באַניצער בלאַט (אַחוץ צו א באַניצער אונטערבלאַט).',
 'newtitle' => 'צו נייעם קעפל:',
 'move-watch' => 'אויפֿפאַסן אויף דעם בלאַט',
-'movepagebtn' => 'באוועגן',
+'movepagebtn' => 'באַוועגן בלאַט',
 'pagemovedsub' => 'באַוועגט מיט הצלחה',
 'movepage-moved' => 'דער בלאט "$1" איז אריבערגעפֿירט געווארן צו "$2".',
 'movepage-moved-redirect' => 'ווײַטערפֿירונג  געשאַפֿן.',
@@ -2854,7 +2852,7 @@ $1',
 'tooltip-recreate' => 'ווידערשאַפֿן דעם בלאַט כאטש ער איז אַמאל אויסגעמעקט',
 'tooltip-upload' => 'הייב אן אויפלאדן',
 'tooltip-rollback' => '"צוריקדרייען" דרײט צוריק רעדאַקטירונג(ען) צו דעם בלאַט פֿונעם לעצטן בײַשטײַערער מיט אײן קװעטש',
-'tooltip-undo' => 'עפֿנ×\98 ×\93×¢×\9d ×¨×¢×\93×\90Ö·×\92×\99ר־פֿענס×\98ער ×\90×\99×\9f ×\90Ö· ×¤Ö¿×\90ָרױס×\93×\99ק×\9f ×\90ױסק×\95ק ×\9bÖ¼×\93×\99 ×¦×\95ר×\99ק×\93רײע×\9f ×\93×\99 ×¨×¢×\93×\90ַקצ×\99×¢. ×¢×¡ ×\90×\99×\96 ×\9e×¢×\92×\9c×¢×\9a ×¦×\95צ×\95×\9cײ×\92×\9f ×\90Ö· ×¡×\99×\91×\94 ×\93ערװע×\92×\9f ×\90×\99×\9f ×\93×¢×\9d "ק×\95רץ ×°×\90ָר×\98" ×§×¢×¡×\98×\9c.',
+'tooltip-undo' => 'עפֿנט דעם רעדאַגיר־פֿענסטער אין אַ פֿאָראױסקוק כּדי צוריקדרײען די רעדאַקציע. עס איז מעגלעך צוצולײגן אַ סיבה דערװעגן אין דעם "קורץ װאָרט" קעסטל.',
 'tooltip-preferences-save' => 'היטן פרעפֿערענצן',
 'tooltip-summary' => 'אײַנגעבן א קורצע רעזומע',
 
@@ -2931,6 +2929,10 @@ $1',
 'pageinfo-contentpage' => 'געציילט ווי אן אינהאלט בלאט',
 'pageinfo-contentpage-yes' => 'יאָ',
 'pageinfo-protect-cascading-yes' => 'יאָ',
+'pageinfo-category-info' => 'קאטעגאריע אינפארמאציע',
+'pageinfo-category-pages' => 'צאָל בלעטער',
+'pageinfo-category-subcats' => 'צאָל אונטערקאטעגאריעס',
+'pageinfo-category-files' => 'צאָל טעקעס',
 
 # Skin names
 'skinname-standard' => 'קלאסיש',
@@ -3019,6 +3021,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 מינוט|$1 מינוט}}',
 'hours' => '{{PLURAL:$1|$1 שעה|$1 שעה}}',
 'days' => '{{PLURAL:$1|$1 טאג|$1 טעג}}',
+'months' => '{{PLURAL:$1|איין מאנאַט|$1 מאנאַטן}}',
+'years' => '{{PLURAL:$1|איין יאָר|$1 יאָר}}',
 'ago' => 'פֿאַר $1',
 'just-now' => 'גראדע יעצט',
 
@@ -3139,6 +3143,7 @@ $1',
 'exif-gpsdop' => 'מאס פוקנטליכקייט',
 'exif-gpsspeedref' => 'גיך איינהייט',
 'exif-gpsspeed' => 'גיך פון GPS־אויפֿנעמער',
+'exif-gpstrack' => 'באוועגונג ריכטונג',
 'exif-gpsimgdirectionref' => 'רעפערענץ פאר ריכטונג פון בילד',
 'exif-gpsimgdirection' => 'ריכטונג פון בילד',
 'exif-gpsdestlatituderef' => 'רעפֿערענץ פֿאַר ברייט־ליניע פון ציל',
@@ -3174,6 +3179,7 @@ $1',
 'exif-urgency' => 'דרינגלעכקייט',
 'exif-locationdest' => 'געוויזענע לאקאציע',
 'exif-locationdestcode' => 'קאד פֿון געוויזענער לאקאציע',
+'exif-contact' => 'קאנטאקט אינפארמאציע',
 'exif-writer' => 'שרײַבער',
 'exif-languagecode' => 'שפראַך',
 'exif-iimversion' => 'IIM ווערסיע',
@@ -3477,6 +3483,10 @@ $5
 # Live preview
 'livepreview-loading' => 'לאדנדיג…',
 'livepreview-ready' => 'לאדנדיג… גרייט!',
+'livepreview-failed' => 'גיכער פֿאראויסקוק דורכגעפֿאלן.
+פרובירט נארמאלן פֿאראויסקוק.',
+'livepreview-error' => 'פֿארבינדונג נישט מעגלעך: $1 "$2".
+פרובירט נארמאלן פֿאראויסקוק.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'אײַער אויפֿפאַסונג ליסטע אַנטהאַלט {{PLURAL:$1|1 טיטל|$1 טיטלען}}, אויסשליסנדיק שמועסבלעטער.',
@@ -3626,7 +3636,7 @@ $5
 'tag-filter' => '[[Special:Tags|מאַרקירונג]] פֿילטער:',
 'tag-filter-submit' => 'פֿילטער',
 'tags-title' => 'טאַגן',
-'tags-intro' => 'דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַן רעדאַגירונג, און זייער באַטייַט.',
+'tags-intro' => 'דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַ רעדאַגירונג, און זייער באַטייַט.',
 'tags-tag' => 'טאַג נאָמען',
 'tags-display-header' => 'אויסזען אין ענדערונג רשימות',
 'tags-description-header' => 'פֿולי באַשרייַבונג פון באַטײַט',
@@ -3702,6 +3712,10 @@ $5
 'logentry-newusers-create2' => 'באניצער קאנטע $1 געשאפן געווארן דורך $3',
 'logentry-newusers-autocreate' => 'קאנטע $1 באשאפן אויטאמאטיש',
 'newuserlog-byemail' => 'פאַסווארט געשיקט דורך ע-פאסט',
+'logentry-rights-rights' => '$1 האט געביטן גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5',
+'logentry-rights-rights-legacy' => '$1 האט געביטן גרופע מיטגלידערשאפט פאר $3',
+'logentry-rights-autopromote' => '$1 אויטאמאטיש פראמאווירט פון $4 צו $5',
+'rightsnone' => '(גארנישט)',
 
 # Feedback
 'feedback-bugornote' => 'ווען איר זענט גרייט צו באשרייבן א טעכנישן פראבלעם ביטע [$1 מעלדט א פעלער].
index 0cc76da..444d03e 100644 (file)
@@ -1371,15 +1371,13 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'right-sendemail' => 'Fi e-mail ránṣẹ́ sí àwọn oníṣe míràn',
 'right-passwordreset' => 'Ìwo àwọn e-mail fún ìtúntò ọ̀rọ̀ìpamọ́',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Àkọsílẹ̀ ìdá oníṣe',
+'newuserlogpagetext' => 'Àkọọ́lẹ̀ àwọn ìdá oníṣe nì yí.',
+
 # User rights log
 'rightslog' => 'Àwọn ẹ̀tọ́ oníṣe',
 'rightslogtext' => 'Èyì ni àkọọ́lẹ̀ kan àwọn àtúnṣe sí àwọn ẹ̀tọ́ oníṣe.',
-'rightslogentry' => 'yí ẹgbẹ́ tí $1 wà kúrò láti $2 sí $3',
-'rightslogentry-autopromote' => 'jẹ́ gbígbéga láláraẹni láti $2 sí $3',
-'logentry-rights-rights' => '$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3 láti $4 sí $5',
-'logentry-rights-rights-legacy' => '$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3',
-'logentry-rights-autopromote' => '$1 jẹ́ gbígbéga nífúnraẹni láti $4 sí $5',
-'rightsnone' => '(kòsí)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'wo ojúewé yìí',
@@ -2027,10 +2025,6 @@ Orúkọ ibiàyè pọndandan, fún àpẹrẹ "*.org".<br />
 'activeusers-hidesysops' => 'Ìbòmọ́lẹ̀ àwọn olùmójútó',
 'activeusers-noresult' => 'Kò rí oníṣe kankan.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Àkọsílẹ̀ ìdá oníṣe',
-'newuserlogpagetext' => 'Àkọọ́lẹ̀ àwọn ìdá oníṣe nì yí.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Àwọn ẹ̀tọ́ ẹgbẹ́ oníṣe',
 'listgrouprights-summary' => 'Nísàlẹ̀ ni àtòjọ àwọn ẹgbẹ́ oníṣe tó nítumọ̀ lórí wiki yìí, pẹ̀lú àwọn ẹ̀tọ́ lílò wọn.
@@ -2166,6 +2160,8 @@ $UNWATCHURL
 
 Fún ìrànwọ́ àti ìbérè:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dídá',
+'changed' => 'títúnṣẹ',
 
 # Delete
 'deletepage' => 'Ìparẹ́ ojúewé',
@@ -3561,6 +3557,10 @@ Ibiìtakùn yìí únkojú ìsòro ìṣìṣẹ́ẹ̀rọ.',
 'logentry-newusers-create2' => 'Àpamọ́ oníṣe $3 jẹ́ dídá látọwọ́ $1',
 'logentry-newusers-autocreate' => 'Àkópamọ́ $1 jẹ́ dídá fúnrarẹ̀',
 'newuserlog-byemail' => 'ọ̀rọ̀ìpamọ́ jẹ́ fífiránṣẹ́ pẹ̀lú e-mail',
+'logentry-rights-rights' => '$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3 láti $4 sí $5',
+'logentry-rights-rights-legacy' => '$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3',
+'logentry-rights-autopromote' => '$1 jẹ́ gbígbéga nífúnraẹni láti $4 sí $5',
+'rightsnone' => '(kòsí)',
 
 # Feedback
 'feedback-bugornote' => 'Tí ẹ bá ti ṣetán láti ṣàlàyé ìsòrò iṣẹ́ẹ̀rọ́ lẹ́ẹ̀kúnrẹ́rẹ́ ẹ jọ̀wọ́ [$1 ẹ sọ irú ìsòro náà]
index 09e0737..181d94f 100644 (file)
@@ -1392,11 +1392,13 @@ $1",
 'right-override-export-depth' => '倒出包含有五層深連版嘅頁面',
 'right-sendemail' => '寄電郵畀其他用戶',
 
+# Special:Log/newusers
+'newuserlogpage' => '使用者開戶記錄',
+'newuserlogpagetext' => '呢個係一個使用者開戶嘅日誌',
+
 # User rights log
 'rightslog' => '用戶權限日誌',
 'rightslogtext' => '呢個係用戶權力嘅修改日誌。',
-'rightslogentry' => '已經將$1嘅組別從$2改到去$3',
-'rightsnone' => '(無)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '讀呢版',
@@ -1946,10 +1948,6 @@ Template:搞清楚',
 'activeusers-hidesysops' => '隱藏管理員',
 'activeusers-noresult' => '搵唔到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '使用者開戶記錄',
-'newuserlogpagetext' => '呢個係一個使用者開戶嘅日誌',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶組權限',
 'listgrouprights-summary' => '下面係一個響呢個wiki定義咗嘅用戶權限一覽,同埋佢哋嘅存取權。
@@ -2062,6 +2060,8 @@ wiki: $PAGEEDITOR_WIKI
 
 回饋及更多幫助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建立過',
+'changed' => '修改過',
 
 # Delete
 'deletepage' => '刪除頁面',
@@ -3363,6 +3363,7 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 'revdelete-restricted' => '已經應用限制到操作員',
 'revdelete-unrestricted' => '已經拎走對於操作員嘅限制',
 'newuserlog-byemail' => '密碼已由電郵寄出',
+'rightsnone' => '(無)',
 
 # Search suggestions
 'searchsuggest-search' => '搵嘢',
index dcef6df..78f4279 100644 (file)
@@ -942,11 +942,12 @@ Een nie anekruusd vienkvakje beteêken da de gebruker hin lid is van de hroep.",
 'grouppage-bureaucrat' => "{{ns:project}}:Bureaucraot'n",
 'grouppage-suppress' => '{{ns:project}}:Toezicht',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek nuwe gebrukers',
+
 # User rights log
 'rightslog' => 'Gebrukersrechtenlogboek',
 'rightslogtext' => 'Ieronder staen de wiezigiengen in gebrukersrechen.',
-'rightslogentry' => 'wiezihen de gebrukersrechen voe $1 van $2 ni $3',
-'rightsnone' => '(hin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'deêze bladzie te bewerken',
@@ -1115,9 +1116,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-line' => "$1 ei 'n verwiezienge in $2",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek nuwe gebrukers',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ledenlieste)',
 
@@ -1399,5 +1397,6 @@ Aorre veld'n worr'n verborr'n.
 # New logging system
 'revdelete-restricted' => 'ei beperkiengen an beheêrders opeleid',
 'revdelete-unrestricted' => 'ei beperkiengen voe beheêrders opeheven',
+'rightsnone' => '(hin)',
 
 );
diff --git a/languages/messages/MessagesZh_classical.php b/languages/messages/MessagesZh_classical.php
deleted file mode 100644 (file)
index a58df39..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-/** Classical Chinese (文言)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-# Inherit everything for now
-$fallback = 'lzh';
index 765eaaa..6157330 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author A911504820
  * @author Alebcay
  * @author Anakmalaysia
  * @author Arlin
@@ -16,6 +17,7 @@
  * @author Chenxiaoqino
  * @author Chenzw
  * @author Chinalace
+ * @author Cicku
  * @author Dimension
  * @author Dingyuang
  * @author Fantasticfears
@@ -366,7 +368,7 @@ $messages = array(
 'tog-minordefault' => '默认标记编辑为小编辑',
 'tog-previewontop' => '在编辑框上方显示预览',
 'tog-previewonfirst' => '首次编辑时显示预览',
-'tog-nocache' => '用浏览器页面缓存',
+'tog-nocache' => '用浏览器页面缓存',
 'tog-enotifwatchlistpages' => '当我的监视列表中的页面或文件更改时发送电子邮件通知我',
 'tog-enotifusertalkpages' => '当我的讨论页更改时发送电子邮件通知我',
 'tog-enotifminoredits' => '当页面和文件有小编辑时发送电子邮件通知我',
@@ -377,7 +379,7 @@ $messages = array(
 'tog-externaleditor' => '默认使用外部编辑器(供高级用户使用,需要在您的计算机上作出一些特别设置。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-externaldiff' => '默认使用外部差异分析(供高级用户使用,需要在您的计算机上作出一些特别设置。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-showjumplinks' => '启用“跳转到”访问链接',
-'tog-uselivepreview' => '使用实时预览(需要Javascript)(试验中)',
+'tog-uselivepreview' => '使用实时预览(需要 Javascript 支持)(实验功能)',
 'tog-forceeditsummary' => '未输入编辑摘要时提醒我',
 'tog-watchlisthideown' => '在监视列表中隐藏我的编辑',
 'tog-watchlisthidebots' => '在监视列表中隐藏机器人的编辑',
@@ -386,7 +388,7 @@ $messages = array(
 'tog-watchlisthideanons' => '在监视列表中隐藏匿名用户',
 'tog-watchlisthidepatrolled' => '在监视列表中隐藏已巡查的编辑',
 'tog-ccmeonemails' => '把我给其他用户发送的电子邮件的副本发送给我',
-'tog-diffonly' => '比较差异时不显示页面内容',
+'tog-diffonly' => '对比差异时不显示页面内容',
 'tog-showhiddencats' => '显示隐藏分类',
 'tog-noconvertlink' => '停用链接文字转换',
 'tog-norollbackdiff' => '执行回退后不显示差异',
@@ -478,6 +480,7 @@ $messages = array(
 'newwindow' => '(将于新窗口中打开)',
 'cancel' => '取消',
 'moredotdotdot' => '更多',
+'morenotlisted' => '更多未被列出...',
 'mypage' => '页面',
 'mytalk' => '讨论',
 'anontalk' => '该IP地址的讨论',
@@ -597,7 +600,7 @@ $1',
 'privacypage' => 'Project:隐私权政策',
 
 'badaccess' => '权限错误',
-'badaccess-group0' => '你被禁止执行你刚才请求的操作。',
+'badaccess-group0' => '您被禁止执行您刚才请求的操作。',
 'badaccess-groups' => '您刚才请求的操作只有{{PLURAL:$2|这个用户组|以下用户组}}中的用户才能使用: $1',
 
 'versionrequired' => '需要版本为$1的MediaWiki',
@@ -606,14 +609,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' => '查看源代码',
@@ -653,7 +656,7 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => '这个命令不存在',
-'nosuchactiontext' => 'URL指定的命令无效。你可能误输入了URL地址,或者点击了错误的链接。这一错误亦有可能是由{{SITENAME}}所使用软件自身的错误导致的。',
+'nosuchactiontext' => 'URL 指定的命令无效。您可能误输入了 URL 地址,或者点击了错误的链接。这一错误也有可能是由{{SITENAME}}所使用软件自身的错误导致的。',
 'nosuchspecialpage' => '此特殊页面不存在',
 'nospecialpagetext' => '<strong>您请求的特殊页面无效。</strong>
 
@@ -737,8 +740,8 @@ $2',
 执行锁定的管理员给出如下解释:$3。',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
-'exception-nologin' => '未登陆',
-'exception-nologin-text' => '此动作需要先登陆到此 wiki',
+'exception-nologin' => '尚未登录',
+'exception-nologin-text' => '此操作需要您先登录。',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -750,19 +753,19 @@ $2',
 
 您可以继续以匿名方式使用{{SITENAME}},或再次以相同或不同用户身份<span class='plainlinks'>[$1 登录]</span>。请注意一些页面可能仍然显示您为登录状态,直到您清空您的浏览器缓存为止。",
 'welcomeuser' => '欢迎,$1!',
-'welcomecreation-msg' => '你的账户已创建。
-请别忘记更改你的[[Special:Preferences|{{SITENAME}}参数设置]]。',
+'welcomecreation-msg' => '您的帐户已创建。
+请不要忘记更改您的[[Special:Preferences|{{SITENAME}}个人设置]]。',
 'yourname' => '用户名:',
 'yourpassword' => '密码:',
 'yourpasswordagain' => '再次输入密码:',
-'remembermypassword' => '在此浏览器上保留我的登录信息(最长$1{{PLURAL:$1|日|日}})',
-'securelogin-stick-https' => '登后继续使用 HTTPS 连接',
+'remembermypassword' => '自动登录(最长$1{{PLURAL:$1|天|天}})',
+'securelogin-stick-https' => '登后继续使用 HTTPS 连接',
 'yourdomainname' => '您的域名:',
-'password-change-forbidden' => '您不能更改此wiki上的密码。',
+'password-change-forbidden' => '您不能在此 wiki 上修改密码。',
 'externaldberror' => '这可能是由于验证数据库错误或您被禁止更新您的外部账号。',
 'login' => '登录',
 'nav-login-createaccount' => '登录/创建账户',
-'loginprompt' => '你必须启用Cookies才能登录{{SITENAME}}。',
+'loginprompt' => '您必须启用 Cookies 才能登录{{SITENAME}}。',
 'userlogin' => '登录/创建账户',
 'userloginnocreate' => '登录',
 'logout' => '退出',
@@ -773,25 +776,25 @@ $2',
 'createaccount' => '创建账户',
 'gotaccount' => '已经拥有账户?请$1。',
 'gotaccountlink' => '登录',
-'userlogin-resetlink' => '忘记了的登录信息?',
+'userlogin-resetlink' => '忘记了的登录信息?',
 'createaccountmail' => '通过电子邮件',
 'createaccountreason' => '原因:',
 'badretype' => '您所输入的密码并不相同。',
 'userexists' => '用户名已存在,请使用其他名称。',
 'loginerror' => '登录错误',
 'createaccounterror' => '无法建立账户:$1',
-'nocookiesnew' => '已成功创建新账户!侦测到您已关闭Cookies,请开启它并登录。',
-'nocookieslogin' => '本站å\88©ç\94¨Cookiesè¿\9bè¡\8cç\94¨æ\88·ç\99»å½\95ï¼\8c侦æµ\8bå\88°æ\82¨å·²å\85³é\97­Cookiesï¼\8c请å¼\80å\90¯å®\83并é\87\8dæ\96°ç\99»å½\95ã\80\82',
-'nocookiesfornew' => 'è¿\99ä½\8dç\94¨æ\88·ç\9a\84è´¦æ\88·æ\9cªå»ºç«\8bï¼\8c我们不能确认它的来源。
-请è\82¯å®\9aæ\82¨å·²ç»\8få¼\80å\90¯ cookiesï¼\8cé\87\8dè½½å\90\8eå\86\8dè¯\95ã\80\82',
-'noname' => '没有输入有效的用户名。',
+'nocookiesnew' => '已成功创建新账户!检测到您已禁用 Cookies,请先启用然后登录。',
+'nocookieslogin' => '本站使ç\94¨ Cookies è¿\9bè¡\8cç\99»å½\95ï¼\8cæ£\80æµ\8bå\88°æ\82¨å·²ç¦\81ç\94¨ Cookiesï¼\8c请å\85\88å\90¯ç\94¨ç\84¶å\90\8eé\87\8dè¯\95ã\80\82',
+'nocookiesfornew' => '该ç\94¨æ\88·è´¦æ\88·å°\9aæ\9cªå\88\9b建ï¼\8cå\9b ä¸º我们不能确认它的来源。
+请ç¡®ä¿\9dæ\82¨å·²ç»\8få\90¯ç\94¨ Cookiesï¼\8cå\88·æ\96°æ\9c¬é¡µå\90\8eé\87\8dè¯\95ã\80\82',
+'noname' => '没有输入有效的用户名。',
 'loginsuccesstitle' => '登录成功',
 'loginsuccess' => "'''“$1”,欢迎登录{{SITENAME}}。'''",
-'nosuchuser' => '找不到用户“$1”。用户名是大小写敏感且区分繁简体的。请检查您的拼写,或者[[Special:UserLogin/signup|建立一个新账户]]。',
-'nosuchusershort' => '没æ\9c\89å\90\8d为â\80\9c$1â\80\9dç\9a\84ç\94¨æ\88·ã\80\82请æ£\80æ\9f¥æ\82¨è¾\93å\85¥ç\9a\84æ\96\87å­\97是否有错误。',
-'nouserspecified' => '需要指定一个用户名。',
+'nosuchuser' => '找不到用户“$1”。用户名对大小写和繁简体是区分的。请检查您的拼写是否有错误,或者[[Special:UserLogin/signup|注册]]。',
+'nosuchusershort' => 'æ\89¾ä¸\8då\88°ç\94¨æ\88·â\80\9c$1â\80\9dã\80\82请æ£\80æ\9f¥æ\82¨ç\9a\84æ\8b¼å\86\99是否有错误。',
+'nouserspecified' => '需要指定一个用户名。',
 'login-userblocked' => '该用户已被封禁,禁止登录。',
-'wrongpassword' => '您输入的密码错误,请再试一次。',
+'wrongpassword' => '密码错误,请重试。',
 'wrongpasswordempty' => '您没有输入密码,请重试!',
 'passwordtooshort' => '您的密码至少需要$1个字符。',
 'password-name-match' => '您的密码必须和您的用户名不相同。',
@@ -809,13 +812,13 @@ $2',
 'noemailcreate' => '您需要提供一个有效的电子邮件地址',
 'passwordsent' => '用户"$1"的新密码已经寄往所登记的电子邮件地址。
 请在收到后再登录。',
-'blocked-mailpassword' => '您的IP地址已被禁止编辑,同时为了防止密码恢复功能被滥用,亦已禁用该功能。',
+'blocked-mailpassword' => '您的 IP 地址已被禁止编辑,同时为了防止密码恢复功能被滥用,已禁用该功能。',
 'eauthentsent' => '一封确认信已经发送到推荐的地址。在发送其它邮件到此账户前,您必须首先依照这封信中的指导确认这个电子邮箱真实有效。',
 'throttled-mailpassword' => '密码提醒已在最近$1小时内发送。为了安全起见,在每$1小时内只能发送一个密码提醒。',
 'mailerror' => '发送邮件错误:$1',
-'acct_creation_throttle_hit' => '抱歉!您已经创建了$1个账号。你不能再创建了。',
+'acct_creation_throttle_hit' => '抱歉!您已经创建了$1个账号,已经达到最大允许注册数量。目前使用本 IP 的来访者将不能再创建任何账户。',
 'emailauthenticated' => '您的电子邮箱地址已经于$2 $3确认有效。',
-'emailnotauthenticated' => '您的邮箱地址<strong>还没被认证</strong>。以下功能将不会发送任何邮件。',
+'emailnotauthenticated' => '您的邮箱地址<strong>尚未被认证</strong>。下列功能将不会发送任何邮件。',
 'noemailprefs' => '指定一个电子邮箱地址以使用此功能。',
 'emailconfirmlink' => '确认您的邮箱地址',
 'invalidemailaddress' => '邮箱地址格式不正确,请输入正确的邮箱地址或清空该输入框。',
@@ -828,15 +831,16 @@ $2',
 
 如果该账户创建错误的话,您可以忽略此信息。',
 'usernamehasherror' => '用户名中不可包含哈希(hash)字符',
-'login-throttled' => '您已经尝试多次的登录动作
-请稍ç­\89å¤\9aä¸\80ä¼\9aå\86\8dè¯\95ã\80\82',
-'login-abort-generic' => 'ç\99»å\85¥å¤±è´¥ - æ\94¾å¼\83',
+'login-throttled' => '您最近已经尝试多次登录
+请稍å\90\8eé\87\8dè¯\95ã\80\82',
+'login-abort-generic' => 'ç\99»å½\95失败 - å·²ç»\88æ­¢',
 'loginlanguagelabel' => '语言:$1',
-'suspicious-userlogout' => '登出要求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。',
+'suspicious-userlogout' => '注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。',
 
 # E-mail sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 函数中的未知错误',
 'user-mail-no-addy' => '尝试发送邮件而不附带电子邮件地址。',
+'user-mail-no-body' => '试图发送空的或者主体短得不合理的电子邮件。',
 
 # Change password dialog
 'resetpass' => '更改密码',
@@ -857,7 +861,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => '重置密码',
-'passwordreset-text' => '完成此表格以接收一个电邮以提示你的帐户详情。',
+'passwordreset-text' => '完成此表格以接收一封包含您的帐户详情的提醒邮件。',
 'passwordreset-legend' => '重置密码',
 'passwordreset-disabled' => '此wiki已经禁用密码重置。',
 'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据块之一}}',
@@ -867,16 +871,16 @@ $2',
 'passwordreset-capture-help' => '如果您选中此框,电子邮件(包括临时密码)将显示,并发送给用户。',
 'passwordreset-email' => '电子邮件地址:',
 'passwordreset-emailtitle' => '在 {{SITENAME}} 的帐户详细信息',
-'passwordreset-emailtext-ip' => '有人通过IP地址 $1 (也许是你)要求获取 {{SITENAME}} ($4)上相关账户的密码提示。{{PLURAL:$3|以下账户|此账户}}与该email地址关联:
+'passwordreset-emailtext-ip' => '有人通过IP地址 $1 (可能是您)请求获取 {{SITENAME}} ($4)上相关账户的密码提示。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:
 
 $2
 
-{{PLURAL:$3|è¿\99个|è¿\99äº\9b}}临æ\97¶å¯\86ç \81ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\86\85è¿\87æ\9c\9fã\80\82请ç\8e°å\9c¨ç\99»å\85¥å¹¶è®¾ç½®æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人æ\8f\90å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨è®°èµ·ä½ ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥æ\97 è§\86æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨æ\97§æ\9c\89密码。',
-'passwordreset-emailtext-user' => 'ç\94¨æ\88· $1 è¦\81æ±\82è\8e·å\8f\96 {{SITENAME}} ($4)ä¸\8aä½ ç\9a\84è´¦æ\88·ç\9a\84å¯\86ç \81æ\8f\90示ã\80\82{{PLURAL:$3|以ä¸\8bè´¦æ\88·|此账æ\88·}}ä¸\8e该email地址关联:
+{{PLURAL:$3|è¿\99个|è¿\99个}}临æ\97¶å¯\86ç \81å°\86ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\90\8eè¿\87æ\9c\9fã\80\82请ç«\8bå\8d³ç\99»å½\95并设置æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人å\8f\91å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨å·²å\9b\9eå¿\86èµ·æ\82¨ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥å¿½ç\95¥æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨å\8e\9f密码。',
+'passwordreset-emailtext-user' => 'ç\94¨æ\88· $1 è¯·æ±\82è\8e·å\8f\96 {{SITENAME}} ($4)ä¸\8aæ\82¨ç\9a\84è´¦æ\88·ç\9a\84å¯\86ç \81æ\8f\90示ã\80\82{{PLURAL:$3|以ä¸\8bè´¦æ\88·|此账æ\88·}}ä¸\8e该ç\94µå­\90é\82®ä»¶地址关联:
 
 $2
 
-{{PLURAL:$3|è¿\99个|è¿\99äº\9b}}临æ\97¶å¯\86ç \81ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\86\85è¿\87æ\9c\9fã\80\82请ç\8e°å\9c¨ç\99»å\85¥å¹¶è®¾ç½®æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人æ\8f\90å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨è®°èµ·ä½ ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥æ\97 è§\86æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨æ\97§æ\9c\89密码。',
+{{PLURAL:$3|è¿\99个|è¿\99个}}临æ\97¶å¯\86ç \81å°\86ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\90\8eè¿\87æ\9c\9fã\80\82请ç«\8bå\8d³ç\99»å½\95并设置æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人å\8f\91å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨å·²å\9b\9eå¿\86èµ·æ\82¨ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥å¿½ç\95¥æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨å\8e\9f密码。',
 'passwordreset-emailelement' => '用户名:$1
 临时密码:$2',
 'passwordreset-emailsent' => '已发送提醒电子邮件。',
@@ -909,7 +913,9 @@ $2
 'headline_tip' => '2级标题文字',
 'nowiki_sample' => '在此插入非格式文本',
 'nowiki_tip' => '插入非格式文本',
+'image_sample' => '示例.jpg',
 'image_tip' => '插入文件',
+'media_sample' => '示例.ogg',
 'media_tip' => '文件链接',
 'sig_tip' => '带时间戳的签名',
 'hr_tip' => '水平线(请小心使用)',
@@ -927,33 +933,33 @@ $2
 'anoneditwarning' => "'''警告:'''您没有登录。
 您的IP地址将记录在此页的编辑历史中。",
 'anonpreviewwarning' => "''您没有登录。保存页面将会把您的IP地址记录在此页的编辑历史中。''",
-'missingsummary' => "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
+'missingsummary' => "'''提示:'''您没有提供编辑摘要。如果您再次点击“{{int:savearticle}}”,您的编辑将不带编辑摘要保存。",
 'missingcommenttext' => '请在下面输入评论。',
-'missingcommentheader' => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击“{{int:savearticle}}”,您的编辑将不带标题保存。",
+'missingcommentheader' => "'''提示:''' 您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。",
 'summary-preview' => '摘要预览:',
 'subject-preview' => '标题预览:',
 'blockedtitle' => '用户被封禁',
-'blockedtext' => "'''您的用户名或IP地址已被封禁。'''
+'blockedtext' => "'''您的用户名或 IP 地址已被封禁。'''
 
­¤次封禁操作由$1完成,封禁原因为''$2''。
\9c¬次封禁操作由$1完成,封禁原因为''$2''。
 
-* 始时间:$8
-* ç»\88æ­¢时间:$6
+* 始时间:$8
+* ç»\93æ\9d\9f时间:$6
 * 拟封禁对象:$7
 
-您可以联系$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论此次封禁。若您已在[[Special:Preferences|帐号设置]]中配置了一个有效的电子邮件地址,且未被封禁电子邮件功能,则您可通过“发送电子邮件给这位用户”功能来联络相关管理员。您当前的IP地址是$3,此次封禁的ID为#$5。请在您的查询中注明上述所有信息。",
-'autoblockedtext' => "您的IP地址因与另一位已封禁用户相同而被自动封禁,该用户是由$1封禁的。封禁原因如下:
+您可以联系$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理员]]以申诉此次封禁。若您已在[[Special:Preferences|个人设置]]中设置了一个有效的电子邮件地址,且未被封禁电子邮件功能,则您可通过“发送邮件”功能来联系相关管理员。您当前的 IP 地址为$3,此次封禁的 ID 为#$5。请在您的查询中注明上述所有信息。",
+'autoblockedtext' => "您的 IP 地址因与另一位已封禁用户的相同而被自动封禁,该用户是由$1封禁的。封禁原因如下:
 
 :''$2''
 
-* 始时间:$8
-* ç»\88æ­¢时间:$6
+* 始时间:$8
+* ç»\93æ\9d\9f时间:$6
 * 拟封禁对象:$7
 
-您可以联系$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论此次封禁。若您已在[[Special:Preferences|帐号设置]]中配置了一个有效的电子邮件地址,且未被封禁电子邮件功能,则您可通过“发送电子邮件给这位用户”功能来联络相关管理员。您当前的IP地址是$3,此次封禁的ID为#$5。请在您的查询中注明上述所有信息。",
+您可以联系$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理员]]以申诉此次封禁。若您已在[[Special:Preferences|个人设置]]中设置了一个有效的电子邮件地址,且未被封禁电子邮件功能,则您可通过“发送邮件”功能来联系相关管理员。您当前的 IP 地址是$3,此次封禁的 ID 为#$5。请在您的查询中注明上述所有信息。",
 'blockednoreason' => '无给出原因',
 'whitelistedittext' => '您必须先$1才可编辑页面。',
-'confirmedittext' => '你必须确认你的电子邮件地址才能编辑本页。请通过[[Special:Preferences|用户资料设置]]设置并确认你的电子邮件地址。',
+'confirmedittext' => '您必须确认您的电子邮件地址才能编辑本页。请通过[[Special:Preferences|个人设置]]页面设置并确认。',
 'nosuchsectiontitle' => '没有这个段落',
 'nosuchsectiontext' => '您尝试编辑的章节并不存在。
 可能是在您查看页面时已经移动或删除。',
@@ -967,21 +973,21 @@ $2
 要创建该页面,请在下面的编辑框中输入内容(详情参见[[{{MediaWiki:Helppage}}|帮助页]])。
 如果您误入此页,请点击浏览器中的“返回”按钮。',
 'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
-'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索该页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
+'noarticletext' => '本页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索该页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页]。</span>',
 'noarticletext-nopermission' => '此页目前没有内容。
 您可以在其它页[[Special:Search/{{PAGENAME}}|搜寻此页标题]],或<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜寻有关日志]</span>,但您没有权限建立此页。',
 'missing-revision' => '“{{PAGENAME}}”的修订#$1不存在。
 
 这通常是因为进入了一个已被删除的页面的历史链接。
 详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。',
-'userpage-userdoesnotexist' => '用户账户"$1"未注册。
+'userpage-userdoesnotexist' => '用户账户"$1"未注册。
 请在创建/编辑该页之前进行核对。',
 'userpage-userdoesnotexist-view' => '用户账户“$1”未曾创建。',
 'blocked-notice-logextract' => '这位用户目前已被封禁。以下提供最近的封禁日志以供参考:',
-'clearyourcache' => "'''注意:'''保存之后,必须清除浏览器缓存才能看到做出的更改。
-* '''火狐(Firefox)/Safari:'''按住“Shift”,同时击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
+'clearyourcache' => "'''注意:'''保存之后,必须清除浏览器缓存才能看到做出的更改。
+* '''火狐(Firefox)/Safari:'''按住“Shift”,同时击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
 * '''谷歌浏览器(Google Chrome):'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
-* '''Internet Explorer:'''按住“Ctrl”,同时击“刷新”,或按“Ctrl-F5”
+* '''Internet Explorer:'''按住“Ctrl”,同时击“刷新”,或按“Ctrl-F5”
 * '''Opera:'''在“工具→首选项”中清除缓存",
 'usercssyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
 'userjsyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
@@ -989,41 +995,41 @@ $2
 '''还没有保存!'''",
 'userjspreview' => "'''记住您只是在测试/预览您的个人 JavaScript。'''
 '''还没有保存!'''",
-'sitecsspreview' => "'''记住现在只是预览此 CSS。'''
-'''还没有保存!'''",
-'sitejspreview' => "'''记住现在只是预览此 JavaScript 代码。'''
-'''还没有保存!'''",
+'sitecsspreview' => "'''记住现在只是预览此 CSS。'''
+'''尚未保存!'''",
+'sitejspreview' => "'''记住现在只是预览此 JavaScript 代码。'''
+'''尚未保存!'''",
 'userinvalidcssjstitle' => "'''警告:''' 不存在皮肤\"\$1\"。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/vector.css 不同于 {{ns:user}}:Foo/Vector.css。",
 'updated' => '(已更新)',
 'note' => "'''注意:'''",
 'previewnote' => "'''请记住这仅为预览。'''您的更改还未保存!",
 'continue-editing' => '往编辑框',
-'previewconflict' => '这个预览显示了上面文字编辑区中的内容。它将在你选择保存后出现。',
-'session_fail_preview' => "'''抱歉!由于会话数据丢失,我们不能处理你的编辑。'''请重试。如果再次失败,请尝试[[Special:UserLogout|退出]]后重新登录。",
-'session_fail_preview_html' => "'''抱歉!我们不能处理你在进程数据丢失时的编辑。'''
+'previewconflict' => '这个预览显示了上面文字编辑区中的内容。它们将在您保存后出现。',
+'session_fail_preview' => "'''抱歉!由于会话数据丢失,我们不能处理您的编辑。'''请重试。如果仍然失败,请尝试[[Special:UserLogout|注销]]然后重新登录。",
+'session_fail_preview_html' => "'''抱歉!我们不能处理您在会话数据丢失时的编辑。'''
 
 ''由于{{SITENAME}}允许使用原始的 HTML,为了防范 JavaScript 攻击,预览已被隐藏。''
 
-'''如果这是一次合法的编辑,请重新进行尝试。'''如果还不行,请[[Special:UserLogout|退出]]并重新登录。",
+'''如果这是一次合法的编辑,请尝试重试。'''如果依然不行,请[[Special:UserLogout|注销]]并重新登录。",
 'token_suffix_mismatch' => "'''由于您用户端中的编辑令牌毁损了一些标点符号字元,您的编辑已经被拒绝。'''
 此次编辑被拒绝以防止页面文本损坏。
 这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
-'edit_form_incomplete' => "'''编辑表单的某些部分没有到达服务器 ;请检查您的编辑内容是否完整并再试一次。'''",
+'edit_form_incomplete' => "'''编辑表单的某些部分没有传送至服务器;请检查您的编辑内容是否完整并重试。'''",
 'editing' => '编辑“$1”',
 'creating' => '创建 $1',
 'editingsection' => '编辑“$1”(段落)',
 'editingcomment' => '编辑“$1”(新段落)',
 'editconflict' => '编辑冲突:$1',
-'explainconflict' => "有人在开始编辑后更改了页面。
+'explainconflict' => "有人在开始编辑后更改了页面。
 上面的文字框内显示的是目前本页的内容。
-所做的修改显示在下面的文字框中。
-你应当将你所做的修改加入现有的内容中。
-'''只有'''在上面文字框中的内容会在点击“{{int:savearticle}}”后被保存。",
-'yourtext' => '的文字',
+所做的修改显示在下面的文字框中。
+您应当将您的修改加入至现有的内容中。
+'''只有'''在上面文字框中的内容会在点击“{{int:savearticle}}”后被保存。",
+'yourtext' => '的文字',
 'storedversion' => '已保存的版本',
 'nonunicodebrowser' => "'''警告:您的浏览器不兼容Unicode编码。'''这里有一个工作区将使您能安全地编辑页面:非ASCII字符将以十六进制编码方式出现在编辑框中。",
-'editingold' => "'''警告:正在编辑的是本页的旧版本。'''
-如果你保存它的话,在本版本之后的任何修改都会丢失。",
+'editingold' => "'''警告:正在编辑的是本页的旧版本。'''
+如果您保存它的话,在旧版本之后的任何修改都将丢失。",
 'yourdiff' => '差异',
 'copyrightwarning' => "请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布,请查看在$1的细节。
 如果您不希望您的文字被任意修改和再散布,请不要提交。<br />
@@ -1050,16 +1056,16 @@ $2
 'template-semiprotected' => '(半保护)',
 'hiddencategories' => '本页面属于$1个隐藏分类:',
 'edittools' => '<!-- 这里的文字将显示在编辑和上传表格下面。 -->',
-'nocreatetext' => '{{SITENAME}}限制了创建新页面的功能。你可以返回并编辑已有的页面,或者[[Special:UserLogin|登录或创建新账户]]。',
-'nocreate-loggedin' => '没有权限创建新页面。',
+'nocreatetext' => '{{SITENAME}}限制了创建新页面功能。您可以返回并编辑已有的页面,或者[[Special:UserLogin|登录或创建新账户]]。',
+'nocreate-loggedin' => '没有权限创建新页面。',
 'sectioneditnotsupported-title' => '段落编辑不支持',
 'sectioneditnotsupported-text' => '本页面不支持段落编辑。',
 'permissionserrors' => '权限错误',
-'permissionserrorstext' => 'å\9b ä¸ºä»¥ä¸\8b{{PLURAL:$1|å\8e\9få\9b }}ï¼\8c你没æ\9c\89æ\9d\83é\99\90è¿\9b行该操作:',
-'permissionserrorstext-withaction' => 'å\9b ä¸ºä»¥ä¸\8b{{PLURAL:$1|å\8e\9få\9b }}ï¼\8cä½ 没有权限$2:',
-'recreate-moveddeleted-warn' => "'''警告:正在重新创建曾经被删除的页面。'''
+'permissionserrorstext' => 'å\9b ä¸ºä¸\8bå\88\97{{PLURAL:$1|å\8e\9få\9b }}ï¼\8cæ\82¨æ²¡æ\9c\89æ\9d\83é\99\90æ\89§行该操作:',
+'permissionserrorstext-withaction' => 'å\9b ä¸ºä¸\8bå\88\97{{PLURAL:$1|å\8e\9få\9b }}ï¼\8cæ\82¨没有权限$2:',
+'recreate-moveddeleted-warn' => "'''警告:正在重新创建曾经被删除的页面。'''
 
-应该考虑继续编辑本页是否合适。这里提供本页的删除和移动记录以供参考:",
+应该考虑继续编辑本页是否合适。这里提供本页的删除和移动记录以供参考:",
 'moveddeleted-notice' => '本页面已被删除。下面提供本页的删除和移动日志以供参考。',
 'log-fulllog' => '查看完整日志',
 'edit-hook-aborted' => '编辑被hook指令取消。
@@ -1067,7 +1073,7 @@ $2
 'edit-gone-missing' => '不能更新页面。
 它可能刚刚被删除。',
 'edit-conflict' => '编辑冲突。',
-'edit-no-change' => '您的编辑已经略过,因为文字无任何改动。',
+'edit-no-change' => '由于文字无任何改动,您的编辑已被忽略。',
 'edit-already-exists' => '不可以建立一个新页面。
 它已经存在。',
 'defaultmessagetext' => '默认消息文本',
@@ -1104,7 +1110,7 @@ $2
 'converter-manual-rule-error' => '手动语言转换规则中检测到错误',
 
 # "Undo" feature
-'undo-success' => '此编辑可以被撤销。请检查以下比较以核实这正是您想做的,然后保存以下更改完成撤销编辑。',
+'undo-success' => '此编辑可被撤销。请检查以下对比以核实这正是您想做的,然后保存以下更改完成撤销编辑。',
 'undo-failure' => '因存在冲突的中间编辑,本编辑不能撤销。',
 'undo-norev' => '由于其修订版本不存在或已删除,此编辑不能撤销。',
 'undo-summary' => '撤销由[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])所作出的修订$1',
@@ -1152,13 +1158,13 @@ $3的理由是''$2''",
 'rev-deleted-event' => '(日志条目被删除)',
 'rev-deleted-user-contribs' => '[用户名或IP地址被删除 - 编辑在贡献中隐藏]',
 'rev-deleted-text-permission' => "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]。",
-'rev-deleted-text-unhide' => "æ\9c¬é¡µé\9d¢ç\89\88æ\9c¬å·²è¢«'''å\88 é\99¤'''ã\80\82详æ\83\85请è§\81[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} å\88 é\99¤æ\97¥å¿\97\80\82å¦\82æ\9e\9cä½ æ\83³ç»§ç»­æ\93\8dä½\9cï¼\8cä½ ä»\8dç\84¶å\8f¯ä»¥[$1 æ\9f¥ç\9c\8bæ\9c¬ç\89\88æ\9c¬]。",
+'rev-deleted-text-unhide' => "æ\9c¬é¡µé\9d¢ç\9a\84修订ç\89\88已被'''å\88 é\99¤'''ã\80\82详æ\83\85请è§\81[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} å\88 é\99¤æ\97¥å¿\97\80\82æ\82¨å\8f¯ä»¥[$1 æ\9f¥ç\9c\8bå½\93å\89\8dç\89\88æ\9c¬]以继续。",
 'rev-suppressed-text-unhide' => "该页面修订已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
-'rev-deleted-text-view' => "æ\9c¬é¡µé\9d¢ç\89\88æ\9c¬å·²è¢«'''å\88 é\99¤'''ã\80\82ä½ 可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
+'rev-deleted-text-view' => "æ\9c¬é¡µé\9d¢ç\9a\84修订ç\89\88已被'''å\88 é\99¤'''ã\80\82æ\82¨可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
 'rev-suppressed-text-view' => "该页面修订已经被'''监督隐藏'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。",
 'rev-deleted-no-diff' => "因为其中一次修订已被'''删除''',您不可以查看这个差异。
 在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。",
-'rev-suppressed-no-diff' => "该页面的其中一次修订已经被'''删除''',你不可以查看这次的修订。",
+'rev-suppressed-no-diff' => "该页面的其中一次修订版已被'''删除''',您无法查看这个对比。",
 'rev-deleted-unhide-diff' => "该差异对比其中的一个修订版本已经被'''删除'''。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看这次修订]。",
 'rev-suppressed-unhide-diff' => "该页面的其中一次修订已经被'''监督隐藏'''。
 在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
@@ -1175,16 +1181,16 @@ $3的理由是''$2''",
 'revdelete-nologid-title' => '无效的日志项目',
 'revdelete-nologid-text' => '您尚未指定一个目标日志项目去进行这个动作或指定的项目不存在。',
 'revdelete-no-file' => '指定的文件不存在。',
-'revdelete-show-file-confirm' => '你是否真的要查看文件“<nowiki>$1</nowiki>”在$2 $3时的已删除修订?',
+'revdelete-show-file-confirm' => '您是否想查看文件“<nowiki>$1</nowiki>”于$2 $3时的已被删除的修订版本?',
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''选取'''[[:$1]]'''的$2次修订:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|选取的日志项目}}:'''",
 'revdelete-text' => "'''删除的修订仍将显示在页面历史中, 但它们的文本内容已不能被公众访问。'''
 在{{SITENAME}}的其他管理员将仍能访问隐藏的内容并通过与此相同的界面恢复删除,除非站点工作者进行了一些附加的限制。",
 'revdelete-confirm' => '请确认您肯定去做的话,您就要明白到后果,以及这个程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
-'revdelete-suppress-text' => "'''å\8fªæ\9c\89'''å\87ºç\8e°ä»¥ä¸\8bç\9a\84情况下才应阻止访问:
-* 不合适的个人信息
-*: ''家庭地址、电话号码、身份证号码等。''",
+'revdelete-suppress-text' => "'''å\8fªæ\9c\89'''å\87ºç\8e°ä¸\8bå\88\97情况下才应阻止访问:
+* 可能虚假的个人信息
+*: ''家庭地址、电话号码、身份证号码等。''",
 'revdelete-legend' => '设置可见性之限制',
 'revdelete-hide-text' => '隐藏版本文字',
 'revdelete-hide-image' => '隐藏文件内容',
@@ -1238,7 +1244,7 @@ $1",
 'mergehistory-from' => '来源页面:',
 'mergehistory-into' => '目的页面:',
 'mergehistory-list' => '可以合并的编辑历史',
-'mergehistory-merge' => '以ä¸\8b[[:$1]]的修订可以合并到[[:$2]]。用该选项按钮列去合并只有在指定时间以前所创建的修订。要留意的是使用导航链接便会重设这一栏。',
+'mergehistory-merge' => 'ä¸\8bå\88\97[[:$1]]的修订可以合并到[[:$2]]。用该选项按钮列去合并只有在指定时间以前所创建的修订。要留意的是使用导航链接便会重设这一栏。',
 'mergehistory-go' => '显示可以合并的编辑',
 'mergehistory-submit' => '合并版本',
 'mergehistory-empty' => '没有可以合并的版本。',
@@ -1324,7 +1330,7 @@ $1",
 'showingresults' => "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
 'showingresultsnum' => "下面显示从第'''$2'''条结果开始的'''$3'''条结果。",
 'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条至第'''$3'''条结果|第'''$1'''条至第'''$2'''条结果,共'''$3'''条结果}}",
-'nonefound' => "'''注意''':只有部分名字空间的页面会被默认搜索。尝试在您的搜索语句前添加“all:”前缀,这样可以搜索全部页面(包括讨论页、模板等),或者可使用所需名字空间作为前缀。",
+'nonefound' => "'''注意''':只有部分名字空间的页面会被默认搜索。尝试在您的搜索语句前添加“all:”前缀,这样可以搜索全部页面(包括讨论页、模板等),或者您也可使用所需名字空间作为前缀。",
 'search-nonefound' => '找不到和查询相匹配的结果。',
 'powersearch' => '高级搜索',
 'powersearch-legend' => '高级搜索',
@@ -1347,8 +1353,8 @@ $1",
 'qbsettings-directionality' => '根据您的语言文本方向固定位置',
 
 # Preferences page
-'preferences' => '系统设置',
-'mypreferences' => '系统设置',
+'preferences' => '个人设置',
+'mypreferences' => '个人设置',
 'prefs-edits' => '编辑数量:',
 'prefsnologin' => '尚未登录',
 'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
@@ -1384,13 +1390,13 @@ $1",
 'searchresultshead' => '搜索',
 'resultsperpage' => '每页显示链接数:',
 'stub-threshold' => '<a href="#" class="stub">短页面链接</a>格式阈值(字节):',
-'stub-threshold-disabled' => '已用',
+'stub-threshold-disabled' => '已用',
 'recentchangesdays' => '最近更改中显示的天数:',
 'recentchangesdays-max' => '最多$1天',
 'recentchangescount' => '默认显示的编辑数:',
 'prefs-help-recentchangescount' => '该项包含最近更改、页面历史和日志。',
 'prefs-help-watchlist-token' => '此栏填写的密钥可以生成您监视列表的RSS源。任何知晓本栏密钥的人都能阅读您的监视列表,因此请使用安全的数值。这里已提供了一个随机生成的数值供您选择:$1',
-'savedprefs' => '的系统设置已经保存。',
+'savedprefs' => '的系统设置已经保存。',
 'timezonelegend' => '时区:',
 'localtime' => '当地时间:',
 'timezoneuseserverdefault' => '使用wiki默认值($1)',
@@ -1414,10 +1420,10 @@ $1",
 'defaultns' => '否则在这些名字空间中搜索:',
 'default' => '默认',
 'prefs-files' => '文件',
-'prefs-custom-css' => '自定义CSS',
-'prefs-custom-js' => '自定义JavaScript',
+'prefs-custom-css' => '自定义 CSS',
+'prefs-custom-js' => '自定义 JavaScript',
 'prefs-common-css-js' => '所有皮肤共用的CSS/JavaScript:',
-'prefs-reset-intro' => '你可以使用本页面重置你的系统设置为网站默认值。该操作不能撤销。',
+'prefs-reset-intro' => '您可以通过本页面重置您的系统设置为默认值。此操作不可撤销。',
 'prefs-emailconfirm-label' => '电子邮件确认:',
 'prefs-textboxsize' => '编辑框大小',
 'youremail' => '电子邮件:',
@@ -1430,7 +1436,7 @@ $1",
 'yourvariant' => '内容语言变种:',
 'prefs-help-variant' => '您希望用于显示本站内容的语种或拼写语系。',
 'yournick' => '新签名:',
-'prefs-help-signature' => '讨论页面上的评论应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为你的签名及时间戳。',
+'prefs-help-signature' => '讨论页面上的评论应使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为您的签名和时间戳。',
 'badsig' => '错误的原始签名。请检查HTML标签。',
 'badsiglength' => '签名过长。请不超过$1个字符。',
 'yourgender' => '性别:',
@@ -1439,9 +1445,9 @@ $1",
 'gender-female' => '女',
 'prefs-help-gender' => '选填项目。使软件使用正确的性别称呼。该信息将会公开。',
 'email' => '电子邮件',
-'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
-'prefs-help-email' => '电子邮件地址是选填项目。但是在你忘记密码需要重置密码时需要电子邮件地址。',
-'prefs-help-email-others' => '你亦可以选择让其他用户通过你的用户页或讨论页上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。',
+'prefs-help-realname' => '真实姓名是可选的项目。如果您选择提供它,它将会用于贡献署名。',
+'prefs-help-email' => '电子邮件地址是可选的项目。但是在您忘记密码需要重置密码时需要它。',
+'prefs-help-email-others' => '您也可以选择让其他用户通过您的用户页或讨论页上的链接用电子邮件联系您。其他用户联系您时,您的电子邮件地址将不会被显示。',
 'prefs-help-email-required' => '电子邮件地址是必填项目。',
 'prefs-info' => '基本信息',
 'prefs-i18n' => '界面语言',
@@ -1472,7 +1478,7 @@ $1",
 'saveusergroups' => '保存用户组',
 'userrights-groupsmember' => '用户组:',
 'userrights-groupsmember-auto' => '自动用户组:',
-'userrights-groups-help' => '可以更改该用户的用户组:
+'userrights-groups-help' => '可以更改该用户的用户组:
 * 选中的选项框表示该用户属于该用户组。
 * 未选中的选项框表示该用户不属于该用户组。
 * 星号(*)表示一旦添加该用户组后不能删除,反之亦然。',
@@ -1480,9 +1486,9 @@ $1",
 'userrights-no-interwiki' => '您并没有权限去编辑在其它wiki上的用户权限。',
 'userrights-nodatabase' => '数据库$1不存在或并非为本地的。',
 'userrights-nologin' => '您必须要以管理员帐户[[Special:UserLogin|登录]]之后才可以指定用户权限。',
-'userrights-notallowed' => 'æ\82¨ç\9a\84å¸\90æ\88·æ\97 æ\9d\83é\99\90æ·»å\8a æ\88\96å\88 é\99¤ç\94¨æ\88·权限。',
-'userrights-changeable-col' => '可以更改的用户组',
-'userrights-unchangeable-col' => '不能更改的用户组',
+'userrights-notallowed' => 'æ\82¨ç\9a\84å¸\90æ\88·æ\97 æ·»å\8a æ\88\96å\88 é\99¤ç\94¨æ\88·æ\9d\83é\99\90ç\9a\84权限。',
+'userrights-changeable-col' => '可以更改的用户组',
+'userrights-unchangeable-col' => '不能更改的用户组',
 
 # Groups
 'group' => '用户组:',
@@ -1542,7 +1548,7 @@ $1",
 'right-suppressrevision' => '审查和恢复管理员隐藏的版本',
 'right-suppressionlog' => '查看非公开日志',
 'right-block' => '阻止其他用户编辑',
-'right-blockemail' => '阻止用户电邮联系',
+'right-blockemail' => '阻止用户发送邮件',
 'right-hideuser' => '封禁并隐藏用户名',
 'right-ipblock-exempt' => '避开IP封禁、自动封禁和IP段封禁',
 'right-proxyunbannable' => '避开代理服务器的自动封禁',
@@ -1567,18 +1573,16 @@ $1",
 'right-userrights-interwiki' => '编辑其它wiki的用户的用户权限',
 'right-siteadmin' => '锁定和解锁数据库',
 'right-override-export-depth' => '导出含有链接页面深度为5的页面',
-'right-sendemail' => '电邮联系其他用户',
+'right-sendemail' => '向其他用户发送邮件',
 'right-passwordreset' => '查看密码重置电子邮件',
 
+# Special:Log/newusers
+'newuserlogpage' => '用户创建日志',
+'newuserlogpagetext' => '这是用户创建的日志。',
+
 # User rights log
 'rightslog' => '用户权限日志',
 'rightslogtext' => '这是用户权限更改的日志。',
-'rightslogentry' => '将$1的用户组由$2更改为$3',
-'rightslogentry-autopromote' => '被自动提升自$2至$3',
-'logentry-rights-rights' => '$1将$3的用户组从$4改为$5',
-'logentry-rights-rights-legacy' => '$1更改$3的用户组',
-'logentry-rights-autopromote' => '$1的用户组已自动从$4改为$5',
-'rightsnone' => '(无)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '阅读本页',
@@ -1609,13 +1613,13 @@ $1",
 'action-import' => '从其他wiki导入本页面',
 'action-importupload' => '从文件上传导入本页面',
 'action-patrol' => '标记他人的编辑为已巡查',
-'action-autopatrol' => '使你的编辑标记为已巡查',
+'action-autopatrol' => '将您的编辑标记为已巡查',
 'action-unwatchedpages' => '查看未受监视页面的列表',
 'action-mergehistory' => '合并本页面的历史',
 'action-userrights' => '编辑所有用户的权限',
 'action-userrights-interwiki' => '编辑其它wiki的用户的用户权限',
 'action-siteadmin' => '锁定或解锁数据库',
-'action-sendemail' => '电邮联系其他用户',
+'action-sendemail' => '通过邮件联系其他用户',
 
 # Recent changes
 'nchanges' => '$1次更改',
@@ -1738,22 +1742,22 @@ $1",
 请仔细检查该文件<strong>[[:$1]]</strong>。
 如果被检查文件与原始大小的图像是同一幅图像,您无需上传多余的缩略图。",
 'file-thumbnail-no' => "文件名以<strong>$1</strong>开头。它可能是另一幅图像的缩小版本''(缩略图)''。
-如果有该图像完整分辨率的版本,请上传该完整版本。否则请修改文件名。",
+如果有该图像完整分辨率的版本,请上传该完整版本。否则请修改文件名。",
 'fileexists-forbidden' => '已存在相同名称的文件,且不能覆盖;请返回并用一个新的名称来上传此文件。[[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => '在共享文件库中已存在此名称的文件。
-如果你仍然想去上传它的话,请返回并用一个新的名称来上传此文件。[[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => 'è¿\99个æ\96\87件ä¸\8e以ä¸\8b{{PLURAL:$1|一|多}}个文件重复:',
+'fileexists-shared-forbidden' => '在共享文件库中已存在同名文件。
+如果您仍然想继续上传,请返回并使用一个新的文件名来上传此文件。[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'è¿\99个æ\96\87件ä¸\8eä¸\8bå\88\97{{PLURAL:$1|一|多}}个文件重复:',
 'file-deleted-duplicate' => '一个相同名称的文件 ([[:$1]]) 在先前删除过。您应该在重新上传之前检查一下该文件之删除纪录。',
 'uploadwarning' => '上传警告',
 'uploadwarning-text' => '请修改下面的文件说明并重试。',
 'savefile' => '保存文件',
 'uploadedimage' => '上传“[[$1]]”',
 'overwroteimage' => '上传“[[$1]]”的新版本',
-'uploaddisabled' => '上传己用。',
-'copyuploaddisabled' => '通过网址上传功能未开通。',
+'uploaddisabled' => '上传己用。',
+'copyuploaddisabled' => '通过网址上传功能已禁用。',
 'uploadfromurl-queued' => '上传已被列入队列。',
-'uploaddisabledtext' => '文件上传已用。',
-'php-uploaddisabledtext' => 'PHP 文件上传已经停用。请检查 file_uploads 设置。',
+'uploaddisabledtext' => '文件上传已用。',
+'php-uploaddisabledtext' => 'PHP 设置已禁用文件上传功能。请检查 file_uploads 设置。',
 'uploadscripted' => '该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。',
 'uploadvirus' => '该文件包含病毒!
 详情:$1',
@@ -1844,8 +1848,8 @@ $1',
 'uploadstash' => '文件贮藏',
 'uploadstash-summary' => '这个页面提供已经上传(或者上传中)但未发布到wiki之文件存取。这些文件除了上传的用户之外不会被其他人可见。',
 'uploadstash-clear' => '清除贮藏文件',
-'uploadstash-nofiles' => '没有已贮藏的文件。',
-'uploadstash-badtoken' => 'è¿\9bè¡\8cè¿\99个å\8a¨ä½\9cä¸\8dæ\88\90å\8a\9fï¼\8cæ\88\96è\80\85ä½ ç\9a\84ç¼\96è¾\91ä¿¡æ\81¯å·²ç»\8fè¿\87æ\9c\9fã\80\82请å\86\8dè¯\95ã\80\82',
+'uploadstash-nofiles' => '没有已贮藏的文件。',
+'uploadstash-badtoken' => 'æ\89§è¡\8cæ\93\8dä½\9cä¸\8dæ\88\90å\8a\9fï¼\8cæ\88\96è\80\85æ\82¨ç\9a\84ç¼\96è¾\91ä¿¡æ\81¯å·²ç»\8fè¿\87æ\9c\9fã\80\82请é\87\8dè¯\95ã\80\82',
 'uploadstash-errclear' => '清除文件不成功。',
 'uploadstash-refresh' => '更新文件清单',
 'invalid-chunk-offset' => '无效区块偏移量',
@@ -1862,7 +1866,7 @@ $1',
 'img-auth-nofile' => '文件“$1”不存在。',
 'img-auth-isdir' => '您正试图访问目录“$1”。您只能访问文件。',
 'img-auth-streaming' => '流式化“$1”中。',
-'img-auth-public' => 'img_auth.php的功能是从私有wiki输出文件。但本wiki已被设置为公共wiki。出于安全考虑,img_auth.php已被停用。',
+'img-auth-public' => 'img_auth.php 的功能是从私有 wiki 输出文件。但本 wiki 已被设置为公共 wiki。出于安全考虑,img_auth.php 已被禁用。',
 'img-auth-noread' => '用户无权读取“$1”。',
 'img-auth-bad-query-string' => 'URL 有一个无效的查询字符串。',
 
@@ -1905,7 +1909,7 @@ $1',
 # File description page
 'file-anchor-link' => '文件',
 'filehist' => '文件历史',
-'filehist-help' => '查看某一时刻的文件,请击相应的日期/时间。',
+'filehist-help' => '查看某一时刻的文件,请击相应的日期/时间。',
 'filehist-deleteall' => '删除全部',
 'filehist-deleteone' => '删除',
 'filehist-revert' => '恢复',
@@ -1920,14 +1924,14 @@ $1',
 'filehist-comment' => '评论',
 'filehist-missing' => '文件遗失',
 'imagelinks' => '文件用途',
-'linkstoimage' => '以ä¸\8bç\9a\84$1个页面链接到本文件:',
+'linkstoimage' => 'ä¸\8bå\88\97$1个页面链接到本文件:',
 'linkstoimage-more' => '多于$1个页面连接到这个文件。
 下面的列表只列示了连去这个文件的最首$1个页面。
 一个[[Special:WhatLinksHere/$2|完整的列表]]可以提供。',
 'nolinkstoimage' => '没有页面链接到本文件。',
 'morelinkstoimage' => '查看连接到这个文件的[[Special:WhatLinksHere/$1|更多链接]]。',
 'linkstoimage-redirect' => '$1(文件重定向)$2',
-'duplicatesoffile' => '以ä¸\8bç\9a\84$1个æ\96\87件è·\9fè¿\99个文件重复([[Special:FileDuplicateSearch/$2|更多细节]]):',
+'duplicatesoffile' => 'ä¸\8bå\88\97$1个æ\96\87件ä¸\8e该文件重复([[Special:FileDuplicateSearch/$2|更多细节]]):',
 'sharedupload' => '该文件来自于$1,它可能在其它计划项目中被应用。',
 'sharedupload-desc-there' => '该文件来自于$1,它可能在其它计划项目中被应用。
 请参阅在[$2 文件描述页面]以了解其相关信息。',
@@ -1958,8 +1962,8 @@ $1',
 # File deletion
 'filedelete' => '删除$1',
 'filedelete-legend' => '删除文件',
-'filedelete-intro' => "您现正删除文件'''[[Media:$1|$1]]'''。",
-'filedelete-intro-old' => "你现正删除'''[[Media:$1|$1]]'''于[$4 $2 $3]的版本。",
+'filedelete-intro' => "您删除文件'''[[Media:$1|$1]]'''。",
+'filedelete-intro-old' => "您正在删除'''[[Media:$1|$1]]'''于[$4 $2 $3]的版本。",
 'filedelete-comment' => '原因:',
 'filedelete-submit' => '删除',
 'filedelete-success' => "'''$1'''已经删除。",
@@ -1973,7 +1977,7 @@ $1',
 ** 侵犯版权
 ** 重复文件',
 'filedelete-edit-reasonlist' => '编辑删除埋由',
-'filedelete-maintenance' => 'å½\93å\9c¨ç»´æ\8a¤æ\97¶å·²ç»\8fæ\9a\82æ\97¶å\81\9c用文件删除和恢复。',
+'filedelete-maintenance' => 'å¤\84äº\8eç»´æ\8a¤æ\97¶å°\86æ\9a\82æ\97¶ç¦\81用文件删除和恢复。',
 'filedelete-maintenance-title' => '无法删除文件',
 
 # MIME search
@@ -2027,7 +2031,7 @@ $1',
 'disambiguations-text' => "以下的页面都有到'''消歧义页'''的链接,但它们可能可以链接到更适当的页面。<br />一个页面如果使用了[[MediaWiki:Disambiguationspage]]内的模板,则会被视为消歧义页。",
 
 'doubleredirects' => '双重重定向页',
-'doubleredirectstext' => '此页å\88\97å\87ºäº\86æ\89\80æ\9c\89é\87\8då®\9aå\90\91å\88°å\8f¦ä¸\80é\87\8då®\9aå\90\91页é\9d¢ç\9a\84页é\9d¢ã\80\82æ¯\8fä¸\80è¡\8cé\83½å\8c\85å\90«æ\9c\89å\88°ç¬¬ä¸\80å\92\8c第äº\8c个é\87\8då®\9aå\90\91页é\9d¢ç\9a\84é\93¾æ\8e¥ï¼\8c以å\8f\8a第äº\8c个é\87\8då®\9aå\90\91页é\9d¢ç\9a\84ç\9b®æ \87â\80\94â\80\94é\80\9a常就æ\98¯â\80\9cç\9c\9fæ­£ç\9a\84â\80\9dç\9b®æ \87页é\9d¢ï¼\8c亦å\8d³æ\98¯ç¬¬ä¸\80个é\87\8då®\9aå\90\91页é\9d¢åº\94该æ\8c\87å\90\91ç\9a\84页é\9d¢ã\80\82<del>å·²å\88\92å\8e»</del>ç\9a\84为已经解决的项目。',
+'doubleredirectstext' => '此页å\88\97å\87ºäº\86æ\89\80æ\9c\89é\87\8då®\9aå\90\91å\88°å\8f¦ä¸\80é\87\8då®\9aå\90\91页é\9d¢ç\9a\84页é\9d¢ã\80\82æ¯\8fä¸\80è¡\8cé\83½å\8c\85å\90«æ\9c\89å\88°ç¬¬ä¸\80å\92\8c第äº\8c个é\87\8då®\9aå\90\91页é\9d¢ç\9a\84é\93¾æ\8e¥ï¼\8c以å\8f\8a第äº\8c个é\87\8då®\9aå\90\91页é\9d¢ç\9a\84ç\9b®æ \87â\80\94â\80\94é\80\9a常就æ\98¯â\80\9cç\9c\9fæ­£ç\9a\84â\80\9dç\9b®æ \87页é\9d¢ï¼\8cä¹\9få°±æ\98¯ç¬¬ä¸\80个é\87\8då®\9aå\90\91页é\9d¢åº\94该æ\8c\87å\90\91ç\9a\84页é\9d¢ã\80\82<del>å·²å\88\92å\8e»</del>ç\9a\84æ\9d¡ç\9b®æ\98¯已经解决的项目。',
 'double-redirect-fixed-move' => '[[$1]]已被移动。它现在重定向至[[$2]]。',
 'double-redirect-fixed-maintenance' => '修复双重重定向自[[$1]]至[[$2]]。',
 'double-redirect-fixer' => '重定向页修复器',
@@ -2054,7 +2058,7 @@ $1',
 'nviews' => '$1次浏览',
 'nimagelinks' => '用于$1个页面中',
 'ntransclusions' => '用于$1个页面中',
-'specialpage-empty' => 'è¿\99个æ\8a¥å\91\8aç\9a\84结果为空。',
+'specialpage-empty' => '该æ\8a¥å\91\8a结果为空。',
 'lonelypages' => '孤立页面',
 'lonelypagestext' => '以下页面尚未被{{SITENAME}}中的其它页面链接或被之包含。',
 'uncategorizedpages' => '未归类页面',
@@ -2112,7 +2116,7 @@ $1',
 'pager-newer-n' => '前$1个',
 'pager-older-n' => '后$1个',
 'suppress' => '监督',
-'querypage-disabled' => '此特殊页面基于效能的原因已经被停用。',
+'querypage-disabled' => '此特殊页面由于性能原因已被禁用。',
 
 # Book sources
 'booksources' => '网络书源',
@@ -2127,7 +2131,7 @@ $1',
 'speciallogtitlelabel' => '目标(标题或用户):',
 'log' => '日志',
 'all-logs-page' => '所有公开日志',
-'alllogstext' => '所有{{SITENAME}}公开日志的联合展示。可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。',
+'alllogstext' => '所有{{SITENAME}}公开日志的联合展示。 您可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。',
 'logempty' => '在日志中不存在匹配项。',
 'log-title-wildcard' => '搜索以该文字开头的标题',
 'showhideselectedlogentries' => '显示/隐藏所选日志项',
@@ -2151,7 +2155,7 @@ $1',
 'allpages-hide-redirects' => '隐藏重定向页',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => '正在浏览本页的缓存版本,至多可能存在 $1 的延迟。',
+'cachedspecial-viewing-cached-ttl' => '正在浏览本页的缓存版本,至多可能存在 $1 的延迟。',
 'cachedspecial-viewing-cached-ts' => '您正浏览此页的缓存版本,不一定是最新的完整版本。',
 'cachedspecial-refresh-now' => '查看最新的。',
 
@@ -2194,10 +2198,6 @@ $1',
 'activeusers-hidesysops' => '隐藏管理员',
 'activeusers-noresult' => '找不到用户。',
 
-# Special:Log/newusers
-'newuserlogpage' => '用户创建日志',
-'newuserlogpagetext' => '这是用户创建的日志。',
-
 # Special:ListGroupRights
 'listgrouprights' => '用户组权限',
 'listgrouprights-summary' => '以下面是一个在这个wiki中定义出来的用户权限列表,以及它们的访问权。
@@ -2218,18 +2218,18 @@ $1',
 'listgrouprights-removegroup-self-all' => '删除自己的账户的所有用户组',
 
 # E-mail user
-'mailnologin' => 'æ\97 ç\94µé\82®地址',
-'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
+'mailnologin' => '没æ\9c\89å\8f\91é\80\81地址',
+'mailnologintext' => '您必须[[Special:UserLogin|登录]]并在您的[[Special:Preferences|个人设置]]中设置一个有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
-'emailuser-title-target' => '电邮联系该{{GENDER:$1|用户}}',
-'emailuser-title-notarget' => '电邮联系',
-'emailpage' => '电邮联系',
+'emailuser-title-target' => '邮件联系该{{GENDER:$1|用户}}',
+'emailuser-title-notarget' => '邮件联系',
+'emailpage' => '邮件联系',
 'emailpagetext' => '您可以使用下面的表单向该{{GENDER:$1|用户}}发送电子邮件消息。
\82¨å\9c¨[[Special:Preferences|ä½ ç\9a\84ç³»ç»\9f设置]]中è¾\93å\85¥ç\9a\84ç\94µå­\90é\82®ä»¶å\9c°å\9d\80å°\86æ\98¾ç¤ºä¸ºè¯¥é\82®ä»¶ç\9a\84â\80\9cå\8f\91件人â\80\9då\9c°å\9d\80ï¼\8cæ\89\80以æ\94¶ä»¶äººå°\86å\8f¯ä»¥ç\9b´æ\8e¥å\9b\9eå¤\8dä½ 。',
\82¨å\9c¨[[Special:Preferences|个人设置]]中è¾\93å\85¥ç\9a\84ç\94µå­\90é\82®ä»¶å\9c°å\9d\80å°\86æ\98¾ç¤ºä¸ºè¯¥é\82®ä»¶ç\9a\84â\80\9cå\8f\91件人â\80\9då\9c°å\9d\80ï¼\8cæ\89\80以æ\94¶ä»¶äººå\8f¯ä»¥ç\9b´æ\8e¥å\9b\9eå¤\8dç»\99æ\82¨。',
 'usermailererror' => 'Mail 对象返回错误:',
 'defemailsubject' => '{{SITENAME}}来自用户“$1”的电子邮件',
-'usermaildisabled' => '用户电邮已停用',
-'usermaildisabledtext' => '您不可以发送电邮到这个wiki上的其他用户',
+'usermaildisabled' => '邮件发送功能已禁用',
+'usermaildisabledtext' => '您不可以给这个 wiki 上的其他用户发送邮件',
 'noemailtitle' => '无电子邮件地址',
 'noemailtext' => '该用户还没有指定一个有效的电子邮件地址。',
 'nowikiemailtitle' => '禁止电子邮件',
@@ -2248,7 +2248,7 @@ $1',
 'emailccsubject' => '您发送给$1的消息的副本:$2',
 'emailsent' => '电子邮件已发送',
 'emailsenttext' => '您的电子邮件已经发出。',
-'emailuserfooter' => '这封电邮是由$1寄给$2经{{SITENAME}}的“电邮用户”功能发出的。',
+'emailuserfooter' => '本邮件由{{SITENAME}}的“电邮用户”功能从$1发送至$2。',
 
 # User Messenger
 'usermessage-summary' => '留下系统信息。',
@@ -2258,15 +2258,15 @@ $1',
 'watchlist' => '监视列表',
 'mywatchlist' => '监视列表',
 'watchlistfor2' => '$1的监视列表$2',
-'nowatchlist' => '的监视列表为空。',
+'nowatchlist' => '的监视列表为空。',
 'watchlistanontext' => '请$1以查看或编辑您的监视列表。',
 'watchnologin' => '未登录',
 'watchnologintext' => '您必须先[[Special:UserLogin|登录]]才能更改您的监视列表。',
 'addwatch' => '添加至监视列表',
-'addedwatchtext' => '页面“[[:$1]]”已添加至的[[Special:Watchlist|监视列表]]。
+'addedwatchtext' => '页面“[[:$1]]”已添加至的[[Special:Watchlist|监视列表]]。
 本页面及其讨论页面的新增更改将会列入监视列表。',
 'removewatch' => '从监视列表中删除',
-'removedwatchtext' => '页面“[[:$1]]”已从[[Special:Watchlist|的监视列表]]中删除。',
+'removedwatchtext' => '页面“[[:$1]]”已从[[Special:Watchlist|的监视列表]]中删除。',
 'watch' => '监视',
 'watchthispage' => '监视本页',
 'unwatch' => '取消监视',
@@ -2274,9 +2274,9 @@ $1',
 'notanarticle' => '非内容页面',
 'notvisiblerev' => '上次由不同用户所作的修订版本已经删除',
 'watchnochange' => '在显示的时间段内您所监视的页面没有更改。',
-'watchlist-details' => '不计讨论页面,你的监视列表中有$1个页面。',
+'watchlist-details' => '不包括讨论页面,您的监视列表中有$1个页面。',
 'wlheader-enotif' => '* 已经启动电子邮件通知功能。',
-'wlheader-showupdated' => "* 在你上次查看后有被修改过的页面会显示为'''粗体'''",
+'wlheader-showupdated' => "* 在您上次查看后有被修改过的页面会以'''粗体'''的形式被显示",
 'watchmethod-recent' => '检查被监视页面的最近编辑',
 'watchmethod-list' => '查看监视页中的最新修改',
 'watchlistcontains' => '您的监视列表包含$1个页面。',
@@ -2302,21 +2302,21 @@ $1',
 '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' => '请æµ\8fè§\88 $1 æ\9f¥ç\9c\8bä½ 上次访问后的所有更改。',
+'enotif_body_intro_changed' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被{{gender:$2|$2}}修改,在 $3 可以查看当前版本。',
+'enotif_lastvisited' => '请æµ\8fè§\88 $1 æ\9f¥ç\9c\8bä»\8eæ\82¨上次访问后的所有更改。',
 'enotif_lastdiff' => '请浏览 $1 查看该更改。',
 'enotif_anon_editor' => '匿名用户$1',
-'enotif_body' => '亲爱的$WATCHINGUSERNAME:
+'enotif_body' => '亲爱的 $WATCHINGUSERNAME:
 
 $PAGEINTRO $NEWPAGE
 
 编辑摘要:$PAGESUMMARY $PAGEMINOREDIT
 
-你可以通过以下方式联系编者:
+您可以通过以下方式联系编辑者:
 电子邮件:$PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-在你访问该页面之前,我们不会发送新增更改的通知。你也可以重设你的监视列表中所有监视页面的通知标志。
+在您访问该页面之前,我们不会发送新增更改的通知。您也可以重设您的监视列表中所有监视页面的通知标志。
 
 友好的{{SITENAME}}通知系统
 
@@ -2325,10 +2325,12 @@ wiki: $PAGEEDITOR_WIKI
 {{canonicalurl:{{#special:Preferences}}}}
 更改监视列表设置:
 {{canonicalurl:{{#special:EditWatchlist}}}}
-从监视列表中删除该页面
+从监视列表中删除本页
 $UNWATCHURL
 反馈与其他帮助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '创建',
+'changed' => '更改',
 
 # Delete
 'deletepage' => '删除页面',
@@ -2394,21 +2396,23 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]]移动至[[$2]]',
 'protect-badnamespace-title' => '不可被保护的名字空间',
 'protect-badnamespace-text' => '这个名字空间内的页面无法被保护。',
+'protect-norestrictiontypes-text' => '无法保护此页,因为没有可用的保护类型',
+'protect-norestrictiontypes-title' => '不可保护页面',
 'protect-legend' => '确认保护',
 'protectcomment' => '原因:',
 'protectexpiry' => '到期:',
 'protect_expiry_invalid' => '输入的终止时间无效。',
 'protect_expiry_old' => '终止时间已过去。',
 'protect-unchain-permissions' => '解除锁定更多的保护选项',
-'protect-text' => '可以在这里浏览和修改对页面<strong>$1</strong>的保护级别。',
+'protect-text' => '可以在这里浏览和修改对页面<strong>$1</strong>的保护级别。',
 'protect-locked-blocked' => "您不能在被封禁时更改保护级别。以下是页面'''$1'''的当前设置:",
 'protect-locked-dblock' => "您不能在数据库锁定时更改保护级别。以下是页面'''$1'''的当前设置:",
 'protect-locked-access' => "您的帐户没有足够的权限去更改保护级别。以下是页面'''$1'''的当前设置:",
 'protect-cascadeon' => '以下的{{PLURAL:$1|一个|多个}}页面包含  本页面的同时,启动了连锁保护,因此本页面目前也被保护,未能编辑。您可以设置本页面的保护级别,但这并不会对连锁保护有所影响。',
 'protect-default' => '允许所有用户',
-'protect-fallback' => '需要“$1”的许可',
-'protect-level-autoconfirmed' => '禁止新的和未注册的用户',
-'protect-level-sysop' => '仅管理员',
+'protect-fallback' => '仅允许拥有“$1”权限的用户',
+'protect-level-autoconfirmed' => '仅允许自动确认用户',
+'protect-level-sysop' => '仅允许管理员',
 'protect-summary-cascade' => '联锁',
 'protect-expiring' => '终止于$1(UTC)',
 'protect-expiring-local' => '$1到期',
@@ -2455,7 +2459,7 @@ $UNWATCHURL
 'undeleterevisions' => '$1版本存档',
 'undeletehistory' => '如果您恢复了该页面,所有版本都会被恢复到修订历史中。
 如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。',
-'undeleterevdel' => '如果把最新修订部份删除,反删除便无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。',
+'undeleterevdel' => '如果把最新修订部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。',
 'undeletehistorynoadmin' => '这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。',
 'undelete-revision' => '$1由$3(在$4 $5)所编写的已删除修订版本:',
 'undeleterevision-missing' => '无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。',
@@ -2495,7 +2499,7 @@ $1',
 # Namespace form on various pages
 'namespace' => '名字空间:',
 'invert' => '反选',
-'tooltip-invert' => 'é\80\89中此å¤\8dé\80\89æ¡\86æ\9d¥é\9a\90è\97\8fé\80\89å®\9aå\90\8då­\97空é\97´ï¼\88å\8f\8aå\85¶ç\9b¸å\85³å\90\8då­\97空é\97´ï¼\8cè\8b¥è¯¥é\80\89项亦被选中)范围内的页面更改',
+'tooltip-invert' => 'é\80\89中此å¤\8dé\80\89æ¡\86æ\9d¥é\9a\90è\97\8fé\80\89å®\9aå\90\8då­\97空é\97´ï¼\88å\8f\8aå\85¶ç\9b¸å\85³å\90\8då­\97空é\97´ï¼\8cè\8b¥è¯¥é\80\89项ä¹\9f被选中)范围内的页面更改',
 'namespace_association' => '相关名字空间',
 'tooltip-namespace_association' => '选中此复选框可包括与选定名字空间相关的讨论页或子页面',
 'blanknamespace' => '(主要)',
@@ -2571,7 +2575,7 @@ $1',
 ** 不能接受的用户名',
 'ipb-hardblock' => '阻止登录用户使用该IP地址编辑',
 'ipbcreateaccount' => '阻止创建新账号',
-'ipbemailban' => '阻止用户发送电邮',
+'ipbemailban' => '阻止用户发送邮件',
 'ipbenableautoblock' => '自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址',
 'ipbsubmit' => '封禁该用户',
 'ipbother' => '其它时间:',
@@ -2619,9 +2623,9 @@ $1',
 'infiniteblock' => '无限期',
 'expiringblock' => '$1 $2到期',
 'anononlyblock' => '仅匿名用户',
-'noautoblockblock' => 'è\87ªå\8a¨å°\81ç¦\81å\81\9c用',
-'createaccountblock' => '账户创建停用',
-'emailblock' => '电子邮件停用',
+'noautoblockblock' => 'è\87ªå\8a¨å°\81ç¦\81å·²ç¦\81用',
+'createaccountblock' => '创建帐户已禁用',
+'emailblock' => '发送邮件已禁用',
 'blocklist-nousertalk' => '不能编辑自己的讨论页面',
 'ipblocklist-empty' => '封禁列表为空。',
 'ipblocklist-no-results' => '请求的IP地址或用户名没有被封禁。',
@@ -2629,7 +2633,7 @@ $1',
 'unblocklink' => '解封',
 'change-blocklink' => '更改封禁',
 'contribslink' => '贡献',
-'emaillink' => '发送电邮',
+'emaillink' => '发送邮件',
 'autoblocker' => '由于您与“[[User:$1|$1]]”共享一个IP地址而被自动封禁。
 $1被封禁的理由是:“$2”',
 'blocklogpage' => '封禁日志',
@@ -2640,9 +2644,9 @@ $1被封禁的理由是:“$2”',
 'blocklogtext' => '这是用户封禁和解封操作的日志。自动封禁IP地址没有列出。请见[[Special:BlockList|封禁列表]]查看目前正在进行的阻止和封禁的列表。',
 'unblocklogentry' => '解封$1',
 'block-log-flags-anononly' => '仅限匿名用户',
-'block-log-flags-nocreate' => '账户创建停用',
-'block-log-flags-noautoblock' => 'è\87ªå\8a¨å°\81ç¦\81å\81\9c用',
-'block-log-flags-noemail' => '电子邮件停用',
+'block-log-flags-nocreate' => '创建帐户已禁用',
+'block-log-flags-noautoblock' => 'è\87ªå\8a¨å°\81ç¦\81å·²ç¦\81用',
+'block-log-flags-noemail' => '邮件功能已禁用',
 'block-log-flags-nousertalk' => '不能编辑自己的讨论页面',
 'block-log-flags-angry-autoblock' => '已启用增强型自动封禁',
 'block-log-flags-hiddenname' => '隐藏用户名',
@@ -2692,20 +2696,18 @@ $1被封禁的理由是:“$2”',
 # Move page
 'move-page' => '移动$1',
 'move-page-legend' => '移动页面',
-'movepagetext' => "用下面的表单来重命名一个页面,并将其修订历史同时移动到新页面。
-老的页面将成为新页面的重定向页
-您可以自动地更新指到原标题的重定向
-如果您选择不去做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。
-您应当负责确定所有链接依然会链到指定的页面
+'movepagetext' => "您可以使用下面的表单来重命名一个页面,同时将其修订历史移动到新页面。
+同时老的条目将会被重定向到新条目
+您可以自动地将重定向更新到原条目
+如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。
+您有责任确保链接会被正确指向他们应该被指向的地方
 
-注意如果新页面已经有内容的话,页面将'''不会'''被移动,
-除非新页面无内容或是重定向页,而且没有修订历史。
-这意味着您再必要时可以在移动到新页面后再移回老的页面,
-同时您也无法覆盖现有页面。
+注意:即使新条目已经有对应页面,此页面也'''不会'''被移动,除非新页面无任何编辑历史或是重定向页。
+这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。
 
 '''警告!'''
-对一个经常被访问的页面而言这可能是一个重大与唐突的更改;
-请在行动前先了解其所可能带来的后果。",
+对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;
+请在行动前先了解您的修改可能带来的一切后果。",
 'movepagetext-noredirectfixer' => "用下面的表单来重命名一个页面,并将其修订历史同时移动到新页面。
 老的页面将成为新页面的重定向页。
 请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。
@@ -2725,14 +2727,14 @@ $1被封禁的理由是:“$2”',
 
 在这些情况下,您在必要时必须手工移动或合并页面。",
 'movearticle' => '移动页面:',
-'moveuserpage-warning' => "'''警告:'''将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
+'moveuserpage-warning' => "'''警告:'''将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
 'movenologin' => '未登录',
 'movenologintext' => '您必须是一名登记用户并且[[Special:UserLogin|登录]]
 后才可移动一个页面。',
-'movenotallowed' => '没有权限移动页面。',
-'movenotallowedfile' => '没有权限移动文件。',
-'cant-move-user-page' => '没有权限移动用户页面(子页面除外)。',
-'cant-move-to-user-page' => '没有权限移动页面至用户页面(用户子页面除外)。',
+'movenotallowed' => '没有权限移动页面。',
+'movenotallowedfile' => '没有权限移动文件。',
+'cant-move-user-page' => '没有权限移动用户页面(子页面除外)。',
+'cant-move-to-user-page' => '没有权限移动页面至用户页面(用户子页面除外)。',
 'newtitle' => '新标题:',
 'move-watch' => '监视来源页面和目标页面',
 'movepagebtn' => '移动页面',
@@ -2786,11 +2788,11 @@ $1被封禁的理由是:“$2”',
 
 # Export
 'export' => '导出页面',
-'exporttext' => '您可以将特定页面或一组页面的文本以及编辑历史以XML格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”页面导入到另一个运行MediaWiki的网站。
+'exporttext' => '您可以将特定页面或一组页面的文本以及编辑历史以 XML 格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”导入到另一个运行 MediaWiki 的网站。
 
-要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择你是否需要导出带有页面历史的以前的修订本,或是只选择导出带有最后一次编辑信息的当前修订版本。
+要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择您是否需要导出带有页面历史的以前的修订版本,或是只选择导出带有最后一次编辑信息的当前修订版本。
 
-此外你还可以利用链接导出文件,例如你可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。',
+此外您还可以利用链接导出文件,例如您可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。',
 'exportall' => '导出所有页面',
 'exportcuronly' => '仅包含当前的修订,而不是全部的历史。',
 'exportnohistory' => "----
@@ -2894,43 +2896,43 @@ $1被封禁的理由是:“$2”',
 # JavaScriptTest
 'javascripttest' => 'JavaScript测试',
 'javascripttest-title' => '运行$1测试',
-'javascripttest-pagetext-noframework' => '此页é\9d¢è¢«ä¿\9dç\95\99ç\94¨äº\8eè¿\90è¡\8cJavaScript测试。',
+'javascripttest-pagetext-noframework' => '此页é\9d¢è¢«ä¿\9dç\95\99ç\94¨ä½\9cæ\89§è¡\8c JavaScript 测试。',
 'javascripttest-pagetext-unknownframework' => '未知的框架“$1”。',
 'javascripttest-pagetext-frameworks' => '请选择以下的框架之一:$1',
 'javascripttest-pagetext-skins' => '选择外观来运行测试:',
-'javascripttest-qunit-intro' => '请浏览mediawiki.org参阅[$1 测试文档]。',
+'javascripttest-qunit-intro' => '请浏览 mediawiki.org 查看[$1 测试文档]。',
 'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit 测试套件',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => '的用户页面',
-'tooltip-pt-anonuserpage' => '你用于编辑的IP地址的用户页面',
-'tooltip-pt-mytalk' => '的讨论页面',
+'tooltip-pt-userpage' => '的用户页面',
+'tooltip-pt-anonuserpage' => '您用于编辑的 IP 地址的用户页面',
+'tooltip-pt-mytalk' => '的讨论页面',
 'tooltip-pt-anontalk' => '有关本IP地址的编辑的讨论',
-'tooltip-pt-preferences' => '的系统设置',
-'tooltip-pt-watchlist' => '你正在监视更改的页面的列表',
-'tooltip-pt-mycontris' => '的贡献列表',
-'tooltip-pt-login' => '我们鼓励你登录,不过这不是强制的',
-'tooltip-pt-anonlogin' => '我们鼓励你登录,不过这不是强制的',
-'tooltip-pt-logout' => '退出登录',
+'tooltip-pt-preferences' => '的系统设置',
+'tooltip-pt-watchlist' => '您正在监视的页面的列表',
+'tooltip-pt-mycontris' => '的贡献列表',
+'tooltip-pt-login' => '我们鼓励您登录,但这不是必须的',
+'tooltip-pt-anonlogin' => '我们鼓励您登录,但这不是必须的',
+'tooltip-pt-logout' => '注销',
 'tooltip-ca-talk' => '有关内容页面的讨论',
-'tooltip-ca-edit' => '你可以编辑本页面。请在保存前使用预览按钮。',
+'tooltip-ca-edit' => '您可以编辑本页。请在保存前使用预览按钮查看修改。',
 'tooltip-ca-addsection' => '开始新段落',
-'tooltip-ca-viewsource' => '本页面受到保护。你可以查看其源代码。',
-'tooltip-ca-history' => '本页面过去的版本',
+'tooltip-ca-viewsource' => '本页面受保护。您可以查看它的源代码。',
+'tooltip-ca-history' => '本页面的历史版本',
 'tooltip-ca-protect' => '保护本页',
 'tooltip-ca-unprotect' => '更改本页面的保护',
 'tooltip-ca-delete' => '删除本页',
 'tooltip-ca-undelete' => '将这个页面恢复到被删除以前的状态',
 'tooltip-ca-move' => '移动本页',
-'tooltip-ca-watch' => '添加本页面至的监视列表',
-'tooltip-ca-unwatch' => '从你的监视列表删除本页面',
+'tooltip-ca-watch' => '添加本页面至的监视列表',
+'tooltip-ca-unwatch' => '从您的监视列表中删除本页',
 'tooltip-search' => '在{{SITENAME}}中搜索',
 'tooltip-search-go' => '如果相同的标题存在的话便直接前往该页面',
 'tooltip-search-fulltext' => '搜索含这些文字的页面',
 'tooltip-p-logo' => '访问首页',
 'tooltip-n-mainpage' => '访问首页',
 'tooltip-n-mainpage-description' => '访问首页',
-'tooltip-n-portal' => '关于本项目,你可以做什么,在哪里找到你需要的事物',
+'tooltip-n-portal' => '关于本项目,您可以做些什么,在哪里可以找到您需要的东西',
 'tooltip-n-currentevents' => '查看当前事件的背景信息',
 'tooltip-n-recentchanges' => '本wiki的最近更改列表',
 'tooltip-n-randompage' => '载入一个随机页面',
@@ -2948,7 +2950,7 @@ $1被封禁的理由是:“$2”',
 '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' => '查看系统信息',
@@ -2960,14 +2962,14 @@ $1被封禁的理由是:“$2”',
 'tooltip-preview' => '预览您的更改,请在保存前使用此功能!',
 'tooltip-diff' => '显示您对该文字所做的更改',
 'tooltip-compareselectedversions' => '查看此页面两个选定的修订版本间的差异。',
-'tooltip-watch' => '添加本页面至的监视列表',
+'tooltip-watch' => '添加本页面至的监视列表',
 'tooltip-watchlistedit-normal-submit' => '删除标题',
 'tooltip-watchlistedit-raw-submit' => '更新监视列表',
 'tooltip-recreate' => '重建该页面,无论是否被删除。',
 'tooltip-upload' => '开始上传',
-'tooltip-rollback' => '击“回退”恢复上一位贡献者对本页的编辑',
+'tooltip-rollback' => '击“回退”恢复上一位贡献者对本页的编辑',
 'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
-'tooltip-preferences-save' => '保存设',
+'tooltip-preferences-save' => '保存设',
 'tooltip-summary' => '请输入简短的摘要',
 
 # Stylesheets
@@ -3057,6 +3059,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-magic-words' => '魔术字($1)',
 'pageinfo-hidden-categories' => '隐藏分类($1)',
 'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-transclusions' => '$1个包含此页的页面',
 'pageinfo-toolboxlink' => '页面信息',
 'pageinfo-redirectsto' => '重定向到',
 'pageinfo-redirectsto-info' => '信息',
@@ -3065,6 +3068,10 @@ $1被封禁的理由是:“$2”',
 'pageinfo-protect-cascading' => '从这里开始连锁保护',
 'pageinfo-protect-cascading-yes' => '是',
 'pageinfo-protect-cascading-from' => '保护级联自',
+'pageinfo-category-info' => '分类信息',
+'pageinfo-category-pages' => '页数',
+'pageinfo-category-subcats' => '子类别数',
+'pageinfo-category-files' => '文件数',
 
 # Skin names
 'skinname-standard' => '标准',
@@ -3081,8 +3088,8 @@ $1被封禁的理由是:“$2”',
 'rcpatroldisabled' => '最新更改检查被关闭',
 'rcpatroldisabledtext' => '最新更改检查的功能目前已关闭。',
 'markedaspatrollederror' => '不能标志为已检查',
-'markedaspatrollederrortext' => '你需要指定某个版本才能标志为已检查。',
-'markedaspatrollederror-noautopatrol' => '您无法将自己所作的更改标记为已检查。',
+'markedaspatrollederrortext' => '您需要指定某个版本才能标记为已检查。',
+'markedaspatrollederror-noautopatrol' => '您无法将自己所作的更改标记为已检查。',
 'markedaspatrollednotify' => '$1的更改已被标记为已巡查。',
 'markedaspatrollederrornotify' => '标记为已巡查失败。',
 
@@ -3107,7 +3114,7 @@ $1',
 'nextdiff' => '下一编辑→',
 
 # Media information
-'mediawarning' => "'''警告''':该文件类型可能含有恶意代码。执行后你的系统可能受损。",
+'mediawarning' => "'''警告''':该类型的文件可能包含恶意代码。执行后您的系统可能会受损。",
 'imagemaxsize' => '图像大小限制:<br /><u>(文件描述页)</u>',
 'thumbsize' => '缩略图大小:',
 'widthheightpage' => '$1×$2,$3页',
@@ -3147,6 +3154,8 @@ $1',
 'minutes' => '$1分',
 'hours' => '$1小时',
 'days' => '$1天',
+'months' => '{{PLURAL:$1|$1个月|$1个月}}',
+'years' => '{{PLURAL:$1|$1年|$1年}}',
 'ago' => '$1前',
 'just-now' => '刚刚',
 
@@ -3604,7 +3613,7 @@ Variants for Chinese language
 
 # E-mail address confirmation
 'confirmemail' => '确认邮箱地址',
-'confirmemail_noemail' => '你还没有在你的[[Special:Preferences|用户资料设置]]中设置有效的电子邮件地址。',
+'confirmemail_noemail' => '您还没有在您的[[Special:Preferences|个人设置]]中设置有效的电子邮件地址。',
 'confirmemail_text' => '{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。
 点击以下按钮可向您的邮箱发送一封确认邮件。该邮件包含有一行代码链接;
 请在您的浏览器中加载此链接以确认您的邮箱地址是有效的。',
@@ -3619,8 +3628,8 @@ Variants for Chinese language
 'confirmemail_needlogin' => '您需要$1以确认您的邮箱地址。',
 'confirmemail_success' => '您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。',
 'confirmemail_loggedin' => '您的邮箱地址现在已被确认。',
-'confirmemail_error' => '你的确认过程发生错误。',
-'confirmemail_subject' => '{{SITENAME}}电子邮件地址确认',
+'confirmemail_error' => '在确认您的过程中发生错误。',
+'confirmemail_subject' => '来自{{SITENAME}}的电子邮件地址确认函',
 'confirmemail_body' => '来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您
 的电子邮箱地址。
 
@@ -3659,8 +3668,8 @@ $3
 $5
 
 确认码会在$4过期。',
-'confirmemail_invalidated' => '电邮地址确认已取消',
-'invalidateemail' => '取消电邮确认',
+'confirmemail_invalidated' => '邮件地址确认已取消',
+'invalidateemail' => '取消邮件地址确认',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[跨网站的编码转换不可用]',
@@ -3733,16 +3742,16 @@ $5
 'lag-warn-high' => '由于数据库的过度延迟,过去$1秒的更改未必会在这个列表中显示。',
 
 # Watchlist editor
-'watchlistedit-numitems' => '不计讨论页面,你的监视列表包含$1个标题。',
-'watchlistedit-noitems' => '的监视列表中没有标题。',
+'watchlistedit-numitems' => '不包括讨论页面,您的监视列表包含$1个标题。',
+'watchlistedit-noitems' => '的监视列表中没有标题。',
 'watchlistedit-normal-title' => '编辑监视列表',
 'watchlistedit-normal-legend' => '删除监视列表中的标题',
-'watchlistedit-normal-explain' => '你的监视列表中的标题显示在下方。要删除标题,请勾选它前面选择框并单击“{{int:Watchlistedit-normal-submit}}”。你也可以[[Special:EditWatchlist/raw|编辑原始列表]]。',
+'watchlistedit-normal-explain' => '您的监视列表中的标题会显示在下方。要删除标题,请勾选它前面的选择框并点击“{{int:Watchlistedit-normal-submit}}”。您也可以[[Special:EditWatchlist/raw|编辑原始列表]]。',
 'watchlistedit-normal-submit' => '删除标题',
-'watchlistedit-normal-done' => '已从你的监视列表删除$1个标题:',
+'watchlistedit-normal-done' => '已从您的监视列表删除了$1个标题:',
 'watchlistedit-raw-title' => '编辑原始监视列表',
 'watchlistedit-raw-legend' => '编辑原始监视列表',
-'watchlistedit-raw-explain' => 'æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84æ \87é¢\98å\9c¨ä¸\8bé\9d¢æ\98¾ç¤ºï¼\8cå\90\8cæ\97¶äº¦é\83½å\8f¯ä»¥é\80\9aè¿\87ç¼\96è¾\91è¿\99个表å\8e»å\8a å\85¥ä»¥å\8f\8a移é\99¤æ \87é¢\98ï¼\9bä¸\80è¡\8cä¸\80个æ \87é¢\98ã\80\82å½\93å®\8cæ\88\90以å\90\8eï¼\8cç\82¹å\87»{{int:Watchlistedit-raw-submit}}ã\80\82你亦é\83½å\8f¯ä»¥å\8e»用[[Special:EditWatchlist|标准编辑器]]。',
+'watchlistedit-raw-explain' => 'æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84æ \87é¢\98å\9c¨ä¸\8bé\9d¢æ\98¾ç¤ºï¼\8cå\90\8cæ\97¶ä¹\9få\8f¯ä»¥å\8f¯ä»¥é\80\9aè¿\87ç¼\96è¾\91è¿\99个表å\8e»å\8a å\85¥ä»¥å\8f\8a移é\99¤æ \87é¢\98ï¼\9bä¸\80è¡\8cä¸\80个æ \87é¢\98ã\80\82å½\93å®\8cæ\88\90以å\90\8eï¼\8cç\82¹å\87»{{int:Watchlistedit-raw-submit}}ã\80\82æ\82¨ä¹\9få\8f¯ä»¥ä½¿用[[Special:EditWatchlist|标准编辑器]]。',
 'watchlistedit-raw-titles' => '标题:',
 'watchlistedit-raw-submit' => '更新监视列表',
 'watchlistedit-raw-done' => '您的监视列表已经更新。',
@@ -3782,11 +3791,11 @@ $5
 'version-poweredby-credits' => "本Wiki由'''[//www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
 'version-credits-summary' => '我们感谢下列人士为[[Special:Version|MediaWiki]]作出的贡献。',
-'version-license-info' => 'MediaWiki为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本
+'version-license-info' => 'MediaWiki 是一款自由软件;您可根据自由软件基金会所发表的 GNU 通用公共许可证条款规定,无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本,将本程序再发布与/或做出修改
 
-MediaWiki是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权
+MediaWiki 是基于使用目的而加以发布,然而不负任何担保责任;也没有对适售性或特定目的适用性所为的默示性担保。详情请参照 GNU 通用公共许可证条款
 
-您应已收到附随于本程序的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授权的副本];如果没有,请写信至自由软件基金会:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 在线阅读]。',
+您应已收到附随于本程序的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共许可证副本];如果没有,请发送邮件至自由软件基金会:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 在线阅读]。',
 'version-software' => '已安装的软件',
 'version-software-product' => '产品',
 'version-software-version' => '版本',
@@ -3800,7 +3809,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'filepath' => '文件路径',
 'filepath-page' => '文件名:',
 'filepath-submit' => '提交',
-'filepath-summary' => 'æ­¤ç\89¹æ®\8a页é\9d¢è¿\94å\9b\9eæ\96\87件ç\9a\84å®\8cæ\95´è·¯å¾\84ã\80\82å\9b¾å\83\8fä¼\9a以å®\8cæ\95´ç\9a\84å\88\86辨ç\8e\87æ\98¾ç¤ºï¼\8cå\85¶å®\83ç\9a\84æ\96\87件类å\9e\8b亦将直接通过关联的应用程序打开。',
+'filepath-summary' => 'æ­¤ç\89¹æ®\8a页é\9d¢è¿\94å\9b\9eæ\96\87件ç\9a\84å®\8cæ\95´è·¯å¾\84ã\80\82å\9b¾å\83\8fä¼\9a以å®\8cæ\95´ç\9a\84å\88\86辨ç\8e\87æ\98¾ç¤ºï¼\8cå\85¶å®\83ç\9a\84æ\96\87件类å\9e\8bä¹\9f将直接通过关联的应用程序打开。',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => '搜索重复文件',
@@ -3868,7 +3877,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'compare-submit' => '对比',
 'compare-invalid-title' => '您指定的标题无效。',
 'compare-title-not-exists' => '您指定的标题不存在。',
-'compare-revision-not-exists' => '你指定的版本不存在。',
+'compare-revision-not-exists' => '您指定的修订版本不存在。',
 
 # Database error messages
 'dberr-header' => '本wiki出现了问题',
@@ -3876,7 +3885,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 本网站出现了一些技术问题。',
 'dberr-again' => '请等待几分钟后重试。',
 'dberr-info' => '(无法连接到数据库服务器:$1)',
-'dberr-usegoogle' => '在此期间您可以尝试用Google来搜索。',
+'dberr-usegoogle' => '在此期间您可以尝试用 Google 来搜索。',
 'dberr-outofdate' => '须注意他们索引出来的内容可能不是最新的。',
 'dberr-cachederror' => '这是所请求页面的缓存副本,可能不是最新的。',
 
@@ -3927,9 +3936,13 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'logentry-newusers-create2' => '创建用户帐户 $3 由 $1',
 'logentry-newusers-autocreate' => '账户$1被自动创建',
 'newuserlog-byemail' => '密码已用电子邮件发送',
+'logentry-rights-rights' => '$1将$3的用户组从$4改为$5',
+'logentry-rights-rights-legacy' => '$1更改$3的用户组',
+'logentry-rights-autopromote' => '$1的用户组已自动从$4改为$5',
+'rightsnone' => '(无)',
 
 # Feedback
-'feedback-bugornote' => '如果你准备好详细描述一个技术问题,请[$1 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名和使用的浏览器。',
+'feedback-bugornote' => '如果您准备好详细描述一个技术问题,请[$1 报告bug]。或者您也可以使用下面的简单表格。您的评论将被添加至页面“[$3 $2]”,附有您的用户名和所使用的浏览器。',
 'feedback-subject' => '主题:',
 'feedback-message' => '信息:',
 'feedback-cancel' => '取消',
@@ -3938,7 +3951,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'feedback-error1' => '错误:从API返回无法识别的结果',
 'feedback-error2' => '错误:编辑失败',
 'feedback-error3' => '错误:API没有响应',
-'feedback-thanks' => '谢谢!的反馈已发布至页面“[$2 $1]”。',
+'feedback-thanks' => '谢谢!的反馈已发布至页面“[$2 $1]”。',
 'feedback-close' => '完成',
 'feedback-bugcheck' => '请检查本bug是否为[$1 已知bug]。',
 'feedback-bugnew' => '我检查了。报告新bug',
@@ -3948,7 +3961,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'searchsuggest-containing' => '含有...',
 
 # API errors
-'api-error-badaccess-groups' => '你没有将文件上传到此wiki的权限。',
+'api-error-badaccess-groups' => '您没有将文件上传到此 wiki 的权限。',
 'api-error-badtoken' => '内部错误:会话无效。',
 'api-error-copyuploaddisabled' => '通过URL上传的功能已被此服务器禁用。',
 'api-error-duplicate' => '在网站上已经具有相同内容的{{PLURAL:$1|[$2 另一个文件]|[$2 另一些文件]}}。',
@@ -3965,10 +3978,10 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'api-error-filetype-banned' => '此类文件被禁止。',
 'api-error-filetype-banned-type' => '$1{{PLURAL:$4|不是允许的文件类型}}。允许的{{PLURAL:$3|文件类型是|文件类型有}}$2。',
 'api-error-filetype-missing' => '该文件没有扩展名。',
-'api-error-hookaborted' => '试图进行的修改被一个扩展钩子终止。',
+'api-error-hookaborted' => '试图进行的修改被一个扩展钩子终止。',
 'api-error-http' => '内部错误:无法连接到服务器。',
 'api-error-illegal-filename' => '文件名非法。',
-'api-error-internal-error' => '内部错误:此wiki在处理的上传数据时出现了错误。',
+'api-error-internal-error' => '内部错误:此wiki在处理的上传数据时出现了错误。',
 'api-error-invalid-file-key' => '内部错误:找不到临时文件。',
 'api-error-missingparam' => '内部错误:请求中缺少参数。',
 'api-error-missingresult' => '内部错误:无法确定是否复制成功。',
@@ -3979,13 +3992,14 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 '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',
 'api-error-unknown-error' => '内部错误:尝试上传文件时出错。',
 'api-error-unknown-warning' => '未知的警告:$1',
 'api-error-unknownerror' => '未知错误:$1。',
-'api-error-uploaddisabled' => '该wiki停用上传。',
+'api-error-uploaddisabled' => '该 wiki 禁用上传功能。',
 'api-error-verification-error' => '该文件可能损坏或扩展名错误。',
 
 # Durations
index 2e7d1f4..613a60d 100644 (file)
@@ -216,7 +216,7 @@ $messages = array(
 'tog-hideminor' => '隱藏最近更改中的小修改',
 'tog-hidepatrolled' => '隱藏最近更改中巡查過的編輯',
 'tog-newpageshidepatrolled' => '隱藏新頁面清單中巡查過的頁面',
-'tog-extendwatchlist' => '展開監視清單以顯示所有更改,不只是最近的',
+'tog-extendwatchlist' => '展開監視列表以顯示所有更改,不只是最近的',
 'tog-usenewrc' => '在最近更改和監視列表中整合同一頁的修改 (需要JavaScript)',
 'tog-numberheadings' => '標題自動編號',
 'tog-showtoolbar' => '顯示編輯工具欄 (需要JavaScript)',
@@ -243,7 +243,7 @@ $messages = array(
 'tog-externaleditor' => '預設使用外部編輯器 (進階者專用,需要在您的電腦上作出一些特別設定。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-externaldiff' => '預設使用外部差異分析 (進階者專用,需要在您的電腦上作出一些特別設定。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-showjumplinks' => '啟用「跳轉到」訪問連結',
-'tog-uselivepreview' => '使用實時預覽 (需要JavaScript) (試驗中)',
+'tog-uselivepreview' => '使用實時預覽 (需要JavaScript)(試驗中)',
 'tog-forceeditsummary' => '當沒有輸入摘要時提醒我',
 'tog-watchlisthideown' => '監視列表中隱藏我的編輯',
 'tog-watchlisthidebots' => '監視列表中隱藏機器人的編輯',
@@ -344,6 +344,7 @@ $messages = array(
 'newwindow' => '(以新視窗開啟)',
 'cancel' => '取消',
 'moredotdotdot' => '更多...',
+'morenotlisted' => '更多未列出的項目...',
 'mypage' => '頁面',
 'mytalk' => '討論',
 'anontalk' => '該IP的對話頁',
@@ -459,7 +460,7 @@ $1',
 'policy-url' => 'Project:方針',
 'portal' => '社群主頁',
 'portal-url' => 'Project:社區主頁',
-'privacy' => 'é\9a±ç§\81æ¬\8aæ\94¿ç­\96',
+'privacy' => '隱私政策',
 'privacypage' => 'Project:隱私權政策',
 
 'badaccess' => '權限錯誤',
@@ -541,37 +542,38 @@ $1',
 「$1」
 來自於函數「$2」。
 數據庫返回錯誤「$3: $4」。',
-'laggedslavemode' => '警告: 頁面可能不包含最近的更新。',
+'laggedslavemode' => "'''警告:'''頁面可能不包含最近的更新。",
 'readonly' => '資料庫禁止訪問',
 'enterlockreason' => '請輸入禁止訪問原因, 包括估計重新開放的時間',
 'readonlytext' => '資料庫目前禁止輸入新內容及更改,
 這很可能是由於資料庫正在維修,之後即可恢復。
-管理員有如下解釋: $1',
-'missing-article' => '資料庫找不到文字"$1" $2。
 
-<p>通常這是由於修訂歷史頁上過時的連結到已經被刪除的頁面所導致的。</p>
+管理員有如下解釋:$1',
+'missing-article' => '資料庫找不到文字「$1」 $2。
 
-<p>如果情況不是這樣,您可能找到了軟體內的一個臭蟲。
-請記錄下URL地址,並向[[Special:ListUsers/sysop|管理員]]報告。</p>',
+通常這是由於修訂歷史頁上過時的連結到已經被刪除的頁面所導致的。
+
+果情況不是這樣,您可能找到了軟體內的一個臭蟲。
+請記錄下URL地址,並向[[Special:ListUsers/sysop|管理員]]報告',
 'missingarticle-rev' => '(修訂#: $1)',
 'missingarticle-diff' => '(差異: $1, $2)',
 'readonly_lag' => '附屬資料庫伺服器正在將快取更新到主伺服器,資料庫已被自動鎖定',
 'internalerror' => '內部錯誤',
 'internalerror_info' => '內部錯誤:$1',
-'fileappenderrorread' => '當附加時無法讀取"$1"。',
-'fileappenderror' => '不能附加"$1"到"$2"。',
-'filecopyerror' => '無法複製檔案"$1"到"$2"。',
-'filerenameerror' => '無法重新命名檔案"$1"到"$2"。',
+'fileappenderrorread' => '當附加時無法讀取「$1」。',
+'fileappenderror' => '不能附加「$1」到「$2」。',
+'filecopyerror' => '無法複製檔案「$1」到「$2」。',
+'filerenameerror' => '無法重新命名檔案「$1」到「$2」。',
 'filedeleteerror' => '無法刪除「$1」檔案。',
-'directorycreateerror' => '無法建立目錄"$1"。',
+'directorycreateerror' => '無法建立目錄「$1」。',
 'filenotfound' => '找不到「$1」檔案。',
 'fileexistserror' => '無法寫入檔案"$1": 檔案已存在',
 'unexpected' => '不正常值:"$1"="$2"。',
 'formerror' => '錯誤:無法提交表單',
 'badarticleerror' => '無法在此頁進行該操作。',
-'cannotdelete' => '無法刪除頁面或圖片“$1”
+'cannotdelete' => '無法刪除頁面或圖片「$1」
 它可能已經被其他人刪除了。',
-'cannotdelete-title' => '無法刪除“$1”',
+'cannotdelete-title' => '無法刪除頁面「$1」',
 'delete-hook-aborted' => '刪除被勾點中止。
 它沒有提供解釋。',
 'badtitle' => '錯誤的標題',
@@ -586,7 +588,8 @@ $1',
 'viewsource' => '查看原始碼',
 'viewsource-title' => '查看$1的源代碼',
 'actionthrottled' => '動作已壓制',
-'actionthrottledtext' => '基於反垃圾的考量,您現在於這段短時間之中限制去作這一個動作,而您已經超過這個上限。請在數分鐘後再嘗試。',
+'actionthrottledtext' => '基於反垃圾的考量,您現在於這段短時間之中限制去作這一個動作,而您已經超過這個上限。
+請在數分鐘後再嘗試。',
 'protectedpagetext' => '該頁面已被保護以防止編輯或其他操作。',
 'viewsourcetext' => '{{GENDER:|你|妳|你}}可以檢視並複製本頁面的原始碼。',
 'viewyourtext' => "您可以查看並複製'''您對此頁面作出編輯後'''的源代碼:",
@@ -596,16 +599,16 @@ $1',
 改變此頁將影響其他在此wiki上的用戶介面外觀。
 如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。",
 'sqlhidden' => '(隱藏SQL查詢)',
-'cascadeprotected' => '這個頁面已經被保護,因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含:
+'cascadeprotected' => '這個頁面已經被保護,因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含
 $2',
 'namespaceprotected' => "您並沒有權限編輯'''$1'''名字空間的頁面。",
 'customcssprotected' => '你並無權限編輯此CSS頁面,因為它包含了其他用戶的個人設置。',
 'customjsprotected' => '你並無權限去編輯此JavaScript頁面,因為他包含了另一位用戶的個人設定。',
 'ns-specialprotected' => '特殊頁面是不可以編輯的。',
 'titleprotected' => "這個標題已經被[[User:$1|$1]]保護以防止建立。理由是''$2''。",
-'filereadonlyerror' => '無法修改文件" $1 "因為文件庫" $2 "處於唯讀模式。 !
-管理員鎖定它的解釋是:" $3 "。',
-'invalidtitle-knownnamespace' => '使用名字空間“$2”和文本“$3”的無效標題',
+'filereadonlyerror' => '無法修改文件「$1」因為文件庫「$2」處於唯讀模式。 !
+管理員鎖定它的解釋是:「$3」。',
+'invalidtitle-knownnamespace' => '使用名字空間「$2」和文本「$3」的無效標題',
 'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1和文本“$2”的無效標題',
 'exception-nologin' => '未登入',
 'exception-nologin-text' => '你需要登錄此wiki查閲此頁或進行操作。',
@@ -625,10 +628,10 @@ $2',
 不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
 'yourname' => '用戶名:',
 'yourpassword' => '您的密碼:',
-'yourpasswordagain' => '再次輸入密碼:',
+'yourpasswordagain' => '再次輸入密',
 'remembermypassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})',
 'securelogin-stick-https' => '登入後繼續以HTTPS連接',
-'yourdomainname' => '您的網域:',
+'yourdomainname' => '您的網域',
 'password-change-forbidden' => '您不可更改此wiki上的密碼。',
 'externaldberror' => '這可能是由於驗證資料庫錯誤或您被禁止更新您的外部賬號。',
 'login' => '登入',
@@ -678,9 +681,9 @@ $2',
 
 如果是其他人發出了該請求,或者您已經記起了您的密碼並不準備改變它,
 您可以忽略此消息並繼續使用您的舊密碼。',
-'noemail' => '用戶"$1"沒有登記電子郵件地址。',
+'noemail' => '用戶「$1」沒有登記電子郵件地址。',
 'noemailcreate' => '您需要提供一個有效的電子郵件地址',
-'passwordsent' => '用戶"$1"的新密碼已經寄往所登記的電子郵件地址。
+'passwordsent' => '用戶「$1」的新密碼已經寄往所登記的電子郵件地址。
 請在收到後再登入。',
 'blocked-mailpassword' => '您的IP地址處於查封狀態而不允許編輯,為了安全起見,密碼恢復功能已被禁用。',
 'eauthentsent' => '一封確認信已經發送到所示的地址。在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
@@ -705,12 +708,13 @@ $2',
 'login-throttled' => '您已經嘗試多次的登入動作。
 請稍等多一會再試。',
 'login-abort-generic' => '登入錯誤 - 中止',
-'loginlanguagelabel' => '語言$1',
+'loginlanguagelabel' => '語言$1',
 'suspicious-userlogout' => '您登出的要求已經被拒絕,因為它可能是由已損壞的瀏覽器或者快取代理傳送。',
 
 # E-mail sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 參數中的未知錯誤',
 'user-mail-no-addy' => '嘗試不帶電郵地址發送電郵。',
+'user-mail-no-body' => '試圖發送空的或主體不合理短的電子郵件。',
 
 # Change password dialog
 'resetpass' => '更改密碼',
@@ -797,10 +801,10 @@ $2
 
 # Edit pages
 'summary' => '摘要:',
-'subject' => '主題:',
+'subject' => '主題',
 'minoredit' => '這是一個小修改',
 'watchthis' => '監視本頁',
-'savearticle' => '儲存頁面',
+'savearticle' => '儲存本頁',
 'preview' => '預覽',
 'showpreview' => '顯示預覽',
 'showlivepreview' => '即時預覽',
@@ -812,7 +816,7 @@ $2
 'missingcommenttext' => '請在下面輸入評論。',
 'missingcommentheader' => "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊「{{int:savearticle}}」,您的編輯將不帶標題儲存。",
 'summary-preview' => '摘要預覽:',
-'subject-preview' => '主題/標題預覽:',
+'subject-preview' => '主題/標題預覽:',
 'blockedtitle' => '用戶被查封',
 'blockedtext' => "'''您的用戶名或IP地址已被封禁。'''
 
@@ -852,10 +856,10 @@ $2
 'newarticle' => '(新)',
 'newarticletext' => '您進入了一個尚未建立的頁面。
 要建立該頁面,請在下面的編輯框中輸入內容(詳情參見[[{{MediaWiki:Helppage}}|幫助]])。
-如果您是不小心來到此頁面,直接點擊您瀏覽器中的“返回”按鈕返回。',
+如果您是不小心來到此頁面,直接點擊您瀏覽器中的「返回」按鈕返回。',
 'anontalkpagetext' => "---- ''這是一個還未建立賬號的匿名用戶的對話頁。我們因此只能用IP地址來與他/她聯絡。該IP地址可能由幾名用戶共享。如果您是一名匿名用戶並認為本頁上的評語與您無關,請[[Special:UserLogin/signup|創建新賬號]]或[[Special:UserLogin|登入]]以避免在未來於其他匿名用戶混淆。''",
-'noarticletext' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜此頁標題]],
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜有關日誌],
+'noarticletext' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜此頁標題]],
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜有關日誌],
 或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。',
 'noarticletext-nopermission' => '此頁目前沒有內容。
 您可以在其它頁[[Special:Search/{{PAGENAME}}|搜尋此頁標題]],或<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋有關日誌]</span>,但您沒有權限建立此頁。',
@@ -863,7 +867,8 @@ $2
 
 這通常是因為過時的頁面歷史鏈接被刪除。
 詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。',
-'userpage-userdoesnotexist' => '未曾創建用戶名「<nowiki>$1</nowiki>」。請在創建/編輯這個頁面前先檢查一下。',
+'userpage-userdoesnotexist' => '用戶「$1」尚未註冊。
+請在建立/編輯這個頁面前先檢查一下。',
 'userpage-userdoesnotexist-view' => '未曾建立用戶名「$1」。',
 'blocked-notice-logextract' => '這位用戶現正被封鎖。
 下面有最近的封鎖紀錄以供參考:',
@@ -882,7 +887,8 @@ $2
 '''還沒有儲存!'''",
 'sitejspreview' => "'''記住你現在只是預覽此 JavaScript 代碼。'''
 '''還沒有儲存!'''",
-'userinvalidcssjstitle' => "'''警告:''' 不存在面板\"\$1\"。注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/vector.css 不同於 {{ns:user}}:Foo/Vector.css。",
+'userinvalidcssjstitle' => "'''警告:''' 不存在面板「$1」。
+注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/vector.css 不同於 {{ns:user}}:Foo/Vector.css。",
 'updated' => '(已更新)',
 'note' => "'''注意:'''",
 'previewnote' => "'''請記住這只是預覽。'''
@@ -900,10 +906,10 @@ $2
 'token_suffix_mismatch' => "'''由於您用戶端中的編輯信符毀損了一些標點符號字元,為防止編輯的文字損壞,您的編輯已經被拒絕。'''
 這種情況通常出現於使用含有很多臭蟲、以網絡為主的匿名代理服務的時候。",
 'edit_form_incomplete' => '編輯表單的某些部分沒有到達伺服器 ;請檢查您的編輯內容是否完整並再試一次。',
-'editing' => '編輯“$1”',
+'editing' => '編輯「$1」',
 'creating' => '創建$1',
-'editingsection' => '編輯“$1”(段落)',
-'editingcomment' => '編輯“$1”(新段落)',
+'editingsection' => '編輯「$1」(段落)',
+'editingcomment' => '編輯「$1」(新段落)',
 'editconflict' => '編輯衝突:$1',
 'explainconflict' => "有人在{{GENDER:|你|妳|你}}開始編輯後更改了頁面。
 上面的文字框內顯示的是目前本頁的內容。
@@ -927,7 +933,8 @@ $2
 '''不要在未獲授權的情況下發表!'''",
 'longpageerror' => "'''錯誤:您所提交的文本長度有{{PLURAL:$1|1|$1}}KB,這大於{{PLURAL:$2|1|$2}}KB的最大值。 '''
 因此,該文本無法保存。",
-'readonlywarning' => "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''您或許希望先將本段文字複製並保存到文字檔案,然後等一會兒再修改。
+'readonlywarning' => "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''
+您可先複製您的文字並保存到文字檔案,然後等一會兒再修改。
 
 鎖定資料庫的管理員有如下解釋:$1",
 'protectedpagewarning' => "'''警告:本頁已經被保護,只有擁有管理員許可權的用戶才可修改。'''
@@ -969,7 +976,7 @@ $2
 'defaultmessagetext' => '預設訊息文字',
 'content-failed-to-parse' => '未能轉換$2 內容成為$1:$3',
 'invalid-content-data' => '內容資料無效',
-'content-not-allowed-here' => '[[$2]]不允許"$1"頁上的內容',
+'content-not-allowed-here' => '[[$2]]頁面上不允許「$1」內容',
 
 # Content models
 'content-model-wikitext' => 'wiki語法',
@@ -1015,8 +1022,8 @@ $2
 'viewpagelogs' => '查詢這個頁面的日誌',
 'nohistory' => '沒有本頁的修訂記錄。',
 'currentrev' => '最新修訂版本',
-'currentrev-asof' => '$1的最新修訂版本',
-'revisionasof' => '在$1所做的修訂版本',
+'currentrev-asof' => '$1的最新修訂版本',
+'revisionasof' => '$1的修訂版本',
 'revision-info' => '在$1由$2所做的修訂版本',
 'previousrevision' => '←上一修訂',
 'nextrevision' => '下一修訂→',
@@ -1072,7 +1079,7 @@ $2
 'revdelete-nologid-title' => '無效的日誌項目',
 'revdelete-nologid-text' => '您尚未指定一個目標日誌項目去進行這個動作或指定的項目不存在。',
 'revdelete-no-file' => '指定的檔案不存在。',
-'revdelete-show-file-confirm' => '{{GENDER:|你|妳|你}}是否真的是想去檢視於$2 $3刪除 "$1" 的檔案修訂?',
+'revdelete-show-file-confirm' => '{{GENDER:|你|妳|你}}是否真的是想去檢視於$2 $3刪除「<nowiki>$1</nowiki>」的檔案修訂?',
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''選取[[:$1]]的$2次修訂:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|選取的日誌項目}}:'''",
@@ -1158,9 +1165,9 @@ $1",
 'mergelogpagetext' => '以下是一個最近由一個頁面的修訂歷史合併到另一個頁面的列表。',
 
 # Diffs
-'history-title' => '$1:修訂歷史',
+'history-title' => '「$1」的修訂歷史',
 'difference-title' => '$1:修訂版本之間的差異',
-'difference-title-multipage' => '"$1"和"$2": 頁面之間的差異',
+'difference-title-multipage' => '頁面「$1」與「$2」之間的差異',
 'difference-multipage' => '(頁面間的差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比較選定的修訂版本',
@@ -1176,9 +1183,9 @@ $1",
 # Search results
 'searchresults' => '搜尋結果',
 'searchresults-title' => '對「$1」的搜尋結果',
-'searchresulttext' => '有關搜索{{SITENAME}}的更多詳情,參見[[{{MediaWiki:Helppage}}|{{int:help}}]]。',
-'searchsubtitle' => '查詢\'\'\'[[:$1]]\'\'\'([[Special:Prefixindex/$1|所有以 "$1" 開頭的頁面]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|所有連結到 "$1" 的頁面]])',
-'searchsubtitleinvalid' => '查詢"$1"',
+'searchresulttext' => '有關搜索{{SITENAME}}的更多詳情參見[[{{MediaWiki:Helppage}}|{{int:help}}]]。',
+'searchsubtitle' => "查詢'''[[:$1]]'''([[Special:Prefixindex/$1|所有以「$1」開頭的頁面]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|所有連結到「$1」的頁面]])",
+'searchsubtitleinvalid' => "查詢'''$1'''",
 'toomanymatches' => '過多的匹配已回應,請嘗試一個不同的查詢',
 'titlematches' => '頁面標題相符',
 'notitlematches' => '沒有找到匹配頁面題目',
@@ -1204,13 +1211,13 @@ $1",
 'searchprofile-project-tooltip' => '在$1中搜尋',
 'searchprofile-images-tooltip' => '搜尋檔案',
 'searchprofile-everything-tooltip' => '搜尋全部(包括討論頁面)',
-'searchprofile-advanced-tooltip' => '在自定名字空間中搜尋',
+'searchprofile-advanced-tooltip' => '在自定名字空間中搜尋',
 'search-result-size' => '$1 ($2個字)',
 'search-result-category-size' => '$1個成員($2個子分類,$3個檔案)',
 'search-result-score' => '相關度: $1%',
 'search-redirect' => '(重定向 $1)',
 'search-section' => '(段落 $1)',
-'search-suggest' => '{{GENDER:|你|妳|你}}是否解: $1',
+'search-suggest' => '{{GENDER:|你|妳|你}}是不是要找:$1',
 'search-interwiki-caption' => '姊妹計劃',
 'search-interwiki-default' => '$1項結果:',
 'search-interwiki-more' => '(更多)',
@@ -1261,9 +1268,9 @@ $1",
 'prefs-personal' => '用戶資料',
 'prefs-rc' => '最近更改',
 'prefs-watchlist' => '監視列表',
-'prefs-watchlist-days' => '監視列表中顯示記錄的天數:',
+'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' => '雜項',
@@ -1295,7 +1302,7 @@ $1",
 'localtime' => '當地時間:',
 'timezoneuseserverdefault' => '使用預設($1)',
 'timezoneuseoffset' => '其他 (指定偏移)',
-'timezoneoffset' => '時差¹:',
+'timezoneoffset' => '時差¹',
 'servertime' => '伺服器時間:',
 'guesstimezone' => '從瀏覽器填寫',
 'timezoneregion-africa' => '非洲',
@@ -1341,10 +1348,10 @@ $1",
 'prefs-help-gender' => '可選:用於軟體中的性別指定。此項資料將會被公開。',
 'email' => '電子郵件',
 'prefs-help-realname' => '真實姓名是可選的。
-如果您選擇提供它,那它便用以對您的貢獻署名。',
+如果您選擇提供它,它會用於貢獻署名。',
 'prefs-help-email' => '電子郵件是可選的,但當您忘記您的密碼時需要將新密碼重設,就會用電郵寄回給您。',
 'prefs-help-email-others' => '您亦可以在您沒有公開自己的用戶身分時透過您的用戶頁或用戶討論頁與您聯繫。',
-'prefs-help-email-required' => 'é\9c\80è¦\81é\9b»å­\90é\83µä»¶å\9c°å\9d\80。',
+'prefs-help-email-required' => 'é\9b»å­\90é\83µä»¶å\9c°å\9d\80æ\98¯å¿\85å¡«é \85ç\9b®。',
 'prefs-info' => '基本資料',
 'prefs-i18n' => '國際化',
 'prefs-signature' => '簽名',
@@ -1372,9 +1379,9 @@ $1",
 'editinguser' => "更改用戶'''[[User:$1|$1]]''' 的用戶權限 $2",
 'userrights-editusergroup' => '編輯用戶群組',
 'saveusergroups' => '保存用戶群組',
-'userrights-groupsmember' => '屬於:',
-'userrights-groupsmember-auto' => '固有屬於:',
-'userrights-groups-help' => '您可以改動這位用戶所屬的群組:
+'userrights-groupsmember' => '屬於',
+'userrights-groupsmember-auto' => '固有屬於',
+'userrights-groups-help' => '您可以改動這位用戶所屬的群組
 * 已剔選的核取方塊代表該用戶屬於該群組。
 * 未剔選的核取方塊代表該用戶不是屬於該群組。
 * 有 * 項目表示一旦您加入該群組之後便不能移除它,反之亦然。',
@@ -1472,15 +1479,13 @@ $1",
 'right-sendemail' => '發電子郵件給其他用戶',
 'right-passwordreset' => '查看重置密碼郵件',
 
+# Special:Log/newusers
+'newuserlogpage' => '新進用戶名冊',
+'newuserlogpagetext' => '這是一個最近被創建用戶的新日誌',
+
 # User rights log
 'rightslog' => '用戶權限日誌',
 'rightslogtext' => '以下記錄了用戶權限的更改記錄。',
-'rightslogentry' => '將 $1 的權限從 $2 改為 $3',
-'rightslogentry-autopromote' => '自動由$2晉升至$3',
-'logentry-rights-rights' => '$1將$3的權限從$4改為$5',
-'logentry-rights-rights-legacy' => '$1更改$3的權限',
-'logentry-rights-autopromote' => '$1的權限自動從$4改為$5',
-'rightsnone' => '無',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '閱讀這個頁面',
@@ -1512,7 +1517,7 @@ $1",
 'action-importupload' => '由一個檔案上載中匯入這個頁面',
 'action-patrol' => '標示其它的編輯為已巡查的',
 'action-autopatrol' => '將您的編輯標示為已巡查的',
-'action-unwatchedpages' => '檢視未被監視的頁面',
+'action-unwatchedpages' => '檢視未被監視的頁面',
 'action-mergehistory' => '合併這個頁面的歷史',
 'action-userrights' => '編輯所有的權限',
 'action-userrights-interwiki' => '編輯在其它wiki上用戶的權限',
@@ -1521,7 +1526,7 @@ $1",
 
 # Recent changes
 'nchanges' => '$1次更改',
-'recentchanges' => '近期變動',
+'recentchanges' => '最近更改',
 'recentchanges-legend' => '最近更改選項',
 'recentchanges-summary' => '跟蹤這個wiki上的最新更改。',
 'recentchanges-feed-description' => '追蹤此訂閱在 wiki 上的最近更改。',
@@ -1546,14 +1551,14 @@ $1",
 'minoreditletter' => '小',
 'newpageletter' => '新',
 'boteditletter' => '機',
-'number_of_watching_users_pageview' => '[$1個關注用戶]',
+'number_of_watching_users_pageview' => '[$1位用戶在監視]',
 'rc_categories' => '分類界限(以"|"分割)',
 'rc_categories_any' => '任意',
 'rc-change-size-new' => '更改後$1字節',
 'newsectionsummary' => '/* $1 */ 新段落',
 'rc-enhanced-expand' => '顯示細節 (需要 JavaScript)',
 'rc-enhanced-hide' => '隱藏細節',
-'rc-old-title' => 'æ\9c\80å\88\9då\89µå»ºç\82º"$1"',
+'rc-old-title' => 'æ\9c\80å\88\9d建ç«\8bç\82ºã\80\8c$1ã\80\8d',
 
 # Recent changes linked
 'recentchangeslinked' => '相關更改',
@@ -1587,29 +1592,29 @@ $1",
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''使用檔案的完整版本
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替換文字]]</nowiki></code>'''使用放置於左側的一個框內的 200 像素寬的圖片,同時使用「替換文字」作為描述
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''直接連結到檔案而不顯示檔案",
-'upload-permitted' => '准許的檔案類型$1。',
-'upload-preferred' => '建議的檔案類型$1。',
-'upload-prohibited' => '禁止的檔案類型$1。',
+'upload-permitted' => '准許的檔案類型$1。',
+'upload-preferred' => '建議的檔案類型$1。',
+'upload-prohibited' => '禁止的檔案類型$1。',
 'uploadlog' => '上載紀錄',
 'uploadlogpage' => '上載紀錄',
 'uploadlogpagetext' => '以下是最近上載的檔案的一覽表。
 檢視[[Special:NewFiles|新檔案畫廊]]去看更富圖片的總覽。',
 'filename' => '檔案名',
 'filedesc' => '檔案描述',
-'fileuploadsummary' => '檔案描述:',
+'fileuploadsummary' => '檔案描述',
 'filereuploadsummary' => '檔案更改說明:',
-'filestatus' => '版權狀態:',
+'filestatus' => '版權狀態',
 'filesource' => '來源:',
 'uploadedfiles' => '已上載檔案',
 'ignorewarning' => '忽略警告並儲存檔案',
 'ignorewarnings' => '忽略所有警告',
 'minlength1' => '檔案名字必須至少有一個字母。',
-'illegalfilename' => '檔案名“$1”包含有頁面標題所禁止的字符。請改名後重新上傳。',
+'illegalfilename' => '檔案名「$1」包含有頁面標題所禁止的字符。請改名後重新上傳。',
 'filename-toolong' => '文件名不能超過240字節。',
 'badfilename' => '檔案名已被改為「$1」。',
 'filetype-mime-mismatch' => '檔案擴展名 ".$1" 不配所偵測檔案的MIME類型 ($2)。',
-'filetype-badmime' => 'MIME類別"$1"不是容許的檔案格式。',
-'filetype-bad-ie-mime' => '不可以上傳這個檔案,因為 Internet Explorer 會將它偵測為 "$1",它是一種不容許以及有潛在危險性之檔案類型。',
+'filetype-badmime' => 'MIME類別「$1」不是容許的檔案格式。',
+'filetype-bad-ie-mime' => '不可以上傳這個檔案,因為 Internet Explorer 會將它偵測為「$1」,它是一種不容許以及有潛在危險性之檔案類型。',
 'filetype-unwanted-type' => "'''\".\$1\"'''是一種不需要的檔案類型。
 建議的{{PLURAL:\$3|一種|多種}}檔案類型有\$2。",
 'filetype-banned-type' => "'''「.$1」'''{{PLURAL:$4|不是允許的檔案類型|是不允許的檔案類型}}。 
@@ -1659,14 +1664,14 @@ $1",
 'php-uploaddisabledtext' => 'PHP 檔案上載已經停用。請檢查 file_uploads 設定。',
 'uploadscripted' => '該檔案包含可能被網路瀏覽器錯誤解釋的 HTML 或腳本代碼。',
 'uploadvirus' => '該檔案包含有病毒!
-詳情$1',
+詳情$1',
 'uploadjava' => '該檔案是 ZIP 檔案,其中包含 Java 的.class 檔案。
 不允許上傳 Java 檔案,是因為他們可能會跳過安全限制。',
 'upload-source' => '來源檔案',
 'sourcefilename' => '來源檔案名:',
 'sourceurl' => '來源網址:',
 'destfilename' => '目標檔案名:',
-'upload-maxfilesize' => '檔案最大限制大小$1',
+'upload-maxfilesize' => '檔案最大限制大小$1',
 'upload-description' => '檔案描述',
 'upload-options' => '上載選項',
 'watchthisupload' => '監視這個檔案',
@@ -1690,33 +1695,33 @@ $1',
 'upload-too-many-redirects' => '在網址中有太多重新定向',
 'upload-unknown-size' => '未知的大小',
 'upload-http-error' => '已發生一個HTTP錯誤:$1',
-'upload-copy-upload-invalid-domain' => '不能從該域名上載檔ð£\97\88å\89¯æ\9c¬ã\80\82',
+'upload-copy-upload-invalid-domain' => '不能從該域名上載檔æ¡\88å\89¯æ\9c¬ã\80\82',
 
 # File backend
-'backend-fail-stream' => '無法流傳送文件$1。',
-'backend-fail-backup' => '無法備份文件$1。',
+'backend-fail-stream' => '無法流傳送文件「$1」。',
+'backend-fail-backup' => '無法備份文件「$1」。',
 'backend-fail-notexists' => '條目$1不存在。',
 'backend-fail-hashes' => '比較無法獲取文件hashes',
-'backend-fail-notsame' => '$1已存在不同的文件。',
-'backend-fail-invalidpath' => '$1不是有效的存儲路徑。',
+'backend-fail-notsame' => '「$1」已存在不同的檔案。',
+'backend-fail-invalidpath' => '「$1」不是有效的存儲路徑。',
 'backend-fail-delete' => '無法刪除「$1」檔案。',
 'backend-fail-describe' => '無法修改檔案「$1」的元數據。',
-'backend-fail-alreadyexists' => '“$1”頁面已存在',
+'backend-fail-alreadyexists' => '檔案「$1」已存在。',
 'backend-fail-store' => '無法在$2存儲文件$1。',
 'backend-fail-copy' => '無法複製文件$1到$2。',
 'backend-fail-move' => '無法移動文件$1到$2。',
 'backend-fail-opentemp' => '無法打開臨時文件。',
 'backend-fail-writetemp' => '無法寫臨時文件。',
 'backend-fail-closetemp' => '無法創建臨時文件。',
-'backend-fail-read' => 'æ\89¾ä¸\8då\88°æ\96\87件â\80\9c$1â\80\9d。',
-'backend-fail-create' => '無法寫入檔案  $1。',
-'backend-fail-maxsize' => '無法寫入檔𣗈$1​​,因為它大於$2字節。',
+'backend-fail-read' => 'æ\89¾ä¸\8då\88°æª\94æ¡\88ã\80\8c$1ã\80\8d。',
+'backend-fail-create' => '無法寫入檔案「$1」。',
+'backend-fail-maxsize' => '無法寫入檔案「$1」​​,因為它大於$2字節。',
 'backend-fail-readonly' => '「$1」儲存後端目前是唯讀模式,因為:「$2」',
-'backend-fail-synced' => '文件"$1"在內部存儲後端是不一致的區域。',
-'backend-fail-connect' => '無法連結至存儲後方“$1”。',
-'backend-fail-internal' => '存儲後方“$1”發生了一個未知錯誤。',
-'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於“$1”。',
-'backend-fail-batchsize' => '存儲後端被給予了$1次æª\94ð£\97\88 {{PLURAL:$1|æ\93\8dä½\9c\93\8dä½\9c}} ï¼\9bé\99\90å\88¶æ\98¯$2次{{PLURAL:$2|æ\93\8dä½\9c\93\8dä½\9c}}ã\80\82',
+'backend-fail-synced' => '文件「$1」在內部存儲後端是不一致的區域。',
+'backend-fail-connect' => '無法連結至存儲後方「$1」。',
+'backend-fail-internal' => '存儲後方「$1」發生了一個未知錯誤。',
+'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於「$1」。',
+'backend-fail-batchsize' => '存儲後端被給予了ã\80\8c$1ã\80\8d次æª\94æ¡\88 {{PLURAL:$1|æ\93\8dä½\9c\93\8dä½\9c}} ï¼\9bé\99\90å\88¶æ\98¯$2次{{PLURAL:$2|æ\93\8dä½\9c\93\8dä½\9c}}ã\80\82',
 'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法讀取或寫入檔案 $1 。',
 
 # File journal errors
@@ -1760,16 +1765,16 @@ $1',
 它可能是基於CGI的,因而不支持img_auth。
 請參見 https://www.mediawiki.org/wiki/Manual:Image_Authorization',
 'img-auth-notindir' => '所請求的路徑不在已經設定的上載目錄。',
-'img-auth-badtitle' => '不能夠由"$1"建立一個有效標題。',
-'img-auth-nologinnWL' => '您而家並未登入,"$1"不在白名單上。',
-'img-auth-nofile' => '檔案"$1"不存在。',
-'img-auth-isdir' => '您嘗試過存取一個目錄"$1"
+'img-auth-badtitle' => '不能夠由「$1」建立一個有效標題。',
+'img-auth-nologinnWL' => '您而家並未登入,「$1」不在白名單上。',
+'img-auth-nofile' => '檔案「$1」不存在。',
+'img-auth-isdir' => '您嘗試過存取一個目錄「$1」
 只是可以存取檔案。',
-'img-auth-streaming' => '串流中"$1"。',
+'img-auth-streaming' => '串流「$1」中。',
 'img-auth-public' => 'img_auth.php的功能是由一個公共wiki中輸出檔案。
 這個wiki是已經設定做一個公共wiki。
 基於保安最佳化,img_auth.php已經停用。',
-'img-auth-noread' => '用戶無存取權去讀"$1"。',
+'img-auth-noread' => '用戶無權讀取「$1」。',
 'img-auth-bad-query-string' => 'URL有一個無效的查詢字符串',
 
 # HTTP errors
@@ -1788,7 +1793,7 @@ $1',
 'upload-curl-error28' => '上傳超時',
 'upload-curl-error28-text' => '網站回應時間過長。請檢查此網站的訪問是否正常,過一會再進行嘗試。您可能需要在網路訪問空閒時間再次進行嘗試。',
 
-'license' => '授權:',
+'license' => '授權',
 'license-header' => '授權',
 'nolicense' => '未選定',
 'license-nopreview' => '(無預覽可用)',
@@ -1906,7 +1911,7 @@ $1',
 
 # Random redirect
 'randomredirect' => '隨機重定向頁面',
-'randomredirect-nopages' => '在 "$1" 名字空間中沒有重定向頁面。',
+'randomredirect-nopages' => '在「$1」名字空間中沒有重定向頁面。',
 
 # Statistics
 'statistics' => '統計',
@@ -2061,7 +2066,7 @@ Template:消除歧義',
 'allpagessubmit' => '提交',
 'allpagesprefix' => '顯示具有此前綴(名字空間)的頁面:',
 'allpagesbadtitle' => '給定的頁面標題是非法的,或者具有一個內部語言或內部 wiki 的前綴。它可能包含一個或更多的不能用於標題的字元。',
-'allpages-bad-ns' => '在{{SITENAME}}中沒有一個叫做"$1"的名字空間。',
+'allpages-bad-ns' => '在{{SITENAME}}中沒有一個叫做「$1」的名字空間。',
 'allpages-hide-redirects' => '隱藏重定向頁',
 
 # SpecialCachedPage
@@ -2108,10 +2113,6 @@ Template:消除歧義',
 'activeusers-hidesysops' => '隱藏管理員',
 'activeusers-noresult' => '找不到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新進用戶名冊',
-'newuserlogpagetext' => '這是一個最近被創建用戶的新日誌',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶群組權限',
 'listgrouprights-summary' => '以下面是一個在這個wiki中定義出來的用戶權限清單,以及它們的存取權。
@@ -2143,7 +2144,7 @@ Template:消除歧義',
 'emailpagetext' => '您可以用下面的表格去寄一封電郵給這位{{Gender:$1|用戶}}。
 您在[[Special:Preferences|您的參數設置]]中所輸入的電子郵件地址將出現在郵件「發件人」一欄中,這樣該用戶就可以回覆您。',
 'usermailererror' => '目標郵件地址返回錯誤:',
-'defemailsubject' => '{{SITENAME}}來自用戶“$1”的電子郵件',
+'defemailsubject' => '{{SITENAME}}來自用戶「$1」的電子郵件',
 'usermaildisabled' => '用戶電郵已停用',
 'usermaildisabledtext' => '您不可以發送電郵到這個wiki上的其他用戶',
 'noemailtitle' => '無e-mail地址',
@@ -2177,8 +2178,7 @@ Template:消除歧義',
 'nowatchlist' => '您的監視列表為空。',
 'watchlistanontext' => '請$1以檢視或編輯您的監視列表。',
 'watchnologin' => '未登入',
-'watchnologintext' => '您必須先[[Special:UserLogin|登入]]
-才能更改您的監視列表',
+'watchnologintext' => '您必須先[[Special:UserLogin|登入]],才能更改您的監視列表。',
 'addwatch' => '加至監視列表',
 'addedwatchtext' => '頁面「[[:$1]]」已加到您的[[Special:Watchlist|監視清單]]中。
 將來有關此頁面及其討論頁的任何修改將會在那裡列出。',
@@ -2205,7 +2205,7 @@ Template:消除歧義',
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => '正在監視...',
 'unwatching' => '正在停止監視...',
-'watcherrortext' => '在更改你的監視列表設定"$1"時發生了錯誤',
+'watcherrortext' => '更改「$1」的監視列表設定時發生錯誤。',
 
 'enotif_mailer' => '{{SITENAME}}郵件通知器',
 'enotif_reset' => '將所有頁面標為已閱讀',
@@ -2250,6 +2250,8 @@ $UNWATCHURL
 
 回饋和其他幫助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建立了',
+'changed' => '更改',
 
 # Delete
 'deletepage' => '刪除頁面',
@@ -2313,10 +2315,12 @@ $UNWATCHURL
 'unprotectedarticle' => '已解除"[[$1]]"保護',
 'movedarticleprotection' => '已將「[[$2]]」的保護設定移動至「[[$1]]」',
 'protect-title' => '更改「$1」的保護等級',
-'protect-title-notallowed' => '查看“$1”的保護等級',
+'protect-title-notallowed' => '查看「$1」的保護等級',
 'prot_1movedto2' => '[[$1]]移動到[[$2]]',
 'protect-badnamespace-title' => '不可被保護的名字空間',
 'protect-badnamespace-text' => '這個名字空間內的頁面無法被保護。',
+'protect-norestrictiontypes-text' => '此頁不可被保護因沒有任何限制可用。',
+'protect-norestrictiontypes-title' => '不可保護的頁面',
 'protect-legend' => '確認保護',
 'protectcomment' => '理由:',
 'protectexpiry' => '到期:',
@@ -2332,9 +2336,9 @@ $UNWATCHURL
 以下是'''$1'''現時的保護級別:",
 'protect-cascadeon' => '以下的{{PLURAL:$1|一個|多個}}頁面包含着本頁面的同時,啟動了連鎖保護,因此本頁面目前也被保護,未能編輯。您可以設定本頁面的保護級別,但這並不會對連鎖保護有所影響。',
 'protect-default' => '容許所有用戶',
-'protect-fallback' => '需要"$1"的許可',
-'protect-level-autoconfirmed' => '禁止新的和未註冊的用戶',
-'protect-level-sysop' => '僅操作員',
+'protect-fallback' => '僅允許有「$1」權限的用戶',
+'protect-level-autoconfirmed' => '僅允許自動確認使用者',
+'protect-level-sysop' => '僅允許管理員',
 'protect-summary-cascade' => '連鎖',
 'protect-expiring' => '終止於 $1 (UTC)',
 'protect-expiring-local' => '$1到期',
@@ -2408,7 +2412,7 @@ $UNWATCHURL
 'undelete-no-results' => '刪除記錄裡沒有符合的結果。',
 'undelete-filename-mismatch' => '不能刪除帶有時間截記的檔案修訂 $1: 檔案不匹配',
 'undelete-bad-store-key' => '不能刪除帶有時間截記的檔案修訂 $1: 檔案於刪除前遺失。',
-'undelete-cleanup-error' => '刪除無用的存檔檔案 "$1" 時發生錯誤。',
+'undelete-cleanup-error' => '刪除無用的存檔檔案「$1」時發生錯誤。',
 'undelete-missing-filearchive' => '由於檔案存檔 ID $1 不在資料庫中,不能在檔案存檔中恢復。它可能已經反刪除了。',
 'undelete-error' => '恢復已刪除頁面時出錯',
 'undelete-error-short' => '反刪除檔案時發生錯誤: $1',
@@ -2628,7 +2632,7 @@ $1被封禁的理由是“$2”',
 您應當負責確定所有連結依然會連到指定的頁面。
 
 注意如果新頁面已經有內容的話,頁面將'''不會'''被移動,
-除非新頁面無內容或是重定向頁,而且沒有修訂歷史。
+除非新頁面是重定向頁,而且沒有修訂歷史。
 這意味著您再必要時可以在移動到新頁面後再移回老的頁面,
 同時您也無法覆蓋現有頁面。
 
@@ -2811,8 +2815,8 @@ $1被封禁的理由是“$2”',
 'import-error-edit' => '「$1」無法導入,因為您不准編輯它。',
 'import-error-create' => '「$1」無法導入,因為您不准創造它。',
 'import-error-interwiki' => '頁面"$1"未能導入,這是因為他的頁面名稱預留了供跨維基連結使用。',
-'import-error-special' => '"$1"未能導入因為該頁面使用一個不能創建頁面的特殊名字空間。',
-'import-error-invalid' => '"$1"不能導入,因為名字無效。',
+'import-error-special' => '「$1」未能導入因為該頁面使用一個不能創建頁面的特殊名字空間。',
+'import-error-invalid' => '「$1」不能導入,因為名字無效。',
 'import-error-unserialize' => '頁面「$1」的修訂版本「$2」不能反序列。該修訂版本是以$3內容模式序列為$4。',
 'import-options-wrong' => '{{PLURAL:$2|選項}}出錯:<nowiki>$1</nowiki>',
 'import-rootpage-invalid' => '指定的根頁標題無效。',
@@ -2830,7 +2834,7 @@ $1被封禁的理由是“$2”',
 'javascripttest' => 'JavaScript測試',
 'javascripttest-title' => '運行$1測試。',
 'javascripttest-pagetext-noframework' => '這個頁面預留了作JavaScript測試。',
-'javascripttest-pagetext-unknownframework' => '未知框架"$1"',
+'javascripttest-pagetext-unknownframework' => '未知的測試框架「$1」。',
 'javascripttest-pagetext-frameworks' => '請選擇以下其中一個測試框架:$1',
 'javascripttest-pagetext-skins' => '選擇運行測試的外觀:',
 'javascripttest-qunit-intro' => '請看mediawiki.org的[$1 測試說明]',
@@ -2884,7 +2888,7 @@ $1被封禁的理由是“$2”',
 'tooltip-ca-nstab-user' => '檢視使用者頁面',
 'tooltip-ca-nstab-media' => '檢視多媒體檔案資訊頁面',
 'tooltip-ca-nstab-special' => '本頁面會隨著資料庫的數據即時更新,任何人均不能直接編輯',
-'tooltip-ca-nstab-project' => '檢視項目頁面',
+'tooltip-ca-nstab-project' => '檢視計劃頁面',
 'tooltip-ca-nstab-image' => '檢視檔案頁面',
 'tooltip-ca-nstab-mediawiki' => '檢視系統資訊',
 'tooltip-ca-nstab-template' => '檢視模板',
@@ -2900,8 +2904,8 @@ $1被封禁的理由是“$2”',
 'tooltip-watchlistedit-raw-submit' => '更新監視列表',
 'tooltip-recreate' => '重建該頁面,無論是否被刪除。',
 'tooltip-upload' => '開始上傳',
-'tooltip-rollback' => '『反轉』可以一按恢復上一位貢獻者對這個頁面的編輯',
-'tooltip-undo' => 'ã\80\8e復å\8e\9fã\80\8f可以在編輯模式上開啟編輯表格以便復原。它容許在摘要中加入原因。',
+'tooltip-rollback' => '按「恢復」恢復上一位貢獻者對本頁面的編輯',
+'tooltip-undo' => 'ã\80\8c復å\8e\9fã\80\8d可以在編輯模式上開啟編輯表格以便復原。它容許在摘要中加入原因。',
 'tooltip-preferences-save' => '儲存使用偏好',
 'tooltip-summary' => '輸入一個簡短的摘要',
 
@@ -2991,7 +2995,8 @@ $1被封禁的理由是“$2”',
 'pageinfo-recent-authors' => '最近作者數目',
 'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}}($1)',
 'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}}($1)',
-'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}}($1)',
+'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-transclusions' => '使用的頁面($1)',
 'pageinfo-toolboxlink' => '頁面資訊',
 'pageinfo-redirectsto' => '重定向到',
 'pageinfo-redirectsto-info' => '資訊',
@@ -3000,6 +3005,10 @@ $1被封禁的理由是“$2”',
 'pageinfo-protect-cascading' => '從此開始連鎖保護',
 'pageinfo-protect-cascading-yes' => '是',
 'pageinfo-protect-cascading-from' => '從此連鎖保護',
+'pageinfo-category-info' => '分類資訊',
+'pageinfo-category-pages' => '頁面數量',
+'pageinfo-category-subcats' => '子分類數量',
+'pageinfo-category-files' => '編輯數量',
 
 # Skin names
 'skinname-standard' => '標準',
@@ -3032,10 +3041,10 @@ $1被封禁的理由是“$2”',
 'filedeleteerror-long' => '當刪除檔案時遇到錯誤:
 
 $1',
-'filedelete-missing' => '因為檔案 "$1" 不存在,所以它不可以刪除。',
-'filedelete-old-unregistered' => '所指定的檔案修訂 "$1" 在資料庫中不存在。',
-'filedelete-current-unregistered' => '所指定的檔案 "$1" 在資料庫中不存在。',
-'filedelete-archive-read-only' => '存檔目錄 "$1" 在網頁伺服器中不可寫。',
+'filedelete-missing' => '因為檔案「$1」不存在,所以它不可以刪除。',
+'filedelete-old-unregistered' => '所指定的檔案修訂「$1」在資料庫中不存在。',
+'filedelete-current-unregistered' => '所指定的檔案「$1」在資料庫中不存在。',
+'filedelete-archive-read-only' => '存檔目錄「$1」在網頁伺服器中不可寫。',
 
 # Browsing diffs
 'previousdiff' => '←上一版本',
@@ -3083,6 +3092,8 @@ $1',
 'minutes' => '$1分鍾',
 'hours' => '$1小時',
 'days' => '$1天',
+'months' => '{{PLURAL:$1|$1個月|$1個月}}',
+'years' => '{{PLURAL:$1|$1年|$1年}}',
 'ago' => '$1前',
 'just-now' => '剛才',
 
@@ -3692,8 +3703,8 @@ $5
 'signature' => '[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|留言]])',
 
 # Core parser functions
-'unknown_extension_tag' => '不明的擴展標籤 "$1"',
-'duplicate-defaultsort' => '警告: 預設的排序鍵 "$2" 覆蓋先前的預設排序鍵 "$1"。',
+'unknown_extension_tag' => '不明的擴展標籤「$1」',
+'duplicate-defaultsort' => '警告: 預設的排序鍵「$2」覆蓋先前的預設排序鍵「$1」。',
 
 # Special:Version
 'version' => '版本',
@@ -3741,9 +3752,9 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'fileduplicatesearch-filename' => '檔案名稱:',
 'fileduplicatesearch-submit' => '搜尋',
 'fileduplicatesearch-info' => '$1 × $2 像素<br />檔案大小:$3<br />MIME 類型:$4',
-'fileduplicatesearch-result-1' => '檔案 "$1" 無完全相同的重覆。',
-'fileduplicatesearch-result-n' => '檔案 "$1" 有$2項完全相同的重覆。',
-'fileduplicatesearch-noresults' => '沒有發現名為"$1"的文件。',
+'fileduplicatesearch-result-1' => '檔案「$1」無完全相同的重覆。',
+'fileduplicatesearch-result-n' => '檔案「$1」有$2項完全相同的重覆。',
+'fileduplicatesearch-noresults' => '沒有發現名為「$1」的文件。',
 
 # Special:SpecialPages
 'specialpages' => '特殊頁面',
@@ -3860,6 +3871,10 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'logentry-newusers-create2' => '用戶「$1」建立用戶「$3」',
 'logentry-newusers-autocreate' => '帳戶$1被自動創建',
 'newuserlog-byemail' => '密碼已由電子郵件寄出',
+'logentry-rights-rights' => '$1將$3的權限從$4改為$5',
+'logentry-rights-rights-legacy' => '$1更改$3的權限',
+'logentry-rights-autopromote' => '$1的權限自動從$4改為$5',
+'rightsnone' => '無',
 
 # Feedback
 'feedback-bugornote' => '如果您準備好了詳細描述一個技術問題,請[$1 報告一個bug]。或者,您可以使用下面的簡易表單。您的評論將被添加到頁面“[$3 $2]”,並帶有您的用戶名和使用的瀏覽器。',
@@ -3911,7 +3926,8 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'api-error-nomodule' => '內部錯誤:缺少上傳模塊集。',
 'api-error-ok-but-empty' => '內部錯誤:伺服器沒有響應。',
 'api-error-overwrite' => '不允許覆蓋現有檔案。',
-'api-error-stashfailed' => '內部錯誤:伺服器保存臨時文件失敗。',
+'api-error-stashfailed' => '內部錯誤:伺服器保存臨時檔案失敗。',
+'api-error-publishfailed' => '內部錯誤:伺服器發佈臨時檔案失敗。',
 'api-error-timeout' => '伺服器沒有在預期的時間內回應。',
 'api-error-unclassified' => '發生未知錯誤。',
 'api-error-unknown-code' => '未知錯誤:$1',
diff --git a/languages/messages/MessagesZh_min_nan.php b/languages/messages/MessagesZh_min_nan.php
deleted file mode 100644 (file)
index 23b4f92..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/** Min Nan (Bân-lâm-gú/閩南話)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-# Inherit everything for now
-$fallback = 'nan';
diff --git a/languages/messages/MessagesZh_yue.php b/languages/messages/MessagesZh_yue.php
deleted file mode 100644 (file)
index a2848f4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/** Cantonese (粵語/廣東話)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-# Inherit everything for now
-$fallback = 'yue';
index b0371c0..45df0e9 100644 (file)
@@ -952,7 +952,10 @@ abstract class Maintenance {
                $this->output( 'Searching for active text records in archive table...' );
                $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" );
                foreach ( $res as $row ) {
-                       $cur[] = $row->ar_text_id;
+                       # old pre-MW 1.5 records can have null ar_text_id's.
+                       if ( $row->ar_text_id !== null ) {
+                               $cur[] = $row->ar_text_id;
+                       }
                }
                $this->output( "done.\n" );
 
diff --git a/maintenance/archives/patch-ufg_group-length-increase-255.sql b/maintenance/archives/patch-ufg_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..4b7f0d3
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/user_former_groups
+       MODIFY COLUMN ufg_group varbinary(255) NOT NULL default '';
diff --git a/maintenance/archives/patch-ufg_group-length-increase.sql b/maintenance/archives/patch-ufg_group-length-increase.sql
deleted file mode 100644 (file)
index e24cba0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE /*_*/user_former_groups
-       MODIFY COLUMN ufg_group varbinary(32) NOT NULL default '';
diff --git a/maintenance/archives/patch-ug_group-length-increase-255.sql b/maintenance/archives/patch-ug_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..79e17ac
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/user_groups
+       MODIFY COLUMN ug_group varbinary(255) NOT NULL default '';
diff --git a/maintenance/archives/patch-ug_group-length-increase.sql b/maintenance/archives/patch-ug_group-length-increase.sql
deleted file mode 100644 (file)
index e944a85..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE /*_*/user_groups
-       MODIFY COLUMN ug_group varbinary(32) NOT NULL default '';
index 591c753..b043196 100644 (file)
@@ -3,7 +3,7 @@
 CREATE TABLE /*_*/user_former_groups (
   -- Key to user_id
   ufg_user int unsigned NOT NULL default 0,
-  ufg_group varbinary(32) NOT NULL default ''
+  ufg_group varbinary(255) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
index dc03c34..441e8ae 100644 (file)
@@ -44,6 +44,7 @@ class UploadStashCleanup extends Maintenance {
                global $wgUploadStashMaxAge;
 
                $repo = RepoGroup::singleton()->getLocalRepo();
+               $tempRepo = $repo->getTempRepo();
 
                $dbr = $repo->getSlaveDb();
 
@@ -58,54 +59,80 @@ class UploadStashCleanup extends Maintenance {
                        __METHOD__
                );
 
-               if( !is_object( $res ) || $res->numRows() == 0 ) {
-                       $this->output( "No files to cleanup!\n" );
-                       // nothing to do.
-                       return;
-               }
-
-               // finish the read before starting writes.
-               $keys = array();
-               foreach( $res as $row ) {
-                       array_push( $keys, $row->us_key );
-               }
+               // Delete all registered stash files...
+               if ( $res->numRows() == 0 ) {
+                       $this->output( "No stashed files to cleanup according to the DB.\n" );
+               } else {
+                       // finish the read before starting writes.
+                       $keys = array();
+                       foreach( $res as $row ) {
+                               array_push( $keys, $row->us_key );
+                       }
 
-               $this->output( 'Removing ' . count( $keys ) . " file(s)...\n" );
-               // this could be done some other, more direct/efficient way, but using
-               // UploadStash's own methods means it's less likely to fall accidentally
-               // out-of-date someday
-               $stash = new UploadStash( $repo );
+                       $this->output( 'Removing ' . count( $keys ) . " file(s)...\n" );
+                       // this could be done some other, more direct/efficient way, but using
+                       // UploadStash's own methods means it's less likely to fall accidentally
+                       // out-of-date someday
+                       $stash = new UploadStash( $repo );
 
-               $i = 0;
-               foreach( $keys as $key ) {
-                       $i++;
-                       try {
-                               $stash->getFile( $key, true );
-                               $stash->removeFileNoAuth( $key );
-                       } catch ( UploadStashBadPathException $ex ) {
-                               $this->output( "Failed removing stashed upload with key: $key\n"  );
-                       } catch ( UploadStashZeroLengthFileException $ex ) {
-                               $this->output( "Failed removing stashed upload with key: $key\n"  );
-                       }
-                       if ( $i % 100 == 0 ) {
-                               $this->output( "$i\n" );
+                       $i = 0;
+                       foreach( $keys as $key ) {
+                               $i++;
+                               try {
+                                       $stash->getFile( $key, true );
+                                       $stash->removeFileNoAuth( $key );
+                               } catch ( UploadStashBadPathException $ex ) {
+                                       $this->output( "Failed removing stashed upload with key: $key\n"  );
+                               } catch ( UploadStashZeroLengthFileException $ex ) {
+                                       $this->output( "Failed removing stashed upload with key: $key\n"  );
+                               }
+                               if ( $i % 100 == 0 ) {
+                                       $this->output( "$i\n" );
+                               }
                        }
+                       $this->output( "$i done\n" );
                }
-               $this->output( "$i done\n" );
 
-               $tempRepo = $repo->getTempRepo();
+               // Delete all the corresponding thumbnails...
                $dir      = $tempRepo->getZonePath( 'thumb' );
                $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
-
                $this->output( "Deleting old thumbnails...\n" );
                $i = 0;
                foreach ( $iterator as $file ) {
-                       $i++;
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
-                               $tempRepo->quickPurge( "$dir/$file" );
+                               $status = $tempRepo->quickPurge( "$dir/$file" );
+                               if ( !$status->isOK() ) {
+                                       $this->error( print_r( $status->getErrorsArray(), true ) );
+                               }
+                               if ( ( ++$i % 100 ) == 0 ) {
+                                       $this->output( "$i\n" );
+                               }
                        }
-                       if ( $i % 100 == 0 ) {
-                               $this->output( "$i\n" );
+               }
+               $this->output( "$i done\n" );
+
+               // Apparently lots of stash files are not registered in the DB...
+               $dir      = $tempRepo->getZonePath( 'public' );
+               $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
+               $this->output( "Deleting orphaned temp files...\n" );
+               if ( strpos( $dir, '/local-temp' ) === false ) { // sanity check
+                       $this->error( "Temp repo is not using the temp container.", 1 ); // die
+               }
+               $i = 0;
+               foreach ( $iterator as $file ) {
+                       // Absolute sanity check for stashed files and file segments
+                       if ( !preg_match( '#(^\d{14}!|\.\d+\.\w+\.\d+$)#', basename( $file ) ) ) {
+                               $this->output( "Skipped non-stash $file\n" );
+                               continue;
+                       }
+                       if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
+                               $status = $tempRepo->quickPurge( "$dir/$file" );
+                               if ( !$status->isOK() ) {
+                                       $this->error( print_r( $status->getErrorsArray(), true ) );
+                               }
+                               if ( ( ++$i % 100 ) == 0 ) {
+                                       $this->output( "$i\n" );
+                               }
                        }
                }
                $this->output( "$i done\n" );
index aebdee1..4e3c7fa 100644 (file)
@@ -134,6 +134,17 @@ class CopyFileBackend extends Maintenance {
                $ops = array();
                $fsFiles = array();
                $copiedRel = array(); // for output message
+
+               // Download the batch of source files into backend cache...
+               if ( $this->hasOption( 'missingonly' ) ) {
+                       $srcPaths = array();
+                       foreach ( $srcPathsRel as $srcPathRel ) {
+                               $srcPaths[] = $src->getRootStoragePath() . "/$backendRel/$srcPathRel";
+                       }
+                       $fsFiles = $src->getLocalReferenceMulti( array( 'srcs' => $srcPaths, 'latest' => 1 ) );
+               }
+
+               // Determine what files need to be copied over...
                foreach ( $srcPathsRel as $srcPathRel ) {
                        $srcPath = $src->getRootStoragePath() . "/$backendRel/$srcPathRel";
                        $dstPath = $dst->getRootStoragePath() . "/$backendRel/$srcPathRel";
@@ -144,8 +155,9 @@ class CopyFileBackend extends Maintenance {
                                $this->output( "Already have $srcPathRel.\n" );
                                continue; // assume already copied...
                        }
-                       // Note: getLocalReference() is fast for FS backends
-                       $fsFile = $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
+                       $fsFile = array_key_exists( $srcPath, $fsFiles )
+                               ? $fsFiles[$srcPath]
+                               : $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
                        if ( !$fsFile ) {
                                $this->error( "Could not get local copy of $srcPath.", 1 ); // die
                        } elseif ( !$fsFile->exists() ) {
@@ -167,6 +179,7 @@ class CopyFileBackend extends Maintenance {
                        $copiedRel[] = $srcPathRel;
                }
 
+               // Copy in the batch of source files...
                $t_start = microtime( true );
                $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
                if ( !$status->isOK() ) {
index 8bf556f..ab7603d 100644 (file)
@@ -67,7 +67,7 @@ class FixSlaveDesync extends Maintenance {
                $dbw = wfGetDB( DB_MASTER );
                $masterIDs = array();
                $res = $dbw->select( 'page', array( 'page_id', 'page_latest' ), array( 'page_id<6054123' ), __METHOD__ );
-               $this->output( "Number of pages: " . $dbw->numRows( $res ) . "\n" );
+               $this->output( "Number of pages: " . $res->numRows() . "\n" );
                foreach ( $res as $row ) {
                        $masterIDs[$row->page_id] = $row->page_latest;
                        if ( !( ++$n % 10000 ) ) {
index f53cf91..87bc1c2 100644 (file)
@@ -483,6 +483,8 @@ $wgOptionalMessages = array(
        'categoryviewer-pagedlinks',
        'undelete-revisionrow',
        'pageinfo-redirects-value',
+       'created', // @deprecated. Remove in MediaWiki 1.23.
+       'changed', // @deprecated. Remove in MediaWiki 1.23.
 );
 
 /** EXIF messages, which may be set as optional in several checks, but are generally mandatory */
index 6544514..aa6b858 100644 (file)
@@ -167,6 +167,7 @@ $wgMessageStructure = array(
                'newwindow',
                'cancel',
                'moredotdotdot',
+               'morenotlisted',
                'mypage',
                'mytalk',
                'anontalk',
@@ -513,6 +514,7 @@ $wgMessageStructure = array(
                'php-mail-error',
                'php-mail-error-unknown',
                'user-mail-no-addy',
+               'user-mail-no-body',
        ),
        'resetpass' => array(
                'resetpass',
@@ -1958,6 +1960,8 @@ $wgMessageStructure = array(
                'enotif_lastdiff',
                'enotif_anon_editor',
                'enotif_body',
+               'created',
+               'changed',
        ),
        'delete' => array(
                'deletepage',
@@ -2015,6 +2019,8 @@ $wgMessageStructure = array(
                'prot_1movedto2',
                'protect-badnamespace-title',
                'protect-badnamespace-text',
+               'protect-norestrictiontypes-text',
+               'protect-norestrictiontypes-title',
                'protect-legend',
                'protectcomment',
                'protectexpiry',
@@ -2711,6 +2717,7 @@ $wgMessageStructure = array(
                'pageinfo-magic-words',
                'pageinfo-hidden-categories',
                'pageinfo-templates',
+               'pageinfo-transclusions',
                'pageinfo-footer',
                'pageinfo-toolboxlink',
                'pageinfo-redirectsto',
@@ -2720,6 +2727,10 @@ $wgMessageStructure = array(
                'pageinfo-protect-cascading',
                'pageinfo-protect-cascading-yes',
                'pageinfo-protect-cascading-from',
+               'pageinfo-category-info',
+               'pageinfo-category-pages',
+               'pageinfo-category-subcats',
+               'pageinfo-category-files'
        ),
        'skin' => array(
                'skinname-standard',
@@ -3812,6 +3823,7 @@ $wgMessageStructure = array(
                'api-error-ok-but-empty',
                'api-error-overwrite',
                'api-error-stashfailed',
+               'api-error-publishfailed',
                'api-error-timeout',
                'api-error-unclassified',
                'api-error-unknown-code',
index e07e62d..4e0f291 100644 (file)
 /** */
 require_once( __DIR__ . '/commandLine.inc' );
 
-$mcc = new MWMemcached( array( 'persistent' => true/*, 'debug' => true*/ ) );
-$mcc->set_servers( $wgMemCachedServers );
-# $mcc->set_debug( true );
+$debug = in_array( '--debug', $argv );
+$help = in_array( '--help', $argv );
 
-function mccShowHelp( $command ) {
+if( $help ) {
+       mccShowUsage();
+       exit( 0 );
+}
+$mcc = new MWMemcached( array(
+       'persistent' => true,
+       'debug' => $debug,
+) );
+
+if ( $wgMainCacheType === CACHE_MEMCACHED ) {
+       $mcc->set_servers( $wgMemCachedServers );
+} elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+       $mcc->set_servers( $wgObjectCaches[$wgMainCacheType]['servers'] );
+} else {
+       print "MediaWiki isn't configured for Memcached usage\n";
+       exit( 1 );
+}
+
+/**
+ * Show this command line tool usage.
+ */
+function mccShowUsage() {
+       echo <<<EOF
+Usage:
+       mcc.php [--debug]
+       mcc.php --help
+
+MemCached Command (mcc) is an interactive command tool that let you interact
+with the MediaWiki memcached cache.
+
+Options:
+       --debug Set debug mode on the memcached connection.
+       --help  This help screen.
+
+Interactive commands:
+
+EOF;
+       print "\t";
+       print str_replace( "\n", "\n\t", mccGetHelp( false ) );
+       print "\n";
+}
+
+function mccGetHelp( $command ) {
+       $output = '';
        $commandList = array(
                'get' => 'grabs something',
                'getsock' => 'lists sockets',
@@ -48,13 +90,15 @@ function mccShowHelp( $command ) {
        if ( $command === 'fullhelp' ) {
                $max_cmd_len = max( array_map( 'strlen', array_keys( $commandList ) ) );
                foreach ( $commandList as $cmd => $desc ) {
-                       printf( "%-{$max_cmd_len}s: %s\n", $cmd, $desc );
+                       $output .= sprintf( "%-{$max_cmd_len}s: %s\n", $cmd, $desc );
                }
        } elseif ( isset( $commandList[$command] ) ) {
-               print "$command: $commandList[$command]\n";
+               $output .= "$command: $commandList[$command]\n";
        } else {
-               print "$command: command does not exist or no help for it\n";
+               $output .= "$command: command does not exist or no help for it\n";
        }
+
+       return $output;
 }
 
 do {
@@ -72,8 +116,8 @@ do {
        switch ( $command ) {
                case 'help':
                        // show an help message
-                       mccShowHelp( array_shift( $args ) );
-               break;
+                       print mccGetHelp( array_shift( $args ) );
+                       break;
 
                case 'get':
                        $sub = '';
@@ -93,7 +137,7 @@ do {
                        } else {
                                var_dump( $res );
                        }
-               break;
+                       break;
 
                case 'getsock':
                        $res = $mcc->get( $args[0] );
index 691b832..42461c5 100644 (file)
@@ -40,14 +40,21 @@ class mcTest extends Maintenance {
        }
 
        public function execute() {
-               global $wgMemCachedServers, $wgMemCachedTimeout;
+               global $wgMainCacheType, $wgMemCachedTimeout, $wgObjectCaches;
 
                $iterations = $this->getOption( 'i', 100 );
                if ( $this->hasArg() ) {
-                       $wgMemCachedServers = array( $this->getArg() );
+                       $servers = array( $this->getArg() );
+               } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
+                       global $wgMemCachedServers;
+                       $servers = $wgMemCachedServers ;
+               } elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+                       $servers = $wgObjectCaches[$wgMainCacheType]['servers'];
+               } else {
+                       $this->error( "MediaWiki isn't configured for Memcached usage", 1 );
                }
 
-               foreach ( $wgMemCachedServers as $server ) {
+               foreach ( $servers as $server ) {
                        $this->output( $server . " ", $server );
                        $mcc = new MemCachedClientforWiki( array(
                                'persistant' => true,
diff --git a/maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql b/maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..6a4a751
--- /dev/null
@@ -0,0 +1,9 @@
+define mw_prefix='{$wgDBprefix}';
+
+/*$mw$*/
+BEGIN
+       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_former_groups MODIFY ufg_group VARCHAR2(255) NOT NULL';
+EXCEPTION WHEN OTHERS THEN
+       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
+END;
+/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ufg_group-length-increase.sql b/maintenance/oracle/archives/patch-ufg_group-length-increase.sql
deleted file mode 100644 (file)
index a48b8bf..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
-       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_former_groups MODIFY ufg_group VARCHAR2(32) NOT NULL';
-EXCEPTION WHEN OTHERS THEN
-       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ug_group-length-increase-255.sql b/maintenance/oracle/archives/patch-ug_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..00a5e7b
--- /dev/null
@@ -0,0 +1,9 @@
+define mw_prefix='{$wgDBprefix}';
+
+/*$mw$*/
+BEGIN
+       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(255) NOT NULL';
+EXCEPTION WHEN OTHERS THEN
+       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
+END;
+/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ug_group-length-increase.sql b/maintenance/oracle/archives/patch-ug_group-length-increase.sql
deleted file mode 100644 (file)
index 89e5532..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
-       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(32) NOT NULL';
-EXCEPTION WHEN OTHERS THEN
-       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
-END;
-/*$mw$*/
index 59147eb..c14824e 100644 (file)
@@ -2,7 +2,7 @@ define mw_prefix='{$wgDBprefix}';
 
 CREATE TABLE &mw_prefix.user_former_groups (
   ufg_user   NUMBER      DEFAULT 0 NOT NULL,
-  ufg_group  VARCHAR2(16)     NOT NULL
+  ufg_group  VARCHAR2(255)     NOT NULL
 );
 ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
index c3c3df9..b5b3b07 100644 (file)
@@ -31,7 +31,7 @@ INSERT INTO &mw_prefix.mwuser
 
 CREATE TABLE &mw_prefix.user_groups (
   ug_user   NUMBER      DEFAULT 0 NOT NULL,
-  ug_group  VARCHAR2(32)     NOT NULL
+  ug_group  VARCHAR2(255)     NOT NULL
 );
 ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group);
@@ -39,7 +39,7 @@ CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group);
 
 CREATE TABLE &mw_prefix.user_former_groups (
   ufg_user   NUMBER      DEFAULT 0 NOT NULL,
-  ufg_group  VARCHAR2(16)     NOT NULL
+  ufg_group  VARCHAR2(255)     NOT NULL
 );
 ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
index 78f98f5..3b1a9b0 100644 (file)
@@ -87,7 +87,7 @@ class Orphans extends Maintenance {
                        FROM $revision LEFT OUTER JOIN $page ON rev_page=page_id
                        WHERE page_id IS NULL
                " );
-               $orphans = $dbw->numRows( $result );
+               $orphans = $result->numRows();
                if ( $orphans > 0 ) {
                        global $wgContLang;
                        $this->output( "$orphans orphan revisions...\n" );
@@ -139,7 +139,7 @@ class Orphans extends Maintenance {
                        FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id
                        WHERE rev_id IS NULL
                " );
-               $widows = $dbw->numRows( $result );
+               $widows = $result->numRows();
                if ( $widows > 0 ) {
                        $this->output( "$widows childless pages...\n" );
                        $this->output( sprintf( "%10s %11s %2s %s\n", 'page_id', 'page_latest', 'ns', 'page_title' ) );
index 4b3c382..58fe880 100644 (file)
@@ -86,7 +86,7 @@ class PurgeList extends Maintenance {
                );
 
                $start   = 0;
-               $end = $dbr->numRows( $result );
+               $end = $result->numRows();
                $this->output( "Will purge $end pages from namespace $ns\n" );
 
                # Do remaining chunk
index 83849de..db77564 100644 (file)
@@ -53,6 +53,15 @@ class RebuildLocalisationCache extends Maintenance {
                return '1000M';
        }
 
+       public function finalSetup() {
+               # This script needs to be run to build the inital l10n cache. But if
+               # $wgLanguageCode is not 'en', it won't be able to run because there is
+               # no l10n cache. Break the cycle by forcing $wgLanguageCode = 'en'.
+               global $wgLanguageCode;
+               $wgLanguageCode = 'en';
+               return parent::finalSetup();
+       }
+
        public function execute() {
                global $wgLocalisationCacheConf;
 
index 9ba8682..7b25566 100644 (file)
@@ -105,7 +105,7 @@ class RefreshLinks extends Maintenance {
                                array(),
                                array( 'redirect' => array( "LEFT JOIN", "page_id=rd_from" ) )
                        );
-                       $num = $dbr->numRows( $res );
+                       $num = $res->numRows();
                        $this->output( "Refreshing $num old redirects from $start...\n" );
 
                        $i = 0;
@@ -126,7 +126,7 @@ class RefreshLinks extends Maintenance {
                                        "page_id >= $start" ),
                                __METHOD__
                        );
-                       $num = $dbr->numRows( $res );
+                       $num = $res->numRows();
                        $this->output( "$num new articles...\n" );
 
                        $i = 0;
@@ -176,8 +176,16 @@ class RefreshLinks extends Maintenance {
        }
 
        /**
-        * Update the redirect entry for a given page
-        * @param $id int The page_id of the redirect
+        * Update the redirect entry for a given page.
+        *
+        * This methods bypasses the "redirect" table to get the redirect target,
+        * and parses the page's content to fetch it. This allows to be sure that
+        * the redirect target is up to date and valid.
+        * This is particularly useful when modifying namespaces to be sure the
+        * entry in the "redirect" table points to the correct page and not to an
+        * invalid one.
+        *
+        * @param $id int The page ID to check
         */
        private function fixRedirect( $id ) {
                $page = WikiPage::newFromID( $id );
@@ -191,14 +199,25 @@ class RefreshLinks extends Maintenance {
                        return;
                }
 
-               $rt = $page->getRedirectTarget();
+               $rt = null;
+               $content = $page->getContent( Revision::RAW );
+               if ( $content !== null ) {
+                       $rt = $content->getUltimateRedirectTarget();
+               }
 
                if ( $rt === null ) {
                        // The page is not a redirect
                        // Delete any redirect table entry for it
-                       $dbw->delete( 'redirect', array( 'rd_from' => $id ),
-                               __METHOD__ );
+                       $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ );
+                       $fieldValue = 0;
+               } else {
+                       $page->insertRedirectEntry( $rt );
+                       $fieldValue = 1;
                }
+
+               // Update the page table to be sure it is an a consistent state
+               $dbw->update( 'page', array( 'page_is_redirect' => $fieldValue ),
+                       array( 'page_id' => $id ), __METHOD__ );
        }
 
        /**
@@ -215,7 +234,7 @@ class RefreshLinks extends Maintenance {
                }
 
                $content = $page->getContent( Revision::RAW );
-               if ( null === false ) {
+               if ( $content === null ) {
                        return;
                }
 
index f06e6b0..8d2819d 100644 (file)
@@ -53,6 +53,10 @@ class RunJobs extends Maintenance {
        public function execute() {
                global $wgTitle;
 
+               if ( wfReadOnly() ) {
+                       $this->error( "Unable to run jobs; the wiki is in read-only mode.", 1 ); // die
+               }
+
                if ( $this->hasOption( 'procs' ) ) {
                        $procs = intval( $this->getOption( 'procs' ) );
                        if ( $procs < 1 || $procs > 1000 ) {
@@ -74,7 +78,7 @@ class RunJobs extends Maintenance {
                $group = JobQueueGroup::singleton();
                do {
                        $job = ( $type === false )
-                               ? $group->pop() // job from any queue
+                               ? $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE )
                                : $group->get( $type )->pop(); // job from a single queue
                        if ( $job ) { // found a job
                                // Perform the job (logging success/failure and runtime)...
diff --git a/maintenance/sqlite/archives/patch-ufg_group-length-increase-255.sql b/maintenance/sqlite/archives/patch-ufg_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..edd0a3d
--- /dev/null
@@ -0,0 +1,15 @@
+ CREATE TABLE /*_*/user_former_groups_tmp (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/user_former_groups_tmp
+       SELECT ufg_user, ufg_group
+               FROM /*_*/user_former_groups;
+
+DROP TABLE /*_*/user_former_groups;
+
+ALTER TABLE /*_*/user_former_groups_tmp RENAME TO /*_*/user_former_groups;
+
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+
diff --git a/maintenance/sqlite/archives/patch-ufg_group-length-increase.sql b/maintenance/sqlite/archives/patch-ufg_group-length-increase.sql
deleted file mode 100644 (file)
index c6dcea5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-CREATE TABLE /*_*/user_former_groups_tmp (
-  ug_user int unsigned NOT NULL default 0,
-  ug_group varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/user_former_groups_tmp
-       SELECT ug_user, ug_group
-               FROM /*_*/user_groups;
-
-DROP TABLE /*_*/user_former_groups;
-
-ALTER TABLE /*_*/user_former_groups_tmp RENAME TO /*_*/user_former_groups;
-
-CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
-
diff --git a/maintenance/sqlite/archives/patch-ug_group-length-increase-255.sql b/maintenance/sqlite/archives/patch-ug_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..3daeb7c
--- /dev/null
@@ -0,0 +1,15 @@
+CREATE TABLE /*_*/user_groups_tmp (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/user_groups_tmp
+       SELECT ug_user, ug_group
+               FROM /*_*/user_groups;
+
+DROP TABLE /*_*/user_groups;
+
+ALTER TABLE /*_*/user_groups_tmp RENAME TO /*_*/user_groups;
+
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
diff --git a/maintenance/sqlite/archives/patch-ug_group-length-increase.sql b/maintenance/sqlite/archives/patch-ug_group-length-increase.sql
deleted file mode 100644 (file)
index 5e81093..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-CREATE TABLE /*_*/user_groups_tmp (
-  ug_user int unsigned NOT NULL default 0,
-  ug_group varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/user_groups_tmp
-       SELECT ug_user, ug_group
-               FROM /*_*/user_groups;
-
-DROP TABLE /*_*/user_groups;
-
-ALTER TABLE /*_*/user_groups_tmp RENAME TO /*_*/user_groups;
-
-CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
-CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
index 951ab1a..d636283 100644 (file)
@@ -115,7 +115,7 @@ class CompressOld extends Maintenance {
                do {
                        $res = $dbw->select( 'text', array( 'old_id','old_flags','old_text' ),
                                "old_id>=$start", __METHOD__, array( 'ORDER BY' => 'old_id', 'LIMIT' => $chunksize, 'FOR UPDATE' ) );
-                       if( $dbw->numRows( $res ) == 0 ) {
+                       if( $res->numRows() == 0 ) {
                                break;
                        }
                        $last = $start;
@@ -256,7 +256,7 @@ class CompressOld extends Maintenance {
                        $pageRes = $dbr->select( 'page',
                                array('page_id', 'page_namespace', 'page_title','page_latest'),
                                $pageConds + array('page_id' => $pageId), __METHOD__ );
-                       if ( $dbr->numRows( $pageRes ) == 0 ) {
+                       if ( $pageRes->numRows() == 0 ) {
                                continue;
                        }
                        $pageRow = $dbr->fetchObject( $pageRes );
index c9a188b..14d7422 100644 (file)
@@ -152,7 +152,7 @@ CREATE TABLE /*_*/user_groups (
   -- with particular permissions. A user will have the combined
   -- permissions of any group they're explicitly in, plus
   -- the implicit '*' and 'user' groups.
-  ug_group varbinary(32) NOT NULL default ''
+  ug_group varbinary(255) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
@@ -164,7 +164,7 @@ CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
 CREATE TABLE /*_*/user_former_groups (
   -- Key to user_id
   ufg_user int unsigned NOT NULL default 0,
-  ufg_group varbinary(32) NOT NULL default ''
+  ufg_group varbinary(255) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
index 3210af1..950855f 100644 (file)
  * @file
  */
 
+if( !defined( 'MEDIAWIKI' ) ) {
+       die( 'Not an entry point.' );
+}
+
 return array(
 
        /* Special modules who have their own classes */
index ae6f2b0..cddd4ec 100644 (file)
 
                        var conditions, dir, i, op, val;
                        profile = $.isPlainObject( profile ) ? profile : $.client.profile();
-
                        dir = $( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr';
                        // Check over each browser condition to determine if we are running in a compatible client
                        if ( typeof map[dir] !== 'object' || map[dir][profile.name] === undefined ) {
                                return true;
                        }
                        conditions = map[dir][profile.name];
+                       if ( conditions === false ) {
+                               return false;
+                       }
                        for ( i = 0; i < conditions.length; i++ ) {
                                op = conditions[i][0];
                                val = conditions[i][1];
-                               if ( val === false ) {
-                                       return false;
-                               }
                                if ( typeof val === 'string' ) {
                                        if ( !( eval( 'profile.version' + op + '"' + val + '"' ) ) ) {
                                                return false;
                                        }
                                }
                        }
+
                        return true;
                }
        };
index cddf6cc..602aadb 100644 (file)
        }
 
        $( document ).ready( function () {
+               // Do not enable on user .js/.css pages, as there's no sane way of "previewing"
+               // the scripts or styles without reloading the page.
+               if ( $( '#mw-userjsyoucanpreview' ).length || $( '#mw-usercssyoucanpreview' ).length ) {
+                       return;
+               }
+
                // The following elements can change in a preview but are not output
                // by the server when they're empty until the preview reponse.
                // TODO: Make the server output these always (in a hidden state), so we don't
index 7a9ceee..c15fa0d 100644 (file)
@@ -2,13 +2,9 @@
  * This module enables double-click-to-edit functionality
  */
 ( function ( mw, $ ) {
-       $( function () {
-               var url = $( '#ca-edit a' ).attr( 'href' );
-               if ( url ) {
-                       mw.util.$content.dblclick( function ( e ) {
-                               e.preventDefault();
-                               window.location = url;
-                       } );
-               }
+       mw.util.$content.dblclick( function ( e ) {
+               e.preventDefault();
+               // Trigger native HTMLElement click instead of opening URL (bug 43052)
+               $( '#ca-edit a' ).get( 0 ).click();
        } );
 }( mediaWiki, jQuery ) );
index d02d432..61d9d15 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * JavaScript to enable right click edit functionality.
  * When the user right-clicks in a heading, it will open the
  * edit screen.
@@ -8,23 +8,19 @@ jQuery( function ( $ ) {
        // Don't use the ":has:(.editsection a)" selector because it performs very bad.
        // http://jsperf.com/jq-1-7-2-vs-jq-1-8-1-performance-of-mw-has/2
        $( document ).on( 'contextmenu', 'h1, h2, h3, h4, h5, h6', function ( e ) {
-               var $edit, href;
-
-               $edit = $( this ).find( '.editsection a' );
+               var $edit = $( this ).find( '.editsection a' );
                if ( !$edit.length ) {
                        return;
                }
 
-               // Get href of the editsection link
-               href = $edit.prop( 'href' );
-
                // Headings can contain rich text.
                // Make sure to not block contextmenu events on (other) anchor tags
                // inside the heading (e.g. to do things like copy URL, open in new tab, ..).
                // e.target can be the heading, but it can also be anything inside the heading.
-               if ( href && e.target.nodeName.toLowerCase() !== 'a' ) {
-                       window.location = href;
+               if ( e.target.nodeName.toLowerCase() !== 'a' ) {
+                       // Trigger native HTMLElement click instead of opening URL (bug 43052)
                        e.preventDefault();
+                       $edit.get( 0 ).click();
                }
        } );
 } );
index 514dbd5..f8af0a0 100644 (file)
@@ -77,17 +77,20 @@ var language = {
        /**
         * Converts a number using digitTransformTable.
         *
-        * @param {num} number Value to be converted
+        * @param {Number} number Value to be converted
         * @param {boolean} integer Convert the return value to an integer
+        * @return {Number|String} formatted number
         */
        convertNumber: function ( num, integer ) {
                var i, tmp, transformTable, numberString, convertedNumber;
 
-               if ( !mw.language.digitTransformTable ) {
+               // Set the target Transform table:
+               transformTable = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'digitTransformTable' );
+
+               if ( !transformTable ) {
                        return num;
                }
-               // Set the target Transform table:
-               transformTable = mw.language.digitTransformTable;
+
                // Check if the "restore" to Latin number flag is set:
                if ( integer ) {
                        if ( parseInt( num, 10 ) === num ) {
index 2cb4c3a..643e5c3 100644 (file)
@@ -76,8 +76,8 @@
 
        // Regular expressions to parse many common URIs.
        var parser = {
-               strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
-               loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
+               strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
+               loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
        },
 
        // The order here matches the order of captured matches in the above parser regexes.
index 6e2d3b4..934e906 100644 (file)
                 */
                return function () {
                        var $target = this.empty();
+                       // TODO: Simply $target.append( failableParserFn( arguments ).contents() )
+                       // or Simply $target.append( failableParserFn( arguments ) )
                        $.each( failableParserFn( arguments ).contents(), function ( i, node ) {
                                $target.append( node );
                        } );
                                regularLiteral, regularLiteralWithoutBar, regularLiteralWithoutSpace, backslash, anyCharacter,
                                escapedOrLiteralWithoutSpace, escapedOrLiteralWithoutBar, escapedOrRegularLiteral,
                                whitespace, dollar, digits,
-                               openExtlink, closeExtlink, openLink, closeLink, templateName, pipe, colon,
+                               openExtlink, closeExtlink, wikilinkPage, wikilinkContents, openLink, closeLink, templateName, pipe, colon,
                                templateContents, openTemplate, closeTemplate,
                                nonWhitespaceExpression, paramExpression, expression, result;
 
                                 var result = nOrMore( 1, escapedOrLiteralWithoutBar )();
                                 return result === null ? null : result.join('');
                        }
+
+                       // Used for wikilink page names.  Like literalWithoutBar, but
+                       // without allowing escapes.
+                       function unescapedLiteralWithoutBar() {
+                               var result = nOrMore( 1, regularLiteralWithoutBar )();
+                               return result === null ? null : result.join('');
+                       }
+
                        function literal() {
                                 var result = nOrMore( 1, escapedOrRegularLiteral )();
                                 return result === null ? null : result.join('');
                        }
                        openLink = makeStringParser( '[[' );
                        closeLink = makeStringParser( ']]' );
+                       pipe = makeStringParser( '|' );
+
+                       function template() {
+                               var result = sequence( [
+                                       openTemplate,
+                                       templateContents,
+                                       closeTemplate
+                               ] );
+                               return result === null ? null : result[1];
+                       }
+
+                       wikilinkPage = choice( [
+                               unescapedLiteralWithoutBar,
+                               template
+                       ] );
+
+                       function pipedWikilink() {
+                               var result = sequence( [
+                                       wikilinkPage,
+                                       pipe,
+                                       expression
+                               ] );
+                               return result === null ? null : [ result[0], result[2] ];
+                       }
+
+                       wikilinkContents = choice( [
+                               pipedWikilink,
+                               wikilinkPage // unpiped link
+                       ] );
+
                        function link() {
-                               var result, parsedResult;
+                               var result, parsedResult, parsedLinkContents;
                                result = null;
+
                                parsedResult = sequence( [
                                        openLink,
-                                       expression,
+                                       wikilinkContents,
                                        closeLink
                                ] );
                                if ( parsedResult !== null ) {
-                                        result = [ 'WLINK', parsedResult[1] ];
+                                       parsedLinkContents = parsedResult[1];
+                                       result = [ 'WLINK' ].concat( parsedLinkContents );
                                }
                                return result;
                        }
                                // use a CONCAT operator if there are multiple nodes, otherwise return the first node, raw.
                                return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
                        }
-                       pipe = makeStringParser( '|' );
+
                        function templateWithReplacement() {
                                var result = sequence( [
                                        templateName,
                        ] );
                        openTemplate = makeStringParser('{{');
                        closeTemplate = makeStringParser('}}');
-                       function template() {
-                               var result = sequence( [
-                                       openTemplate,
-                                       templateContents,
-                                       closeTemplate
-                               ] );
-                               return result === null ? null : result[1];
-                       }
                        nonWhitespaceExpression = choice( [
                                template,
                                link,
                                replacement,
                                literalWithoutBar
                        ] );
+
                        expression = choice( [
                                template,
                                link,
                                replacement,
                                literal
                        ] );
+
                        function start() {
                                var result = nOrMore( 0, expression )();
                                if ( result === null ) {
                                                $span.append( childNode );
                                        } );
                                } else {
-                                       // strings, integers, anything else
-                                       $span.append( node );
+                                       // Let jQuery append nodes, arrays of nodes and jQuery objects
+                                       // other things (strings, numbers, ..) are appended as text nodes (not as HTML strings)
+                                       $span.append( $.type( node ) === 'object' ? node : document.createTextNode( node ) );
                                }
                        } );
                        return $span;
                 * Note that we expect the parsed parameter to be zero-based. i.e. $1 should have become [ 0 ].
                 * if the specified parameter is not found return the same string
                 * (e.g. "$99" -> parameter 98 -> not found -> return "$99" )
-                * TODO throw error if nodes.length > 1 ?
+                * TODO: Throw error if nodes.length > 1 ?
                 * @param {Array} of one element, integer, n >= 0
                 * @return {String} replacement
                 */
                        var index = parseInt( nodes[0], 10 );
 
                        if ( index < replacements.length ) {
-                               if ( typeof arg === 'string' ) {
-                                       // replacement is a string, escape it
-                                       return mw.html.escape( replacements[index] );
-                               } else {
-                                       // replacement is no string, don't touch!
-                                       return replacements[index];
-                               }
+                               return replacements[index];
                        } else {
                                // index not found, fallback to displaying variable
                                return '$' + ( index + 1 );
 
                /**
                 * Transform wiki-link
-                * TODO unimplemented
+                *
+                * TODO:
+                * It only handles basic cases, either no pipe, or a pipe with an explicit
+                * anchor.
+                *
+                * It does not attempt to handle features like the pipe trick.
+                * However, the pipe trick should usually not be present in wikitext retrieved
+                * from the server, since the replacement is done at save time.
+                * It may, though, if the wikitext appears in extension-controlled content.
+                *
                 * @param nodes
                 */
-               wlink: function () {
-                       return 'unimplemented';
+               wlink: function ( nodes ) {
+                       var page, anchor, url;
+
+                       page = nodes[0];
+                       url = mw.util.wikiGetlink( page );
+
+                       // [[Some Page]] or [[Namespace:Some Page]]
+                       if ( nodes.length === 1 ) {
+                               anchor = page;
+                       }
+
+                       /*
+                        * [[Some Page|anchor text]] or
+                        * [[Namespace:Some Page|anchor]
+                        */
+                       else {
+                               anchor = nodes[1];
+                       }
+
+                       return $( '<a />' ).attr( {
+                               title: page,
+                               href: url
+                       } ).text( anchor );
                },
 
                /**
                        var form = nodes[0],
                                word = nodes[1];
                        return word && form && this.language.convertGrammar( word, form );
+               },
+
+               /**
+                * Tranform parsed structure into a int: (interface language) message include
+                * Invoked by putting {{MediaWiki:othermessage}} into a message
+                * @param {Array} of nodes
+                * @return {string} Other message
+                */
+               int: function ( nodes ) {
+                       return mw.jqueryMsg.getMessageFunction()( nodes[0].toLowerCase() );
+               },
+
+               /**
+                * Takes an unformatted number (arab, no group separators and . as decimal separator)
+                * and outputs it in the localized digit script and formatted with decimal
+                * separator, according to the current language
+                * @param {Array} of nodes
+                * @return {Number|String} formatted number
+                */
+               formatnum: function ( nodes ) {
+                       var isInteger = ( nodes[1] && nodes[1] === 'R' ) ? true : false,
+                               number = nodes[0];
+
+                       return this.language.convertNumber( number, isInteger );
                }
        };
        // Deprecated! don't rely on gM existing.
                // Caching is somewhat problematic, because we do need different message functions for different maps, so
                // we'd have to cache the parser as a member of this.map, which sounds a bit ugly.
                // Do not use mw.jqueryMsg unless required
-               if ( this.map.get( this.key ).indexOf( '{{' ) < 0 ) {
+               if ( !/\{\{|\[/.test(this.map.get( this.key ) ) ) {
                        // Fall back to mw.msg's simple parser
                        return oldParser.apply( this );
                }
index e059ed1..7879d6f 100644 (file)
@@ -37,6 +37,7 @@ templateParam
 templateName
   = tn:[A-Za-z_]+ { return tn.join('').toUpperCase() }
 
+/* TODO: Update to reflect separate piped and unpiped handling */
 link
   = "[[" w:expression "]]" { return [ 'WLINK', w ]; }
 
index 25c6068..6cb213f 100644 (file)
@@ -126,7 +126,8 @@ li#privacy,
 tr.mw-metadata-show-hide-extended,
 span.mw-filepage-other-resolutions,
 #filetoc,
-.usermessage {
+.usermessage,
+#mw-navigation {
        /* Hides all the elements irrelevant for printing */
        display: none;
 }
index 8373b51..30b9f94 100644 (file)
@@ -77,7 +77,7 @@ $wgAutoloadClasses += array(
        'GenericArrayObjectTest' => "$testDir/phpunit/includes/libs/GenericArrayObjectTest.php",
 
        # tests/phpunit/includes/site
-       'SiteObjectTest' => "$testDir/phpunit/includes/site/SiteObjectTest.php",
+       'SiteTest' => "$testDir/phpunit/includes/site/SiteTest.php",
        'TestSites' => "$testDir/phpunit/includes/site/TestSites.php",
 
        # tests/phpunit/languages
index 8aac86d..8a9791b 100644 (file)
@@ -785,6 +785,24 @@ x <div>foo</div> z
 
 !! end
 
+!! test
+Empty lines between block tags to test open p-tags are closed between the block tags
+!! input
+<div></div>
+
+
+<div></div>a
+
+b
+!! result
+<div></div>
+<p><br />
+</p>
+<div></div>a
+<p>b
+</p>
+!! end
+
 ###
 ### Preformatted text
 ###
@@ -1207,6 +1225,23 @@ c
 
 !!end
 
+!!test
+2c. Indent-Pre and tables (bug 42252)
+!!input
+{|
+ |+ foo
+ !  | bar
+|}
+!!result
+<table>
+<caption> foo
+</caption>
+<tr>
+<th> bar
+</th></tr></table>
+
+!!end
+
 !!test
 3a. Indent-Pre and block tags (single-line html)
 !!input
@@ -1291,6 +1326,20 @@ c
 
 !!end
 
+!! test
+5. White-space in indent-pre
+NOTE: the white-space char on 2nd line is significant
+!! input
+ a<br/>
+ b
+!! result
+<pre>a<br />
+
+b
+</pre>
+!! end
+
 ###
 ### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric)
 ###
@@ -2724,6 +2773,45 @@ A table with nothing but a caption
 
 !! end
 
+!! test
+A table with caption with default-spaced attributes and a table row
+!! input
+{|
+|+ style="color: red;" | caption1
+|-
+| foo
+|}
+!! result
+<table>
+<caption style="color: red;"> caption1
+</caption>
+<tr>
+<td> foo
+</td></tr></table>
+
+!! end
+
+!! test
+A table with captions with non-default spaced attributes and a table row
+!! input
+{|
+|+style="color: red;"|caption2
+|+ style="color: red;"| caption3
+|-
+| foo
+|}
+!! result
+<table>
+<caption style="color: red;">caption2
+</caption>
+<caption style="color: red;"> caption3
+</caption>
+<tr>
+<td> foo
+</td></tr></table>
+
+!! end
+
 !! test
 Table td-cell syntax variations
 !! input
@@ -3232,6 +3320,28 @@ Link with suffix
 </p>
 !! end
 
+!! article
+prefixed article
+!! text
+Some text
+!! endarticle
+
+!! test
+Bug 43661: Piped links with identical prefixes
+!! input
+[[prefixed article|prefixed articles with spaces]]
+
+[[prefixed article|prefixed articlesaoeu]]
+
+[[Main Page|Main Page test]]
+!! result
+<p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articles with spaces</a>
+</p><p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articlesaoeu</a>
+</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page test</a>
+</p>
+!! end
+
+
 !! test
 Link with HTML entity in suffix / tail
 !! input
@@ -3602,6 +3712,24 @@ language=kaa
 </p>
 !! end
 
+!! test
+Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
+!! input
+[[Foo|  bar]]
+
+[[Foo|  ''bar'']]
+
+[http://wp.org   foo]
+
+[http://wp.org   ''foo'']
+!! result
+<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">  bar</a>
+</p><p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">  <i>bar</i></a>
+</p><p><a rel="nofollow" class="external text" href="http://wp.org">foo</a>
+</p><p><a rel="nofollow" class="external text" href="http://wp.org"><i>foo</i></a>
+</p>
+!! end
+
 ###
 ### Interwiki links (see maintenance/interwiki.sql)
 ###
@@ -4098,6 +4226,20 @@ disabled
 </li></ul>
 !! end
 
+!! test
+Unclosed formatting tags that straddle lists are closed and reopened
+(Disabled since php parser generates broken html -- relies on Tidy to fix up)
+!! options
+disabled
+!! input
+# <s> a
+# b </s>
+!! result
+<ol><li> <s> a </s>
+</li><li> <s> b </s>
+</li></ol>
+!! end
+
 !! test
 List items are not parsed correctly following a <pre> block (bug 785)
 !! input
@@ -4587,7 +4729,7 @@ Magic links: RFC (bug 479)
 !! input
 RFC 822
 !! result
-<p><a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc822">RFC 822</a>
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
 !! end
 
@@ -4605,7 +4747,7 @@ Magic links: PMID incorrectly converts space to underscore
 !! input
 PMID 1234
 !! result
-<p><a class="external mw-magiclink-pmid" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
+<p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 </p>
 !! end
 
@@ -4912,8 +5054,14 @@ Main Page
 Template as link source
 !! input
 [[{{linktest2}}]]
+
+[[{{linktest2}}|Main Page]]
+
+[[{{linktest2}}]]Page
 !! result
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>Page
 </p>
 !! end
 
@@ -5427,8 +5575,23 @@ Templates: Links: 2. Generation of link href
 Templates: Links: 3. Generation of part of a link href
 !!input
 [[Fo{{echo|o}}|bar]]
+
+[[Foo{{echo|bar}}]]
+
+[[Foo{{echo|bar}}baz]]
+
+[[Foo{{echo|bar}}|bar]]
+
+[[:Foo{{echo|bar}}]]
+
+[[:Foo{{echo|bar}}|bar]]
 !!result
 <p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
+</p><p><a href="/index.php?title=Foobarbaz&amp;action=edit&amp;redlink=1" class="new" title="Foobarbaz (page does not exist)">Foobarbaz</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
 </p>
 !!end
 
@@ -6744,7 +6907,7 @@ BUG 1887: A RFC with a thumbnail
 !! input
 [[Image:foobar.jpg|thumb|This is RFC 12354]]
 !! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
 
 !! end
 
@@ -7744,6 +7907,15 @@ I always thought &eacute; was a cute letter.
 </p>
 !! end
 
+!! test
+text with entity-escaped character entity-like string: eacute
+!! input
+I always thought &amp;eacute; was a cute letter.
+!! result
+<p>I always thought &amp;eacute; was a cute letter.
+</p>
+!! end
+
 !! test
 text with undefined character entity: xacute
 !! input
@@ -10345,7 +10517,7 @@ Double RFC
 !! input
 RFC RFC 1234
 !! result
-<p>RFC <a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
+<p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
 </p>
 !! end
 
@@ -10363,7 +10535,7 @@ RFC code coverage
 !! input
 RFC   983&#x20;987
 !! result
-<p><a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
 </p>
 !! end
 
@@ -12503,6 +12675,23 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
 
 !! end
 
+!!test
+Gallery with invalid title as link (bug 43964)
+!! input
+<gallery>
+File:foobar.jpg|link=<
+</gallery>
+!! result
+<ul class="gallery">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 !!test
 Language parser function
 !! input
@@ -13088,6 +13277,23 @@ disabled
 </tbody></table>
 !! end
 
+!! test
+Tables: 4d. No escaping needed
+!! input
+{|
+||+1
+||-2
+|}
+!! result
+<table>
+<tr>
+<td>+1
+</td>
+<td>-2
+</td></tr></table>
+
+!! end
+
 #### --------------- Links ---------------
 #### 1. Quote marks in link text
 #### 2. Wikilinks: Escapes needed
@@ -13344,6 +13550,23 @@ disabled
 </p>
 !! end
 
+!! test
+HTML tag with necessary entities in attributes
+!! input
+<span title="&amp;amp;">foo</span>
+!! result
+<p><span title="&amp;amp;">foo</span>
+</p>
+!! end
+
+!! test
+HTML tag with 'unnecessary' entity encoding in attributes
+!! input
+<span title="&amp;">foo</span>
+!! result
+<p><span title="&amp;">foo</span>
+</p>
+!! end
 
 TODO:
 more images
index 8a55dae..c3e2a30 100644 (file)
@@ -2,7 +2,7 @@
 .DEFAULT: warning
 
 SHELL = /bin/sh
-CONFIG_FILE = $(shell pwd)/suite.xml
+CONFIG_FILE = ${PWD}/suite.xml
 PHP = php
 PU = ${PHP} phpunit.php --configuration ${CONFIG_FILE} ${FLAGS}
 
index b675000..3894435 100644 (file)
@@ -6,6 +6,7 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                'regex=' => false,
                'file=' => false,
                'use-filebackend=' => false,
+               'use-bagostuff=' => false,
                'keep-uploads' => false,
                'use-normal-tables' => false,
                'reuse-db' => false,
index 0dc18a2..1a02cb8 100644 (file)
@@ -496,6 +496,7 @@ class GlobalTest extends MediaWikiTestCase {
         * @param String $expectedText: Text after merge has been completed
         *
         * @dataProvider provideMerge()
+        * @group medium
         */
        public function testMerge( $old, $mine, $yours, $expectedMergeResult, $expectedText ) {
                $this->checkHasDiff3();
diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php
new file mode 100644 (file)
index 0000000..8b68703
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+
+/**
+ *
+ * @author Matthew Flaschen
+ *
+ * @group Output
+ *
+ */
+class OutputPageTest extends MediaWikiTestCase {
+       const SCREEN_MEDIA_QUERY = 'screen and (min-width: 982px)';
+       const SCREEN_ONLY_MEDIA_QUERY = 'only screen and (min-width: 982px)';
+
+       /**
+        * Tests a particular case of transformCssMedia, using the given input, globals,
+        * expected return, and message
+        *
+        * Asserts that $expectedReturn is returned.
+        *
+        * options['printableQuery'] - value of query string for printable, or omitted for none
+        * options['handheldQuery'] - value of query string for handheld, or omitted for none
+        * options['handheldForIPhone'] - value of the $wgHandheldForIPhone global
+        * options['media'] - passed into the method under the same name
+        * options['expectedReturn'] - expected return value
+        * options['message'] - PHPUnit message for assertion
+        *
+        * @param array $args key-value array of arguments as shown above
+        */
+       protected function assertTransformCssMediaCase($args) {
+               $queryData = array();
+               if ( isset( $args['printableQuery'] ) ) {
+                       $queryData['printable'] = $args['printableQuery'];
+               }
+
+               if ( isset( $args['handheldQuery'] ) ) {
+                       $queryData['handheld'] = $args['handheldQuery'];
+               }
+
+               $fauxRequest = new FauxRequest( $queryData, false );
+               $this->setMWGlobals( array(
+                               'wgRequest' => $fauxRequest,
+                               'wgHandheldForIPhone' => $args['handheldForIPhone']
+               ) );
+
+               $actualReturn = OutputPage::transformCssMedia( $args['media'] );
+               $this->assertSame( $args['expectedReturn'], $actualReturn, $args['message']);
+       }
+
+       /**
+        * Tests a case of transformCssMedia with both values of wgHandheldForIPhone.
+        * Used to verify that behavior is orthogonal to that option.
+        *
+        * If the value of wgHandheldForIPhone should matter, use assertTransformCssMediaCase.
+        *
+        * @param array $args key-value array of arguments as shown in assertTransformCssMediaCase.
+        * Will be mutated.
+        */
+       protected function assertTransformCssMediaCaseWithBothHandheldForIPhone($args) {
+               $message = $args['message'];
+               foreach( array( true, false ) as $handheldForIPhone ) {
+                       $args['handheldForIPhone'] = $handheldForIPhone;
+                       $stringHandheldForIPhone = var_export($handheldForIPhone, true);
+                       $args['message'] = "$message. \$wgHandheldForIPhone was $stringHandheldForIPhone";
+                       $this->assertTransformCssMediaCase( $args );
+               }
+       }
+
+       /**
+        * Tests print requests
+        */
+       public function testPrintRequests() {
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => 'screen',
+                       'expectedReturn' => null,
+                       'message' => 'On printable request, screen returns null'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => self::SCREEN_MEDIA_QUERY,
+                       'expectedReturn' => null,
+                       'message' => 'On printable request, screen media query returns null'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => self::SCREEN_ONLY_MEDIA_QUERY,
+                       'expectedReturn' => null,
+                       'message' => 'On printable request, screen media query with only returns null'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => 'print',
+                       'expectedReturn' => '',
+                       'message' => 'On printable request, media print returns empty string'
+               ) );
+       }
+
+       /**
+        * Tests screen requests, without either query parameter set
+        */
+       public function testScreenRequests() {
+               $this->assertTransformCssMediaCase( array(
+                       'handheldForIPhone' => false,
+                       'media' => 'screen',
+                       'expectedReturn' => 'screen',
+                       'message' => 'On screen request, with handheldForIPhone false, screen media type is preserved'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'media' => self::SCREEN_MEDIA_QUERY,
+                       'expectedReturn' => self::SCREEN_MEDIA_QUERY,
+                       'message' => 'On screen request, screen media query is preserved.'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'media' => self::SCREEN_ONLY_MEDIA_QUERY,
+                       'expectedReturn' => self::SCREEN_ONLY_MEDIA_QUERY,
+                       'message' => 'On screen request, screen media query with only is preserved.'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'media' => 'print',
+                       'expectedReturn' => 'print',
+                       'message' => 'On screen request, print media type is preserved'
+               ) );
+       }
+
+       /**
+        * Tests handheld and wgHandheldForIPhone behavior
+        */
+       public function testHandheld() {
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone(array(
+                       'handheldQuery' => '1',
+                       'media' => 'handheld',
+                       'expectedReturn' => '',
+                       'message' => 'On request with handheld querystring and media is handheld, returns empty string'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone(array(
+                       'handheldQuery' => '1',
+                       'media' => 'screen',
+                       'expectedReturn' => null,
+                       'message' => 'On request with handheld querystring and media is screen, returns null'
+               ) );
+
+               // A bit counter-intuitively, $wgHandheldForIPhone should only matter if the query handheld is false or omitted
+               $this->assertTransformCssMediaCase(array(
+                       'handheldQuery' => '0',
+                       'media' => 'screen',
+                       'handheldForIPhone' => true,
+                       'expectedReturn' => 'screen and (min-device-width: 481px)',
+                       'message' => 'With $wgHandheldForIPhone true, screen media type is transformed'
+               ) );
+
+               $this->assertTransformCssMediaCase(array(
+                       'media' => 'handheld',
+                       'handheldForIPhone' => true,
+                       'expectedReturn' => 'handheld, only screen and (max-device-width: 480px)',
+                       'message' => 'With $wgHandheldForIPhone true, handheld media type is transformed'
+               ) );
+
+               $this->assertTransformCssMediaCase( array(
+                       'media' => 'handheld',
+                       'handheldForIPhone' => false,
+                       'expectedReturn' => 'handheld',
+                       'message' => 'With $wgHandheldForIPhone false, handheld media type is preserved'
+               ) );
+       }
+}
index 5930d6c..28e2e30 100644 (file)
@@ -112,57 +112,70 @@ class SanitizerTest extends MediaWikiTestCase {
                        'Self-closing closing div'
                );
        }
-       
-       function testDecodeTagAttributes() {
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=bar' ), array( 'foo' => 'bar' ), 'Unquoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '    foo   =   bar    ' ), array( 'foo' => 'bar' ), 'Spaced attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo="bar"' ), array( 'foo' => 'bar' ), 'Double-quoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'' ), array( 'foo' => 'bar' ), 'Single-quoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( ':foo=\'bar\'' ), array( ':foo' => 'bar' ), 'Leading :' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '_foo=\'bar\'' ), array( '_foo' => 'bar' ), 'Leading _' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'Foo=\'bar\'' ), array( 'foo' => 'bar' ), 'Leading capital' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'FOO=BAR' ), array( 'foo' => 'BAR' ), 'Attribute keys are normalized to lowercase' );
-               
-               # Invalid beginning
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '-foo=bar' ), array(), 'Leading - is forbidden' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '.foo=bar' ), array(), 'Leading . is forbidden' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo-bar=bar' ), array( 'foo-bar' => 'bar' ), 'A - is allowed inside the attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo-=bar' ), array( 'foo-' => 'bar' ), 'A - is allowed inside the attribute' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo.bar=baz' ), array( 'foo.bar' => 'baz' ), 'A . is allowed inside the attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo.=baz' ), array( 'foo.' => 'baz' ), 'A . is allowed as last character' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo6=baz' ), array( 'foo6' => 'baz' ), 'Numbers are allowed' );
-               
-               # This bit is more relaxed than XML rules, but some extensions use it, like ProofreadPage (see bug 27539)
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '1foo=baz' ), array( '1foo' => 'baz' ), 'Leading numbers are allowed' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo$=baz' ), array(), 'Symbols are not allowed' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo@=baz' ), array(), 'Symbols are not allowed' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo~=baz' ), array(), 'Symbols are not allowed' );
-               
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=1[#^`*%w/(' ), array( 'foo' => '1[#^`*%w/(' ), 'All kind of characters are allowed as values' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo="1[#^`*%\'w/("' ), array( 'foo' => '1[#^`*%\'w/(' ), 'Double quotes are allowed if quoted by single quotes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'1[#^`*%"w/(\'' ), array( 'foo' => '1[#^`*%"w/(' ), 'Single quotes are allowed if quoted by double quotes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&amp;&quot;' ), array( 'foo' => '&"' ), 'Special chars can be provided as entities' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&foobar;' ), array( 'foo' => '&foobar;' ), 'Entity-like items are accepted' );
+
+
+       /**
+        * @dataProvider provideTagAttributesToDecode
+        * @cover Sanitizer::decodeTagAttributes
+        */
+       function testDecodeTagAttributes( $expected, $attributes, $message = '' ) {
+               $this->assertEquals( $expected,
+                       Sanitizer::decodeTagAttributes( $attributes ),
+                       $message
+               );
+       }
+
+       function provideTagAttributesToDecode() {
+               return array(
+                       array( array( 'foo' => 'bar' ), 'foo=bar', 'Unquoted attribute' ),
+                       array( array( 'foo' => 'bar' ), '    foo   =   bar    ', 'Spaced attribute' ),
+                       array( array( 'foo' => 'bar' ), 'foo="bar"', 'Double-quoted attribute' ),
+                       array( array( 'foo' => 'bar' ), 'foo=\'bar\'', 'Single-quoted attribute' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( ':foo' => 'bar' ), ':foo=\'bar\'', 'Leading :' ),
+                       array( array( '_foo' => 'bar' ), '_foo=\'bar\'', 'Leading _' ),
+                       array( array( 'foo' => 'bar' ), 'Foo=\'bar\'', 'Leading capital' ),
+                       array( array( 'foo' => 'BAR' ), 'FOO=BAR', 'Attribute keys are normalized to lowercase' ),
+
+                       # Invalid beginning
+                       array( array(), '-foo=bar', 'Leading - is forbidden' ),
+                       array( array(), '.foo=bar', 'Leading . is forbidden' ),
+                       array( array( 'foo-bar' => 'bar' ), 'foo-bar=bar', 'A - is allowed inside the attribute' ),
+                       array( array( 'foo-' => 'bar' ), 'foo-=bar', 'A - is allowed inside the attribute' ),
+                       array( array( 'foo.bar' => 'baz' ), 'foo.bar=baz', 'A . is allowed inside the attribute' ),
+                       array( array( 'foo.' => 'baz' ), 'foo.=baz', 'A . is allowed as last character' ),
+                       array( array( 'foo6' => 'baz' ), 'foo6=baz', 'Numbers are allowed' ),
+
+
+                       # This bit is more relaxed than XML rules, but some extensions use
+                       # it, like ProofreadPage (see bug 27539)
+                       array( array( '1foo' => 'baz' ), '1foo=baz', 'Leading numbers are allowed' ),
+                       array( array(), 'foo$=baz', 'Symbols are not allowed' ),
+                       array( array(), 'foo@=baz', 'Symbols are not allowed' ),
+                       array( array(), 'foo~=baz', 'Symbols are not allowed' ),
+                       array( array( 'foo' => '1[#^`*%w/(' ), 'foo=1[#^`*%w/(', 'All kind of characters are allowed as values' ),
+                       array( array( 'foo' => '1[#^`*%\'w/(' ), 'foo="1[#^`*%\'w/("', 'Double quotes are allowed if quoted by single quotes' ),
+                       array( array( 'foo' => '1[#^`*%"w/(' ), 'foo=\'1[#^`*%"w/(\'', 'Single quotes are allowed if quoted by double quotes' ),
+                       array( array( 'foo' => '&"' ), 'foo=&amp;&quot;', 'Special chars can be provided as entities' ),
+                       array( array( 'foo' => '&foobar;' ), 'foo=&foobar;', 'Entity-like items are accepted' ),
+               );
        }
 
        /**
         * @dataProvider provideDeprecatedAttributes
+        * @cover Sanitizer::fixTagAttributes
         */
-       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl ) {
-
-               $this->assertEquals( " $inputAttr", Sanitizer::fixTagAttributes( $inputAttr, $inputEl ) );
+       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl, $message = '' ) {
+               $this->assertEquals( " $inputAttr",
+                       Sanitizer::fixTagAttributes( $inputAttr, $inputEl ),
+                       $message
+               );
        }
 
        public static function provideDeprecatedAttributes() {
+               /** array( <attribute>, <element>, [message] ) */
                return array(
                        array( 'clear="left"', 'br' ),
                        array( 'clear="all"', 'br' ),
@@ -180,10 +193,10 @@ class SanitizerTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideCssCommentsFixtures
+        * @cover Sanitizer::checkCss
         */
        function testCssCommentsChecking( $expected, $css, $message = '' ) {
-               $this->assertEquals(
-                       $expected,
+               $this->assertEquals( $expected,
                        Sanitizer::checkCss( $css ),
                        $message
                );
index 03b94ae..a793bab 100644 (file)
@@ -23,6 +23,7 @@ class TemplateCategoriesTest extends MediaWikiLangTestCase {
                $status = $template->doEditContent( new WikitextContent( '[[Category:Solved bugs]]' ), 'Add a category through a template', 0, false, $user );
 
                // Run the job queue
+               JobQueueGroup::destroySingletons();
                $jobs = new RunJobs;
                $jobs->loadParamsAndArgs( null, array( 'quiet' => true ), null );
                $jobs->execute();
index 3a30b12..05f1408 100644 (file)
@@ -356,8 +356,6 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                $this->assertEquals( array( array( 'badaccess-group0' ), array( 'ns-specialprotected' ) ),
                                                         $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
-               $this->assertEquals( array( array( 'badaccess-group0' ) ),
-                                                        $this->title->getUserPermissionsErrors( 'execute', $this->user ) );
 
                $this->setTitle( NS_MAIN );
                $this->setUserPerm( 'bogus' );
diff --git a/tests/phpunit/includes/api/ApiAccountCreationTest.php b/tests/phpunit/includes/api/ApiAccountCreationTest.php
new file mode 100644 (file)
index 0000000..60f6537
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @group Database
+ * @group API
+ * @group medium
+ */
+class ApiCreateAccountTest extends ApiTestCase {
+       function setUp() {
+               parent::setUp();
+               LoginForm::setCreateaccountToken();
+       }
+
+       /**
+        * Test the account creation API with a valid request. Also
+        * make sure the new account can log in and is valid.
+        *
+        * This test does multiple API requests so it might end up being
+        * a bit slow. Raise the default timeout.
+        * @group medium
+        */
+       function testValid() {
+               global $wgServer;
+
+               if ( !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
+               }
+
+               $password = User::randomPassword();
+
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Apitestnew',
+                       'password' => $password,
+                       'email' => 'test@domain.test',
+                       'realname' => 'Test Name'
+               ) );
+
+               $result = $ret[0];
+               $this->assertNotInternalType( 'bool', $result );
+               $this->assertNotInternalType( 'null', $result['createaccount'] );
+
+               // Should first ask for token.
+               $a = $result['createaccount'];
+               $this->assertEquals( 'needtoken', $a['result'] );
+               $token = $a['token'];
+
+               // Finally create the account
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Apitestnew',
+                       'password' => $password,
+                       'token' => $token,
+                       'email' => 'test@domain.test',
+                       'realname' => 'Test Name' ), $ret[2]
+               );
+
+               $result = $ret[0];
+               $this->assertNotInternalType( 'bool', $result );
+               $this->assertEquals( 'success', $result['createaccount']['result'] );
+
+               // Try logging in with the new user.
+               $ret = $this->doApiRequest( array(
+                       'action' => 'login',
+                       'lgname' => 'Apitestnew',
+                       'lgpassword' => $password,
+                       )
+               );
+
+               $result = $ret[0];
+               $this->assertNotInternalType( 'bool', $result );
+               $this->assertNotInternalType( 'null', $result['login'] );
+
+               $a = $result['login']['result'];
+               $this->assertEquals( 'NeedToken', $a );
+               $token = $result['login']['token'];
+
+               $ret = $this->doApiRequest( array(
+                       'action' => 'login',
+                       'lgtoken' => $token,
+                       'lgname' => 'Apitestnew',
+                       'lgpassword' => $password,
+                       ), $ret[2]
+               );
+
+               $result = $ret[0];
+
+               $this->assertNotInternalType( 'bool', $result );
+               $a = $result['login']['result'];
+
+               $this->assertEquals( 'Success', $a );
+
+               // log out to destroy the session
+               $ret = $this->doApiRequest( array(
+                       'action' => 'logout',
+                       ), $ret[2]
+               );
+               $this->assertEquals( array(), $ret[0] );
+       }
+
+       /**
+        * Make sure requests with no names are invalid.
+        * @expectedException UsageException
+        */
+       function testNoName() {
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'token' => LoginForm::getCreateaccountToken(),
+                       'password' => 'password',
+               ) );
+       }
+
+       /**
+        * Make sure requests with no password are invalid.
+        * @expectedException UsageException
+        */
+       function testNoPassword() {
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'testName',
+                       'token' => LoginForm::getCreateaccountToken(),
+               ) );
+       }
+
+       /**
+        * Make sure requests with existing users are invalid.
+        * @expectedException UsageException
+        */
+       function testExistingUser() {
+               $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Apitestsysop',
+                       'token' => LoginForm::getCreateaccountToken(),
+                       'password' => 'password',
+                       'email' => 'test@domain.test',
+               ) );
+       }
+
+       /**
+        * Make sure requests with invalid emails are invalid.
+        * @expectedException UsageException
+        */
+       function testInvalidEmail() {
+               global $wgEnableEmail;
+               if( !$wgEnableEmail ) {
+                       $this->markTestSkipped( 'email is not enabled, so createaccount does not check it' );
+               }
+               $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Test User',
+                       'token' => LoginForm::getCreateaccountToken(),
+                       'password' => 'password',
+                       'email' => 'invalid',
+               ) );
+       }
+}
index 52f1d28..dd4d598 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiBlockTest extends ApiTestCase {
 
index c564403..902b7b8 100644 (file)
@@ -22,7 +22,11 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                // Set up groups
                $this->mUserMock->expects( $this->any() )
-                       ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user')) );
+                       ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user' ) ) );
+
+               // Set up callback for User::getOptionKinds
+               $this->mUserMock->expects( $this->any() )
+                       ->method( 'getOptionKinds' )->will( $this->returnCallback( array( $this, 'getOptionKinds' ) ) );
 
                // Create a new context
                $this->mContext = new DerivativeContext( new RequestContext() );
@@ -56,6 +60,8 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        }
 
        public function hookGetPreferences( $user, &$preferences ) {
+               $preferences = array();
+
                foreach ( array( 'name', 'willBeNull', 'willBeEmpty', 'willBeHappy' ) as $k ) {
                        $preferences[$k] = array(
                                'type' => 'text',
@@ -83,6 +89,36 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                return true;
        }
 
+       public function getOptionKinds( IContextSource $context, $options = null ) {
+               // Match with above.
+               $kinds = array(
+                       'name' => 'registered',
+                       'willBeNull' => 'registered',
+                       'willBeEmpty' => 'registered',
+                       'willBeHappy' => 'registered',
+                       'testmultiselect-opt1' => 'registered-multiselect',
+                       'testmultiselect-opt2' => 'registered-multiselect',
+                       'testmultiselect-opt3' => 'registered-multiselect',
+                       'testmultiselect-opt4' => 'registered-multiselect',
+               );
+
+               if ( $options === null ) {
+                       return $kinds;
+               }
+
+               $mapping = array();
+               foreach ( $options as $key => $value ) {
+                       if ( isset( $kinds[$key] ) ) {
+                               $mapping[$key] = $kinds[$key];
+                       } elseif ( substr( $key, 0, 7 ) === 'userjs-' ) {
+                               $mapping[$key] = 'userjs';
+                       } else {
+                               $mapping[$key] = 'unused';
+                       }
+               }
+               return $mapping;
+       }
+
        private function getSampleRequest( $custom = array() ) {
                $request = array(
                        'token' => '123ABC',
@@ -162,7 +198,8 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
        public function testReset() {
                $this->mUserMock->expects( $this->once() )
-                       ->method( 'resetOptions' );
+                       ->method( 'resetOptions' )
+                       ->with( $this->equalTo( array( 'all' ) ) );
 
                $this->mUserMock->expects( $this->never() )
                        ->method( 'setOption' );
@@ -177,6 +214,24 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->assertEquals( self::$Success, $response );
        }
 
+       public function testResetKinds() {
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'resetOptions' )
+                       ->with( $this->equalTo( array( 'registered' ) ) );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'setOption' );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array( 'reset' => '', 'resetkinds' => 'registered' ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+
        public function testOptionWithValue() {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
@@ -201,7 +256,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'name' ), $this->equalTo( null ) );
+                       ->with( $this->equalTo( 'name' ), $this->identicalTo( null ) );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
@@ -216,24 +271,24 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 1 ) )
+               $this->mUserMock->expects( $this->at( 2 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 2 ) )
+               $this->mUserMock->expects( $this->at( 3 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeNull' ), $this->equalTo( null ) );
+                       ->with( $this->equalTo( 'willBeNull' ), $this->identicalTo( null ) );
 
-               $this->mUserMock->expects( $this->at( 3 ) )
+               $this->mUserMock->expects( $this->at( 4 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 4 ) )
+               $this->mUserMock->expects( $this->at( 5 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) );
 
-               $this->mUserMock->expects( $this->at( 5 ) )
+               $this->mUserMock->expects( $this->at( 6 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 6 ) )
+               $this->mUserMock->expects( $this->at( 7 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
 
@@ -251,17 +306,17 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 2 ) )
+               $this->mUserMock->expects( $this->at( 3 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 3 ) )
+               $this->mUserMock->expects( $this->at( 4 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
 
-               $this->mUserMock->expects( $this->at( 4 ) )
+               $this->mUserMock->expects( $this->at( 5 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 5 ) )
+               $this->mUserMock->expects( $this->at( 6 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
 
@@ -284,21 +339,21 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 1 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt1' ), $this->equalTo( true ) );
-
                $this->mUserMock->expects( $this->at( 2 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt2' ), $this->equalTo( false ) );
+                       ->with( $this->equalTo( 'testmultiselect-opt1' ), $this->identicalTo( true ) );
 
                $this->mUserMock->expects( $this->at( 3 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt3' ), $this->equalTo( false ) );
+                       ->with( $this->equalTo( 'testmultiselect-opt2' ), $this->identicalTo( null ) );
 
                $this->mUserMock->expects( $this->at( 4 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt4' ), $this->equalTo( false ) );
+                       ->with( $this->equalTo( 'testmultiselect-opt3' ), $this->identicalTo( false ) );
+
+               $this->mUserMock->expects( $this->at( 5 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'testmultiselect-opt4' ), $this->identicalTo( false ) );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
@@ -311,4 +366,47 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->assertEquals( self::$Success, $response );
        }
+
+       public function testUnknownOption() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array(
+                       'change' => 'unknownOption=1'
+               ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( array(
+                       'options' => 'success',
+                       'warnings' => array(
+                               'options' => array(
+                                       '*' => "Validation error for 'unknownOption': not a valid preference"
+                               )
+                       )
+               ), $response );
+       }
+
+       public function testUserjsOption() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->at( 2 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'userjs-option' ), $this->equalTo( '1' ) );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array(
+                       'change' => 'userjs-option=1'
+               ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
 }
index b5dabf0..93ff24a 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiParseTest extends ApiTestCase {
 
index d903714..3ab77fd 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiPurgeTest extends ApiTestCase {
 
index 28dcb97..19da81c 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiQueryRevisionsTest extends ApiTestCase {
 
index dbf02f7..1b1886e 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiQueryTest extends ApiTestCase {
 
index a1b941d..2f2f5f9 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiTest extends ApiTestCase {
 
index 7e054a4..fcd581a 100644 (file)
@@ -147,6 +147,17 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                        'prop' => 'info' ), $session, false, $user->user );
                return $data;
        }
+
+       public function testApiTestGroup() {
+               $groups = PHPUnit_Util_Test::getGroups( get_class( $this ) );
+               $constraint = PHPUnit_Framework_Assert::logicalOr(
+                       $this->contains( 'medium' ),
+                       $this->contains( 'large' )
+               );
+               $this->assertThat( $groups, $constraint,
+                       'ApiTestCase::setUp can be slow, tests must be "medium" or "large"'
+               );
+       }
 }
 
 class UserWrapper {
index b7ae292..4fecec0 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  * @todo This test suite is severly broken and need a full review
  */
 class ApiWatchTest extends ApiTestCase {
index 8209f59..d34e799 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiFormatPhpTest extends ApiFormatTestBase {
 
index 3501aec..ca387a2 100644 (file)
@@ -349,12 +349,15 @@ class TextContentTest extends MediaWikiLangTestCase {
         * @dataProvider dataGetDeletionUpdates
         */
        public function testDeletionUpdates( $title, $model, $text, $expectedStuff ) {
-               $title = Title::newFromText( $title );
-               $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+               $ns = $this->getDefaultWikitextNS();
+               $title = Title::newFromText( $title, $ns );
 
                $content = ContentHandler::makeContent( $text, $title, $model );
 
-               $updates = $content->getDeletionUpdates( WikiPage::factory( $title ) );
+               $page = WikiPage::factory( $title );
+               $page->doEditContent( $content, '' );
+
+               $updates = $content->getDeletionUpdates( $page );
 
                // make updates accessible by class name
                foreach ( $updates as $update ) {
@@ -377,6 +380,8 @@ class TextContentTest extends MediaWikiLangTestCase {
                                $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
                        }
                }
+
+               $page->doDeleteArticle( '' );
        }
 
        public static function provideConvert() {
index b76e9aa..7cf473e 100644 (file)
@@ -69,11 +69,14 @@ more stuff
         * @group Database
         */
        public function testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff ) {
-               $title = Title::newFromText( $title );
-               $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+               $ns = $this->getDefaultWikitextNS();
+               $title = Title::newFromText( $title, $ns );
 
                $content = ContentHandler::makeContent( $text, $title, $model );
 
+               $page = WikiPage::factory( $title );
+               $page->doEditContent( $content, '' );
+
                $updates = $content->getSecondaryDataUpdates( $title );
 
                // make updates accessible by class name
@@ -92,6 +95,8 @@ more stuff
                                $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
                        }
                }
+
+               $page->doDeleteArticle( '' );
        }
 
        public static function dataGetSection() {
index 7958a8a..a391fc5 100644 (file)
@@ -232,7 +232,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @todo: currently only checks list of tables
         */
        public function testUpgrades() {
-               global $IP, $wgVersion;
+               global $IP, $wgVersion, $wgProfileToDatabase;
 
                // Versions tested
                $versions = array(
@@ -251,6 +251,9 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
 
                $currentDB = new DatabaseSqliteStandalone( ':memory:' );
                $currentDB->sourceFile( "$IP/maintenance/tables.sql" );
+               if ( $wgProfileToDatabase ) {
+                       $currentDB->sourceFile( "$IP/maintenance/sqlite/archives/patch-profiling.sql" );
+               }
                $currentTables = $this->getTables( $currentDB );
                sort( $currentTables );
 
index 2ed3dd3..4cadf31 100644 (file)
  * @ingroup Test
  *
  * @group ORM
+ * @group Database
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Daniel Kinzler
  */
-abstract class ORMTableTest extends MediaWikiTestCase {
+class ORMTableTest extends MediaWikiTestCase {
 
        /**
         * @since 1.21
         * @return string
         */
-       protected abstract function getTableClass();
+       protected function getTableClass() {
+               return 'PageORMTableForTesting';
+       }
 
        /**
         * @since 1.21
@@ -62,4 +66,81 @@ abstract class ORMTableTest extends MediaWikiTestCase {
                $this->assertTrue( $class::singleton() === $class::singleton() );
        }
 
+       /**
+        * @since 1.21
+        */
+       public function testIgnoreErrorsOverride() {
+               $table = $this->getTable();
+
+               $db = $table->getReadDbConnection();
+               $db->ignoreErrors( true );
+
+               try {
+                       $table->rawSelect( "this is invalid" );
+                       $this->fail( "An invalid query should trigger a DBQueryError even if ignoreErrors is enabled." );
+               } catch ( DBQueryError $ex ) {
+                       $this->assertTrue( true, "just making phpunit happy" );
+               }
+
+               $db->ignoreErrors( false );
+       }
+
+}
+
+/**
+ * Dummy ORM table for testing, reading Title objects from the page table.
+ *
+ * @since 1.21
+ */
+
+class PageORMTableForTesting extends ORMTable {
+
+       /**
+        * @see ORMTable::getName
+        *
+        * @return string
+        */
+       public function getName() {
+               return 'page';
+       }
+
+       /**
+        * @see ORMTable::getRowClass
+        *
+        * @return string
+        */
+       public function getRowClass() {
+               return 'Title';
+       }
+
+       /**
+        * @see ORMTable::newRow
+        *
+        * @return IORMRow
+        */
+       public function newRow( array $data, $loadDefaults = false ) {
+               return Title::makeTitle( $data['namespace'], $data['title'] );
+       }
+
+       /**
+        * @see ORMTable::getFields
+        *
+        * @return array
+        */
+       public function getFields() {
+               return array(
+                       'id' => 'int',
+                       'namespace' => 'int',
+                       'title' => 'str',
+               );
+       }
+
+       /**
+        * @see ORMTable::getFieldPrefix
+        *
+        * @return string
+        */
+       protected function getFieldPrefix() {
+               return 'page_';
+       }
 }
index 7beb4fe..0cb8105 100644 (file)
@@ -1998,12 +1998,22 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
 
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir1" ) );
+               $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
+               $this->assertEquals( array(), $items, "Directory listing is empty." );
+
                foreach ( $files as $file ) { // clean up
                        $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) );
                }
 
                $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
-               foreach ( $iter as $iter ) {} // no errors
+               foreach ( $iter as $file ) {} // no errors
+               $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
+               $this->assertEquals( array(), $items, "Directory listing is empty." );
+
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/not/exists" ) );
+               $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
+               $this->assertEquals( array(), $items, "Directory listing is empty." );
        }
 
        public function testLockCalls() {
index 54f6607..2cd86ea 100644 (file)
@@ -458,6 +458,16 @@ class CSSJanusTest extends MediaWikiTestCase {
                                ".foo\t{\tleft\t:\t0;}",
                                ".foo\t{\tright\t:\t0;}"
                        ),
+
+                       // Guard against partial keys
+                       array(
+                               '.foo { leftxx: 0; }',
+                               '.foo { leftxx: 0; }'
+                       ),
+                       array(
+                               '.foo { rightxx: 0; }',
+                               '.foo { rightxx: 0; }'
+                       ),
                );
        }
 
@@ -534,16 +544,6 @@ class CSSJanusTest extends MediaWikiTestCase {
         */
        function provideTransformBrokenCases() {
                return array(
-                       // Guard against partial keys
-                       array(
-                               '.foo { leftxx: 0; }',
-                               '.foo { leftxx: 0; }'
-                       ),
-                       array(
-                               '.foo { rightxx: 0; }',
-                               '.foo { rightxx: 0; }'
-                       ),
-
                        // Guard against selectors that look flippable
                        array(
                                # <foo-left-x attr="x">
diff --git a/tests/phpunit/includes/objectcache/BagOStuffTest.php b/tests/phpunit/includes/objectcache/BagOStuffTest.php
new file mode 100644 (file)
index 0000000..ab3d811
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * This class will test BagOStuff.
+ *
+ * @author     Matthias Mullie <mmullie@wikimedia.org>
+ */
+class BagOStuffTest extends MediaWikiTestCase {
+       private $cache;
+
+       protected function setUp() {
+               parent::setUp();
+
+               // type defined through parameter
+               if ( $this->getCliArg( 'use-bagostuff=' ) ) {
+                       $name = $this->getCliArg( 'use-bagostuff=' );
+
+                       $this->cache = ObjectCache::newFromId( $name );
+
+               // no type defined - use simple hash
+               } else {
+                       $this->cache = new HashBagOStuff;
+               }
+
+               $this->cache->delete( wfMemcKey( 'test' ) );
+       }
+
+       protected function tearDown() {
+       }
+
+       public function testMerge() {
+               $key = wfMemcKey( 'test' );
+
+               $usleep = 0;
+
+               /**
+                * Callback method: append "merged" to whatever is in cache.
+                *
+                * @param BagOStuff $cache
+                * @param string $key
+                * @param int $existingValue
+                * @use int $usleep
+                * @return int
+                */
+               $callback = function( BagOStuff $cache, $key, $existingValue ) use ( &$usleep ) {
+                       // let's pretend this is an expensive callback to test concurrent merge attempts
+                       usleep( $usleep );
+
+                       if ( $existingValue === false ) {
+                               return 'merged';
+                       }
+
+                       return $existingValue . 'merged';
+               };
+
+               // merge on non-existing value
+               $merged = $this->cache->merge( $key, $callback, 0 );
+               $this->assertTrue( $merged );
+               $this->assertEquals( $this->cache->get( $key ), 'merged' );
+
+               // merge on existing value
+               $merged = $this->cache->merge( $key, $callback, 0 );
+               $this->assertTrue( $merged );
+               $this->assertEquals( $this->cache->get( $key ), 'mergedmerged' );
+
+               /*
+                * Test concurrent merges by forking this process, if:
+                * - not manually called with --use-bagostuff
+                * - pcntl_fork is supported by the system
+                * - cache type will correctly support calls over forks
+                */
+               $fork = (bool) $this->getCliArg( 'use-bagostuff=' );
+               $fork &= function_exists( 'pcntl_fork' );
+               $fork &= !$this->cache instanceof HashBagOStuff;
+               $fork &= !$this->cache instanceof EmptyBagOStuff;
+               $fork &= !$this->cache instanceof MultiWriteBagOStuff;
+               if ( $fork ) {
+                       // callback should take awhile now so that we can test concurrent merge attempts
+                       $usleep = 5000;
+
+                       $pid = pcntl_fork();
+                       if ( $pid == -1 ) {
+                               // can't fork, ignore this test...
+                       } elseif ( $pid ) {
+                               // wait a little, making sure that the child process is calling merge
+                               usleep( 3000 );
+
+                               // attempt a merge - this should fail
+                               $merged = $this->cache->merge( $key, $callback, 0, 1 );
+
+                               // merge has failed because child process was merging (and we only attempted once)
+                               $this->assertFalse( $merged );
+
+                               // make sure the child's merge is completed and verify
+                               usleep( 3000 );
+                               $this->assertEquals( $this->cache->get( $key ), 'mergedmergedmerged' );
+                       } else {
+                               $this->cache->merge( $key, $callback, 0, 1 );
+
+                               // Note: I'm not even going to check if the merge worked, I'll
+                               // compare values in the parent process to test if this merge worked.
+                               // I'm just going to exit this child process, since I don't want the
+                               // child to output any test results (would be rather confusing to
+                               // have test output twice)
+                               exit;
+                       }
+               }
+       }
+}
index 208ab1e..0cecdee 100644 (file)
  * @ingroup Test
  *
  * @group Site
- * @group Database
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-class MediaWikiSiteTest extends SiteObjectTest {
-
-       public function setUp() {
-               parent::setUp();
-
-               static $hasSites = false;
-
-               if ( !$hasSites ) {
-                       TestSites::insertIntoDb();
-                       $hasSites = true;
-               }
-       }
-
-       public function testFactoryConstruction() {
-               $this->assertInstanceOf( 'MediaWikiSite', MediaWikiSite::newFromGlobalId( 'enwiki' ) );
-               $this->assertInstanceOf( 'Site', MediaWikiSite::newFromGlobalId( 'enwiki' ) );
-               $this->assertInstanceOf( 'MediaWikiSite', SitesTable::singleton()->newRow( array( 'type' => Site::TYPE_MEDIAWIKI ) ) );
-       }
+class MediaWikiSiteTest extends SiteTest {
 
        public function testNormalizePageTitle() {
-               $site = MediaWikiSite::newFromGlobalId( 'enwiki' );
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiki' );
 
                //NOTE: this does not actually call out to the enwiki site to perform the normalization,
                //      but uses a local Title object to do so. This is hardcoded on SiteLink::normalizePageTitle
@@ -73,8 +56,7 @@ class MediaWikiSiteTest extends SiteObjectTest {
         * @dataProvider fileUrlProvider
         */
        public function testGetFileUrl( $url, $filePath, $pathArgument, $expected ) {
-               $site = MediaWikiSite::newFromGlobalId( 'enwiki' );
-
+               $site = new MediaWikiSite();
                $site->setFilePath( $url . $filePath );
 
                $this->assertEquals( $expected, $site->getFileUrl( $pathArgument ) );
@@ -97,10 +79,9 @@ class MediaWikiSiteTest extends SiteObjectTest {
         * @dataProvider provideGetPageUrl
         */
        public function testGetPageUrl( $path, $page, $expected ) {
-               /* @var MediaWikiSite $site */
-               $site = MediaWikiSite::newFromGlobalId( 'enwiki' );
-
+               $site = new MediaWikiSite();
                $site->setLinkPath( $path );
+
                $this->assertContains( $path, $site->getPageUrl() );
                $this->assertContains( $expected, $site->getPageUrl( $page ) );
        }
diff --git a/tests/phpunit/includes/site/SiteArrayTest.php b/tests/phpunit/includes/site/SiteArrayTest.php
deleted file mode 100644 (file)
index 613f63f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * Tests for the SiteArray class.
- * The tests for methods defined in the SiteList interface are in SiteListTest.
- *
- * 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
- *Both
- * Bith
- * @file
- * @since 1.21
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @group Site
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SiteArrayTest extends GenericArrayObjectTest {
-
-       /**
-        * @see GenericArrayObjectTest::elementInstancesProvider
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       public function elementInstancesProvider() {
-               $sites = TestSites::getSites();
-
-               $siteArrays = array();
-
-               $siteArrays[] = $sites;
-
-               $siteArrays[] = array( array_shift( $sites ) );
-
-               $siteArrays[] = array( array_shift( $sites ), array_shift( $sites ) );
-
-               return $this->arrayWrap( $siteArrays );
-       }
-
-       /**
-        * @see GenericArrayObjectTest::getInstanceClass
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       public function getInstanceClass() {
-               return 'SiteArray';
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        *
-        * @since 1.21
-        *
-        * @param SiteArray $list
-        */
-       public function testSerializationMore( SiteArray $list ) {
-               $serialization = serialize( $list );
-               /**
-                * @var SiteArray $copy
-                */
-               $copy = unserialize( $serialization );
-
-               $this->assertArrayEquals( $list->getGlobalIdentifiers(), $copy->getGlobalIdentifiers() );
-
-               /**
-                * @var Site $site
-                */
-               foreach ( $list as $site ) {
-                       $this->assertTrue( $copy->hasInternalId( $site->getInternalId() ) );
-               }
-       }
-
-}
\ No newline at end of file
index bb8367f..7b88212 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Tests for the SiteList implementing classes.
+ * Tests for the SiteList 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
@@ -41,7 +41,7 @@ class SiteListTest extends MediaWikiTestCase {
                $listInstances = array();
 
                foreach ( $sitesArrays as $sitesArray ) {
-                       $listInstances[] = new SiteArray( $sitesArray[0] );
+                       $listInstances[] = new SiteList( $sitesArray[0] );
                }
 
                return $this->arrayWrap( $listInstances );
@@ -164,5 +164,28 @@ class SiteListTest extends MediaWikiTestCase {
                $this->assertArrayEquals( $expected, $identifiers );
        }
 
+       /**
+        * @dataProvider siteListProvider
+        *
+        * @since 1.21
+        *
+        * @param SiteList $list
+        */
+       public function testSerialization( SiteList $list ) {
+               $serialization = serialize( $list );
+               /**
+                * @var SiteArray $copy
+                */
+               $copy = unserialize( $serialization );
+
+               $this->assertArrayEquals( $list->getGlobalIdentifiers(), $copy->getGlobalIdentifiers() );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $list as $site ) {
+                       $this->assertTrue( $copy->hasInternalId( $site->getInternalId() ) );
+               }
+       }
 
 }
\ No newline at end of file
diff --git a/tests/phpunit/includes/site/SiteObjectTest.php b/tests/phpunit/includes/site/SiteObjectTest.php
deleted file mode 100644 (file)
index 207f46c..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-
-/**
- * Tests for the SiteObject 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
- * 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
- * @since 1.21
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @group Site
- * @group Database
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SiteObjectTest extends ORMRowTest {
-
-       /**
-        * @see ORMRowTest::getRowClass
-        * @since 1.21
-        * @return string
-        */
-       protected function getRowClass() {
-               return 'SiteObject';
-       }
-
-       /**
-        * @see ORMRowTest::getTableInstance
-        * @since 1.21
-        * @return IORMTable
-        */
-       protected function getTableInstance() {
-               return SitesTable::singleton();
-       }
-
-       /**
-        * @see ORMRowTest::constructorTestProvider
-        * @since 1.21
-        * @return array
-        */
-       public function constructorTestProvider() {
-               $argLists = array();
-
-               $argLists[] = array( 'global_key' => 'foo' );
-
-               $argLists[] = array( 'global_key' => 'bar', 'type' => Site::TYPE_MEDIAWIKI );
-
-               $constructorArgs = array();
-
-               foreach ( $argLists as $argList ) {
-                       $constructorArgs[] = array( $argList, true );
-               }
-
-               return $constructorArgs;
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetInterwikiIds( Site $site ) {
-               $this->assertInternalType( 'array', $site->getInterwikiIds() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetNavigationIds( Site $site ) {
-               $this->assertInternalType( 'array', $site->getNavigationIds() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testAddNavigationId( Site $site ) {
-               $site->addNavigationId( 'foobar' );
-               $this->assertTrue( in_array( 'foobar', $site->getNavigationIds(), true ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testAddInterwikiId( Site $site ) {
-               $site->addInterwikiId( 'foobar' );
-               $this->assertTrue( in_array( 'foobar', $site->getInterwikiIds(), true ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetLanguageCode( Site $site ) {
-               $this->assertTypeOrFalse( 'string', $site->getLanguageCode() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testSetLanguageCode( Site $site ) {
-               $site->setLanguageCode( 'en' );
-               $this->assertEquals( 'en', $site->getLanguageCode() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testNormalizePageName( Site $site ) {
-               $this->assertInternalType( 'string', $site->normalizePageName( 'Foobar' ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetGlobalId( Site $site ) {
-               $this->assertInternalType( 'string', $site->getGlobalId() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testSetGlobalId( Site $site ) {
-               $site->setGlobalId( 'foobar' );
-               $this->assertEquals( 'foobar', $site->getGlobalId() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetType( Site $site ) {
-               $this->assertInternalType( 'string', $site->getType() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetPath( Site $site ) {
-               $this->assertTypeOrFalse( 'string', $site->getPath( 'page_path' ) );
-               $this->assertTypeOrFalse( 'string', $site->getPath( 'file_path' ) );
-               $this->assertTypeOrFalse( 'string', $site->getPath( 'foobar' ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetAllPaths( Site $site ) {
-               $this->assertInternalType( 'array', $site->getAllPaths() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testSetAndRemovePath( Site $site ) {
-               $count = count( $site->getAllPaths() );
-
-               $site->setPath( 'spam', 'http://www.wikidata.org/$1' );
-               $site->setPath( 'spam', 'http://www.wikidata.org/foo/$1' );
-               $site->setPath( 'foobar', 'http://www.wikidata.org/bar/$1' );
-
-               $this->assertEquals( $count + 2, count( $site->getAllPaths() ) );
-
-               $this->assertInternalType( 'string', $site->getPath( 'foobar' ) );
-               $this->assertEquals( 'http://www.wikidata.org/foo/$1', $site->getPath( 'spam' ) );
-
-               $site->removePath( 'spam' );
-               $site->removePath( 'foobar' );
-
-               $this->assertEquals( $count, count( $site->getAllPaths() ) );
-
-               $this->assertFalse( $site->getPath( 'foobar' ) );
-               $this->assertFalse( $site->getPath( 'spam' ) );
-       }
-
-       public function testSetLinkPath() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-               $path = "TestPath/$1";
-
-               $site->setLinkPath( $path );
-               $this->assertEquals( $path, $site->getLinkPath() );
-       }
-
-       public function testGetLinkPathType() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               $path = 'TestPath/$1';
-               $site->setLinkPath( $path );
-               $this->assertEquals( $path, $site->getPath( $site->getLinkPathType() ) );
-
-               $path = 'AnotherPath/$1';
-               $site->setPath( $site->getLinkPathType(), $path );
-               $this->assertEquals( $path, $site->getLinkPath() );
-       }
-
-       public function testSetPath() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               $path = 'TestPath/$1';
-               $site->setPath( 'foo', $path );
-
-               $this->assertEquals( $path, $site->getPath( 'foo' ) );
-       }
-
-       public function testProtocolRelativePath() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               $type = $site->getLinkPathType();
-               $path = '//acme.com/'; // protocol-relative URL
-               $site->setPath( $type, $path );
-
-               $this->assertEquals( '', $site->getProtocol() );
-       }
-
-       public function provideGetPageUrl() {
-               //NOTE: the assumption that the URL is built by replacing $1
-               //      with the urlencoded version of $page
-               //      is true for SiteObject but not guaranteed for subclasses.
-               //      Subclasses need to override this provider appropriately.
-
-               return array(
-                       array( #0
-                               'http://acme.test/TestPath/$1',
-                               'Foo',
-                               '/TestPath/Foo',
-                       ),
-                       array( #1
-                               'http://acme.test/TestScript?x=$1&y=bla',
-                               'Foo',
-                               'TestScript?x=Foo&y=bla',
-                       ),
-                       array( #2
-                               'http://acme.test/TestPath/$1',
-                               'foo & bar/xyzzy (quux-shmoox?)',
-                               '/TestPath/foo%20%26%20bar%2Fxyzzy%20%28quux-shmoox%3F%29',
-                       ),
-               );
-       }
-
-       /**
-        * @dataProvider provideGetPageUrl
-        */
-       public function testGetPageUrl( $path, $page, $expected ) {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               //NOTE: the assumption that getPageUrl is based on getLinkPath
-               //      is true for SiteObject but not guaranteed for subclasses.
-               //      Subclasses need to override this test case appropriately.
-               $site->setLinkPath( $path );
-               $this->assertContains( $path, $site->getPageUrl() );
-
-               $this->assertContains( $expected, $site->getPageUrl( $page ) );
-       }
-
-       protected function assertTypeOrFalse( $type, $value ) {
-               if ( $value === false ) {
-                       $this->assertTrue( true );
-               }
-               else {
-                       $this->assertInternalType( $type, $value );
-               }
-       }
-
-}
\ No newline at end of file
diff --git a/tests/phpunit/includes/site/SiteSQLStoreTest.php b/tests/phpunit/includes/site/SiteSQLStoreTest.php
new file mode 100644 (file)
index 0000000..5b66d29
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * Tests for the SiteSQLStore 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
+ * 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
+ * @since 1.21
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class SiteSQLStoreTest extends MediaWikiTestCase {
+
+       public function testGetSites() {
+               $expectedSites = TestSites::getSites();
+               TestSites::insertIntoDb();
+
+               $store = SiteSQLStore::newInstance();
+
+               $sites = $store->getSites();
+
+               $this->assertInstanceOf( 'SiteList', $sites );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $this->assertInstanceOf( 'Site', $site );
+               }
+
+               foreach ( $expectedSites as $site ) {
+                       if ( $site->getGlobalId() !== null ) {
+                               $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
+                       }
+               }
+       }
+
+       public function testSaveSites() {
+               $store = SiteSQLStore::newInstance();
+
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'ertrywuutr' );
+               $site->setLanguageCode( 'en' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'sdfhxujgkfpth' );
+               $site->setLanguageCode( 'nl' );
+               $sites[] = $site;
+
+               $this->assertTrue( $store->saveSites( $sites ) );
+
+               $site = $store->getSite( 'ertrywuutr' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'en', $site->getLanguageCode() );
+
+               $site = $store->getSite( 'sdfhxujgkfpth' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'nl', $site->getLanguageCode() );
+       }
+
+       public function testReset() {
+               $store1 = SiteSQLStore::newInstance();
+               $store2 = SiteSQLStore::newInstance();
+
+               // initialize internal cache
+               $this->assertGreaterThan( 0, $store1->getSites()->count() );
+               $this->assertGreaterThan( 0, $store2->getSites()->count() );
+
+               // Clear actual data. Will purge the external cache and reset the internal
+               // cache in $store1, but not the internal cache in store2.
+               $this->assertTrue( $store1->clear() );
+
+               // sanity check: $store2 should have a stale cache now
+               $this->assertNotNull( $store2->getSite( 'enwiki' ) );
+
+               // purge cache
+               $store2->reset();
+
+               // ...now the internal cache of $store2 should be updated and thus empty.
+               $site = $store2->getSite( 'enwiki' );
+               $this->assertNull( $site );
+       }
+
+       public function testClear() {
+               $store = SiteSQLStore::newInstance();
+               $this->assertTrue( $store->clear() );
+
+               $site = $store->getSite( 'enwiki' );
+               $this->assertNull( $site );
+
+               $sites = $store->getSites();
+               $this->assertEquals( 0, $sites->count() );
+       }
+
+}
diff --git a/tests/phpunit/includes/site/SiteTest.php b/tests/phpunit/includes/site/SiteTest.php
new file mode 100644 (file)
index 0000000..255e2de
--- /dev/null
@@ -0,0 +1,268 @@
+<?php
+
+/**
+ * Tests for the Site 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
+ * 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
+ * @since 1.21
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class SiteTest extends MediaWikiTestCase {
+
+       public function instanceProvider() {
+               return $this->arrayWrap( TestSites::getSites() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetInterwikiIds( Site $site ) {
+               $this->assertInternalType( 'array', $site->getInterwikiIds() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetNavigationIds( Site $site ) {
+               $this->assertInternalType( 'array', $site->getNavigationIds() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testAddNavigationId( Site $site ) {
+               $site->addNavigationId( 'foobar' );
+               $this->assertTrue( in_array( 'foobar', $site->getNavigationIds(), true ) );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testAddInterwikiId( Site $site ) {
+               $site->addInterwikiId( 'foobar' );
+               $this->assertTrue( in_array( 'foobar', $site->getInterwikiIds(), true ) );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetLanguageCode( Site $site ) {
+               $this->assertTypeOrValue( 'string', $site->getLanguageCode(), null );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSetLanguageCode( Site $site ) {
+               $site->setLanguageCode( 'en' );
+               $this->assertEquals( 'en', $site->getLanguageCode() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testNormalizePageName( Site $site ) {
+               $this->assertInternalType( 'string', $site->normalizePageName( 'Foobar' ) );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetGlobalId( Site $site ) {
+               $this->assertTypeOrValue( 'string', $site->getGlobalId(), null );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSetGlobalId( Site $site ) {
+               $site->setGlobalId( 'foobar' );
+               $this->assertEquals( 'foobar', $site->getGlobalId() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetType( Site $site ) {
+               $this->assertInternalType( 'string', $site->getType() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetPath( Site $site ) {
+               $this->assertTypeOrValue( 'string', $site->getPath( 'page_path' ), null );
+               $this->assertTypeOrValue( 'string', $site->getPath( 'file_path' ), null );
+               $this->assertTypeOrValue( 'string', $site->getPath( 'foobar' ), null );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetAllPaths( Site $site ) {
+               $this->assertInternalType( 'array', $site->getAllPaths() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSetAndRemovePath( Site $site ) {
+               $count = count( $site->getAllPaths() );
+
+               $site->setPath( 'spam', 'http://www.wikidata.org/$1' );
+               $site->setPath( 'spam', 'http://www.wikidata.org/foo/$1' );
+               $site->setPath( 'foobar', 'http://www.wikidata.org/bar/$1' );
+
+               $this->assertEquals( $count + 2, count( $site->getAllPaths() ) );
+
+               $this->assertInternalType( 'string', $site->getPath( 'foobar' ) );
+               $this->assertEquals( 'http://www.wikidata.org/foo/$1', $site->getPath( 'spam' ) );
+
+               $site->removePath( 'spam' );
+               $site->removePath( 'foobar' );
+
+               $this->assertEquals( $count, count( $site->getAllPaths() ) );
+
+               $this->assertNull( $site->getPath( 'foobar' ) );
+               $this->assertNull( $site->getPath( 'spam' ) );
+       }
+
+       public function testSetLinkPath() {
+               $site = new Site();
+               $path = "TestPath/$1";
+
+               $site->setLinkPath( $path );
+               $this->assertEquals( $path, $site->getLinkPath() );
+       }
+
+       public function testGetLinkPathType() {
+               $site = new Site();
+
+               $path = 'TestPath/$1';
+               $site->setLinkPath( $path );
+               $this->assertEquals( $path, $site->getPath( $site->getLinkPathType() ) );
+
+               $path = 'AnotherPath/$1';
+               $site->setPath( $site->getLinkPathType(), $path );
+               $this->assertEquals( $path, $site->getLinkPath() );
+       }
+
+       public function testSetPath() {
+               $site = new Site();
+
+               $path = 'TestPath/$1';
+               $site->setPath( 'foo', $path );
+
+               $this->assertEquals( $path, $site->getPath( 'foo' ) );
+       }
+
+       public function testProtocolRelativePath() {
+               $site = new Site();
+
+               $type = $site->getLinkPathType();
+               $path = '//acme.com/'; // protocol-relative URL
+               $site->setPath( $type, $path );
+
+               $this->assertEquals( '', $site->getProtocol() );
+       }
+
+       public 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.
+               //      Subclasses need to override this provider appropriately.
+
+               return array(
+                       array( #0
+                               'http://acme.test/TestPath/$1',
+                               'Foo',
+                               '/TestPath/Foo',
+                       ),
+                       array( #1
+                               'http://acme.test/TestScript?x=$1&y=bla',
+                               'Foo',
+                               'TestScript?x=Foo&y=bla',
+                       ),
+                       array( #2
+                               'http://acme.test/TestPath/$1',
+                               'foo & bar/xyzzy (quux-shmoox?)',
+                               '/TestPath/foo%20%26%20bar%2Fxyzzy%20%28quux-shmoox%3F%29',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetPageUrl
+        */
+       public function testGetPageUrl( $path, $page, $expected ) {
+               $site = new Site();
+
+               //NOTE: the assumption that getPageUrl is based on getLinkPath
+               //      is true for Site but not guaranteed for subclasses.
+               //      Subclasses need to override this test case appropriately.
+               $site->setLinkPath( $path );
+               $this->assertContains( $path, $site->getPageUrl() );
+
+               $this->assertContains( $expected, $site->getPageUrl( $page ) );
+       }
+
+       protected function assertTypeOrFalse( $type, $value ) {
+               if ( $value === false ) {
+                       $this->assertTrue( true );
+               }
+               else {
+                       $this->assertInternalType( $type, $value );
+               }
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSerialization( Site $site ) {
+               $this->assertInstanceOf( 'Serializable', $site );
+
+               $serialization = serialize( $site );
+               $newInstance = unserialize( $serialization );
+
+               $this->assertInstanceOf( 'Site', $newInstance );
+
+               $this->assertEquals( $serialization, serialize( $newInstance ) );
+       }
+
+}
\ No newline at end of file
diff --git a/tests/phpunit/includes/site/SitesTest.php b/tests/phpunit/includes/site/SitesTest.php
deleted file mode 100644 (file)
index 7675d42..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-/**
- * Tests for the Sites 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
- * 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
- * @since 1.21
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @group Site
- * @group Database
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SitesTest extends MediaWikiTestCase {
-
-       public function setUp() {
-               parent::setUp();
-               TestSites::insertIntoDb();
-       }
-
-       public function testSingleton() {
-               $this->assertInstanceOf( 'Sites', Sites::singleton() );
-               $this->assertTrue( Sites::singleton() === Sites::singleton() );
-       }
-
-       public function testGetSites() {
-               $this->assertInstanceOf( 'SiteList', Sites::singleton()->getSites() );
-       }
-
-
-       public function testGetSite() {
-               $count = 0;
-               $sites = Sites::singleton()->getSites();
-
-               /**
-                * @var Site $site
-                */
-               foreach ( $sites as $site ) {
-                       $this->assertInstanceOf( 'Site', $site );
-
-                       $this->assertEquals(
-                               $site,
-                               Sites::singleton()->getSite( $site->getGlobalId() )
-                       );
-
-                       if ( ++$count > 100 ) {
-                               break;
-                       }
-               }
-       }
-
-       public function testNewSite() {
-               $this->assertInstanceOf( 'Site', Sites::newSite() );
-               $this->assertInstanceOf( 'Site', Sites::newSite( 'enwiki' ) );
-       }
-
-       public function testGetGroup() {
-               $wikipedias = Sites::singleton()->getSiteGroup( "wikipedia" );
-
-               $this->assertFalse( $wikipedias->isEmpty() );
-
-               /* @var Site $site */
-               foreach ( $wikipedias as $site ) {
-                       $this->assertEquals( 'wikipedia', $site->getGroup() );
-               }
-       }
-
-}
index 6003a8d..b57fe9f 100644 (file)
@@ -39,21 +39,22 @@ class TestSites {
        public static function getSites() {
                $sites = array();
 
-               $site = Sites::newSite( 'foobar' );
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
                $sites[] = $site;
 
-               $site = Sites::newSite( 'enwiktionary' );
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
                $site->setGroup( 'wiktionary' );
-               $site->setType( Site::TYPE_MEDIAWIKI );
                $site->setLanguageCode( 'en' );
                $site->addNavigationId( 'enwiktionary' );
                $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
                $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
                $sites[] = $site;
 
-               $site = Sites::newSite( 'dewiktionary' );
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'dewiktionary' );
                $site->setGroup( 'wiktionary' );
-               $site->setType( Site::TYPE_MEDIAWIKI );
                $site->setLanguageCode( 'de' );
                $site->addInterwikiId( 'dewiktionary' );
                $site->addInterwikiId( 'wiktionaryde' );
@@ -61,9 +62,9 @@ class TestSites {
                $site->setPath( MediaWikiSite::PATH_FILE, "https://de.wiktionary.org/w/$1" );
                $sites[] = $site;
 
-               $site = Sites::newSite( 'spam' );
+               $site = new Site();
+               $site->setGlobalId( 'spam' );
                $site->setGroup( 'spam' );
-               $site->setType( Site::TYPE_UNKNOWN );
                $site->setLanguageCode( 'en' );
                $site->addNavigationId( 'spam' );
                $site->addNavigationId( 'spamz' );
@@ -72,9 +73,9 @@ class TestSites {
                $sites[] = $site;
 
                foreach ( array( 'en', 'de', 'nl', 'sv', 'sr', 'no', 'nn' ) as $langCode ) {
-                       $site = Sites::newSite( $langCode . 'wiki' );
+                       $site = new MediaWikiSite();
+                       $site->setGlobalId( $langCode . 'wiki' );
                        $site->setGroup( 'wikipedia' );
-                       $site->setType( Site::TYPE_MEDIAWIKI );
                        $site->setLanguageCode( $langCode );
                        $site->addInterwikiId( $langCode );
                        $site->addNavigationId( $langCode );
@@ -92,23 +93,9 @@ class TestSites {
         * @since 0.1
         */
        public static function insertIntoDb() {
-               $dbw = wfGetDB( DB_MASTER );
-
-               $dbw->begin( __METHOD__ );
-
-               $dbw->delete( 'sites', '*', __METHOD__ );
-               $dbw->delete( 'site_identifiers', '*', __METHOD__ );
-
-               /**
-                * @var Site $site
-                */
-               foreach ( TestSites::getSites() as $site ) {
-                       $site->save();
-               }
-
-               $dbw->commit( __METHOD__ );
-
-               Sites::singleton()->getSites( false ); // re-cache
+               $sitesTable = SiteSQLStore::newInstance();
+               $sitesTable->clear();
+               $sitesTable->saveSites( TestSites::getSites() );
        }
 
 }
\ No newline at end of file
diff --git a/tests/phpunit/languages/LanguageBhTest.php b/tests/phpunit/languages/LanguageBhTest.php
deleted file mode 100644 (file)
index 5af7adb..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * @author Santhosh Thottingal
- * @copyright Copyright © 2012, Santhosh Thottingal
- * @file
- */
-
-/** Tests for MediaWiki languages/LanguageBh.php */
-class LanguageBhTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providePlural */
-       function testPlural( $result, $value ) {
-               $forms =  array( 'one', 'other' );
-               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
-       }
-
-       function providePlural() {
-               return array (
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'other', 2 ),
-                       array( 'other', 200 ),
-               );
-       }
-
-}
diff --git a/tests/phpunit/languages/LanguageBhoTest.php b/tests/phpunit/languages/LanguageBhoTest.php
new file mode 100644 (file)
index 0000000..5bbd4fe
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2012, Santhosh Thottingal
+ * @file
+ */
+
+/** 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() {
+               return array (
+                       array( 'one', 0 ),
+                       array( 'one', 1 ),
+                       array( 'other', 2 ),
+                       array( 'other', 200 ),
+               );
+       }
+
+}
index fa66055..5d32ff4 100644 (file)
@@ -1142,5 +1142,34 @@ class LanguageTest extends LanguageClassesTestCase {
                        array( 1000000.0001, '1,000,000.0001' ),
                );
        }
+
+       function testListToText() {
+               $lang = $this->getLang();
+               $and = $lang->getMessageFromDB( 'and' );
+               $s = $lang->getMessageFromDB( 'word-separator' );
+               $c = $lang->getMessageFromDB( 'comma-separator' );
+
+               $this->assertEquals( '', $lang->listToText( array( ) ) );
+               $this->assertEquals( 'a', $lang->listToText( array( 'a' ) ) );
+               $this->assertEquals( "a{$and}{$s}b", $lang->listToText( array( 'a', 'b' ) ) );
+               $this->assertEquals( "a{$c}b{$and}{$s}c", $lang->listToText( array( 'a', 'b', 'c' ) ) );
+               $this->assertEquals( "a{$c}b{$c}c{$and}{$s}d", $lang->listToText( array( 'a', 'b', 'c', 'd' ) ) );
+       }
+
+       /**
+        * @dataProvider provideIsSupportedLanguage
+        */
+       function testIsSupportedLanguage( $code, $expected, $comment ) {
+               $this->assertEquals( $expected, Language::isSupportedLanguage( $code ), $comment );
+       }
+
+       static function provideIsSupportedLanguage() {
+               return array(
+                       array( 'en', true, 'is supported language' ),
+                       array( 'fi', true, 'is supported language' ),
+                       array( 'bunny', false, 'is not supported language' ),
+                       array( 'FI', false, 'is not supported language, input should be in lower case' ),
+               );
+       }
 }
 
index 7fc7453..9eb2efc 100644 (file)
                assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
        } );
 
+       QUnit.test( 'Parse a uri with an @ symbol in the path and query', 1, function ( assert ) {
+               var uri = new mw.Uri( 'http://www.example.com/test@test?x=@uri&y@=uri&z@=@' );
+
+               assert.deepEqual(
+                       {
+                               protocol: uri.protocol,
+                               user: uri.user,
+                               password: uri.password,
+                               host: uri.host,
+                               port: uri.port,
+                               path: uri.path,
+                               query: uri.query,
+                               fragment: uri.fragment,
+                               queryString: uri.getQueryString()
+                       },
+                       {
+                               protocol: 'http',
+                               user: undefined,
+                               password: undefined,
+                               host: 'www.example.com',
+                               port: undefined,
+                               path: '/test@test',
+                               query: { x: '@uri', 'y@': 'uri', 'z@': '@' },
+                               fragment: undefined,
+                               queryString: 'x=%40uri&y%40=uri&z%40=%40'
+                       },
+                       'basic object properties'
+               );
+       } );
+
        QUnit.test( 'Handle protocol-relative URLs', 5, function ( assert ) {
                var UriRel, uri;
 
index bce7bd7..d7c73e5 100644 (file)
@@ -1,16 +1,27 @@
 ( function ( mw, $ ) {
 
+var mwLanguageCache = {}, oldGetOuterHtml, formatnumTests;
+
 QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
        setup: function () {
                this.orgMwLangauge = mw.language;
                mw.language = $.extend( true, {}, this.orgMwLangauge );
+               oldGetOuterHtml = $.fn.getOuterHtml;
+               $.fn.getOuterHtml = function () {
+                       var $div = $( '<div>' ), html;
+                       $div.append( $( this ).eq( 0 ).clone() );
+                       html = $div.html();
+                       $div.empty();
+                       $div = undefined;
+                       return html;
+               };
        },
        teardown: function () {
                mw.language = this.orgMwLangauge;
+               $.fn.getOuterHtml = oldGetOuterHtml;
        }
 }) );
 
-var mwLanguageCache = {};
 function getMwLanguage( langCode, cb ) {
        if ( mwLanguageCache[langCode] !== undefined ) {
                mwLanguageCache[langCode].add( cb );
@@ -38,6 +49,59 @@ function getMwLanguage( langCode, cb ) {
        });
 }
 
+QUnit.test( 'Replace', 9, function ( assert ) {
+       var parser = mw.jqueryMsg.getMessageFunction();
+
+       mw.messages.set( 'simple', 'Foo $1 baz $2' );
+
+       assert.equal( parser( 'simple' ), 'Foo $1 baz $2', 'Replacements with no substitutes' );
+       assert.equal( parser( 'simple', 'bar' ), 'Foo bar baz $2', 'Replacements with less substitutes' );
+       assert.equal( parser( 'simple', 'bar', 'quux' ), 'Foo bar baz quux', 'Replacements with all substitutes' );
+
+       mw.messages.set( 'plain-input', '<foo foo="foo">x$1y&lt;</foo>z' );
+
+       assert.equal(
+               parser( 'plain-input', 'bar' ),
+               '&lt;foo foo="foo"&gt;xbary&amp;lt;&lt;/foo&gt;z',
+               'Input is not considered html'
+       );
+
+       mw.messages.set( 'plain-replace', 'Foo $1' );
+
+       assert.equal(
+               parser( 'plain-replace', '<bar bar="bar">&gt;</bar>' ),
+               'Foo &lt;bar bar="bar"&gt;&amp;gt;&lt;/bar&gt;',
+               'Replacement is not considered html'
+       );
+
+       mw.messages.set( 'object-replace', 'Foo $1' );
+
+       assert.equal(
+               parser( 'object-replace', $( '<div class="bar">&gt;</div>' ) ),
+               'Foo <div class="bar">&gt;</div>',
+               'jQuery objects are preserved as raw html'
+       );
+
+       assert.equal(
+               parser( 'object-replace', $( '<div class="bar">&gt;</div>' ).get( 0 ) ),
+               'Foo <div class="bar">&gt;</div>',
+               'HTMLElement objects are preserved as raw html'
+       );
+
+       assert.equal(
+               parser( 'object-replace', $( '<div class="bar">&gt;</div>' ).toArray() ),
+               'Foo <div class="bar">&gt;</div>',
+               'HTMLElement[] arrays are preserved as raw html'
+       );
+
+       mw.messages.set( 'wikilink-replace', 'Foo [$1 bar]' );
+       assert.equal(
+               parser( 'wikilink-replace', 'http://example.org/?x=y&z' ),
+               'Foo <a href="http://example.org/?x=y&amp;z">bar</a>',
+               'Href is not double-escaped in wikilink function'
+       );
+} );
+
 QUnit.test( 'Plural', 3, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
@@ -47,7 +111,6 @@ QUnit.test( 'Plural', 3, function ( assert ) {
        assert.equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
 } );
 
-
 QUnit.test( 'Gender', 11, function ( assert ) {
        // TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
        // TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
@@ -133,7 +196,7 @@ QUnit.test( 'Grammar', 2, function ( assert ) {
        assert.equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
 } );
 
-QUnit.test( 'Output matches PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
+QUnit.test( 'Match PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
        mw.messages.set( mw.libs.phpParserData.messages );
        $.each( mw.libs.phpParserData.tests, function ( i, test ) {
                QUnit.stop();
@@ -154,4 +217,245 @@ QUnit.test( 'Output matches PHP parser', mw.libs.phpParserData.tests.length, fun
        } );
 });
 
+QUnit.test( 'Wikilink', 6, function ( assert ) {
+       var parser = mw.jqueryMsg.getMessageFunction(),
+               expectedListUsers,
+               expectedDisambiguationsText,
+               expectedMultipleBars,
+               expectedSpecialCharacters,
+               specialCharactersPageName;
+
+       /*
+        The below three are all identical to or based on real messages.  For disambiguations-text,
+        the bold was removed because it is not yet implemented.
+       */
+
+       mw.messages.set( 'statistics-users', '注册[[Special:ListUsers|用户]]' );
+
+       expectedListUsers = '注册' + $( '<a>' ).attr( {
+               title: 'Special:ListUsers',
+               href: mw.util.wikiGetlink( 'Special:ListUsers' )
+       } ).text( '用户' ).getOuterHtml();
+
+       assert.equal(
+               parser( 'statistics-users' ),
+               expectedListUsers,
+               'Piped wikilink'
+       );
+
+       expectedDisambiguationsText = 'The following pages contain at least one link to a disambiguation page.\nThey may have to link to a more appropriate page instead.\nA page is treated as a disambiguation page if it uses a template that is linked from ' +
+               $( '<a>' ).attr( {
+                       title: 'MediaWiki:Disambiguationspage',
+                       href: mw.util.wikiGetlink( 'MediaWiki:Disambiguationspage' )
+               } ).text( 'MediaWiki:Disambiguationspage' ).getOuterHtml() + '.';
+       mw.messages.set( 'disambiguations-text', 'The following pages contain at least one link to a disambiguation page.\nThey may have to link to a more appropriate page instead.\nA page is treated as a disambiguation page if it uses a template that is linked from [[MediaWiki:Disambiguationspage]].' );
+       assert.equal(
+               parser( 'disambiguations-text' ),
+               expectedDisambiguationsText,
+               'Wikilink without pipe'
+       );
+
+       mw.messages.set( 'version-entrypoints-index-php', '[https://www.mediawiki.org/wiki/Manual:index.php index.php]' );
+       assert.equal(
+               parser( 'version-entrypoints-index-php' ),
+               '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>',
+               'External link'
+       );
+
+       // Pipe trick is not supported currently, but should not parse as text either.
+       mw.messages.set( 'pipe-trick', '[[Tampa, Florida|]]' );
+       assert.equal(
+               parser( 'pipe-trick' ),
+               'pipe-trick: Parse error at position 0 in input: [[Tampa, Florida|]]',
+               'Pipe trick should return error string.'
+       );
+
+       expectedMultipleBars = $( '<a>' ).attr( {
+               title: 'Main Page',
+               href: mw.util.wikiGetlink( 'Main Page' )
+       } ).text( 'Main|Page' ).getOuterHtml();
+       mw.messages.set( 'multiple-bars', '[[Main Page|Main|Page]]' );
+       assert.equal(
+               parser( 'multiple-bars' ),
+               expectedMultipleBars,
+               'Bar in anchor'
+       );
+
+       specialCharactersPageName = '"Who" wants to be a millionaire & live on \'Exotic Island\'?';
+       expectedSpecialCharacters = $( '<a>' ).attr( {
+               title: specialCharactersPageName,
+               href: mw.util.wikiGetlink( specialCharactersPageName )
+       } ).text( specialCharactersPageName ).getOuterHtml();
+
+       mw.messages.set( 'special-characters', '[[' + specialCharactersPageName + ']]' );
+       assert.equal(
+               parser( 'special-characters' ),
+               expectedSpecialCharacters,
+               'Special characters'
+       );
+});
+
+QUnit.test( 'Int', 4, function ( assert ) {
+       var parser = mw.jqueryMsg.getMessageFunction(),
+           newarticletextSource = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the [[{{Int:Helppage}}|help page]] for more info). If you are here by mistake, click your browser\'s back button.',
+               expectedNewarticletext;
+
+       mw.messages.set( 'helppage', 'Help:Contents' );
+
+       expectedNewarticletext = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the ' +
+               $( '<a>' ).attr( {
+                       title: mw.msg( 'helppage' ),
+                       href: mw.util.wikiGetlink( mw.msg( 'helppage' ) )
+               } ).text( 'help page' ).getOuterHtml() + ' for more info). If you are here by mistake, click your browser\'s back button.';
+
+       mw.messages.set( 'newarticletext', newarticletextSource );
+
+       assert.equal(
+               parser( 'newarticletext' ),
+               expectedNewarticletext,
+               'Link with nested message'
+       );
+
+       mw.messages.set( 'portal-url', 'Project:Community portal' );
+       mw.messages.set( 'see-portal-url', '{{Int:portal-url}} is an important community page.' );
+       assert.equal(
+               parser( 'see-portal-url' ),
+               'Project:Community portal is an important community page.',
+               'Nested message'
+       );
+
+       mw.messages.set( 'newarticletext-lowercase',
+               newarticletextSource.replace( 'Int:Helppage', 'int:helppage' ) );
+
+       assert.equal(
+               parser( 'newarticletext-lowercase' ),
+               expectedNewarticletext,
+               'Link with nested message, lowercase include'
+       );
+
+       mw.messages.set( 'uses-missing-int', '{{int:doesnt-exist}}' );
+
+       assert.equal(
+               parser( 'uses-missing-int' ),
+               '[doesnt-exist]',
+               'int: where nested message does not exist'
+       );
+});
+
+// Tests that getMessageFunction is used for messages with curly braces or square brackets,
+// but not otherwise.
+QUnit.test( 'mw.msg()', 8, function ( assert ) {
+       // Should be
+       var map, oldGMF, outerCalled, innerCalled;
+
+       map = new mw.Map();
+       map.set( {
+               'curly-brace': '{{int:message}}',
+               'single-square-bracket': '[https://www.mediawiki.org/ MediaWiki]',
+               'double-square-bracket': '[[Some page]]',
+               'regular': 'Other message'
+       } );
+
+       oldGMF = mw.jqueryMsg.getMessageFunction;
+
+       mw.jqueryMsg.getMessageFunction = function() {
+               outerCalled = true;
+               return function() {
+                       innerCalled = true;
+               };
+       };
+
+       function verifyGetMessageFunction( key, shouldCall ) {
+               outerCalled = false;
+               innerCalled = false;
+               ( new mw.Message( map, key ) ).parser();
+               assert.strictEqual( outerCalled, shouldCall, 'Outer function called for ' + key );
+               assert.strictEqual( innerCalled, shouldCall, 'Inner function called for ' + key );
+       }
+
+       verifyGetMessageFunction( 'curly-brace', true );
+       verifyGetMessageFunction( 'single-square-bracket', true );
+       verifyGetMessageFunction( 'double-square-bracket', true );
+       verifyGetMessageFunction( 'regular', false );
+
+       mw.jqueryMsg.getMessageFunction = oldGMF;
+} );
+
+formatnumTests = [
+       {
+               lang: 'en',
+               number: 987654321.654321,
+               result: '987654321.654321',
+               description: 'formatnum test for English, decimal seperator'
+       },
+       {
+               lang: 'ar',
+               number: 987654321.654321,
+               result: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
+               description: 'formatnum test for Arabic, with decimal seperator'
+       },
+       {
+               lang: 'ar',
+               number: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
+               result: 987654321,
+               integer: true,
+               description: 'formatnum test for Arabic, with decimal seperator, reverse'
+       },
+       {
+               lang: 'ar',
+               number: -12.89,
+               result: '-١٢٫٨٩',
+               description: 'formatnum test for Arabic, negative number'
+       },
+       {
+               lang: 'ar',
+               number: '-١٢٫٨٩',
+               result: -12,
+               integer: true,
+               description: 'formatnum test for Arabic, negative number, reverse'
+       },
+       {
+               lang: 'nl',
+               number: 987654321.654321,
+               result: '987654321,654321',
+               description: 'formatnum test for Nederlands, decimal seperator'
+       },
+       {
+               lang: 'nl',
+               number: -12.89,
+               result: '-12,89',
+               description: 'formatnum test for Nederlands, negative number'
+       },
+       {
+               lang: 'nl',
+               number: 'invalidnumber',
+               result: 'invalidnumber',
+               description: 'formatnum test for Nederlands, invalid number'
+       }
+];
+
+QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
+       mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
+       mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
+       $.each( formatnumTests, function ( i, test ) {
+               QUnit.stop();
+               getMwLanguage( test.lang, function ( langClass ) {
+                       QUnit.start();
+                       if ( !langClass ) {
+                               assert.ok( false, 'Language "' + test.lang + '" failed to load' );
+                               return;
+                       }
+                       mw.messages.set(test.message );
+                       mw.config.set( 'wgUserLanguage', test.lang ) ;
+                       var parser = new mw.jqueryMsg.parser( { language: langClass } );
+                       assert.equal(
+                               parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
+                                       [ test.number ] ).html(),
+                               test.result,
+                               test.description
+                       );
+               } );
+       } );
+});
+
 }( mediaWiki, jQuery ) );
index f59ee0f..7816860 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -170,11 +170,11 @@ function wfStreamThumb( array $params ) {
 
        // Check the source file storage path
        if ( !$img->exists() ) {
-               wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+               wfThumbError( 404, "The source file '$fileName' does not exist." );
                wfProfileOut( __METHOD__ );
                return;
        } elseif ( $img->getPath() === false ) {
-               wfThumbError( 500, 'The source file is not locally accessible.' );
+               wfThumbError( 500, "The source file '$fileName' is not locally accessible." );
                wfProfileOut( __METHOD__ );
                return;
        }